XML Схемы XML документов
XML Schema созданая Microsoft позволяет избавиться от DTD блоков. Основа – использование пространств имен и очень точная типизация содержимого элементов документов. <PGROUP> МАКБЕТ МАКБЕТ Высший командный состав королевской армии Высший командный состав королевской армии </PGROUP> Теперь DTD блок: Теперь DTD блок: <!DOCTYPE PGROUP [ ]> Это было раньше. А теперь рассмотрим пример с XML Schema <Schema name=“schema_sample_1” xmlns=“urn:schemas-microsoft-com:xml-data”xmlns:dt=“urn:schemas-microsoft-com:datatypes”>
</Schema> Так как это документ XML, то первая строчка понятна. Затем открывающийся тэг Schema. При этом указывается атрибут name. Затем задается пространство имен. Затем указываем тип интересующих нас элементов. После указываем их возможное количество. После закрываем схему. Когда мы объявляем схему документа при помощи тэгов Schema необходимо придерживаться следующего порядка декларирования всех элементов: {type definitions} {attribute declarations} {element declarations} {attribute group definitions} {model group definitions} {notation declarations} {annotations}
Раньше мы могли импортировать DTD блоки сделанные другими людьми. Похожее есть и здесь в технологии XML Schema. Здесь совокупности элементов и типов данных могут быть собраны в единые блоки, получившие название пространств имен. <xs:complexType> </xs:element> В данном примере префикс xs означает внешнее описание конструкции. Разумеется, перед тем, как применять некое пространство имен, необходимо связать его с нашим документом. Для этого добавляем: xmlns:fo=“
<element abstract = boolean : false block = (#all|List of (substitution|extension|restriction)) default = string final = (#all| List of (extension|restriction)) fixed = string form = (qualified|unqualified) id = ID maxOccurs = (nonNegativeInteger| unbounded):1 minOccurs = nonNegativeInteger : 1 name = NCName nullable = boolean:false ref = QName substitutionGroup = QName type = QName > Content: (annotation?,((simpleType|complexType)?,(key|keyref|unique)*)) </element>
Каждый элемент может иметь несколько атрибутов. Атрибут описывается так: <attribute form = (qualified|unqualified) id = ID name = NCName ref = QName type = QName use = (prohibited|optional|required|default|fixed): optional value = string > Content: (annotation?, (simpleType?)) </attribute> Мы можем создавить так называемые комплексные типы, которые могут объединять несколько атомарных типов
<complexType abstract = boolean:false block = (#all| List of (extension|restriction)) final = (#all| List of (extension|restriction)) id = ID mixed = boolean:false name = NCName > Content: (annotation?, (simpleContent | complexContent | ((group|all|choice| sequence)?, ((attribute|attributeGroup)*,anyAttribute?)))) </complexType> Конструкция с наименованием simpleContent позволяет объявлять комплексный тип на основе ограничений или расширений существующих типов: <simpleContent id = ID > Content:(annotation?,(restriction|extension))</simpleContent>