2008-12-18 13 views
117

Tengo dificultades para buscar esto. ¿Cómo voy a definir un elemento en un archivo de esquema XML para XML que tiene este aspecto:Esquema XML: Elemento con atributos que solo contienen texto?

<option value="test">sometext</option> 

no puedo encontrar la manera de definir un elemento que es de tipo xs:string y también tiene un atributo.

Esto es lo que tengo hasta ahora:

<xs:element name="option"> 
    <xs:complexType> 
     <xs:attribute name="value" type="xs:string" /> 
    </xs:complexType> 
</xs:element> 

Respuesta

147

Try

<xs:element name="option" type="AttrElement" /> 

    <xs:complexType name="AttrElement"> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
     <xs:attribute name="value" type="xs:string"> 
     </xs:attribute> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 
+0

estoy recibiendo la siguiente excepción en tratar su código - org.xml.sax.SAXParseException: src-determinación: ¿No r esolve el nombre 'AttrElement' a un (a) 'definición de tipo' componente. ¿Por qué es así? – Ashwin

+1

Si esto es así, es probable que sea debido a que su documento de esquema tiene un espacio de nombres de destino y que tendrá que utilizar un nombre prefijado para señalar el tipo. (Si el 'tns' prefijo se une a espacio de nombres del documento de esquema, que va a utilizar' type = "tns: AttrElement" 'para referirse al tipo.) –

+0

@Ashwin puede que tenga que hacer referencia al tipo con el espacio de nombres de tipo ('type = " tns: AtrElement"' si su nombre por defecto de la XSD es xs no targetNamespace del documento Normalmente, en ese caso 'tns' se define y utiliza – eckes

69

... o el equivalente en línea:

<xs:element name="option"> 
    <xs:complexType> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
     <xs:attribute name="value" type="xs:string" /> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 
+10

me parece muy poco intuitivo para definir' simpleContent' dentro de una. 'complexType' Pero, de nuevo es XSD, donde nada parece muy intuitiva, sin embargo :-) Gracias – flu

+0

Esto mostrará un error para mí en IntelliJ * * (* V12.1.3 *):..! El atributo de valor es "no permitido" . El uso de ** complexContent ** en lugar de ** simpleContent ** lo solucionó. – aZen

+0

@CrBruno mejor abrir una pregunta SO específica para esto. No dudes en vincularlo aquí en los comentarios (y apunta a esta discusión) – eckes

-3

Sé que no es lo mismo , pero funciona para mí:

<xsd:element name="option"> 
    <xsd:complexType mixed="true"> 
     <xsd:attribute name="value" use="optional" type="xsd:string"/> 
    </xsd:complexType> 
</xsd:element> 
Cuestiones relacionadas