Tak, zdecydowanie można, używając xsi: type (co prawdopodobnie nie jest tym, czego potrzebujesz!). Np. Z XSD poniżej;
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xs:element name="data">
<xs:complexType>
<xs:choice>
<xs:element ref="elemParent" minOccurs="1" maxOccurs="unbounded"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="elemParent" type="ctBase"></xs:element>
<xs:complexType name="ctNoAttChildReq">
<xs:complexContent>
<xs:extension base="ctBase">
<xs:sequence>
<xs:element name="elemKid" type="xs:string"></xs:element>
<xs:element name="elemKidAdditional" type="xs:string" minOccurs="0"></xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ctAttNoChild">
<xs:complexContent>
<xs:extension base="ctBase">
<xs:attribute name="attReq" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ctBase" abstract="true">
<xs:sequence/>
</xs:complexType>
masz instancji, który albo atrybut lub jedno lub więcej dzieci, ale trzeba mieć XSI: Wprowadź instancji, które mogą lub nie mogą być show-korek.
<data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///C:/Xsds/StackOverflow_2070316_WIP.xsd">
<elemParent attReq="Yo!" xsi:type="ctAttNoChild"/>
<elemParent xsi:type="ctNoAttChildReq">
<elemKid>Adam</elemKid>
</elemParent>
<elemParent xsi:type="ctNoAttChildReq">
<elemKid>Eve</elemKid>
<elemKidAdditional>Sid</elemKidAdditional>
</elemParent>
Odpowiedzi takiego typu nie są zadowalające dla mnie. Jakie jest uzasadnienie twojego stwierdzenia? –
Schematy XML są bardzo podobne do twoich typów programowania OO. Można utworzyć typ złożony i można ograniczyć kolejność elementów typu elementu i atrybutu oraz ograniczenia dotyczące rodzaju wartości, które można przypisać. To wszystko Xsd może zrobić dla ciebie. To, czego chcesz, to coś w rodzaju ograniczenia, które obejmuje więcej niż jeden element/atrybut, co po prostu nie jest możliwe w przypadku xsd. musisz napisać swój własny kod, aby to potwierdzić. – affan
Też myślę, że to nie jest możliwe, i że powiedzenie tego jest całkiem dobrą odpowiedzią (jeśli jest poprawna) :-) –