Lt;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
Модель данных Resource Description Network (RDF)
RDF (Resource Description Framework) – это модель описания связанных данных, которая позволяет технологии Семантического веба интерпретировать информацию, представленную в вебе.
Общая идея, на которой основана модель RDF, заключается в следующем: всё, что существует в мире (будь то физический предмет или абстрактное понятие), имеет определенные свойства, а любое свойство имеет конкретные значения. Значит, описать любую сущность можно с помощью элементарных выражений, которые называют эти свойства и их значения.
При изучении RDF следует различать концепцию RDF, определяющую способ представления информации, и синтаксическую реализацию RDF, одним из вариантов которой является реализация RDF на базе XML.
Концепция языка RDF заключается в том, что любую информацию можно представить в виде множества троек (трехкомпонентных векторов) следующего вида:
S1 P1 O1
S2 P2 O2
S3 P3 O3
………………
Здесь S – некоторый субъект, P – некоторый предикат (атрибут, свойство), O – некоторый объект (значение). Иногда данную запись представляют следующим образом:
P1( S1, O1)
P2(S2, O2)
P3(S3, O3)
…………
Подобные тройки называются трехчастными утверждениями или триплетами. Триплет можно примерно соотнести с простым предложением вида «Подлежащее – Сказуемое – Дополнение». Например, утверждение «Книга написана Пушкиным» в RDF-терминологии можно представить следующим образом: субъект – «Книга», предикат – «написана», объект – «Пушкин».
Триплет удобно представлять в виде графа, в котором субъект и объект – это узлы, а предикат изображается дугой или иной соединительной линей, направленной от субъекта к объекту:
В отношении одного и того же субъекта могут быть составлены и другие выражения, определяющие другие его свойства. Например: утверждение «Книга «Медный всадник», написанная А.С. Пушкиным, издана издательством «Сфера» в 2010 г.» можно представить в виде набора триплетов:
Книга – имеет название – «Медный всадник»
Дата добавления: 2015-12-08; просмотров: 1181;