2012-04-15 5 views
1

ich kann nicht herausfinden, was mit diesem Code falsch:sobald Attribut wie es mehr als ein Element

<xs:choice> 
    <xs:element name="tiles" type="tiles" minOccurs="1" maxOccurs="1"/> 
    <xs:element name="tiles" type="tiles-with-key" minOccurs="2" maxOccurs="unbounded"/> 
</xs:choice> 

Ich möchte so schnell ein key Attribut erfordern, da es mehr als ein tiles Element ist:

<!-- one element, no need for the "key" attribute --> 
<tiles> 
    ... 
</tiles> 

<!-- two elements, we need the "key" to differentiate them --> 
<tiles key="1"> 
    ... 
</tiles> 
<tiles key="2"> 
    ... 
</tiles> 

Was mache ich falsch?

Antwort

1

Es heißt Unique Particle Attribution (UPA), die im Grunde sagt der Parser muss wissen, wo es im Modell ist, ohne vorausschauen. In diesem Fall ist der Tag-Name zwischen den Optionen Ihrer Wahl derselbe, der Parser würde nicht wissen, welches Modell angewendet werden soll.

Ihre Frage ist im Grunde, die Verwendung des Attributs (erforderlich vs. optional) basierend auf einer externen Bedingung zu steuern, hier die Anzahl der Kacheln Element. Dies ist mit XSD 1.0 einfach nicht möglich. Schematron mit XSD 1.0 wäre eine Option; andere mögen XSD 1.1 vorschlagen, zu früh, um hier eine brauchbare Lösung zu finden, da die Unterstützung dafür eher gering ist.

+0

Sehr klare Erklärung. Danke vielmals! –

Verwandte Themen