<xs:element>
kann (unter xs:schema
auf der obersten Ebene deklariert werden) aber es kann minOccurs
oder maxOccurs
nicht haben, da das ohne Kontext keinen Sinn macht. Wenn es root ist, kann es nur ein Element haben, wenn nicht, beziehen sich Informationen auf den Kontext des übergeordneten Elements. Das ist legal:
<xs:schema ...>
<xs:element name="parameters">...</xs:element>
...
</xs:schema>
aber das ist nicht:
<xs:schema ...>
<xs:element name="parameters" maxOccurs="1" minOccurs="0">...</xs:element>
...
</xs:schema>
Sie auf eine Top-Level-xs:element
innerhalb einer Gruppe wie xs:sequence
verweisen. Hier können Sie diese Attribute verwenden, weil Sie jetzt einen Kontext haben (wie viele sind in dieser Gruppe erlaubt). Das ist legal:
<xs:schema ...>
<xs:element name="parent">
<xs:complexType>
<xs:sequence>
<xs:element ref="parameters" maxOccurs="1" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="parameters">
<xs:complexType>
<xs:all>
<xs:element ref="p" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:element>
...
</xs:schema>
Hier <parent>
der Kontext ist, wo <parameters>
auftritt, so kann man sagen, wie oft es dort erlaubt ist. Die Definition von <parameters>
ist global und Sie verwenden das Attribut ref
, um darauf Bezug zu nehmen.
Wenn Sie noch nie parameters
wiederzuverwenden müssen oder wenn Sie nie parameters
als root gehen zu müssen, brauchen Sie es nicht auf der obersten Ebene und kann in Ihrem parent
Definition Nest es. In diesem Fall können Sie das Attribut name
mit minOccurs
und maxOccurs
verwenden.
<xs:schema ...>
<xs:element name="parent">
<xs:complexType>
<xs:sequence>
<xs:element name="parameters" maxOccurs="1" minOccurs="0" />
<xs:complexType>
<xs:all>
<xs:element ref="p" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
...
</xs:schema>
Sie können auch auf der obersten Ebene beziehen Typ. Es ist üblicher, Typen wiederzuverwenden, zu erweitern und einzuschränken, so dass dies auch eine gültige (und empfohlene) Möglichkeit ist, um Ihr Element zu definieren:
<xs:schema ...>
<xs:element name="parent">
<xs:complexType>
<xs:sequence>
<xs:element name="parameters" type="ParameterType" maxOccurs="1" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="ParameterType">
<xs:all>
<xs:element ref="p" minOccurs="0"/>
</xs:all>
</xs:complexType>
...
</xs:schema>
Das ist nicht Ihr vollständiges Schema. Kontext ist wichtig mit 'minOccurs' und' maxOccurs'. Sie sind mit einer Gruppe verbunden. In welchem Kontext ist Ihr 'xs: element' definiert? Sie können 'top-level' Elemente deklarieren, aber sie können nicht maxOccurs oder minOccurs haben, da sie sich nicht in einem Kontext befinden. Bearbeiten Sie Ihre Frage und fügen Sie den vollständigen Kontext (aus dem Stamm Ihres Schemas) ein. – helderdarocha
Auch 'p?' Ist ungültig als der Wert von 'ref'. Wenn du * eins oder kein * meinst, kannst du ' ' (du kannst 'maxOccurs = "1" 'weglassen weil es Standard ist) –
helderdarocha
Die Sache, an die man sich erinnert, ist, dass jedes XML-Dokument "genau ein einzelnes Wurzelelement" haben kann. Deshalb können Sie im Grunde nicht Max- und Min-Werte für den Stamm angeben - es ist maximal + 1, also nicht erlaubt Sie können beliebige angeben. – rogerdpack