Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Текстовые данные и пространства имен XML-документа

Структура, декларация, пролог, элементы, атрибуты и комментарии XML-документа

Структура

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

<?xml version="1.0"?>

<planets>

<planet ID="1">

<name>Mercury</name>

</planet>

<planet ID="2">

<name>Venus</name>

</planet>

<!-- There are more planets. -->

</planets>

Документ XML может располагаться в одном или нескольких файлах, причем некоторые из них могут находиться на разных машинах. В XML используется специальная разметка для интеграции содержимого разных файлов в один объект, который можно охарактеризовать как логическую структуру. Благодаря тому, что документ не ограничен одним файлом, XML позволяет создавать документ из частей, которые могут располагаться где угодно.

Документ XML обычно содержит следующие разделы:

· XML-декларация;

· Пролог;

· Элементы;

· Атрибуты;

· Комментарии.

Декларация

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

· Номер версии:

<?xml version="1.0"?>.

Это обязательный аргумент. Текущая версия —1.0.

· Декларация кодировки:

<?xml version="1.0" encoding="UTF-8"?>.

Это необязательный параметр. Если он используется, то декларация кодировки должна располагаться сразу после информации о версии в XML-декларации. Декларация кодировки должна содержать значение, представляющее собой существующую кодировку символов.

· Декларация автономности, например:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>.

Декларация автономности, как и декларация кодировки, необязательны. Если декларация автономности используется, то она должна стоять на последнем месте в XML-декларации.

Пролог

Прологом называются данные, расположенные после открывающего тега документа или после корневого элемента. Он включает сведения, относящиеся к документу в целом — кодировка символов, структура документа, таблицы стилей.

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

<?xml-stylesheet type="text/xsl" href="book.xsl"?>

<!DOCTYPE book SYSTEM "schema.dtd">

<!--Some comments-->

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

<? Приложение Содержимое?>

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

<?serv cache-document?>

Элементы

Элементы в XML документе отвечают за организацию информации и являются основными структурными единицами языка XML. Элементы оформляются следующим образом:

<ElementName> Содержимое элемента </ElementName>

Теги устанавливают границы вокруг содержимого элемента, если таковое имеется.

У каждого элемента должно быть имя. Имена XML-элементов должны подчиняться следующим правилам:

· Названия могут содержать буквы, цифры и другие символы;

· Названия не могут начинаться с цифры или знака препинания;

· Названия не могут начинаться с букв xml;

· В названии не должно быть пробелов.

· Нельзя допускать пробелов у кавычек (<);

· Имена элементов являются регистрозависимыми;

· Все элементы должны иметь закрывающий тэг.

В XML элементы могут быть двух типов – пустые и непустые. Пустые элементы не содержат в себе никаких данных, таких как текст или другие конструкции, и могут сокращенно записываться следующим образом:

<ElementName />

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

<person>

<givenName>Peter</givenName>

<familyName>Kress</familyName>

</person>

В данном случае элемент <person> содержит два других элемента, <givenName> и <familyName>. Элемент <givenName> содержит текст Peter, а элемент <familyName> — текст Kress.

Атрибуты

В XML элементы могут содержать атрибуты с присвоенными им значениями, которые помещаются в одинарные или двойные кавычки. Атрибуты позволяют добавлять сведения об элементе с помощью пар «имя-значение». Атрибуты часто используются для определения тех свойств элементов, которые не считаются содержимым элемента, хотя в некоторых случаях (например, HTML-элемент img) содержимое элемента определяется значениями атрибута. Атрибуты могут отображаться в открывающих или пустых тегах, но не в закрывающих тегах. Атрибут для элемента задается следующим образом:

<myElement attribute="value" ></myElement>

Синтаксические правила создания атрибута:

· Декларируются в открывающем тэге;

· Количество атрибутов не ограничено;

· Несколько атрибутов разделяются пробелами;

· Атрибут состоит из имени и значения

· Каждое имя должно быть уникально в рамках одного элемента;

· Нельзя использовать пробелы в именах атрибутов;

· Значение атрибута должно быть в кавычках.

