2008-09-29 13 views
45

Necesito crear un esquema XML que valide una estructura en árbol de un documento XML. No sé exactamente las ocurrencias o el nivel de profundidad del árbol.Recursividad en un esquema XML?

ejemplo XML:

<?xml version="1.0" encoding="utf-8"?> 
<node> 
    <attribute/> 
    <node> 
    <attribute/> 
    <node/>  
    </node> 
</node> 

¿Cuál es la mejor manera de validarla? Recursión?

Respuesta

65

si necesita una declaración de tipo recursivo, aquí es un ejemplo que podría ayudar:

<xs:schema id="XMLSchema1" 
    targetNamespace="http://tempuri.org/XMLSchema1.xsd" 
    elementFormDefault="qualified" 
    xmlns="http://tempuri.org/XMLSchema1.xsd" 
    xmlns:mstns="http://tempuri.org/XMLSchema1.xsd" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
> 
    <xs:element name="node" type="nodeType"></xs:element> 

    <xs:complexType name="nodeType">  
    <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
     <xs:element name="node" type="nodeType"></xs:element> 
    </xs:sequence> 
    </xs:complexType> 

</xs:schema> 

Como se puede ver, esto define un esquema recursiva con un solo nodo denominado "nodo", que puede ser tan profunda como se desee.

40

XSD sí permite la recursión de elementos. Aquí is a sample for you

<xsd:element name="section"> 
    <xsd:complexType> 
    <xsd:sequence> 
     <xsd:element ref="title"/> 
     <xsd:element ref="para" maxOccurs="unbounded"/> 
     <xsd:element ref="section" minOccurs="0" maxOccurs="unbounded"/> 
    </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

Como se puede ver el elemento de sección contiene un elemento secundario que es de sección tipo.

+8

+1 Creo que esta es una solución mejor que la aceptada, ya que permite que el elemento recursivo sea un ComplexType. –

+0

¡Gracias por el cumplido! –

+0

Esto es DTD, no Schema? – Harriv

Cuestiones relacionadas