Hola a todos:
Resulta que tengo un schema, "generico" que quiero que haga de "padre" para otros schemas. Este schema, llamemosle "Card" quiero que tenga un elemento "Abstracto", y luego, los schemas hijo, que lo implementen como quieran, de forma que unos documentos puedan ser
<Data>
<Nombre>David</Nombre>
</Data>
y otros asi
<Data>
<Ingrediente>Sal</Ingrediente>
</Data>
1º pregunta: ¿Como declaro este elemento?
simplemente asi?:
<xs:element name="Data" abstract="true"/>
o tengo que declarar un tipo para él:
<xs:element name="Data" type="GenericData" abstract="true"/>
<xs:complexType name="GenericData">
<xs:sequence>
<xs:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
2º pregunta: ¿Ahora los hijos, como indican que van a dar una implementacion de ese elemento?
asi?:
<xs:include schemaLocation="Card.xsd">
<!--include hace como si hubiera escrito el archivo entero-->
<xs:element name="PersonalData" substitutionGroup="GenericData">
<xs:complexType>
<xs:restriction base="GenericData">
<xs:sequence>
<xs:element ref="Nombre"/>
</xs:sequence>
</xs:restriction>
</xs:complexType>
</xs:element>
<xs:element name="Nombre" type="xs:string"/>
</xs:include>
</xs:schema>
o asi:
<xs:include schemaLocation="Card2.xsd">
<!--Es como si hubiera escrito el archivo entero-->
<xs:complexType name="PersonalData">
<xs:complexContent>
<extension base="Card:Data"/>
<xs:element name="Nombre" type="xs:string"/>
</xs:complexContent>
</xs:complexType>
<xs:element name="Data" type="PersonalData"/>
</xs:include>
</xs:schema>