Возьмите пример
<root>
<parent>
<child_one>Y</child_one>
<child_two>12</child_two>
</parent>
</root>
и создайте xsd для этого:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="parent">
<xs:complexType>
<xs:sequence>
<xs:element name="child_one" type="xs:string" />
<xs:element name="child_two" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Что невозможно с XSD: хотел бы написать это первым, так как список очень маленький
1) Вы не можете проверить узел / атрибут, используя значение другого узла / атрибута.
2) Это ограничение: Элемент, определенный в файле XSD, должен быть определен только с одним типом данных. [в приведенном выше примере для <child_two>
, появляющегося в другом узле <parent>
, тип данных не может быть определен, кроме int.
3) Нельзя игнорировать проверку элементов и атрибутов, т. Е. Если элемент / атрибут появляется в XML, он должен быть четко определен в соответствующем XSD. Хотя использование <xsd:any>
позволяет, но у него есть свои правила. Пребывание, которое приводит к ошибке проверки. Я пробовал подобный подход, и определенно не увенчался успехом, вот вопросы и ответы
что возможно с XSD:
1) Вы можете проверить правильную иерархию узлов XML. [xsd определяет, какой дочерний элемент должен находиться под каким родителем и т. д., соблюдение которого будет считаться ошибкой, в вышеприведенном примере child_two не может быть непосредственным дочерним элементом для root, но это дочерний элемент тега «parent», который в свою очередь потомок "корневого" узла, есть иерархия ..]
2) Вы можете определить тип данных значений узлов. [в приведенном выше примере child_two не может иметь никаких данных, кроме числа]
3) Вы также можете определить пользовательские data_types, [например, для узла <month>
, возможные данные могут быть одним из 12 месяцев .. поэтому вам нужно определить все 12 месяцев в новом типе данных, записав все 12 названий месяцев в качестве значений перечисления .. проверка показывает ошибку, если входной XML содержит любое другое значение, кроме этих 12 значений.]
4) Вы можете наложить ограничение на вхождение элементов, используя minOccurs и maxOccurs, значения по умолчанию 1 и 1.
.. и многие другие ...