(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Чтение файлов в формате NITF (News Industry Text Format) на PHP (исходники)

Викрам Васвани

Введение

XML позволяет использовать произвольные теги и элементы разметки для описания содержимого документов. Благодаря данному преимуществу XML стал де-факто стандартом для использования в приложениях, занимающихся обменом данными, специфичными для той или иной области. В частности, новостные агентства зачастую используют NITF (News Industry Text Format) - набор XML-элементов, позволяющих определять структуру и описывать содержимое новостных статей в виде документов XML, а также облегчающих их распространение и обмен.

NITF - это открытый стандарт, широко используемый некоторыми крупнейшими мировыми агентствами новостей. Он разработан и в настоящее время поддерживается Международным советом по прессе и телекоммуникациям (International Press Telecommunications Council - IPTC). Для облегчения работы с данным форматом был создан PHP-пакет XML_NITF, который можно найти в PHP Extension and Application Repository (PEAR). С помощью XML_NITF API можно извлекать содержимое различных элементов из файлов в формате NITF и далее использовать его в приложениях на PHP. Таким образом, пакет представляет собой надежный и простой в использовании инструмент для любых PHP/NITF-приложений.

Установка

XML_NITF, поддерживаемый Патриком О"Лоуном (Patrick O'Lone), был выпущен под лицензией PHP. Для его корректной работы требуется PHP версии не ниже 4.3.0. Пакет проще всего установить с помощью автоматического инсталлятора PEAR, который по умолчанию включен в поставку PHP. Для установки XML_NITF просто выполните следующую команду из командной строки:

shell> pear install XML_NITF

Инсталлятор PEAR должен соединиться с сервером пакетов PEAR, загрузить XML_NITF и установить его в соответствующее место на диске. В данной статье используется XML_NITF V. 1.1.0.

Пакет можно также установить вручную. Для этого скачайте архив с исходным кодом со страницы проекта и распакуйте в любую папку в вашей системе. Подобная ручная установка требует определенного представления о структуре пакетов PEAR.

Перед XML_NITF необходимо установить еще один PEAR-пакет, а именно XML_Parser. Он также может устанавливаться автоматически, как описано выше, или же вручную.

О формате NITF

Для работы с XML_NITF необходимо иметь базовое представление о формате NITF. Обратите внимание на пример простого документа NITF, приведенный в листинге 1:

Листинг 1. Пример документа NITF

                        
<?xml version="1.0"?>
<nitf>
    <head>
        <title>Life Discovered on Mars</title>
        <docdata management-status="usable" management-doc-idref="jf83820r">
            <doc-id id-string="jf83820r" />
            <urgency ed-urg="1" />
            <date.issue norm="20100929T0000+0530" />
            <date.release norm="20100929T0000+0530" />
            <date.expire norm="20101029T0000+0530" />
            <doc.copyright year="2010" holder="The World Times" />
            <key-list>
                <keyword key="mars"/>
                <keyword key="space"/>
                <keyword key="alien"/>
                <keyword key="science"/>
            </key-list>
        </docdata>        
        <pubdata type="print" name="The World Times" 
         date.publication="20100929T0000+0530" />   
    </head>
    <body>
        <body.head>
            <hedline>
                <hl1>Life Discovered on Mars</hl1>
                <hl2>But Is It Friendly?</hl2>
            </hedline>
            <byline>
                By <person>John A. Doe</person>
            </byline>
            <abstract>
                <p>Readings from the Mars probe confirm intelligent life.</p>
            </abstract>
        </body.head>

        <body.content>
            <p>Today, scientists from <org value="NASA" idsrc="NASA01">NASA</org>
            's Elemental project announced 
            that the space probe sent to Mars has sent back 
            readings to earth conclusively identifying 
            the presence on intelligent life on the planet.</p>
            <p>Some of the data sent back makes for 
            exciting reading...</p>
            <media media-type="image">
                <media-reference mime-type="image/jpeg" source="photo1.jpg" 
                 alternate-text="Photo of crystalline structures on Mars.">
                </media-reference>
                <media-caption>
                    Photo of crystalline structures on Mars.
                </media-caption>
            </media>
        </body.content>
    </body>
</nitf>
        

Любой документ в формате NITF состоит из двух главных разделов:

  • Секции <head>, содержащей метаданные, описывающие новостную статью
  • Секции <body>, содержащей сам текст статьи

Каждый из разделов в свою очередь делится на подразделы. Например, как показано в листинге 1, элемент <body> содержит элементы <body.head>, включающий в себя заголовок статьи, резюме и имя автора, и <body.content>, внутри которого помещено само содержимое статьи вместе со ссылками на рисунки и прочей второстепенной информацией. Похожим образом в разделе <head> содержатся элементы, описывающие такие метаданные, как владелец прав на статью, номер выпуска, дату истечения и ключевые слова.

Необходимо отметить, что в листинге 1 показан далеко не полный перечень элементов, определенных в спецификации NITF. Это не более чем простой пример, специально созданный для облегчения понимания формата теми, кто не имеет опыта использования NITF.

Доступ к базовой информации

Создав документ в формате NITF, можно начать использовать XML_NITF, обеспечивающий простой доступ ко всей содержащийся в документе информации. PHP-скрипт для извлечения заголовка, имени автора и самого содержимого статьи показан в листинге 2:

Листинг 2. PHP-скрипт, извлекающий заголовок и содержимое документа в формате NITF

                        
<?php
// включение класса
include 'XML/NITF.php';

// инициализация экземпляра класса
$nitf =& new XML_NITF();

// разбор документа XML
$nitf->setInputFile("mars.xml");
$nitf->parse();
?>
<html>
    <head>
        <title><?php echo $nitf->getHeadline(); ?></title>
    </head>
    <body>
        <h2><?php echo $nitf->getHeadline(); ?></h2>
        <h4><?php echo $nitf->getByline(); ?></h3>
        <?php 
            foreach ($nitf->getContent() as $para) {
                echo '<p>' . $para . '</p>';
            }             
        ?>        
    </body>
</html>
        

Скрипт в листинге 2 использует пакет XML_NITF для чтения документа NITF, показанного выше в листинге 1, и трансформирует его содержимое в страницу HTML, отображаемую любым Web-браузером. Вначале скрипт инициализирует экземпляр класса XML_NITF путем обращения к соответствующему файлу. Далее вызывается метод setInputFile() данного класса, который принимает в качестве параметра местонахождение документа NITF. Затем происходит разбор документа внутри метода parse(), который использует SAX-парсер PHP. Как только документ разобран, вызываются методы getHeadline() и getByline(), возвращающие заголовок статьи и имя автора соответственно. Само содержимое статьи извлекается с помощью метода getContent(), который возвращает его в виде массива абзацев. Наконец, PHP-цикл foreach() перебирает абзацы и форматирует их в виде HTML.

Вывод листинга 2 показан на рисунке 1:

Рисунок 1. Web-страница, созданная на основе документа NITF
Web page created from the NITF document

Извлечение дополнительной информации

Пакет XML_NITF также предоставляет методы для извлечения метаданных, в частности, содержимого элементов <docdata> и <pubdata>, находящихся внутри элемента <head>. Кроме этого, можно получать доступ к любым медиа-данным, связанным со статьей. Пример использования данных методов показан в листинге 3:

Листинг 3. PHP-скрипт, извлекающий метаданные из документа NITF

                        
<html>
    <head></head>
    <body>
        <pre>
<?php
// включение класса
include 'XML/NITF.php';

// инициализация экземпляра
$nitf =& new XML_NITF();

// разбор XML
$nitf->setInputFile("mars.xml");
$nitf->parse();

// печать метаданных
echo "Document data:\n";
foreach ($nitf->getDocData() as $k=>$v) {  
    if (is_array($v)) {
        echo "\t$k: " . implode(' ', $v) . "\n";
    } else {      
        echo "\t$k: $v\n";
    }
}
echo "\n";

// печать издательской информации
echo "Publication data:\n";
foreach ($nitf->getPubData() as $k=>$v) {
    if (is_array($v)) {
        echo "\t$k: " . implode(' ', $v) . "\n";
    } else {      
        echo "\t$k: $v\n";
    }
}
echo "\n";

// печать медиа-информации
echo "Media attached to the article:\n";
foreach ($nitf->getMedia() as $m) {
        foreach ($m as $k=>$v) {
            echo "\t$k: $v\n";
        }
        echo "\n";
}
?>
        </pre>
    </body>
</html>
            

В листинге 3 показано, как использовать три важных метода:
  • getDocData(), который возвращает содержимое элемента <docdata> в качестве набора пар типа "ключ-значение"
  • getPubData(), который делает тоже самое, но применительно к элементу <pubdata>
  • getMedia(), который возвращает массив элементов <media>, определенных в теле статьи

Во всех трех случаях, возвращаемое значение методов обрабатывается внутри цикла foreach(). Вдобавок, можно обращаться к отдельным значениям по ключам.

Вывод листинга 3 показан на рисунке 2:

Рисунок 2. Вывод метаданных с помощью скрипта в листинге 3
Document metadata returned by Listing 3

Как видно из примеров, пакет XML_NITF предоставляет удобные средства для простого доступа к нужным фрагментам новостных статей, представленных в формате NITF. Попробуйте применить данный пакет в следующий раз, когда вам придется иметь дело с NITF, и составьте свое мнение о нем.



 Распечатать »
 Правила публикации »
  Обсудить материал в конференции Дискуссии и обсуждения общего плана »
Написать редактору 
 Рекомендовать » Дата публикации: 09.08.2008 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Panda Gold Protection - ESD версия - на 1 устройство - (лицензия на 1 год)
ESET NOD32 Cyber Security for MAC  - лицензия для 1 ПК на 1 год
dbForge Studio for MySQL Standard license
ABBYY Lingvo x6 Европейская Домашняя версия, электронный ключ
IBM DOMINO ENTERPRISE CLIENT ACCESS LICENSE AUTHORIZED USER LICENSE + SW SUBSCRIPTION & SUPPORT 12 MONTHS
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
СУБД Oracle "с нуля"
Новые материалы
Программирование на Visual Basic/Visual Studio и ASP/ASP.NET
Мастерская программиста
Краткие описания программ и ссылки на них
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Рабочее зеркало букмекера 1win (1)
Сегодня в случае недоступно официального сайта есть рабочие зеркала БК 1win...
 
Автомобиль (4)
Доброй ночи. Планируем приобрести авто, рассматриваем б.у варианты, как проще всего подобрать...
 
Сдать часы (3)
Подскажите, где можно сдать часы по хорошей цене.
 
Новости спорта - все послдение события в одном месте (1)
Пользователи, которые увлекаются ставками на спорт, должно следить за последними изменениями в...
 
Программы Delphi на заказ (241)
Пишу программы в среде Delphi на заказ http://bddelphi.ucoz.ru/
 
 
 



    
rambler's top100 Rambler's Top100