Chase N.Проверка правильности XML

Схемы XML


DTD выполняют свою задачу, но существуют и серьезные ограничения.

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

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

XML-документ:

<?xml version="1.0"?> <memories xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation=="'memory.xsd"> <memory tapeid="23412"> <subdate>5/23/2001</subdate> <donor>John Baker</donor> <subject>Fishing off Pier 60</subject> </memory> <memory tapeid="23692"> <subdate>8/01/2001</subdate> <donor>Elizabeth Davison</donor> <subject>Beach volleyball</subject> </memory> </memories>

Схема XML:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="memories"> <xsd:complexType> <xsd:sequence> <xsd:element name="memory" type="memoryType"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="memoryType"> <xsd:sequence> <xsd:element name="subdate" type="xsd:date"/> <xsd:element name="donor" type="xsd:string"/> <xsd:element name="subject" type="xsd:string"/> <xsd:attribute name="tapeid" type="idNumber" /> </xsd:sequence> </xsd:complexType> </xsd:schema>

Заметьте, что в этом случае синтаксис определения схемы отличается от синтаксиса DTD. Синтаксис определений схем предполагает, что их можно интерпретировать как XML-документы с определенной схемой, используя пространства имен XML вместо DOCTYPE.



Содержание раздела