XSD: xs:choice maxOccurs > 1

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • XSD: xs:choice maxOccurs > 1

    Hallo zusammen,

    folgendes XML ist zu validieren:

    Quellcode

    1. <root>
    2. <node1>...</node1>
    3. <node2>...</node2>
    4. <node3>...</node3>
    5. </root>


    wobei mindestens ein node(n)-element und höchstens 3 elemente vorhanden sein dürfen.
    Und jetzt kommts: Wenn ein node(n)-element vorhanden ist, darf es nur einmal vorkommen.

    Ich habe es so versucht:

    Quellcode

    1. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    2. <xs:element name="root" type="rootType"/>
    3. <xs:complexType name="rootType">
    4. <xs:choice minOccurs="1" maxOccurs="3">
    5. <xs:element name="node1" type="xs:string"/>
    6. <xs:element name="node2" type="xs:string"/>
    7. <xs:element name="node3" type="xs:string"/>
    8. </xs:choice>
    9. </xs:complexType>
    10. </xs:schema>


    Allerdings gelingt mir damit nicht die Häufigkeit eines node(n)-Elements (z.b. "node1") genau auf "1" festzusetzen.
    Jemand ne Idee wie man sowas bewerkstelligen könnte?

    Gruß Robson

    BTW: ein explizites Setzen von maxOccurs="1" auf die nodes bringt nichts da diesdem choice offensichtlich egal zu seien scheint.
  • Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    3. <xs:complexType name="root">
    4. <xs:sequence>
    5. <xs:element name="node1" minOccurs="0" maxOccurs="1" type="xs:string"/>
    6. <xs:element name="node2" minOccurs="0" maxOccurs="1" type="xs:string"/>
    7. <xs:element name="node3" minOccurs="0" maxOccurs="1" type="xs:string"/>
    8. </xs:sequence>
    9. </xs:complexType>
    10. <xs:element name="root" type="root" />
    11. </xs:schema>
    Alles anzeigen
    Helmut Hagemann
    Derjenige, der sagt: Das geht nicht, soll den nicht stören, der's gerade tut.
  • Hi
    Mach's mit unique.

    Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    3. <xs:complexType name="root">
    4. <xs:choice minOccurs="1" maxOccurs="3">
    5. <xs:element name="node1" type="xs:string"/>
    6. <xs:element name="node2" type="xs:string"/>
    7. <xs:element name="node3" type="xs:string"/>
    8. </xs:choice>
    9. </xs:complexType>
    10. <xs:element name="root" type="root">
    11. <xs:unique name="choiceID">
    12. <xs:selector xpath="."/>
    13. <xs:field xpath="node1"/>
    14. <xs:field xpath="node2"/>
    15. <xs:field xpath="node2"/>
    16. </xs:unique>
    17. </xs:element>
    18. </xs:schema>
    Alles anzeigen


    Grüße
    mvp