Примеры создания xml документов с dtd описанием. DTD - Атрибуты. Ассоциирование DTD с документом XML
20. Языки описания cхем XML
DTD схемы. Недостатки DTD схем. XDR схемы. Элементы и атрибуты XDR схем.
Идея создания собственных тэгов, имеющих специальное значение и помогающих описать содержание документа, сама по себе просто замечательна. Но если каждый пользователь может создавать свои собственные описания, каким образом их распознавать? С этой целью в спецификации XML для описания подобных "самодеятельных" тэгов используются схемы. Они необходимы для того, чтобы:
описать, что именно является разметкой;
описать точно, что означает разметка.
Наиболее известными языками описания схем являются следующие:
DTD (Document Type Definition) - язык определения типа документов, который первоначально использовался в качестве язык описания структуры SGML-документа.
XDR (XML Data Reduced) – диалект схемы XML, разработанный Microsoft, который поддерживался в Internet Explorer 4 и 5 версий.
XML Schema или просто XSD (язык определения схем XML) – рекомендация консорциума W3C с 2001 года.
Рассмотрим подробнее первые два из них. Третий язык описания схем рассматривается в лабораторной работе 11.
DTD схема
Схема DTD предоставляет шаблон разметки документа, в котором указываются наличие, порядок следования и расположение элементов и их атрибутов в документе XML.
В рамках DTD модель содержимого XML документа можно описать следующим образом:
Каждый элемент документа может иметь один из типов:
Синтаксис |
Комментарий |
|
Содержит только текстовые данные |
||
Другие элементы |
Содержит только дочерние элементы |
|
Смешанное |
Содержит комбинацию текстовых данных и дочерних элементов |
|
Ничего не содержит |
||
Атрибуты, находящиеся внутри тэгов документа, описываются отдельно с помощью синтаксиса:
имя_элемента имя_атрибута1 (тип) значение_по_умолчанию
…………………………………………………………………………………...
имя_элемента имя_атрибутаN (тип) значение_по_умолчанию >
При этом атрибут в DTD может иметь один из трех типов:
Маркированные атрибут
Атрибута с перечислением
Кроме типа атрибута можно также задавать и его модальность:
Рассмотрим в качестве примера описание атрибутов строкового типа для элемента, описывающего некоторое сообщение:
number CDATA #REQUIRED
date CDATA #REQUIRED
from CDATA #FIXED
status CDATA #IMPLIED>
Если этот элемент содержит атрибуты с перечислением, то их описание может выглядеть, например, следующим образом:
number ID #REQUIRED
from CDATA #REQUIRED
alert (low | normal | urgent) "normal">
Маркированных атрибуты элемента могут быть четырех типов:
И, наконец, в DTD можно использовать следующие индикаторы вхождения последовательностей:
Символ |
Пример |
Описание |
Последовательное использование элементов списка |
||
Используется один из членов списка |
||
Используется один и только один элемент |
||
Необязательное использование (0 или 1 раз) |
||
Используется один или несколько раз |
||
Используется ноль или несколько раз |
В качестве примера приведем DTD схему, описывающую структуру электронного почтового ящика:
Исходный XML документ, удовлетворяющий данной схеме, может выглядеть, например, так:
Remind me about meeting.
Обратите внимание на 2-ю строчку документа, в которой указывается внешняя ссылка на файл, содержащий DTD схему.
В принципе, DTD допускает два способа использования в XML документе.
Объявление внутренней схемы:
Объявление внешней схемы:
В заключение укажем на следующие недостатки DTD схем:
Не являются экземплярами XML. Требуется изучение совершенно другого языка.
Не предоставляют контроль за типами данных, за исключением самых простых текстовых данных.
Не являются экземплярами XML, поэтому их нельзя легко расширить или преобразовать к другим языкам разметки – HTML или DHTML.
Не обеспечивают поддержки пространств имен XML.
XDR схема
XML-Data – полное имя языка описания схем, предложенного Майкрософт, а XML-DataReduced– это "часть" полной рекомендации. Схема XDR - это экземпляр XML, т.е. соответствует всем синтаксическим правилам и стандартам XML.
Реализуя проверки данных на уровне документа с помощью схемы, приложения, генерирующие и принимающие транзакции, можно оптимизировать для обеспечения максимального быстродействия. Соответствие полей и правильность записей проверяются на уровне экземпляров XML.
Корневым элементом в схеме XDR всегда является элемент Schema:
name="имя_схемы" xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<-- Объявления других элементов -->
Элемент ElementType имеет синтаксис:
content="{empty | texOnly | eltOnly | mixed}">
dt:type "datatype"
model="{open | closed}"
order="{one | seq | many}"
Элемент ElementType может иметь следующие атрибуты:
Имя атрибута |
Описание |
Имя элемента |
|
Тип данных элемента |
|
Может принимать значения: |
|
Open – разрешено использовать элементы, не определенные в схеме |
|
Closed – запрещено использовать элементы, не определенные в схеме |
|
Порядок следования дочерних элементов в экземпляре XML. Допустимые значения: |
|
one – предполагается наличие одного документа |
|
many – любое количество элементов в любом порядке |
|
seq – элементы указываются в строго заданном порядке. |
качестве дочерних элементов для ElementType можно использовать следующие:
Имя элемента |
Описание |
Объявляет дочерний элемент |
|
Обеспечивает описание элемента ElementType |
|
Обеспечивает тип данных элемента ElementType |
|
Определяет порядок следования элементов |
|
Определяет атрибут |
|
Определяет сведения о дочернем элементе AttributeType |
Для объявления атрибутов используется синтаксис:
default="default-value" dt:type="primitive-type" dt:values="enumerated-values" required="{yes|no}" В
свою очередь элемент AttributeType
может иметь атрибуты: Значение
Описание
Значение
по умолчанию Один
из следующих типов: entity,
entities,
enumeration,
id,
idref,
nmtoken,
nmtokens,
notation,
string Допустимые
значения Имя
атрибута Указывает
на обязательное наличие атрибута в
описании Синтаксис
для описания элемента attribute выглядит
следующим образом: default="default-value" type="attribute-type" а
его возможные значения могут быть
такими: Значение
Используйте для определения структуры XML-документов XML-схемы вместо DTD XML-схема обладает более мощными возможностями, чем DTD. Для иллюстрации преимуществ использования механизма XML-схем в первых трех листингах сравниваются различные способы представления элементов. В представлена выдержка из XML-документа. В показаны два элемента, объявленные в синтаксисе DTD, а в представлен синтаксис, соответствующий XML-схеме. Обратите внимание, что синтаксис в Листинге 3 подобен синтаксису XML. При использовании схемы, валидирующий парсер может выполнить проверку, является ли элемент InvoiceNo положительным целым числом, и состоит ли ProductID из заданного набора символов (шести цифр и одной буквы от A до Z). Парсер, обрабатывающий DTD-определение, может лишь подтвердить, что данные элементы представляют собой строки. Несмотря на то, что DTD служат разработчикам SGML и HTML в качестве механизма описания структурированной информации вот уже на протяжении 20-ти лет, DTD обладают некоторыми ограничениями по сравнению с XML-схемами. Согласно DTD элемент может быть представлен одним из трех способов: DTD не обладает синтаксисом XML и предлагает лишь ограниченную поддержку для типов и пространств имен. При совместной работе одна сторона может обрабатывать документы других сторон, и разные стороны могут представлять свои элементы данных по-разному. Более того, в отдельном документе им может потребоваться независимо друг от друга ссылаться на элементы с одинаковым именем, созданные разными сторонами. Использование XML-схемы позволяет различать определения с одним и тем же именем при помощи определения разных пространств имен. Такая XML-схема определяет набор новых имен, таких как имена элементов, типов, атрибутов, групп атрибутов, чьи определения и объявления описаны в схеме. В имена определяются как InvoiceNo , ProductID и ProductCode . Имена, определенные в схеме принадлежат так называемому целевому пространству имен
. Само по себе пространство имен является фиксированным, произвольным именем, которое должно соответствовать синтаксису URL. К примеру, пространство имен для схемы, представленной в , можно задать следующим образом: http://www.SampleStore.com/Account . Синтаксис объявления пространства имен иногда может сбить с толку. Объявление начинается с http:// , однако оно не ссылается на файл с описанием схемы. На самом деле, ссылка http://www.SampleStore.com/Account вообще не ведет ни на один файл, а только на назначенное имя. Определения и объявления в схеме могут ссылаться на имена, которые могут принадлежать другим пространствам имен. В данной статье мы ссылаемся на такие пространства имен как на исходные пространства имен
. В каждой схеме может быть определено одно целевое пространство имен и возможно множество исходных пространств имен. Вообще, каждое имя в заданной схеме принадлежит некоему пространству имен. Имена пространства имен могут быть довольно длинными, однако их можно сократить при помощи синтаксиса объявления xmlns в документе XML-схемы. Все эти концепции проиллюстрированы в . В XML-схеме, представленной с , пространством имен targetNamespace является http://www.SampleStore.com/Account , оно содержит имена InvoiceNo , ProductID и ProductCode . Имена schema , element , simpleType , pattern , string и positive-integer принадлежат исходному пространству имен http://www.w3.org/1999/XMLSchema , которое сокращается как xsd путем объявления xmlns . В псевдониме xsd нет ничего особенного, можно выбрать и другое имя. Для удобства и простоты в оставшейся части статьи мы будем использовать префикс xsd для ссылки на пространство имен http://www.w3.org/1999/XMLSchema , пропуская уточнение xsd в некоторых частях кода. В нашем примере targetNamespace является также одним из исходных пространств имен, так как имя ProductCode используется в определении других имен. Определением элемента заключается в определении его имени и модели контента. В XML-схеме модель контента элемента определяется его типом. Следовательно, элементы в XML-документе могут иметь только значения, которые подходят типам, определенным в его схеме. Спецификация XML-схемы определяет несколько простых типов для значений, как показано в Таблице 2 -предопределенные простые типы значений. Тип элемента может быть простым или комплексным (сложным). Элемент простого типа не может содержать другие элементы или атрибуты. Комплексный тип может создавать эффект встраивания элементов в другие элементы или может ассоциировать атрибуты с элементом. До этого момента мы использовали только примеры с простыми типами, определенными пользователем (см. ProductCode). В спецификацию XML-схемы также включены предопределенные простые типы (см. вставку ). Предопределенный простой тип
ограничивает значения по их базовому типу. К примеру, значением предопределенного простого типа ProductCode является подмножество значений базового типа string . Элемент, который не содержит атрибутов или других элементов может быть отнесен к простому типу, предопределенному или определенному пользователем, такому как string , integer , decimal , time , ProductCode и т.п. Теперь попробуем добавить к простому элементу price из атрибут currency . Вы не сможете этого сделать, так как элемент простого типа не может иметь атрибутов. Если вы хотите добавить атрибут, вам необходимо определить price как элемент комплексного типа. В примере из , мы определяем, так называемый анонимный тип
, в котором комплексному типу не дается явного имени. Другими словами, атрибут name элемента complexType не определен. В XML-документе в элемент могут быть вложены другие элементы. Это требование выражается напрямую в DTD. XML-схема вместо этого определяет элемент и его тип, который может включать объявления других элементов и атрибутов. Пример приведен в . XML-схема предлагает большую гибкость, чем DTD при выражении ограничений для модели контента элементов. На простейшем уровне, таком как в DTD, вы можете ассоциировать с элементом атрибуты, а также указать, что в нем может появляться последовательность из только одного (1), нуля или более (*), или одного или более (+) элементов из заданного набора элементов. В XML-схеме можно выразить дополнительные ограничения, используя для этой цели, к примеру, атрибуты minOccurs и maxOccurs для элемента element и элементы choice , group и all . В тег Title является опциональным по отношению к тегу Book (такое же правило можно задать и в DTD). Однако здесь также говорится, что в элементе Book должен быть хотя бы один и не более двух элементов Author . Значением атрибутов minOccurs и maxOccurs тега element по умолчанию является 1. Элемент choice указывает на то, что может появиться только один из указанных дочерних элементов. Другой элемент all определяет, что все дочерние элементы могут появляться только один раз, вместе и в любом порядке, или не появляться совсем. В объявляется, что оба тега Title и Author должны появляться в Book в любом порядке, или не появляться вообще. Подобные ограничения сложно выразить при помощи DTD. В данном документе мы раскрыли при помощи простых примеров наиболее фундаментальные концепции, необходимые для определения структуры элементов при помощи XML-схемы. Доступно также множество других мощных механизмов: Дополнительную информацию по XML-схемам можно получить из документаций на сайтах W3C (См. ) и dW XML zone. Теперь, когда спецификация XML-схемы получила подтверждение в качестве кандидата на рекомендацию W3C, вы без сомнения можете использовать ее в полной мере. В XML- документах DTD определяет
набор действительных элементов,
идентифицирует элементы, которые
могут находиться в других
элементах, и определяет
действительные атрибуты для
каждого из них. Синтаксис DTD весьма
своеобразен и от
автора-разработчика требуются
дополнительные усилия при создании
таких документов(сложность DTD
является одной из причин того, что
использование SGML, требующего
определение DTD для любого
документа, не получило столь
широкого распространения как,
например, HTML). Как уже отмечалось, в
XML использовать DTD не обязательно -
документы, созданные без этих
правил, будут правильно
обрабатываться
программой-анализатором, если они
удовлетворяют основным
требованиям синтаксиса XML. Однако
контроль за типами элементов и
корректностью отношений между ними
в этом случае будет полностью
возлагаться на автора документа. До
тех пор, пока грамматика нашего
нового языка не описана, его сможем
использовать только мы, и для этого
мы будем вынуждены применять
специально разработанное
программное обеспечение, а не
универсальные
программы-анализаторы.. В DTD для XML используются следующие
типы правил: правила для элементов
и их атрибутов, описания
категорий(макроопределений),
описание форматов бинарных данных.
Все они описывают основные
конструкции языка - элементы,
атрибуты, символьные константы
внешние файлы бинарных данных. Для того, чтобы использовать DTD в
нашем документе, мы можем или
описать его во внешнем файле и при
описании DTD просто указать ссылку
на этот файл или же непосредственно
внутри самого документа выделить
область, в которой определить
нужные правила. В первом случае в
документе указывается имя файла,
содержащего DTD- описания:
...
Внутри же документа DTD- декларации
включаются следующим образом:
...
...
]>
...
В том случае, если используются
одновременно внутренние и внешние
описания, то
программой-анализатором будут
сначала рассматриваться
внутренние, т.е. их приоритет выше.
При проверке документа XML-
процессор в первую очередь ищет DTD
внутри документа. Если правила
внутри документа не определены и не
задан атрибут standalone ="yes"
,
то программа загрузит указанный
внешний файл и правила, находящиеся
в нем, будут считаны оттуда. Если же
атрибут standalone
имеет значение "yes
",
то использование внешних DTD
описаний будет запрещено. Элемент в DTD определяется с
помощью дескриптора!ELEMENT
, в
котором указывается название
элемента и структура его
содержимого. Например, для элемента
Ключевое слово ELEMENT указывает, что
данной инструкцией будет
описываться элемент XML. Внутри этой
инструкции задается название
элемента(flower) и тип его содержимого. В определении элемента мы
указываем сначала название
элемента(flower), а затем его модель
содержимого - определяем, какие
другие элементы или типы данных
могут встречаться внутри него. В
данном случае содержимое элемента
flower будет определяться при помощи
специального маркера PCDATA(что
означает parseable character data - любая
информация, с которой может
работать программа-анализатор).
Существует еще две инструкции,
определяющие тип содержимого:
EMPTY,ANY. Первая указывает на то, что
элемент должен быть
пустым(например, Последовательность дочерних для
текущего элемента объектов
задается в виде списка разделенных
запятыми названий элементов. При
этом для того, чтобы указать
количество повторений включений
этих элементов могут
использоваться символы +,*, ? :
В этом примере указывается, что
внутри элемента
Символ * в этом примере указывает
на то, что определяемая
последовательность внутренних
элементов может быть повторена
несколько раз или же совсем не
использоваться. Если в определении элемента
указывается "смешанное"
содержимое, т.е. текстовые данные
или набор элементов, то необходимо
сначала указать PCDATA, а затем
разделенный символом "|"
список элементов. Пример корректного XML- документа:
]>
...
Списки атрибутов элемента
определяются с помощью ключевого
слова!ATTLIST
. Внутри него
задаются названия атрибутов, типы
их значений и дополнительные
параметры. Например, для элемента
В данном примере для элемента article
определяются три атрибута: id,
about
и type
, которые имеют типы
ID(идентификатор), CDATA и список
возможных значений соответственно.
Всего существует шесть возможных
типов значений атрибута: Также в определении атрибута
можно использовать следующие
параметры: Компонент (entity) представляет
собой определения, содержимое
которых может быть повторно
использовано в документе. В других
языках программирования подобные
элементы называются
макроопределениями. Создаются DTD-
компоненты при помощи инструкции!ENTITY:
Программа-анализатор,
просматривая в первую очередь
содержимое области DTD- определений,
обработает эту инструкцию и при
дальнейшем разборе документа будет
использовать содержимое DTD-
компонента в том месте, где будет
встречаться его название. Т.е.
теперь в документе мы можем
использовать выражение &hello; ,
которое будет заменено на строчку "Мы
рады приветствовать Вас"
В общем случае, внутри DTD можно
задать три типа макроопределений: Внутренние макроопределения
-
предназначены для определения
строковой константы, с их помощью
можно организовывать ссылки на
часто изменяемую информацию, делая
документ более читабельным.
Внутренние компоненты включаются в
документ при помощи амперсанта & В XML существует пять
предустановленных внутренних
символьных констант: Внешние макроопределения
-
указывают на содержимое внешнего
файла, причем этим содержимым могут
быть как текстовые, так и двоичные
данные. В первом случае в месте
использования макроса будут
вставлены текстовые строки, во
втором - бинарные данные, которые
анализатором не рассматриваются и
используются внешними программами
Макроопределения правил
-
макроопределения параметров могут
использоваться только внутри
области DTD и обозначаются
специальным символом %, вставляемым
перед названием макроса. При этом
содержимое компонента будет
помещено непосредственно в текст
DTD- правила Например, для следующего
фрагмента документа:
можно использовать более
короткую форму записи:
Макроопределения часто
используются для описания
параметров в правилах атрибутов. В
этом случае появляется возможность
использовать одинаковые
определения атрибутов для
различных элементов:
Довольно часто при создании XML-
элемента разработчику требуется
определить, данные какого типа
могут использоваться в качестве
его содержимого. Т.е. если мы
определяем элемент
Если в качестве программы на
стороне клиента используется
верифицирующий XML-процессор, то
информацию о типе можно передавать
при помощи специально созданного
для этого атрибута элемента,
имеющего соответствующее DTD-
определение. В процессе разбора
программа-анализатор передаст
значение этого атрибута
клиентскому приложению, которое
сможет использовать эту информацию
должным образом. Например, чтобы
указать, что содержимое элемента
должно быть длинным целым, можно
использовать следующее DTD-
определение:
Задав атрибуту значение по
умолчанию LONG и определив его как
FIXED, мы позволили тем самым
программе-клиенту получить
необходимую информацию о типе
содержимого данного элемента, и
теперь она может самостоятельно
определить соответствие типа этого
содержимого указанному в DTD-
определении. Вот пример XML- документа, в котором
определяются и используются
несколько элементов с различными
типами данных:
...
Как видно из примера, механизм
создания элементов документа при
этом нисколько не изменился. Все
необходимая для проверки типов
данных информация заложена в
определения элементов внутри блока
DTD. В заключении хотелось бы
отметить, что DTD предоставляет нам
весьма удобный механизм
осуществления контроля за
содержимым документа. На
сегодняшний день, практически все
программы просмотра документов
Интернет используют DTD-правила.
Однако это далеко не единственный
способ проверки корректности
документа. В настоящий момент в W3
консорциуме находится на
рассмотрении новый стандарт языка
описания структуры документов,
называемый схемами данных.
Следующий раздел посвящен работе с
ними. В этой главе мы обсудим о атрибутах DTD. Атрибут дает больше информации о элементе или более точно он определяет свойство элемента. Атрибут XML всегда в форме пары им-значения. Элемент может иметь любое число уникально атрибутов. Объявление атрибута очень много подобно к объявлениям элемента в много путей за исключением одного; вместо объявлять позволяемое содержание для элементов, вы объявляете список позволяемых атрибутов для каждого элемента. Эти списки вызваны объявлением ATTLIST. Основной синтаксис объявления атрибутов DTD следующим образом:
В вышеуказанном синтаксисе Старт атрибутов DTD с
элемент-имя
определяет имя элемента к которому атрибут применяется. атрибут-имя
определяет имя атрибута который включен с элемент-именем. атрибут-тип
определяет тип атрибутов. Мы обсудим больше на этом в следующих разделах. атрибут со значением
принимает фикчированное значение которое атрибуты должны определить. Мы обсудим больше на этом в следующих разделах. Ниже простой пример для объявления атрибута в DTD:
]>
Листинг 1: Фрагмент XML-документа
Листинг 2: Фрагмент DTD, описывающий элементы из Листинга 1
Листинг 3: Фрагмент XML-схемы, описывающий элементы из Листинга 1
Использование пространств имен в XML-схеме
Ограничения DTD
Листинг 4: Целевое и исходное пространства имен
Рисунок 1: Пространства имен для Листинга 4
Листинг 5: Множество исходных пространств имен, импорт пространства имен
Определение элементов
Простые типы
Простые, не вложенные элементы имеют простой тип
Листинг 7: Некоторые простые типы элементов
Элементы с атрибутами должны иметь комплексный тип
Листинг 8: Элемент комплексного типа
Элементы, содержащие вложенные элементы должны иметь комплексный тип
Таблица 1: Сравнение комплексных типов данных в DTD и XML-схеме
XML-документ
DTD
XML-схема
Листинг 10: Скрытие BookType как локального типа
Выражение сложных ограничений для элементов
Листинг 11: Выражение ограничений для типов элементов
Листинг 12: Указатель того, что у элемента должны быть определены все типы
Подведение итогов
Определение элемента
Определение атрибутов
Определение
компонентов(макроопределений)
Типизация данных
Синтаксис
Пример
Препятствуйте нам пойти через вышеуказанный Код:
Начните с объявлением XML с следующим заявлением:
Немедленно после коллектора XML тип объявление документа, обыкновенно называемое DOCTYPE:
DOCTYPE сообщает парсер что DTD связан с этим документом XML. Объявление DOCTYPE имеет восклицательный знак (!) в начале имени элемента.
Следование тело DTD. Здесь мы объявляли элемент и атрибут:
Удостоверение личности атрибута для имени элемента определено как:
Здесь тип атрибута CDATA и свое значение #REQUIRED .
Правила объявления атрибута
Все атрибуты используемые в документе XML необходимо объявить в определении типа документа (DTD) используя объявление Атрибут-Списка
Атрибуты могут только появиться в старт или пустые бирки.
Ключевое слово ATTLIST должно находиться в верхушке - случае
Никакие двойные имена атрибута не будут позволены внутри список атрибута для, котор дали элемента.
Типы атрибута
Объявляя атрибуты, вы можете определить как обработчик должен отрегулировать данные которые появляются в значение. Мы можем классифицировать атрибут печатаем внутри 3 главным образом категории на машинке:
Тип строки
Типы Tokenized
Перечисленные типы
Следовать таблица обеспечивает сводку различных типов атрибута:
Тип | Описание |
---|---|
CDATA | CDATA данные по характера (текст и не повышение цены). Тип атрибута строки . |
Удостоверение личности | Это уникально обозначение атрибута. Оно не должен появиться больше чем раз. Тип атрибута Tokenized . |
IDREF | Оно использован для того чтобы снабдить ссылками удостоверение личности другого элемента. Оно использован для того чтобы установить элементы связь между. Тип атрибута Tokenized . |
IDREFS | Оно использован для того чтобы снабдить ссылками множественное удостоверение личности. Тип атрибута Tokenized . |
РЕАЛЬНОСТЬ | Она представляет внешнюю реальность в документе. Тип атрибута Tokenized . |
РЕАЛЬНОСТИ | Оно представляет список внешних реальностей в документе. Тип атрибута Tokenized . |
NMTOKEN | Оно подобен к CDATA и атрибут со значением состоит из действительного имени XML. Тип атрибута Tokenized . |
NMTOKENS | Оно подобен к CDATA и атрибут со значением состоит список действительного имени XML. Тип атрибута Tokenized . |
НОТАЦИЯ | Элемент будет снабжен ссылками к объявленной нотации в документе DTD. Перечисленный тип атрибута . |
Обозначение | Оно позволяет определить специфический список значений где одно из значений должно соответствовать. Перечисленный тип атрибута . |
Объявление атрибута со значением
В пределах каждого объявления атрибута, вы должны определить как значение появится в документ. Вы можете определить если атрибут:, то
подразумевает
смогите иметь автоматически принимаемое значение
смогите иметь фикчированное значение
Автоматически принимаемые значения
Он содержит автоматически принимаемое значение. Значения могут быть заключили в одиночные кавычки (") или двойные цитаты (")
СинтаксисСледование синтаксис значения:
где значени по умолчанию-значение определенный атрибут со значением.
ПримерСледование простой пример объявления атрибута с автоматически принимаемым значением:
]>
В этом примере мы имеем элемент имени с удостоверением личности атрибута которого автоматически принимаемое значение 0 . Автоматически принимаемое значение заключено в пределах двойных цитат.
ФИКЧИРОВАННЫЕ значения
ключевое слово #FIXED следовать фикчированным значением использовано когда вы хотите определить что атрибут со значением постоянн и не может быть изменен. Общяя польза фикчированных атрибутов определяет номера версии.
СинтаксисСледование синтаксис фикчированных значений:
где #FIXED определенный атрибут со значением.
ПримерСледование простой пример объявления атрибута с ФИКЧИРОВАННЫМ значением:
]>
В этом примере мы использовали #FIXED ключевого слова где оно показывает что значение «tutorialspoint» единственное значение для имени
атрибута
Следование инвалидный DTD:
]>
НЕОБХОДИМЫЕ значения
Когда вы хотите определите что атрибут необходим, используйте ключевое слово #REQUIRED.
СинтаксисСледование синтаксис #REQUIRED:
где #REQUIRED определенный тип атрибута.
ПримерСледование простой пример объявления атрибута DTD с ключевым словом #REQUIRED:
]>
В этом примере мы использовали ключевое слово #REQUIRED для того чтобы определить что удостоверение личности атрибута необходимо предусмотреть для имени элемент- имени
ПОДРАЗУМЕВАЕМЫЕ значения
Объявляя атрибуты вы должны всегда определять объявление значения. Если атрибут вы объявляете не имеет никакое автоматически принимаемое значение, то не имеет никакое фикчированное значение, и не требует, тогда вы должны объявить что атрибут как подразумевали . #IMPLIED ключевого слова использовано для того чтобы определить атрибут как подразумевали .
СинтаксисСледование синтаксис #IMPLIED:
где #IMPLIED определенный тип атрибута.
ПримерСледование простой пример #IMPLIED
]>
В этом примере мы использовали #IMPLIED ключевого слова по мере того как мы не хотим определить любые атрибуты, котор нужно включить в имени элемента. Оно опционный.
Как раз таковыми и являются. Причём XML сам по себе предусматривает расширяемость. Документы созданные с помощью этих языков могут быть «корректными (well-formed)» и «допустимыми (valid)».
С проверкой документа на корректность проблем не возникает: если ошибок не выскочило и всё отобразилось так, как мы хотели, то документ корректен. Например, если в HTML-документе написать что-то вроде «
Допустимость проверяется с помощью определения типа документа (DTD, document type definition). Например, для «строгого» HTML он выглядит так .
DTD может быть описан как внутри документа, так и вынесен в отдельный файл (аналогия с CSS: встроенные и подключаемые таблицы стилей).
Объявление DTD
Объявление DTD располагается перед первым (корневым) элементом документа, начинается с последовательности « ».
Внутреннее DTD описывается так:
Между квадратными скобками располагается содержимое DTD, так называемое внутреннее подмножество , например:
] >
Если DTD вынесено в отдельный файл (обычно имеющий расширение.dtd), то его объявление в документе записывается так:
Соответственно, в этом файле и прописываются все правила, так называемое внешнее подмножество .
Имя, указанное за словом « DOCTYPE » (в нашем случае « catalog »), должно соответствовать имени корневого элемента. То есть, XML-документ должен быть примерно таким:
Вместо ключевого слова « SYSTEM » может быть использовано слово « PUBLIC », указывающее, что DTD применяется для широкого использования:
Внутренние и внешние подмножества могут быть заданы одновременно (опять же, аналогия с CSS):
] >
Здесь, сначала зачитывается содержимое файла « catalog.dtd », а потом содержимое, указанное внутри квадратных скобок.
Элементы документа
Элементы объявляются в DTD с помощью ключевого слова « ELEMENT », после которого следует имя элемента и его содержимое заключенное в круглые скобки:
Если у элемента есть дочерние элементы, то это записывается так:
что соответствует документу:
Если у элемента несколько дочерних элементов, то они перечисляются через запятую и должны следовать строго в указанном порядке:
Приведённый выше пример читается следующим образом. Элемент « book » должен содержать только один элемент « title », за которым должен следовать только один элемент « author ». Сами элементы « title » и « author » никаких элементов не содержат, а могут содержать лишь какой-нибудь текст.
С помощью следующих специальных символов можно определять количественное присутствие элемента:
- Символ « * », следующий после элемента, означает, что элемент может присутствовать один или несколько раз, или не присутствовать вовсе(от нуля до + бесконечности)
- Символ « + », следующий после элемента, означает, что элемент может присутствовать один или несколько раз(от 1 до + бесконечности)
- Символ « ? », следующий после элемента, означает, что элемент может либо отсуствовать, либо присутствовать только один раз(0 или 1)
Если существует необходимость указать один из нескольких элементов (или title, или author — любой из них, но не оба), надо испольовать символ « | »:
Текст тоже равноправный участник игры. Ключевое слово « PCDATA » указывает на анализируемые символьные данные, поэтому любой текст содержащий символы разметки (« < », « > » и « & ») будет трактоваться как разметка. Совместное использование текста и элементов называется смешанным содержимым . При объявлении смешанного содержимого, « PCDATA » необходимо указывать первым:
Следующий фрагмент документа валиден вышеприведенному примеру:
Группы элементов заключаются в круглые скобки. Элемент « book » должен содержать либо текст, либо (один « title », один или неколько « author » и может быть один « pubyear » именно в таком порядке):
Данному примеру соответствует следующий фрагмент XML-документа:
Элемент может быть пустым. Такой элемент не может содержать не дочерних элементов ни текста (например, элемент « br » в HTML). Такой элемент задается с ключевым словом « EMPTY »:
Элемент также может быть объявлен с ключевым словом « ANY » означающее, что элемент может содержать и элементы, и текст, и все это вместе, и даже быть пустым.
Атрибуты элементов
Элементы в XML-документе могут иметь атрибуты, которые записываются в виде « имя = значение » в открывающем или пустом тегах. Общее объявление атрибутов конкретного элемента начинается с ключевого слова « ATTLIST », после которого следует имя данного элемента и объявления самих атрибутов:
Ключевое слово « REQUIRED » указывает на то, что атрибут обязателен. Ключевое слово « IMPLIED », наоборот, говорит, что атрибут необязателен.
У атрибутов могут быть перечисленны разрешенные значения:
Также может быть задано значение по-умолчанию:
pubyear CDATA #IMPLIED "2007">
Атрибут может быть и константой, то есть у него может быть только то значение, которое заявлено в объявлении атрибута. Делается это с помощью ключевого слова « FIXED »:
#FIXED "udvikler">
Тип атрибута « CDATA »позволяет использовать любые символы кроме « < », « > », « & », « " » и « " ». В случае использования, данные символы должны быть заменены на спецсимволы типа « < » и т.п. Внимание : в DTD ключевое слово « CDATA » имеет другое значение, чем раздел « CDATA » в XML-документе!
Помимо типа CDATA, атрибуты могут иметь следующие типы:
- NMTOKEN - может содержать только буквы, цифры, « . », « - », « _ » и « : »
- NMTOKENS - может содержать те же символы, что и « NMTOKEN », а также символы пробела, возврата каретки, перевода строки и табуляции
Еще один тип атрибута « ID » разрешает задавать те же значения, что и тип NMTOKEN, но начинаться значение должно либо с буквы, либо с « _ », либо с « : ». У любого элемента может быть только один атрибут с типом « ID ». Атрибут типа « ID » не может быть константой (объявляться как « FIXED »). Значение атрибута типа « ID » должно быть уникальным для всего XML-документа:
Атрибут элемента может быть ссылкой на атрибут типа « ID » другого элемента. Для этого он объявляется как атрибут типа « IDREF ». Если атрибут должен ссылаться на атрибут типа « ID » нескольких элементов, то испольуется ключевое слово « IDREFS »:
В XML-документе это будет выглядить так:
Объявление сущностей
Помимо элементов и их атрибутов, мы можем определить сущности , записываемые с помощью ключевого слова « ENTITY »:
В результате чего, на место имени сущности « name », будет подставлено ее значение, в нашем случае — « SuperMegaMaster ».
И для полноты нашего счастья, надо добавить, что атрибуты элементов могут иметь в качестве значения подобные сущности — сущности-атрибуты . Они тоже определяются с помощью ключевого слова « ENTITY », но имеют одно ограничение — они должны ссылаться на внешние неанализируемые сущности, определенные во внешнем подмножестве DTD:
] >
В вышеприведённом примере, объявлена сущность « list », которая ссылается на внешний документ « companyList.html ». Ключевое слово « NDATA », говорит о том, что внешний документ неявляется XML-документом. Далее, для элемента « user » объявляется атрибут « company », который является обязательным и имеет тип « ENTITY », то есть ссылается на какую-либо сущность. Поскольку в нашем пример задана только одна сущность (« list »), то именно она и только она может быть значением атрибута « company » в XML-документе:
Осталось только понять, что означает « parse » в строке объявления сущности « list »? Когда используются неанализируемые данные, то есть те, которые не анализируются синтаксическим анализатором XML, хорошо было бы дать информацию приложению (использующему данный XML-документ), каким образом обработать эту сущность, если все-таки потребуется. Для этого нужно использовать нотацию, задаваемую ключевым словом « NOTATION » и дополнить наш DTD следующим образом:
Слово « parse » в объявлении сущности лист указывает на то, каким образом можно проанализировать файл « companyList.html » — найти нотацию с именем « parse » и следовать ее указаниям. В нашем случае, приложение может открыть MS InternetExplorer и загрузить в него документ « companyList.html ».