Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мультимедиа.docx
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
234 Кб
Скачать
☆

19. Сравнение dtd и xml Schema.

Недостатки XML DTD перед XML Schema

Отличный от XML синтаксис языка. То есть, DTD не является XML. В связи с этим могут возникать разнообразные проблемы с кодировкой и верификацией XML-документов.

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

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

Объявление элемента:

  • DTD: Набор компьютеров:

<!ELEMENT productList (computer)+ >

<!ELEMENT computer (hdd?, processor*, morherboard) >

<!ELEMENT hdd (#PCDATA) >

<!ELEMENT processor (#PCDATA) >

<!ELEMENT motherboard (#PCDATA) >

"+" - используется для определения одного или большего количества дочерних элементов, "*" - используется для определения нуля и большего количества дочерних элементов, "?" - используется для определения нуля или одного дочернего элемента (элемент обязателен или нет). В XSD это определяется числом вхождений дочерних элементов: minOccurs = «минимальное число», maxOccurs= «максимальное число».

  • XSD: Набор компьютеров:

<xsd:complexType name=”Computer”>

<xs:sequence minOccurs="1" maxOccurs="unbounded">

<xsd:element name=”HDD” type=”xs:string”/>

<xsd:element name=” Processor ” type=”xs:string”/>

<xsd:element name=”Motherboard” type=”xs:string”/>

</xsd:sequence>

<xsd:complexType>

XML Schema выразительнее DTD. При использовании XML Schema парсер с проверкой допустимости может удостовериться, что элемент InvoiceNo является положительным целым, а элемент ProductID состоит из одной буквы от A до Z, сопровождаемой шестью цифрами. В отличие от этого, прасер (программа, выполняющая синтаксический анализ) с проверкой допустимости документа, использующий DTD, может лишь проверить, что эти элементы представлены как строки.

Листинг 1: Фрагмент XML-документа

<InvoiceNo>123456789</InvoiceNo>

<ProductID>J123456</ProductID>

Листинг 2: Фрагмент DTD, описывающий элементы из Листинга 1

<!ELEMENT InvoiceNo (#PCDATA)>

<!ELEMENT ProductID (#PCDATA)>

Листинг 3: Фрагмент XML Schema, описывающий элементы из Листинга

<element name='InvoiceNo' type='positive-integer'/>

<element name='ProductID' type='ProductCode'/>

<simpleType name='ProductCode' base='string'>

<pattern value='[A-Z]{1}d{6}'/></simpleType>

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

XSD:

<attribute

default = string

fixed = string

form = (qualified | unqualified)

id = ID

name = NCName

ref = QName

type = QName

use = (optional | prohibited | required): optional

{any attributes with non-schema Namespace...}>

Content: (annotation?, (simpleType?))

</attribute>

DTD:

<!ATTLIST имя_элемента имя_атрибута тип_атрибута значение_по_умолчанию >

В DTD все типы атрибутов основаны на строковом типе данных.

Наиболее распространенные типы атрибута:

CDATA – символьные данные;

ID - уникальный идентификатор;

(value1|value2|value3) – перечисление возможных значений атрибутов, т.е. возможным значением атрибута будет одно из перечисляемых.

Например, можно определить атрибут "model" элемента "computer" так:

<!ATTLIST computer model CDATA>

(в XSD: <xs:attribute name=”model” type=”xs:string”/>)

Сравнение сложных типов данных в DTD и XML Schema.

XML-документ

<Book>

<Title>Cool XML<Title>

<Author>Cool Guy</Author>

</Book>

DTD

<!ELEMENT Book (Title, Author)>

<!ELEMENT Title (#PCDATA)>

<!ELEMENT Author (#PCDATA)>

XML Schema

<element name='Book' type='BookType'/>

<complexType name='BookType'>

<element name='Title' type='string'/>

<element name='Author' type='string'/>

</complexType>

Хотя код XML соответствует фрагментам и DTD и XML Schema, между ними есть большое различие. В DTD все элементы глобальные, тогда как XML Schema в этой таблице позволяет локальные элементы Title и Author в контексте элемента Book.

*Еще можно почитать тут: http://www.intuit.ru/department/internet/xml/5/