2011-07-12 20 views
5

Deseo generar documentación para esquemas XML.Convertir XSD en estructura de árbol con Java

Mi objetivo es analizar el archivo xsd y mostrarlo como una estructura de árbol (con todos los tipos complejos/anónimos resueltos). Además, debo anotar todos los elementos en ese árbol con su cardinalidad (como se define en el esquema).

El siguiente pequeño ejemplo podría ayudar a aclarar mi problema.

a) el archivo xsd:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="client" type="clientType" /> 
    <xs:complexType name="clientType"> 
     <xs:sequence minOccurs="1" maxOccurs="1"> 
      <xs:element name="first_name"/> 
      <xs:element name="last_name"/> 
      <xs:element name="address" type="addressType" 
         minOccurs="1" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:complexType name="addressType"> 
     <xs:sequence> 
      <xs:element name="street"/> 
      <xs:element name="number" minOccurs="0" maxOccurs="1"/> 
      <xs:element name="city"/> 
      <xs:element name="zipcode"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

b) de salida que me gustaría ver:

client [1] 
    first_name [1] 
    last_name [1] 
    address [1..n] 
    street [1] 
    number [0..1] 
    city [1] 
    zipcode [1] 

¿Alguien sabe una solución basada en Java para este problema? Preferiblemente basado en Eclipse Schema Infoset, pero me complace usar otras bibliotecas también.

Respuesta

0

Dado que el esquema XSD también es XML, puede procesar esto como XML, lo que le brinda muchas opciones de cómo hacerlo.

Mi preferencia sería usar una hoja de estilo XSLT con plantillas para unir el elemento y elementos de tipo complejo para obtener la lista de salida, y otras plantillas para que coincidan con los atributos minOccurs y maxOccurs para obtener su cardinalidad.

Ejemplos de hojas de estilos para hacer esto probablemente ya estén disponibles en línea.

+0

¿Cómo puedo resolver los contenidos de los tipos anónimos/complejos usando XSLT? ¿Tienes algún ejemplo para esto? –

1

XSOM puede normalizar un XSD en una estructura de datos comprensible que puede recorrer e imprimir.

0

Aunque no tenga una solución adecuada, propondría lo siguiente: utilice una herramienta que sea capaz de generar una instancia XML de muestra basada en el XSD, p. Eclipse IDE (como es de código abierto, debería ser posible extraer el código relevante y usarlo en una solución independiente). Este XML debe estar muy cerca de la estructura de árbol que está requiriendo. Luego, analice el XSD y anote los elementos en la estructura XML generada con las cardinalidades.