Мегаобучалка Главная | О нас | Обратная связь


Объявление пространства имен



2015-12-14 377 Обсуждений (0)
Объявление пространства имен 0.00 из 5.00 0 оценок




 

Для объявления пространства имен в XML документе используется ключевое слово xmlns. Синтаксис объявления имеет следующий формат:

 

xmlns[:prefix]="uri"

 

где prefix – квалифицированное (короткое) имя, посредством которого элементы и атрибуты XML документа связываются с пространством имен; uri – это URI, задающий пространство имен, которое будет использоваться в XML документе. Если при объявлении пространства имен параметр prefix не задан, то объявленное пространство имен будет использоваться как пространство имен по умолчанию (см. ниже).

Например, в представленном ниже примере объявляется пространство имен, идентифицируемое ссылкой URI "http://www.ukr.net" и связанное с префиксом doc.

 

<?xml version="1.0" encoding="Windiws-1251"?>

<main:document xmlns:doc="http://www.ukr.net">

<doc:section>Раздел 1</doc:section>

<doc:section>Раздел 2</doc:section>

</doc:document>

 

При объявлении пространств имен следует иметь в виду следующие правила:

– в элементе может быть задано несколько пространств имен;

– только одно из них может быть задано как пространство имен по умолчанию. Пространство имен по умолчанию характеризуется тем, что для него не указывается префикс;

– если элемент, в котором объявляется пространство имен, входит в это пространство имен, то он указывается с объявленным в нем префиксом;

– объявление пространства имен может выполняться только в начальном теге элемента;

– конечный тег элемента также указывается с префиксом пространства имен.

Ниже представлен более сложный пример объявления пространств имен, показывающий реализацию всех указанных правил.

 

<?xml version="1.0" encoding="Windiws-1251"?>

<doc:document xmlns:doc="http://www.ukr.ru"

xmlns:="http://www.authors.net">

<doc:section>Раздел 1

<authors>

<author>Автор 1</author>

<author>Автор 2</author>

<authors>

</doc:section>

<doc:section>Раздел 2

<authors>

<author>Автор 2</author>

<author>Автор 3</author>

<author>Автор 4</author>

<authors>

</doc:section>

</doc:document>

 

