2009-08-26 16 views
23

Estoy tratando de escribir un esquema XML que validará esta pieza de xml:Habiendo tanto un atributo y una restricción en un elemento de esquema XML

<date isodate="2007-03-14">14 march 2007</date> 

El atributo isodate debe tener su tipo establecido en xs : la fecha y el contenido deben tener un máximo de 50 caracteres.

Me pregunto si es posible escribir la definición de esquema XML en un solo bloque, tal vez algo como esto:

<xs:element name="date" minOccurs="0" maxOccurs="1"> 
    <xs:complexType> 
    <xs:simpleContent> 
     <xs:restriction base="xs:string"> 
     <xs:minLength value="0"/> 
     <xs:maxLength value="50"/> 
     </xs:restriction> 
     <xs:attribute name="isodate" type="xs:date" use="required"/> 
    </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

El código anterior no funciona, y realmente no puedo entender por qué. Única solución que he encontrado es de romper la parte de restricción en un tipo separado, y vincular que de esta manera:

<xs:simpleType name="reviewDate"> 
    <xs:restriction base="xs:string"> 
     <xs:minLength value="0"/> 
     <xs:maxLength value="50"/> 
    </xs:restriction> 
</xs:simpleType> 

<xs:element name="date" minOccurs="0" maxOccurs="1"> 
    <xs:complexType> 
     <xs:simpleContent> 
      <xs:extension base="reviewDate"> 
       <xs:attribute name="isodate" type="xs:date" use="required"/> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

La pregunta que tengo es la forma de escribir la definición en un solo bloque para que el esquema es un poco más legible, y no hace referencia a los tipos en otras partes del esquema.

+0

@Alexander: para formatear correctamente sus secciones XML, resalte el XML y haga clic en el botón "código" (101 010) en la barra de herramientas. Eso te da los buenos resultados, usar el backtick solo ayuda con una sola palabra o una frase corta, no abarca bien varias líneas. –

Respuesta

15

No se puede combinar una restricción y una extensión en un bloque de XSD. La solución que tiene con el tipo simple "ReviewDate" es la mejor solución que conozco.

Marc

Cuestiones relacionadas