Значение атрибутов может заключаться как в одинарные, так и в двойные кавычки. Возможно также использование одних кавычек внутри других, например:

<myElement attribute="value" > </myElement>

<myElement attribute='value' ></myElement>

<myElement attribute='"value"' ></myElement>

Комментарии

Содержимое, не предназначенное для синтаксического анализа (например, замечания о структуре документа или редактировании), можно заключить в комментарии. Комментарии начинаются с группы символов <!-- и заканчиваются группой символов -->:

<!--Текст комментария -->

Комментарии могут находиться в прологе документа, в том числе в определении типа документа (DTD), после документа и в текстовом содержимом. Комментарии не могут находиться внутри значений атрибутов. Они также не могут находиться внутри тегов.

Синтаксический анализатор считает концом комментария символ >; после этого символа он возобновляет обработку XML-документа в обычном режиме. Поэтому строка > не может находиться внутри комментария. За исключением этого, в комментариях могут использоваться любые допустимые символы XML. Поэтому комментарии очень полезны, если нужно убрать комментарий из области обработки синтаксического анализатора, не удаляя само содержимое из документа. Для временного удаления разметки можно использовать следующие комментарии:

<!-- <test pattern="SECAM" /><test pattern="NTSC" /> --><!--Текст комментария -->

При создании комментария необходимо учитывать следующее:

1. В тексте комментария не может быть двух символов «-» подряд.

2. Комментарий не может заканчиваться символом «-».

Текстовые данные и пространства имен XML-документа

Текстовые данные

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

Весь текст XML-документа анализируется парсером, т.е. является парсируемым (PCDATA), но в случае необходимости определенные разделы можно «скрыть» для проверки и они будут игнорироваться парсером (т.н. непарсируемые данные, CDATA). Разделы CDATA дают возможность сообщить средству синтаксического анализа, что среди символов, содержащихся в разделе CDATA, отсутствует разметка. Это упрощает создание документов с разделами, в которых могут появиться отдельные символы разметки, но на самом деле разметки нет. В разделы CDATA часто помещают содержимое на языке сценариев, а также образцы содержимого XML и HTML.

Раздел CDATA в схеме документа использует следующую конструкцию:

<![CDATA[Some information using <, >,]]>

При обнаружении начального тега <![CDATA[, средство синтаксического анализа XML рассматривает все последующее содержимое как символы, не пытаясь интерпретировать их как разметку элемента или сущности. Ссылки на символы в разделах CDATA не работают. Обнаружив завершающий тег ]]>, средство синтаксического анализа возобновляет нормальный синтаксический анализ. Например, в XML-документ можно включить любой из приведенных далее разделов CDATA, и средство синтаксического анализа не воспримет их как ошибочные.

<![CDATA[</this is malformed!</malformed</malformed & worse>]]>

или

<script>

<![CDATA[

function matchwo(a,b)

{

if (a < b && a < 0) then

{

return 1;

}

else

{

return 0

}

}

]]>

</script>

Содержимое разделов CDATA может содержать только символы, разрешенные для содержимого XML; нельзя экранировать таким образом управляющие символы и символы совместимости. Кроме того, в раздел CDATA не может входить последовательность ]]>, поскольку эти символы означают завершение раздела. Это значит, что разделы CDATA не могут быть вложенными друг в друга. Эта последовательность также используется в некоторых сценариях. В сценариях обычно можно вместо последовательности ]]> использовать ] ]>.

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

· Символы нельзя ввести в документ напрямую, так как они будут интерпретироваться как разметка.

· Символы нельзя ввести в документ напрямую из-за ограничений устройства ввода.

· Невозможна надежная передача символов через процессор, ограниченный однобайтными символами.

· Символьная строка или фрагмент документа часто повторяются и могут быть сокращены

Для представления содержимого в XML используются числовые или синтаксические конструкции, начинающиеся с символа амперсанда (&) и заканчивающиеся точкой с запятой (;). Ссылки на символы позволяют вставлять символы Юникода, для которых в качестве кодовой точки Юникода задан числовой код. Кодовые точки можно задавать либо в десятичном, либо в шестнадцатеричном представлении:

