Sí, definitivamente puedes, usando xsi: tipo (¡que probablemente no es lo que quieres!). Por ejemplo, con el xsd a continuación;
<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>
de obtener una instancia que tiene ya sea un atributo o una o más niños, pero hay que tener xsi: type en la instancia que puede o no puede ser un show-tapón.
<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>
Respuestas de este tipo no son satisfactorios para mí. ¿Cuál es el razonamiento detrás de su declaración? –
Los tipos de esquema XML son muy similares a los tipos de programación OO. Puede crear un tipo complejo y puede restringir el orden de los elementos tipo de elemento y atributo y la restricción sobre qué tipo de valores se pueden asignar. Eso es todo lo que xsd puede hacer por usted. Lo que quiere es algo de restricción que abarca más de un elemento/atributo que simplemente no es posible con xsd. tienes que escribir tu propio código para validar esto. – affan
También creo que no es posible, y que decir eso es una muy buena respuesta (si es correcta) :-) –