В представленном примере объявляются два пространства имен, причем второе (http://www.authors.net) определено как пространство имен по умолчанию. Поэтому в данном XML документе элементы document и section, входящие в пространство имен http://www.ukr.net, указываются с префиксом doc, а элементы authors и author, входящие в пространство имен http://www.authors.net, указываются без префикса.

Следует иметь в виду, что значение URI ссылки пространства имен чувствительно к регистру (собственно, как и имена элементов и атрибутов). Так, следующие три ссылки будут определять разные пространства имен: http://www.authors.net, http://www.Authors.net, http://www.AUTHORS.net.

Область действия пространства имен может распространяться:

– на весь документ, когда оно объявлено в корневом элементе документа;

– на конкретный контейнер и все включенные в него элементы и атрибуты, когда оно объявлено в элементе верхнего уровня контейнера;

– на отдельный элемент и его атрибуты, когда оно объявлено непосредственно в данном элементе.

Область действия пространства имен по умолчанию определяется аналогичным образом. При этом необходимо помнить следующее. В XML документе может быть действительным только одно пространство имен по умолчанию. Если в области действия пространства имен по умолчанию задается другое пространство имен по умолчанию, то оно отменяет действие ранее объявленного (первого) пространства имен по умолчанию. По окончанию действия второго пространства имен по умолчанию вновь начинает действовать первое пространство имен по умолчанию.

Ниже представлен фрагмент XML документа, иллюстрирующий области действия пространств имен. В примере используется несколько элементов protocol, но в зависимости от его расположения в документе, они будут определены в разных пространствах имен и, соответственно, иметь разный смысловой контекст. Цифры в правой части документа не являются частью примера и служат для идентификации строк.

 

<?xml version="1.0" encoding="Windows-1251"?>
<net:network xmlns:net="http://www.network.com/lan"
xmlns="http://www.network.com/server">
<softlan>  
<net:protocol> ... </net:protocol>
<protocol> ... </protocol>
<frm:organization xmlns:frm="http://www.network.com/firm">
<frm:protocol> ... </frm:protocol>
<protocol> ... </protocol>
</frm:organization>
</softlan>
<hardlan xmlns:hrd="http://www.network.com/hard"  
xmlns="http://www.network.com/hard/firm">
<hrd:equipment type="switch">
<protocol net:lan="Ethernet">CSMA/CD</protocol>
</hrd:equipment>
</hardlan>
</net:network>

 

Строки 2 и 3 представляют корневой элемент документа network. В нем определены два пространства имен. Первое идентифицируется префиксом net(в это пространство имен входит и сам элемент network), а второе не имеет префикса, т.е. является пространством имен по умолчанию. Действие обоих пространств имен распространяется на весь документ.

Строки 4 и 11 представляют контейнер, корневой элемент которого (softlan) принадлежит пространству имен по умолчанию http://www.network.com/server, заданному в корневом элементе документа.

Строка 5 представляет элемент protocol, принадлежащий пространству имен http://www.network.com/lan.

Строка 6 представляет элемент protocol, принадлежащий пространству имен по умолчанию http://www.network.com/server.

Строки 7 и10 представляют контейнер, корневой элемент которого (organization) принадлежит пространству имен http://www.network.com/firm, которое объявлено в этом элементе с префиксом frm.

Строка 8 представляет элемент protocol, принадлежащий пространству имен http://www.network.com/firm.

Строка 9 представляет элемент protocol, принадлежащий пространству имен по умолчанию http://www.network.com/server.

Строки 12, 13 и 17 представляют контейнер, корневой элемент которого (hardlan) принадлежит пространству имен по умолчанию http://www.network.com/server. В корневом элементе этого контейнера объявлено два пространства имен. Одно с префиксом hrd, а другое как пространство имен по умолчанию. Поэтому в области действия данного контейнера все элементы и атрибуты без префикса будут принадлежать пространству имен http://www.network.com/hard/firm.

Строки 14 и 16 представляют контейнер, корневой элемент которого (equipment) принадлежит пространству имен http://www.network.com/hard. Атрибут type корневого элемента принадлежит пространству имен по умолчанию xmlns="http://www.network.com/hard/firm.

Строка 15 представляет элемент protocol, принадлежащий пространству имен по умолчанию xmlns="http://www.network.com/hard/firm. Его атрибут lan принадлежит пространству имен http://www.network.com/lan.

 


Лекция 8

 

XML-схемы

 

Рассмотрим небольшой XML документ:

 

<?xml version="1.0" encoding="utf-8"?>

<country>

<country_name>France</country_name>

<population>59.7</population>

</country>

 

Что можно сказать об этом документе? В нем есть элемент <country>, который является комплексным, т.е. содержит вложенные элементы. Первым вложенным элементом является тэг <country_name>, значением которого, очевидно, является строка. Вторым вложенным элементом является <population>, значение которого представляет собой число в десятичном формате.

Для человека подобный анализ документа несложен. В случае же компьютерного анализа программа-парсер не может «окинуть взглядом» даже небольшой документ. Универсализм алгоритмов парсинга XML документов обязывает парсер выполнить следующие действия:

1. Составить список всех используемых идентификаторов (имен). В список должны входить как имена тэгов, так и имена атрибутов. Данный список в терминологии XML называется словарем. Все дальнейшие действия парсера опираются на словарь документа.

2. Для каждого элемента словаря определить, является ли он тэгом или атрибутом. Хотя формат XML позволяет обходиться без атрибутов, их использование допустимо и должно учитываться.

3. Для каждого тэга определить, является ли он простым, вложенным или пустым. Это необходимо для построения иерархического дерева описываемых объектов.

4. Для каждого элемента словаря определить подходящий тип данных. Несмотря на высокий уровень абстракции содержимого XML документов и отсутствие явной типизации данных, анализ документов выполняется компьютерной программой, которой нужно каким-то образом хранить значения тэгов и атрибутов. Для этого внутри программы-парсера будут использоваться какие-то стандартные для парсера (да и для многих языков программирования) типы данных. Такими типами являются строка, число, булева величина, дата, время и др. При анализе произвольного XML документа парсер не всегда способен однозначно идентифицировать тип данных по значению тэга или атрибута. Например, описание элемента булевого типа может быть выполнено различными способами:

 

<boolElement>1</boolElement>

<boolElement>true</boolElement>

 

В первом случае значение тэга равно «1» и может быть расценено парсером как числовая (небулевая) величина. Во втором случае значение тэга может быть расценено как строковая величина. Понятно, что наличие слова «bool» в названии тэга не является подсказкой для парсера.

Из сказанного можно сделать следующие выводы:

1. Решение перечисленных задач требует от парсера в общем случае многократного прохода по XML документу, что увеличивает сложность и время работы алгоритмов парсинга.

2. Неоднозначность в определении типов данных может привести к неправильному восприятию содержимого XML документа и невозможности решения поставленных задач.

Работу парсера можно упростить, если сообщить ему и информацию, отсутствующую в явном виде в XML документе или сложно извлекаемую оттуда. Рассмотрим следующий XML-документ:

 

<?xml version="1.0" encoding="utf-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="country">

<xs:complexType>

<xs:sequence>

<xs:element name="country_name" type="xs:string"/>

<xs:element name="population" type="xs:decimal"/>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>

 

В данном документе жирным шрифтом выделены специальные тэги, имеющие строго определенное предназначение.

Внешним в документе является тэг <xs:schema>, показывающий, что данный документ является так называемой XML схемой (XML Schema) и служит для пояснения содержимого некоторого исходного XML документа.

Тэг <xs:element> содержит описание одного из элементов базового XML документа. Поскольку в базовом документе на верхнем уровне иерархии присутствует единственный тэг <country>, на верхнем уровне иерархии нашей XML схемы тэг <xs:element> также один.

Тэг <xs:complexType> свидетельствует о том, что в базовом XML документе элемент <country> является комплексным (содержит внутренние элементы. При этом последовательность внутренних элементов перечисляется внутри тэга <xs:sequence>.

Каждому из элементов базового XML документа, являющихся вложенными в элемент <country>, внутри тэга <xs:sequence> соответствует собственный тэг <xs:element>. Каждый из этих тэгов имеет два специальных атрибута: name, содержащий имя соответствующего тэга в базовом XML документе) и type, определяющий тип данных, подходящий для хранения значения тэга. Отметим, что значение тэга («France» или «59.7») отсутствует в XML схеме – оно указано в базовом XML документе. Для XML схемы важно лишь имя тэга и тип данных.

Для чего полезна XML схема? Если для некоторого XML документа составлена его XML схема, программа-парсер может начать свою работу с анализа XML схемы. Анализ одной лишь XML схемы позволит парсеру:

– составить словарь (список имен элементов и атрибутов) XML документа;

– подготовить структуры данных для хранения информации, содержащейся в XML документе;

– организовать хранение данных в виде некоторой иерархии.

После обработки XML схемы программа-парсер может приступать непосредственно к анализу XML документа. Фактически, ей остается перенести значения тэгов и атрибутов в подготовленные структуры данных. При этом неоднозначность в определении типов данных устраняется на этапе анализа XML схемы документа.

 

 


Лекция 9



2015-12-14 377 Обсуждений (0)
Объявление пространства имен 0.00 из 5.00 0 оценок









Обсуждение в статье: Объявление пространства имен

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (377)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)