& #value; - синтаксис, используемый для десятичных ссылок.

&# xvalue; - синтаксис, используемый для шестнадцатеричных ссылок

Например, чтобы вставить символ евро, который до сих пор отсутствует на многих клавиатурах, можно вставить в документ ссылку &#x20AC; или &#8364;

В приведенной таблице 1 перечислены пять встроенных сущностей для символов, используемых в XML-разметке:

Таблица 1. Встроенные сущности XML

Сущность Ссылка на сущность Значение
lt &lt; < (меньше чем)
gt &gt; > (больше чем)
amp &amp; & (амперсанд)
apos &apos; ' (апостроф или одиночная кавычка)
quot &quot; " (двойная кавычка)

В ситуациях, когда символ может привести к ошибочной интерпретации структуры документа средством синтаксического анализа XML, используйте сущность вместо ввода символа. Ссылки на сущности &apos; и &quot; чаще всего используются в значениях атрибутов. Например, чтобы написать «Me&You», используйте Me&amp;You. Чтобы написать «a<b», используйте a&lt;b. Чтобы написать «b>c», используйте b&gt;c.

Можно определить собственные сущности, как HTML определяет набор сущностей для использования в HTML. Значение &ap не распознается как HTML-файл. Для преобразования в HTML нужно использовать $#.....

При работе с определением типа документа (DTD), определяющим сущности, можно ссылаться на эти сущности в содержимом документа, используя следующий синтаксис:

&entityName;

При обработке пробелов в документе XML необходимо учитывать, что в спецификации XML, опубликованной консорциумом World Wide Web (W3C), различные способы обозначения конца строки приведены к единому способу обозначения, однако при этом сохраняются все остальные пробелы, за исключением пробелов в значениях атрибутов. Кроме того, в XML предусмотрен набор средств, с помощью которых документы могут сообщать приложениям, следует ли сохранять пробелы. Согласно существующему стандарту XML 1.0 пробелы перед XML-декларацией не допускаются.

<?xml version="1.0"?>

<root>

<element>something</element>

</root>

Если перед XML-декларацией есть пробелы, они будут рассматриваться как инструкция по обработке. Информация (в частности, о кодировке) не обязательно используется средством синтаксического анализа.

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

Документ 1:

<root>

<data>1</data>

<data>2</data>

<data>3</data>

</root>

Документ 2:

<root><data>1</data><data>2</data><data>3</data></root>

Документ 3:

<root> <data>1</data> <data>2</data> <data>3</data> </root>

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

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

Атрибут xml:space может принимать два значения:

· default - это значение позволяет приложению обрабатывать пробелы при необходимости. Если не включить атрибут xml:space, то результат будет такой же, как при использовании значения default.

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

Значения атрибутов xml:space применяются ко всем потомкам содержащего атрибут элемента, кроме случаев, когда значение переопределяется в одном из дочерних элементов.

Например, в следующих документах относительно пробелов задано одинаковое поведение:

Документ 1:

<poem xml:space="default">

<author>

<givenName>Alix</givenName>

<familyName>Krakowski</familyName>

</author>

<verse xml:space="preserve">

<line>Roses are red,</line>

<line>Violets are blue.</line>

<signature xml:space="default">-Alix</signature>

</verse>

</poem>

Документ 2:

<poem xml:space="default">

<author xml:space="default">

<givenName xml:space="default">Alix</givenName>

<familyName xml:space="default">Krakowski</familyName>

</author>

<verse xml:space="preserve">

<line xml:space="preserve">Roses are red,</line>

<line xml:space="preserve">Violets are blue.</line>

<signature xml:space="default">-Alix</signature>

</verse>

</poem>

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

По умолчанию службы Microsoft XML Core Services (MSXML) не обрабатывают атрибут xml:space. Если приложение должно учитывать атрибут xml:space, то перед синтаксическим анализом для свойства preserveWhiteSpace объекта DOMDocument следует задать значение True.

xmldoc= new ActiveXObject("Msxml2.DOMDocument.5.0");

xmldoc.preserveWhiteSpace = true;

