XML-Schemakonstrukt für "eines oder mehrere dieser Elemente, muss aber mindestens eins sein"
Ich versuche, ein Teil eines Schemas, die wie eine "Sequenz", wo alle Kind-Elemente sind optional, aber mindestens eines der Elemente muss vorhanden sein, und es könnte mehr als einer von Ihnen.
Ich versuchte dabei die folgenden, aber XMLSpy beschwert, dass "Das content model enthält die Elemente <element name="DateConstant"> und <element name="DateConstant">, die nicht eindeutig bestimmt.":
<xs:choice>
<xs:sequence>
<xs:element name="DateConstant"/>
<xs:element name="TimeConstant"/>
</xs:sequence>
<xs:element name="DateConstant"/>
<xs:element name="TimeConstant"/>
</xs:choice>
Kann das getan werden (und wenn ja, wie)?
Einige Klarstellungen:
Ich will nur, dass man jedes element mit dem gleichen Namen. Es kann ein "DateConstant" und/oder "TimeConstant", aber nicht zwei.
Gizmo ' s Antwort entspricht meinen Anforderungen, aber es ist unpraktisch für eine größere Anzahl von Elementen.
Hurst-Antwort ermöglicht, dass zwei oder mehr Elemente mit dem gleichen Namen, die ich nicht will.
InformationsquelleAutor der Frage Scott Leis | 2008-09-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
Tun, Sie zwingen, entweder zu wählen das erste element und dann der rest ist optional, entweder das zweite element und der rest ist optional, entweder das Dritte element.
Sollte dies tun, was Sie wollen, hoffe ich.
Natürlich könnte man den sub-Sequenzen in Gruppen, zu vermeiden, duplizieren Sie ein element in jeder Folge, wenn Sie erkennen, dass Sie eine vermissen.
InformationsquelleAutor der Antwort gizmo
Entsprechend der technischen Artikel auf der MSDN-Website mit dem Titel Verständnis XML-Schema
bei http://msdn.microsoft.com/en-us/library/aa468557.aspx#understandxsd_topic5
profitieren Sie von Einschränkungen wie minOccurs auf die Wahl-definition (compositor) selbst:
"Mit vorkommen Einschränkungen auf ein compositor gilt für die gesamte Gruppe als ganzes"
(Siehe komplexeren Beispiel verwendet verschachtelte komplexe Datentypen und den AuthorType Beispiel)
Erklärten Sie Ihre Forderung als "mindestens eines der Elemente muss vorhanden sein, und es könnte mehr als einer von Ihnen". Daher schlage ich vor, Sie versuchen, die folgenden:
InformationsquelleAutor der Antwort hurst
@hurst,
Leider haben Sie nicht verstanden, die ursprüngliche Frage. Platzieren minOccurs="1" auf der Wahl zufrieden ist, automatisch, wenn ALLE Elemente mit minOccurs="0" enthalten sind, als Optionen.
Somit haben Sie nicht berücksichtigt, für die mindestens ein" erforderlich, die durch das ursprüngliche Plakat, da keine Elemente korrekt erfüllt 1 occurrance von zwei völlig optionale Elemente.
Bisher bin ich nicht in der Lage, eine Lösung zu finden, um diese als minOccur/maxOccur beide beziehen sich auf die Gruppe, in der Sie definiert werden und beziehen sich NICHT auf eine Allgemeine Anzahl von Knoten. Noch können Sie die Auswahl element zu definieren, das gleiche element mehr als einmal oder es wird "mehrdeutig". Ich habe gesehen, wie einige Beispiele Referenzen verwenden, statt der Elemente von einem bestimmten Typ, aber ich glaube, das schlägt fehl, die microsoft XSD-parser.
Hier kannst du sehen, dass die erste Sequenz (die MÜSSEN Elem1 kann aber Elem2 Optional), oder Sie haben die zweite Folge (die MÜSSEN Elem2).
Daher haben Sie nun "eine oder mehrere" dieser 2 Elemente. Natürlich bekommt dieser exponentiell komplexer, desto mehr Optionen Sie haben, wie Sie benötigen, um zusätzliche Möglichkeiten für alle möglichen Kombinationen.
InformationsquelleAutor der Antwort Enigmatic