2010-06-21 23 views
5

Estoy intentando hacer un editor xml simple para algunas necesidades básicas pero específicas, lo que no estoy seguro de cómo manejarlo es que quiero poder tener una personalizada propia atributos (o algo) en el propio esquema xsd.Atributos personalizados en un esquema xsd

Algo como esto es lo que tenía en mente:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="Book"> 
     <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="Author" type="xsd:string" listable="1" /> 
      <xsd:element name="Pages" type="xsd:int" /> 
     </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

Donde quiero información acerca de si el elemento es 'susceptible de listarse' o no en el esquema (tenga en cuenta que el archivo .xml no tienen información o pista en cuanto a si el elemento es enumerable o no, el atributo enumerable es solo una forma de organizar los elementos en el editor).

No tiene que ser su propio atributo. Si hay un atributo de misc o algo con lo que puedo jugar, estaría bien. El problema es que el esquema anterior no valida (el atributo 'enumerable' no es compatible en este contexto.)

¿Hay alguna forma de almacenar este tipo de información en el esquema?

Parece que sería posible crear un nuevo espacio de nombres, pero no sé cómo se debe declarar ese espacio de nombres para que cualquier elemento pueda tener un atributo especial en el xsd (prefiero evitar jugar con el archivo xml para esto). ¿Y parece un poco excesivo crear un nuevo espacio de nombres solo para esto?

¿O estoy haciendo esto de la manera incorrecta?

Respuesta

5

Esta información debe ubicarse en su propio espacio de nombres. El mejor lugar para almacenarlo sería en una anotación sobre el atributo. Puede adjuntar una anotación a cualquier elemento del esquema y pueden contener elementos xsd: documentation, diseñados para documentación legible por humanos, y xsd: appinfo, designados para información procesable por máquina. Para que su ejemplo se vea así:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:foo="http://www.example.org/bar"> 
    <xsd:element name="Book"> 
     <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="Author" type="xsd:string" > 
     <xsd:annotation> 
      <xsd:appinfo> 
       <foo:listable value="true"/> 
      </xsd:appinfo> 
     </xsd:annotation> 
      </xsd:element> 
      <xsd:element name="Pages" type="xsd:int" /> 
     </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 
+0

¡Gracias! Parece ser exactamente lo que necesito. – Magnus

+0

@Aled G: ¿Qué debo hacer si quiero que un elemento en particular en el documento xml tenga un espacio de nombre particular? El resto de los elementos no contienen ninguna declaración de espacio de nombre. En este caso, ¿cómo debería escribir el esquema? – Ashwin

Cuestiones relacionadas