
- •Лекция 4-01
- •4.1.2. Основные классы задач xml
- •4.1.2.1. Создание новых языков
- •4.1.2.2. Хранение данных
- •4.1.2.3. Обмен данными и проекты интеграции
- •4.1.3. ДокументыXmLи их компоненты
- •4.1.3.1. Структура документаXml
- •4.1.3.2. Объявления
- •4.1.3.3. Элемент
- •4.1.3.4. Инструкция по обработке
- •4.1.3.5. СекцииCdata
- •4.1.3.6. Ссылки
- •4.1.3.7. Комментарии
- •4.1.4. Пространства именXml
4.1.3.7. Комментарии
XML-документ может содержать комментарии, которые записываются так же, как и в HTML:
<!--текст комментария-->
Текст комментария может состоять из любых символов, кроме двух минусов подряд ("--"). Кроме этого, текст комментария не должен заканчиваться символом "-".
Пример:
<!--product title="Комментарий">
Элемент рассматривается как комментарий
</product>-->
4.1.4. Пространства именXml
XML позволяет создавать наборы элементов с любыми синтаксически допустимыми именами и определять с их помощью логическую структуру документов практически произвольной сложности.
Часто случается, что различные логические схемы документов используют одни и те же имена элементов в различных смыслах. Тогда в случае, если в одном и том же документе необходимо использовать элементы нескольких различных схем, будет невозможно определить, какой элемент относится к какой схеме, и какие схемы были использованы в документе. Для решения этих проблем в XML используются пространства имен (namespaces).
Чтобы различать схемы документов, каждой из них ставится в соответствие уникальный идентификатор ресурса URI(UniversalResourceIdentifier). Две схемы будут считаться тождественными тогда и только тогда, когда их уникальные идентификаторы будут совпадать. Очень часто в качестве URI используютсяURLразличных Web-сайтов.
Для того чтобы определить, какой схеме принадлежит тот или иной элемент в документе, можно использовать механизм префиксов. Префиксы пространств имен задаются как атрибуты с именами, начинающимися последовательностью xmlns, и имеют следующий вид:
<префикс:элементxmlns:префикс="URI">
…
</префикс:элемент>
Префиксы, которые были определены в некотором элементе, могут быть использованы в его собственном имени, а также в именах всех элементов, которые включены в него, если они не переопределены другим объявлением.
Пример
<e-mail:message xmnls:e-mail="http://e-mail.org/schema">
<from>me@myAddress.com</from>
<to>you@yourAddress.com</to>
<subject>Поздравление</subject>
<text>
Поздравляю с днем рождения!
</text>
</e-mail:message>
В этом примере префикс e-mailотносится не только к элементуmessage, но и к содержащемуся в нем элементуtext.
Принадлежность элементов той или иной схеме определяется не префиксами, а тем, какие уникальные идентификаторы поставлены этим префиксам в соответствие. То есть два элемента с разными префиксами, заданными одинаковыми идентификаторами, будут считаться принадлежащими одной схеме.
Пример:
В следующем фрагменте
<e-mail:message xmnls:e-mail="http://e-mail.org/schema">
<from>me@myAddress.com</from>
<to>you@yourAddress.com</to>
<subject>Поздравление</subject>
<cont:text xmnls:cont="http://e-mail.org/schema">
Поздравляю с днем рождения!
</cont:text>
</e-mail:message>
элементы messageиtextимеют различные префиксы, но, несмотря на это, принадлежат одной и той же схеме.
В одном элементе можно определять несколько префиксов пространств имен. Как правило, при использовании множества префиксов, все они определяются в корневом элементе, а затем используются по всему документу.
Пример
<e-mail:message xmnls:e-mail="http://e-mail.org/schema"
xmnls:memo="http://memo.org/schema">
<from>me@myAddress.com</from>
<to>you@yourAddress.com</to>
<subject>Поздравление</subject>
<memo:text>
Поздравляю с днем рождения!
</memo:text>
</e-mail:message>
Определение пространства имен в виде
<элементxmlns="URI">
…
</элемент>
позволяет определять пространства имен по умолчанию, т.е. опускать префиксы в именах элементов.
Пример
Фрагмент в предыдущем примере может быть переписан следующим образом:
<message xmnls="http://e-mail.org/schema"
xmnls:memo="http://memo.org/schema">
<from>me@myAddress.com</from>
<to>you@yourAddress.com</to>
<subject>Поздравление</subject>
<memo:text>
Поздравляю с днем рождения!
</memo:text>
</message>
Пространство имен по умолчанию отменено, если в качестве значения атрибута xmnlsуказать пустую строку.
Пример:
<message xmnls="http://e-mail.org/schema"
xmnls:memo="http://memo.org/schema">
<from>me@myAddress.com</from>
<to>you@yourAddress.com</to>
<subject>Поздравление</subject>
<text xmnls="">
Поздравляю с днем рождения!
</text>
</message>
Здесь действие пространства имен по умолчанию отменено для элемента text.
Префиксы можно указывать не только для элементов, но и для атрибутов элементов.
Пример:
<reservation xmlns:html=http://www.w3.org/TR/REC-html40
xmlns:passenger=http://www.w3.org/TR/REC-html40> <name html:class="largeSansSerif">Layman, A</name> <seat passenger:class="Y"
html:class="boldSansSerif">33B</seat> <departure>1997-05-24T07:55:00+1</departure>
</reservation>
Здесь для элемента seatопределены два атрибута с именемclass, однако, за счет использования различных префиксов имена этих атрибутов (точнее их расширенные имена) считаются разными.
Расширенные имена считаются совпадающими, если их локальные части равны и, при этом, они относятся к одному пространству имен. Префикс в расширенном имени может быть опущен. В таком случае идентификатор пространства имен будет либо выбран по умолчанию (если имеется соответствующее объявление), либо будет нулевым.
Файл: