Разрешить только один корневой элемент XML при использовании двух схем - PullRequest
0 голосов
/ 06 января 2012

У меня есть 2 схемы.
Во-первых:

<?xml version="1.0" encoding="utf-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="ns1"
        elementFormDefault="qualified"> 

<element name="A" type="string"/>

</schema>

Второе:

<?xml version="1.0" encoding="utf-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="ns2"
        xmlns:ns1="ns1"
        elementFormDefault="qualified"> 

<element name="B">
    <complexType>
        <sequence>
            <element ref="ns1:A"/>
        </sequence>
    </complexType>
</element>

</schema>

Так, в экземпляре xml я могу использовать 2 корневых элемента.
Пример 1:

<?xml version="1.0" encoding="utf-8" ?>
<A xmlns="ns1">sdfdfd</A>

Пример 2:

<?xml version="1.0" encoding="utf-8" ?>
<B xmlns="ns2"><A xmlns="ns1">sdfdfd</A></B>

Как разрешить только пример 2?

1 Ответ

1 голос
/ 06 января 2012

Это зависит от API вашего валидатора схемы.

В общем случае, если элемент является допустимым для схемы, то каждый дочерний элемент этого элемента также допустим: поэтому, если ваш второй экземпляр действителен, ваш первый тоже будет, поскольку XSD проверяет элементы, а не документы.

Однако средство проверки схемы может позволить вам указать корневой узел для проверки.Например, если вы используете Saxon в качестве средства проверки схемы, то из командной строки вы можете указать

-top: {ns2} B

См. http://www.saxonica.com/documentation/schema-processing/commandline.xml

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