XML einmaligkeit von Elementen mit Attributen feststellen

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

  • XML einmaligkeit von Elementen mit Attributen feststellen

    Hallo liebes Forum,

    ich habe folgendes Problem:
    Zu einem XML File sollte ich ein XSD schreiben, damit ich anschließend immer prüfen kann, ob alle folgenden XML Files immer noch dieser Form entsprechen.

    XML File (vereinfachte Struktur):

    Quellcode

    1. <values>
    2. <section1>...</section1>
    3. <section2>
    4. <a>..</a>
    5. <b>..</b>
    6. <b>..</b>
    7. <c>
    8. <d type="x">wert1</d>
    9. </c>
    10. <!-- darf nicht vorkommen -->
    11. <c>
    12. <d type="x">wertx</d>
    13. </c>
    14. <!-- bis hierher -->
    15. <c>
    16. <d type="y">wert2</d>
    17. </c>
    18. <!-- darf nicht vorkommen -->
    19. <c>
    20. <d type="y">werty</d>
    21. </c>
    22. <!-- bis hierher -->
    23. </values>
    Alles anzeigen


    also ich habe in meinem vorgegebenen XML Elemente mit Typen

    Quellcode

    1. <d type="y">wert2</d>
    diese Elemente dürfen auf jeden Fall maximal einmal vorkommen oder gar nicht. Könnte mir irgendjemand von euch helfen ?
    Ich habe es schon mit zwei verschiedenen unique Varianten versucht, hat aber leider nicht geklappt.

    bisheriger XSD Code (verkürzt):

    Quellcode

    1. <xs:complexType name="section2Type">
    2. <xs:sequence>
    3. <xs:choice maxOccurs="unbounded">
    4. <xs:element name="a" type="xs:string" />
    5. <xs:element maxOccurs="unbounded" name="b" type="bType" />
    6. <xs:element maxOccurs="unbounded" name="c" type="cType" >
    7. <!-- 1. Variante -->
    8. <xs:unique name="shortcut-unique">
    9. <xs:selector xpath="c/d"/>
    10. <xs:field xpath="@type"/>
    11. </xs:unique>
    12. </xs:element>
    13. </xs:choice>
    14. </xs:sequence>
    15. </xs:complexType>
    16. <xs:complexType name="cType">
    17. <xs:sequence>
    18. <xs:element name="d">
    19. <xs:complexType>
    20. <xs:simpleContent>
    21. <xs:extension base="xs:string">
    22. <xs:attribute name="type" type="TypeEnum" use="required" />
    23. </xs:extension>
    24. </xs:simpleContent>
    25. </xs:complexType>
    26. <!-- 2. Vartiante -->
    27. <xs:unique name="unique-type">
    28. <xs:selector xpath="d"/>
    29. <xs:field xpath="@type"/>
    30. </xs:unique>
    31. </xs:element>
    32. </xs:sequence>
    33. </xs:complexType>
    Alles anzeigen


    Also wenn mir jemand helfen könnte, ich wäre wirklich sehr dankbar !

    lg,
    Hannes