Могу ли я сделать текст элемента (complexType и mixed) обязательным через XSD и один атрибут обязательным на основе перечисления - PullRequest
2 голосов
/ 17 марта 2011

У меня есть этот XML

<button onclick="alert('submit')" replace="append" forid="loginbutton" id="btnLogin" >Click Me</button>

И у меня есть этот XSD

  <xs:element name="button" >
    <xs:complexType mixed="true">
                <xs:attribute name="forid" use="required" type="xs:string" />
                <xs:attribute name="onclick" use="required" />
                <xs:attribute name="id" use="optional" />
                <xs:attribute name="replace" use="required">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="modify" />
                            <xs:enumeration value="append" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
    </xs:complexType>
  </xs:element>

Я хочу две вещи здесь

  1. Текст содержимого кнопки должен бытьобязательно во всех случаях
  2. Если значение атрибута replace равно 'append' , тогда атрибут id будет обязательным

Ответы [ 2 ]

3 голосов
/ 17 марта 2011

Если вы сделаете это сложным типом с простым содержимым, вы можете ограничить допустимые значения текста, используя перечисление xs:.Если вы сделаете его сложным типом со смешанным содержимым, вы не сможете ограничить то, что идет в тексте.Мне кажется, что вы хотите простой контент, а не смешанный контент (нет дочерних элементов).

Вы не можете определить ко-ограничение (значения одной вещи, зависящие от значений другой), используя XSD1.0 - для этого вам нужен XSD 1.1.Поддержка XSD 1.1 в настоящее время доступна только в Saxon и Xerces.

1 голос
/ 18 марта 2011

Мне удалось как-то это сделать. Я совершенно не понял этого, в основном я просто проб и ошибок. Если кто-то может объяснить, что это значит, я буду благодарен.

<xs:element name="button">
    <xs:complexType>
        <xs:simpleContent>
            <xs:restriction base="xs:anyType">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="1" />

                    </xs:restriction>
                </xs:simpleType>
                <xs:attribute name="forid" use="required" type="xs:string" />
                <xs:attribute name="onclick" />
                <xs:attribute name="id" use="optional" />
                <xs:attribute name="type" use="required" />
                <xs:attribute name="replace" use="required">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="modify" />
                            <xs:enumeration value="append" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>

            </xs:restriction>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>
...