проверить XML-схему по другой XML-схеме, которая является более строгой, чем http://www.w3.org/2001/XMLSchema - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь проверить 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'

Как мне справиться с двоеточиями в именах элементов "схемы"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...