sirven - ¿Es posible usar esquemas XML internamente, al igual que las DTD?
xml schema y dtd (2)
En principio, puedes hacer:
<package>
<xs:schema id="XSD">
... schema goes here ...
</xs:schema>
<doc xsi:noNamespaceSchemaLocation="#XSD">
... instance goes here ...
</doc>
</package>
Pero (a) no hay garantía de que un procesador de esquema en particular sea compatible con esta forma de URI de ubicación, y (b) es difícil ver el punto.
Sé que ya terminaron las DTD, pero nunca entendí realmente:
(i) si desea validar un documento, seguramente desea saber en qué esquema es válido, en lugar de confiar en que defina el suyo propio. ¿De qué sirve saber que "este documento es válido contra algunos esquemas, pero no tengo idea de qué hay en ese esquema"?
(ii) ¿Cuándo alguna vez tuvo un esquema que describía solo un documento de instancia única? Los esquemas, por su naturaleza, definen clases de documentos, y esas clases rara vez son simples.
Tengo el siguiente archivo XML que incluye la validación DTD interna:
<?xml version="1.0"?>
<!DOCTYPE animals [
<!ELEMENT animals (animal)*>
<!ELEMENT animal (skin, noise, eyes, diet, class, weight, special_skill)>
<!ELEMENT skin (#PCDATA)>
<!ELEMENT noise (#PCDATA)>
<!ELEMENT eyes (#PCDATA)>
<!ELEMENT diet (#PCDATA)>
<!ELEMENT class (#PCDATA)>
<!ELEMENT weight (#PCDATA)>
<!ELEMENT special_skill (#PCDATA)>
<!ATTLIST animal name CDATA #REQUIRED >
<!ATTLIST weight unit CDATA "kg">
]>
<animals>
<animal name="cow">
<skin>
Straight fur
</skin>
<noise>
Moo!
</noise>
<eyes>
2
</eyes>
<diet>
Herbivore
</diet>
<class>
Mammalia
</class>
<weight unit="kg">
635-1134
</weight>
<special_skill>
Chewing
</special_skill>
</animal>
<animal name="sheep">
...
</animal>
</animals>
Estaba buscando cómo reemplazar la validación DTD con un XSD pero no pude encontrar ningún ejemplo. Parece que las XSD siempre deben definirse en un archivo separado y el XML debe hacer referencia a ellas. ¿Es cierto que XSD no se puede usar internamente?
No, aunque puede encontrar algún soporte de implementación ad hoc para incrustar un XSD dentro de una instancia de documento XML, no existe un mecanismo estándar para XSD que corresponda al subconjunto interno de DTD.