xmldoc.load(url);

В службах MSXML также предусмотрены параметры, которые позволяют перепоручить обработку пробелов в приложении средству синтаксического анализа. Дополнительные сведения см. в разделе «White Space and the DOM» (пробелы и модель DOM) документации по пакету MSXML SDK.

Приложения по обработке XML сохраняют все пробелы в содержимом элементов, но часто нормализуют пробелы в значениях атрибутов. Символы табуляции, символы возврата каретки и пробелы обрабатываются как единичные пробелы. В определенных типах атрибутов удаляются пробелы, находящиеся до или после тела значения. Повторяющиеся пробелы внутри значения заменяются на один пробел. (При наличии определения DTD эта обработка проводится для всех атрибутов, не принадлежащих к типу CDATA). Например, XML-документ может содержать следующие данные:

<whiteSpaceLoss note1="this is a note." note2="this

is

a

note.">

Средство синтаксического анализа XML передаст оба значения атрибута в виде "this is a note." с преобразованием разрывов строк в одиночные пробелы.

Средства синтаксического анализа XML обрабатывают сочетание символов возврата каретки и перевода строки (CRLF) как одиночные символы возврата каретки или перевода строки. Все они передаются как единичные символы перевода строки (LF). При сохранении документов приложения могут использовать соответствующие соглашения об обработке конца строки.

Пространства имен

Поскольку имена элементов в XML не фиксированы, часто случаются конфликты, когда два различных документа используют одно и то же имя для описания двух различных типов элементов, например:

<Order>

<Employee>

<Name>Jane Doe</Name>

<Title>Developer</Title>

</Employee>

<Product>

<Title>The Joshua Tree</Title>

<Artist>U2</Artist>

</Product>

</Order>

Пространства имен XML дают возможность избежать конфликтов имен элементов. Они задаются при помощи уникальных идентификаторов URI. Чтобы упростить работу, были разработаны специальные префиксы пространств имен, которые позволяют с легкостью определить, какой схеме принадлежит тот или иной элемент документа. Общий синтаксис:

<ElementName xmlns:Prefix="http://contoso.msft/namespace_for_examples">

<Prefix:AnyElement>Some Data</Prefix:AnyElement>

<AnotherElement>More Data</AnotherElement>

Например:

<Order xmlns:hr="http://hrweb" xmlns:mkt="http://market">

<hr:Name>Jane Doe</hr:Name>

<hr:Title>Developer</hr:Title>

<mkt:Title>The Joshua Tree</mkt:Title>

<mkt:Artist>U2</mkt:Artist>

</Order>

Префиксы пространств имен задаются как атрибуты с именами, которые начинаются последовательностью xmlns. Созданный префикс пространств имен может использоваться только в собственном имени и во вложенных элементах, но не за пределами элемента в котором он был создан. Сами префиксы не относят элемент к той или иной схеме. Эту функцию выполняют уникальные идентификаторы, которые поставлены в соответствие этим префиксам. Таким образом, два элемента с разными префиксами которым заданы одинаковые идентификаторы будут считаться принадлежащими к одной схеме.

Существует еще один способ, который позволяет не проставлять префиксы в элементах. Для этого достаточно задать пространство имен по умолчанию. В этом случае все вложенные элементы будут принадлежать пространству имен родительского элемента. При этом не теряется возможность использовать другие пространства имен для дочерних элементов. Для этого достаточно вручную прописать нужное пространство имен, используя атрибут xmlns.

<Order>

<Employee xmlns="http://hrweb">

<Name>Jane Doe</Name>

<Title>Developer</Title>

</Employee>

<Product xmlns="http://market">

<Title>The Joshua Tree</Title>

<Artist>U2</Artist>

</Product>

</Order>

В представленном примере прослеживается так называемое наследование. Если для элемента не указано пространство имен, то ему автоматически присваивается пространство имен ближайшего родительского элемента.

Обычно вышеприведенный способ не очень популярный и чаще всего используются префиксы пространств имен. Но в некоторых случаях их можно опустить и использовать способ с заданием пространства имен по умолчанию.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...