Пространства имён XML. Инструкции по обработке
Поскольку в разных языках разметок — реализациях XML — могут встретиться одни и те же имена тегов и их атрибутов, имеющие совершенно разный смысл, надо иметь возможность их как-то различать. Для этого имена тегов и атрибутов снабжают кратким префиксом, который отделяется от имени двоеточием. Префикс имени связывается с идентификатором, определяющим пространство имен (namespace). Все имена тегов и атрибутов, префиксы которых связаны с одним и тем же идентификатором, образуют одно пространство имен, в котором имена должны быть уникальны. Префикс и идентификатор пространства имен определяются атрибутом xmlns следующим образом: <ntb:notebook xmlns:ntb = "http://some.firm.com/2003/ntbml"> Префикс ntb только что определен, но его уже можно использовать в имени ntb: notebook. Имя вместе с префиксом, например ntb:notebook или ntb:city, называется расширенным или уточненным именем (QName, Qualified Name). Часть имени, записанная после двоеточия, называется локальной частью (local part) имени. Атрибут xmlns может появиться в любом элементе XML, а не только в корневом. Определенный им префикс можно применять в том элементе, в котором записан атрибут xmlns, и во всех вложенных в него элементах. Более того, в одном элементе можно определить несколько пространств имен: <ntb:notebook xmlns:ntb = "http://some.firm.com/2003/ntbml" xmlns:bk = "http://some.firm.com/2003/bookml"> Во вложенных элементах пространство имен можно переопределить, связав префикс с другим идентификатором. Появление имени тега без префикса в документе, использующем пространство имен, означает, что имя принадлежит пространству имен по умолчанию (default namespace). Например, язык XHTML допускает применение тегов HTML и тегов XML в одном документе. Допустим, мы определили тег с именем title. Чтобы не принять его за один из тегов HTML, поступаем следующим образом:
<html xmlns = "http://www.w3.org/1999/xhtml" xmlns:ntb = "http://some.firm.com/2003/ntbml"> <head> <title>моя библиотека</title> </head> <body> <ntb:book> <ntb: title>учим XML</ntb:title> </ntb:book> </body> </html> В этом примере пространством имен по умолчанию становится пространство имен XHTML, имеющее общеизвестный идентификатор http://www.w3.org /1999/xhtml, и теги, относящиеся к этому пространству имен, записываются без префикса. Атрибуты никогда не входят в пространство имен по умолчанию. Если имя атрибута записано без префикса, то это означает, что атрибут не относится ни к одному пространству имен. Программы, анализирующие документ, не будут искать такое имя ни в одном пространстве имен. Хорошо оформленный документ должен использовать пространства имен для всех своих элементов. Еще один префикс, xml, связан в той же рекомендации с идентификатором http://www.w3.org/XML/1998/namespace. Его тоже не надо определять в документе XML. Никакой другой префикс не может быть связан с этими идентификаторами. Пока есть только два атрибута с префиксом xml. Для каждого элемента верного документа, в котором используются эти атрибуты, они должны быть объявлены в описании DTD (Document Type Definition). Инструкции по обработке (processing instructions) содержат указания программе-обработчику документа XML. В отличие от элементов, инструкции по обработке заключаются между символами <? и?>. Сразу за начальным вопросительным знаком записывается имя программного модуля, которому предназначена инструкция. Затем, через пробел, идет сама инструкция, передаваемая программному модулю. Она записывается произвольно, просто как строка символов, которая, конечно, не должна содержать пару символов?>, означающую конец инструкции. Смысл инструкции определяется программным модулем, которому она предназначена. Примером инструкции по обработке может служить первая строка пролога документа XML — объявление XML
<?xml version="1.0" encoding="windows-1251"?> Эта инструкция предназначена программе, обрабатывающей документ XML. Инструкция передает ей номер версии и кодировку, в которой записан документ. Этот пример объясняет одно ограничение, накладываемое на имя программного модуля — им не может служить слово xml, записанное в любом регистре. Инструкции по обработке могут располагаться в любом месте документа, но целиком в пределах одного элемента.
Конструкции DTD: объявление типа элемента, объявление атрибутов Описание схемы документа XML, сделанное на языке определения типа документа DTD состоит из объявлений разметки, начинающихся с пары символов <!. За этими символами идет одно из слов ELEMENT, ATTLIST, ENTITY, NOTATION, указывающих, что именно объявляется: элемент, список атрибутов, сущность или обозначение. Объявление разметки заканчивается символом ">". Каждый элемент или атрибут объявляется отдельно. Объявление типа элемента Каждый элемент документа XML должен быть описан в объявлении типа элемента. Объявление типа элемента начинается с символов <!ELEMENT, после которых через пробел идет имя элемента и объявляется его содержимое. Проще всего объявляется пустой элемент. Его содержимое, точнее, отсутствие содержимого, отмечается одним словом EMPTY. Например: <!ELEMENT br EMPTY> После такого объявления в документе XML будет верна запись пустого элемента Ьг в виде <bг /> или в виде <br> </br> Следующее объявление можно считать полной противоположностью объявлению пустого элемента: <!ELEMENT something ANY> Оно означает, что элемент с именем something может содержать что угодно. Такое объявление не несет никакой информации об элементе и поэтому встречается очень редко. Элемент с обычным текстовым содержимым и без вложенных элементов объявляется так: <!ELEMENT name (#PCDATA)> Слово # PCDATA (Parsed Character DATA) означает строку символов, просматриваемую программой-анализатором документа XML. Если объявляемый элемент содержит вложенные элементы, то объявление должно содержать список их имен, перечисленных через запятую, в скобках. Вложенные элементы должны следовать в документе XML в том порядке, в каком они перечислены в объявлении. Например, объявление элемента sp:suppi-prod может выглядеть так:
<!ELEMENT sp:suppl-prod (sp:snum, sp:sname, sp:loc, sp:pname, sp:qty)> Объявляется только один уровень вложенности. Следующий уровень будет объявлен при объявлении вложенного элемента. Кроме вложенных элементов, внутри элемента может встретиться обычный текст. В таком случае объявление элемента будет выглядеть следующим образом: <!ELEMENT someelement (#PCDATA, inelem, anoelem)> Вложенный элемент можно записать в объявляемом элементе несколько раз, с помощью звездочки, плюса или вопросительного знака. ? — элемент или список может встретиться нуль или один раз; * — элемент или список может встретиться нуль или несколько раз; + — элемент или список может встретиться один или несколько раз. Например, объявление элемента bk: chapter может выглядеть так: <!ELEMENT bk:chapter (bk:title, (bk:section+, bk:listing*, bk:picture*)*, bk:conclusion?)> Это объявление показывает, что в элемент bk:chapter сначала вкладывается один элемент bk:title, потом один или несколько элементов bk:section. Между элементами bk:section могут встречаться элементы bk:listing и bk:picture. Последним вложенным элементом может оказаться элемент bk:conclusion. Иногда из нескольких вложенных элементов или списков может встретиться только один. В таком случае их имена перечисляются через вертикальную черту. Например, при описании книги, кроме имени автора и названия, указывается издательство и место издания, а при описании журнальной статьи — номер журнала. Объявление элемента edition, общее для книги и журнала, может выглядеть так: <!ELEMENT edition (author+, title, name, (publ-house, publ-place) | issue)) > Объявление атрибутов Атрибуты элемента объявляются уже после объявления самого элемента. Все атрибуты одного элемента объявляются сразу, одним списком. Список начинается с символов <!ATTLIST, после них через пробел следует имя элемента, к которому относятся атрибуты. Затем идут объявления атрибутов. Список, как всегда, заканчивается символом ">". Для каждого атрибута записывается его имя, тип и признак обязательности. Тип атрибута записывается приведенными далее обозначениями.
• CDATA — строка символов. • ID- уникальный идентификатор, однозначно определяющий элемент, в котором встретился этот атрибут; значения такого атрибута не должны повторяться в документе. • IDREF — идентификатор, содержащий одно из значений атрибутов типа ID, используется в качестве ссылки на другие элементы. • IDREFS — идентификатор, содержащий набор значений атрибутов типа ID, перечисленных через пробелы; тоже используется в качестве ссылки сразу на несколько элементов. • ENTITY — имя непроверяемой анализатором сущности. • ENTITIES — имена непроверяемых сущностей. • NMTOKEN — слово, содержащее только символы, применяемые в именах. • NMTOKENS — слова, перечисленные через пробелы. • NOTATION — обозначение. • Список значений атрибута, перечисляемых через вертикальную черту, в скобках. Атрибуты типа ID играют ту же роль, что и первичные ключи в таблицах баз данных. Они позволяют различать элементы и индексировать их. Это облегчает и ускоряет поиск элементов, а также позволяет ссылаться на них. Ссылки выполняются атрибутами типа IDREF ИЛИ типа IDREFS. Например, в одном месте документа могут встретиться элементы: <name reg-num="123045">Иванов</name> <name reg-num ="123052">Петров</name> с атрибутом reg-num типа ID, а в другом месте — элемент: <post ref="123045">3аведующий отделом</роst> с атрибутом ref типа IDREF Такая связь означает, что должность Иванова — "Заведующий отделом". Объявления DTD этих элементов могут выглядеть так: <!ELEMENT name (#PCDATA)> <!ATTLIST name reg-num ID #REQUIRED> <!ELEMENT post (#PCDATA)> <!ATTLIST post ref IDREF #IMPLIED> Значения атрибутов типа ENTITY — это имена сущностей, объявленных в этом же описании DTD. Атрибуты типа NMTOKEN могут содержать имена других элементов или атрибутов, например, для того чтобы ссылаться на них. Значения атрибутов типа NOTATION — это обозначения, расшифрованные в описании DTD. Объявление атрибута заканчивается признаком обязательности присутствия атрибута в элементе или подразумеваемым значением атрибута. Такое значение, называемое значением по умолчанию, будет использовано, если атрибут не записан явно в документе XML. Признак обязательности — это одно из трех слов, показывающих, всегда ли нужно записывать атрибут и что будет, если его нет в элементе: #REQUIRED — атрибут надо обязательно записывать в элементе; #IMPLIED — атрибут необязателен, у него нет значения по умолчанию; #FIXED — у атрибута есть только одно значение, которое записывается тут же, через пробел. Если в конце объявления атрибута вместо одного из этих слов стоит значение атрибута, принимаемое по умолчанию, то понятно, что такой атрибут необязателен. Например, атрибуты first, second и surname элемента name можно объявить следующим списком: <!ATTLIST name first CDATA #REQUIRED second CDATA #IMPLIED surname CDATA #REQUIRED>
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|