Necesito especificar un XSD para validar documentos XML. El XSD se usará para una generación JAXB de enlaces Java. Mi problema es especificar elementos opcionales de los que no conozco los nombres y que, en general, no estoy interesado en analizar.Creando un XSD válido que está abierto usando <all> y <any> elementos
La estructura de los documentos XML es como:
<TRADE>
<TIME>12:12</TIME>
<MJELLO>12345</MJELLO>
<OPTIONAL>12:12</OPTIONAL>
<DATE>25-10-2011</DATE>
<HELLO>hello should be ignored</HELLO>
</TRADE>
Lo importante es, que:
- no puedo asumir cualquier orden, y la instancia de documento siguiente XML migtht tener etiquetas en un orden diferente
- Solo estoy interesado en analizar algunas de las etiquetas, algunas son obligatorias y otras son opcionales
- El documento XML NTS se pueden ampliar con nuevos elementos que no estoy interesado en el análisis
La estructura de mi XSD es como (no es un xsd válida):
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- *********************************************** -->
<!-- Trade element definitions for the XML Documents -->
<!-- *********************************************** -->
<xs:complexType name="Trade">
<!-- Using the all construction ensures that the order does not matter -->
<xs:all>
<xs:element name="DATE" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="TIME" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="OPTIONAL" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:any minOccurs="0"/>
</xs:all>
</xs:complexType>
<!-- TRADE is the mandatory top-level tag -->
<xs:element name="TRADE" type="Trade"/>
</xs:schema>
Por lo tanto, en este ejemplo : DATE y TIME son obligatorios (deben estar en el XML exactamente una vez), OPTIONAL podría estar presente una vez y luego me gustaría especificar que todas las demás etiquetas están permitidas. El orden no importa.
¿Cómo especifico un XSD válido para esto?
tuve un suspecion que este era el caso :-( La cosa extra que no escribió es, que yo sepa que los elementos serán máx aparecer una vez –
Terminé teniendo un paso XSLT antes del paso de análisis. Esto funciona a la perfección, primero filtrando todas las etiquetas que no me interesan y luego validando de acuerdo con un xsd "delgado" que solo contiene elementos en los que estoy interesado. –
What si sé que 'lo que sea 'nunca será una' fecha 'o' hora '? Entonces no habrá ninguna ambigüedad. –