PDA

View Full Version : [XSD] Campi obbligatori mutuamente esclusivi


gianni_peruzzi
05-11-2008, 10:25
Ciao ragazzi

devo definire uno xml-schema dove siano presenti due campi con obbligatorietà mutuamente esclusiva: ovvero in un doc xml deve essere presente esattamente uno dei due campi: o uno o l'altro.

Qualcuno riesce a illuminarmi?

grazie

SnakePlissken
15-11-2008, 13:30
Se per "campo" intendi un elemento, allora basta usare una choice:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" ...>

...
<xs:element name="padre">
<xs:complexType>
<xs:choice>
<xs:element name="figlio-1"></xs:element>
<xs:element name="figlio-2"></xs:element>
</xs:choice>
</xs:complexType>
</xs:element>

...


Se invece per "campo" intendi un attributo, allora si tratta di un problema che mi sono dannato a risolvere anche io, ma alla fine sembra che non ci sia soluzione a livello di XSD. Ossia che è un controllo che devi fare per forza a livello di codice applicativo (supponendo che stai sviluppando un'applicazione).

Alcuni dicono che questa è una scelta voluta, perché se devi definire attributi diversi per un certo elemento allora si tratta di due entità concettualmente diverse cosicché dovresti definirli in XSD come elementi diversi. Eppure (penso io) si consente in XSD che un certo elemento abbia elementi figli mutuamente escusivi.

Quest'impossibilità tra l'altro smentisce l'affermazione (che ho letto diverse volte) che si può descrivere XSD utilizzando XSD stesso. :mbe:
(Perché in XSD, ad esempio, gli attributi name e ref di un elemento sono mutuamente esclusivi.)


Se qualcuno sa come risolvere il problema, ci illumini! :muro: