2009-04-18 9 views
53

C'è un modo per specificare che uno di 2 attributi è richiesto in XSD?XSD - è richiesto uno dei 2 attributi?

ad esempio, ho una definizione come questa.

Voglio essere in grado di definire che almeno uno di questi è richiesto. È possibile?

risposta

40

No, non penso che sia possibile farlo con gli attributi. È possibile racchiudere due < xs: elemento > in un < xs: scelta > - ma per gli attributi, non c'è un costrutto equivalente, temo.

Marc

9

Marc ha ragione ... Non si può avere xs: elementi attributo figlio all'interno di una xs: elemento padre scelta XSD.

La logica sembra essere che se due istanze di un elemento hanno un insieme di attributi mutuamente esclusivi, allora sono logicamente due elementi diversi.

Una soluzione per questo è stata presentata da Jeni Tennison here.

20

XSD 1.1 vi permetterà di fare questo usando afferma.

<xsd:element name="remove"> 
    <xsd:complexType>       
     <xsd:attribute name="ref" use="optional"/> 
     <xsd:attribute name="uri" use="optional"/> 
     <xsd:assert test="(@ref and not(@uri)) or (not(@ref) and @uri)"/>    
    </xsd:complexType> 
</xsd:element> 
+1

Bella soluzione, ma da quando è stato rilasciato nel 2012 (http://www.w3.org/TR/xmlschema11-1/), e sto usando .NET 4.0, (rilasciato nel 2010) è non supportato. È supportato in .NET 4.5? Classe di esempio: https://msdn.microsoft.com/en-us/library/swxzdhc0(v=vs.110).aspx –

0

L'esempio definisce un elemento denominato "persona" che deve contenere un elemento "dipendente" o un elemento "membro".

<xs:element name="person"> 
    <xs:complexType> 
    <xs:choice> 
     <xs:element name="employee" type="employee"/> 
     <xs:element name="member" type="member"/> 
    </xs:choice> 
    </xs:complexType> 
</xs:element> 
+0

Attenzione a fare riferimento alla tua fonte qui? http://www.w3schools.com/xml/el_choice.asp – Reisclef

Problemi correlati