Sto cercando una variante di scelta di un attributo per un elemento, che può essere impostato direttamente o essere referenziato.Scelta degli attributi sull'istanza XML per attributi o riferimenti definiti direttamente
questo è quello che ho in mente:
<root>
<element>
<attribute ref="shortname" />
</element>
<element>
<attribute name="shortname" isEditable="true" anotherattrib="0815" />
</element>
</root>
Dal momento che questo non sarebbe problema senza uno schema XML, la definizione di questo attributo è abbastanza difficile se l'attributo "nome" di un attributo elemento è richiesto.
lo schema potrebbe essere il seguente
<xs:element name="attribute">
<xs:complexType>
<xs:attribute name="ref" use="required" />
<xs:attribute name="name" use="required" />
</xs:complexType>
</xs:element>
C'è la possibilità di fare una scelta (simile ad un xs: scelta per gli elementi) tra gli attributi? Come se ci fosse un attributo dall'attributo elemento denominato ref, non sono ammessi altri attributi. in caso contrario, l'attributo "nome" deve essere impostato ...
Questo problema sembra puro virtuale e accademico, ma sarei felice se ci fosse una soluzione o se ho completamente torto con quello che ho in mente:)
Grazie in anticipo per qualsiasi aiuto!
Dave
Penso che l'unico modo per esprimere ciò sarebbe: dichiarare un tipo complesso con contenuto completo, dichiarare due tipi di derivazione con restrizione, quando si dichiara che il contenuto principale utilizza una scelta. –
@ Alejandro: Nel modo in cui puoi dichiarare due tipi. Non è un problema, ma come è possibile definire una scelta con due elementi con ** lo stesso nome ** "" e tipo diverso? Non sono sicuro che sarà possibile. Mi sembra che tu riceva l'errore che la definizione dell'elemento "" sia ambigua. –
Oleg
@Oleg: la scelta è tra due elementi (ciascuno con un tipo derivato distinto) ma lo stesso nome, ** nella dichiarazione padre **, ad esempio: complexType denominato 'Base'; complexType denominato 'BaseA' derivato da' Base' con restrizioni; lo stesso per complexType chiamato 'BaseB'; element name 'Parent' con una scelta tra un elemento chiamato' Child' con 'BaseA' o un elemento chiamato' Child' con 'BaseB'. –