Я пытаюсь проверить XML-схему (называемую «схемой») по отношению к другой XML-схеме (называемой «schema_of_schema»). «Схема» соответствует http://www.w3.org/2001/XMLSchema, но имеет дополнительные ограничения.
Справочная информация: «схема» служит входом для генератора кода, но генератор кода не понимает всех возможностей http://www.w3.org/2001/XMLSchema, а скорее понимает только очень ограничительную структуру «схемы». Таким образом, я хочу убедиться, что «схема» соответствует этой ограничительной структуре, прежде чем вводить ее в генератор.
Пример:
schema_for_schema.xsd:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="xs:schema">
<xs:complexType>
<xs:sequence>
<xs:element name="xs:element" use="required" fixed="data">
<xs:complexType>
<xs:sequence>
<xs:element name="xs:complexType">
<xs:complexType>
<xs:sequence>
<xs:element name="xs:sequence">
<xs:complexType>
<xs:sequence>
<xs:element name="xs:element" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="xs:complexType">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="xs:attribute">
<xs:complexType>
<xs:attribute name="name" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="xmlns:xs" use="required" fixed="http://www.w3.org/2001/XMLSchema"/>
</xs:complexType>
</xs:element>
</xs:schema>
возможная "схема" (которая должна проверяться по schema_for_schema.xsd): schema_a.xsd
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="data">
<xs:complexType>
<xs:sequence>
<xs:element name="a">
<xs:complexType>
<xs:attribute name="value"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
другая возможная «схема» (которая также должна проверяться по schema_for_schema.xsd): schema_b.xsd (обратите внимание на отличие от schema_a.xsd: данные / a по сравнению с данными / b)
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="data">
<xs:complexType>
<xs:sequence>
<xs:element name="b">
<xs:complexType>
<xs:attribute name="value"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XML-файл, который проверяет соответствие schema_a.xsd: data_a.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<a value="1"/>
</data>
и XML-файл, который проверяет соответствие schema_b.xsd: data_b.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<b value="2"/>
</data>
XML-файлы data_a.xml / data_b.xml корректно проверяют соответствие schema_a.xsd / schema_b.xsd. Но когда я пытаюсь проверить schema_a.xsd / schema_b.xsd по сравнению с schema_for_schema.xsd (используя xmllint), я получаю следующую ошибку:
attribute 'name': 'xs:schema' is not a valid value of the atomic type 'xs:NCName'
Как мне справиться с двоеточиями в именах элементов "схемы"?