Ejercicio 426
Consideremos el siguiente documento XML:
<documento>
<comentario>Texto comentario</comentario>
<principal>
Este <ref to="p1"/> <ref to="p4"/> escrito
por <autor>mi</autor>. Con
este <ref to="p2"/> se
ganará el premio nobel de <ref to="p4"/>
</principal>
<parte id="p1">texto</parte>
<parte id="p2"> <ref to="p1"/> complejo</parte>
<parte id="p3">far <ref to="p3"/></parte>
<parte id="p4">largo</parte>
</documento>
Elabora el fichero XSD que permita validarlo, teniendo en cuenta que:
- El elemento
principal
puede contener tanto texto como las etiquetasref
oautor
. - El atributo
id
del elementoparte
es un identificador. - El atributo
to
del elementoref
hace referencia a un identificador. - El elemento
parte
puede contener texto o elementos.
Solución
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="documento" type="tipoDocumento"/>
<xs:complexType name="tipoDocumento">
<xs:sequence>
<xs:element name="comentario" type="xs:string"/>
<xs:element name="principal" type="tipoPrincipal"/>
<xs:element name="parte" type="tipoParte" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="tipoPrincipal" mixed="true">
<xs:choice maxOccurs="unbounded">
<xs:element name="ref" type="tipoRef"/>
<xs:element name="autor" type="xs:string"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="tipoParte" mixed="true">
<xs:sequence>
<xs:element name="ref" type="tipoRef" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="id" type="xs:ID" use="required"/>
</xs:complexType>
<xs:complexType name="tipoRef">
<xs:attribute name="to" type="xs:IDREF" use="required"/>
</xs:complexType>
</xs:schema>