2009-05-01 20 views
6

me gustaría la posibilidad de tener un nivel arbitrario de los niños de anidación del mismo elemento padre, por ejemplo:¿cómo hago que un elemento sea un niño en sí mismo en XML Schema?

<path expr="/"> 
    <path expr="usr"> 
    <path expr="bin"> 
     <path expr="X11" /> 
    </path> 
    </path> 
    <path expr="var" /> 
</path> 

estoy escribiendo el archivo de esquema XML, y yo estoy en una pérdida en cuanto a cómo para representar esta relación padre/hijo en el esquema: esto es lo que tengo, pero no es una definición de esquema válido:

  <xs:element name="path"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element ref="path" minOccurs="0" /> 
       </xs:sequence> 
       <xs:attribute name="expr" type="xs:string" use="required" /> 
      </xs:complexType> 
      </xs:element> 

actualización: Gracias por la respuesta. Intenté eso y recibo el siguiente error: El elemento 'w3.org/2001/XMLSchema:complexType' no es compatible en este contexto. Debo mencionar que la jerarquía camino que he descrito es en sí mismo un hijo de un elemento llamado aplicación, por lo que toda la estructura se parece a esto:

<application name="test"> 
    <path expr="/"> 
    <path expr="usr"> 
     <path expr="bin"> 
     <path expr="X11" /> 
     </path> 
    </path> 
    <path expr="var" /> 
    </path> 
</application> 

Respuesta

5

El siguiente debe hacer el truco. El estándar XSD es bastante difícil de trabajar directamente, siempre uso un editor como Liquid XML Studio.

<?xml version="1.0" encoding="utf-8" ?> 
<!--Created with Liquid XML Studio - Developer Pro Edition 7.1.1.1206 (http://www.liquid-technologies.com)--> 
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Path" type="PathType" /> 
    <xs:complexType name="PathType"> 
    <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="unbounded" name="Path" type="PathType" /> 
    </xs:sequence> 
    <xs:attribute name="expr" type="xs:string" use="required" /> 
    </xs:complexType> 
</xs:schema> 

alt text http://www.liquid-technologies.com/images/blogs/stackoverflow/PathExample.png

El XSD es válido. Para el nuevo XML que describió, necesitaría cambiarlo para que se vea así.

<?xml version="1.0" encoding="utf-8" ?> 
<!--Created with Liquid XML Studio - Developer Pro Edition 7.1.0.1135 (http://www.liquid-technologies.com)--> 
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Application"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="path" type="PathType" /> 
     </xs:sequence> 
     <xs:attribute name="name" type="xs:string" /> 
    </xs:complexType> 
    </xs:element> 
    <xs:complexType name="PathType"> 
    <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="unbounded" name="path" type="PathType" /> 
    </xs:sequence> 
    <xs:attribute name="expr" type="xs:string" use="required" /> 
    </xs:complexType> 
</xs:schema> 
+0

Gracias por la respuesta. Intenté eso y recibo el siguiente error: El elemento 'http://www.w3.org/2001/XMLSchema:complexType' no es compatible en este contexto. \t Debo mencionar que la jerarquía camino que he descrito es en sí mismo un hijo de un elemento llamado aplicación, por lo que toda la estructura se parece a esto:

+0

@Nick Davis: es mejor agregar aclaraciones como esta a la pregunta en sí (siempre puedes editarla). En un comentario, no tiene formato, y los detalles potencialmente importantes están fuera de la vista. – Tomalak

+0

Gracias por el consejo: edité la pregunta original con mi comentario. –

0

Personalmente prefiero RelaxNG sobre XML Schema. Puede valer la pena su tiempo para probarlo.

+0

¿Por qué? ¿Puedes edificar? – ChrisFletcher

Cuestiones relacionadas