<xs:element>
possono essere dichiarate al primo livello (di seguito xs:schema
) ma non può avere minOccurs
o maxOccurs
poiché ciò non ha alcun senso senza un contesto. Se è root, può avere solo un elemento, se non lo è, quell'informazione si riferisce al contesto dell'elemento genitore. Questo è legale:
<xs:schema ...>
<xs:element name="parameters">...</xs:element>
...
</xs:schema>
ma non è questo:
<xs:schema ...>
<xs:element name="parameters" maxOccurs="1" minOccurs="0">...</xs:element>
...
</xs:schema>
Puoi riferimento ad un livello superiore xs:element
all'interno di un gruppo, come xs:sequence
. Qui puoi can utilizzare questi attributi perché ora hai un contesto (quanti sono permessi in questo gruppo). Questo è legale:
<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>
Qui <parent>
è il contesto in cui si verifica <parameters>
, in modo da poter dire quante volte è permesso in là. La definizione di <parameters>
è globale e si utilizza l'attributo ref
per fare riferimento ad esso.
Se non avete mai bisogno di riutilizzare parameters
o se si sta andando mai avere parameters
come root, non è necessario che al primo livello e può nido all'interno della vostra parent
definizione. In questo caso è possibile utilizzare l'attributo name
con minOccurs
e maxOccurs
.
<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>
Si può anche fare riferimento a un livello superiore tipo. È più comune riutilizzare, estendere e limitare i tipi, quindi questo è anche un modo valido (e consigliato) per definire il tuo elemento:
<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>
Questo non è il tuo schema completo. Il contesto è importante con 'minOccurs' e' maxOccurs'. Sono legati a un gruppo. In quale contesto è definito il tuo 'xs: element'? Puoi dichiarare gli elementi 'top-level', ma non possono avere maxOccurs o minOccurs poiché non si trovano in un contesto. Modifica la tua domanda e incolla il contesto completo (dalla radice dello schema). – helderdarocha
Anche 'p?' Non è valido come valore di 'ref'. Se intendi * uno o nessuno * puoi usare ' ' (puoi omettere 'maxOccurs =" 1 "' perché è predefinito) –
helderdarocha
La cosa da ricordare qui è che ogni documento XML può avere "esattamente un singolo elemento root", ecco perché non puoi sostanzialmente specificare i valori max e min per la root - è implicito max + max di 1, quindi non consente nemmeno tu per specificare qualsiasi. – rogerdpack