Уникальное исключение приписывания частиц, когда я использую <xsd: any> в <xsd: choice> - PullRequest
0 голосов
/ 11 августа 2011

Мне нужен либо элемент apps, либо другой элемент, определенный в некотором другом xsd (который я импортирую через <xsd:any>), или оба. Я использовал choice, но он выбрасывает исключение уникальной атрибуции частиц.

<xsd:sequence>
    <xsd:choice minOccurs="1" maxOccurs="unbounded">
        <xsd:element name="apps" />
        <xsd:any minOccurs="0" namespace="##local" />
    </xsd:choice>
</xsd:sequence>

Ответы [ 3 ]

0 голосов
/ 11 августа 2011

Уникальная атрибуция частиц помогает предотвратить неоднозначность - когда у вас есть элемент apps, определенный вместе с xsd: any, неоднозначно, связан ли элемент apps с определенным объявлением элемента ( xsd: element name = "apps" ) или с подстановочным знаком ( xsd: any ).

Ваш вопрос не дает достаточно подробностей для полного ответа - другие элементы, не относящиеся к "приложениям", полностью не определены?Например, это буквально какой-то элемент, или это «приложения» и другие четко определенные варианты?Если вы можете определить другие элементы, добавьте их в качестве указанных вариантов, в противном случае вы также можете использовать xsd: any без необходимости определять элемент "apps".

0 голосов
/ 11 августа 2011

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

0 голосов
/ 11 августа 2011

Это не сработает, потому что процессор XML не знает, где принадлежит элемент вашего приложения. xsd: элемент или xsd: любой. Это не может сделать прогноз. Выберите другое пространство имен.

...