Ограничение фиксированного атрибута так, что он может появляться только на одном элементе - PullRequest
1 голос
/ 07 ноября 2010

Я делаю свои первые шаги в земле XML-схемы, используя XSD, и пытаюсь выяснить, как добавить ограничение, чтобы атрибут (определенный с фиксированным значением) мог присутствовать только в одном элементе в неограниченный набор элементов.

Вот пример

<Object>
    <Element>Value1</Element>
    <Element>Value2</Element>
    <Element Default="true">Value3</Element>
    <Element>Value4</Element>
    <Element>Value5</Element>
</Object>

Я бы хотел ограничить атрибут Default так, чтобы он не мог появляться более чем на одном Element.

Вот схема XSD для вышеупомянутого:

<xs:element name="Object">
    <xs:complexType>
        <xs:element name="Element" maxOccurs="unbounded">
            <xs:simpleContent>
                <xs:extension base="xs:string">
                    <xs:attribute name="Default" fixed="true"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:element>
    </xs:complexType>
</xs:element>

Я пытался связываться с xs:unique, xs:selector и xs:field, но не достиг значимых результатов, не уверен, что это правильный подход.

Спасибо!

Ответы [ 2 ]

1 голос
/ 12 мая 2014

Старый вопрос, но посмотрите здесь: XSD Указание атрибута, который может использоваться только один раз в XML

Существует близкое решение (но не полное): определите атрибут какоднозначное логическое (только true), необязательное, без значения по умолчанию и уникальное.

(+) - Убедитесь, что существует только один Default = "true" - Убедитесь, что определен только один атрибут по умолчанию

(-) - не проверять, что определен хотя бы один атрибут по умолчанию

1 голос
/ 16 ноября 2010

Я старался изо всех сил, чтобы разработать один XSD для вас.Возможный способ выполнить требование - определить элемент element больше, чем один, но это не разрешено в XSD, что приводит к распространенной ошибке «попытка сделать XSD неоднозначной»

Требование, конечно, невозможно выполнить как есть.

Я хотел бы предложить определить разные имена Элементов.

example :: define DefElement с атрибутом и неограниченный Element s без атрибута.Это будет работать для вас.

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