2009-05-27 30 views
6

Hola, estoy tratando de concentrarme en XSDs, XML y espacios de nombres, pero no puedo hacer que las cosas funcionen como quiero.XSD con importaciones y espacios de nombres

Tengo un XSD, que, en este momento, comienza así:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns="http://www.example.com"> 
    <xs:import namespace="http://www.example.com" schemaLocation="Include.xsd" /> 

Como se puede ver, importa otro archivo xsd, que comienza así:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" 
      targetNamespace="http://www.example.com" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns="http://www.example.com"> 

Entonces tener algunos documentos XML en base a este esquema:

<foobar> 
    <whatever>.... 

Básicamente no me importa lo que los espacios de nombres son, yo ju Quiero que la maldita cosa funcione. Anteriormente no usaba ningún espacio de nombres, pero parece que tengo que usarlos para importar un XSD a otro. Lo que no quiero hacer es proporcionar prefijos a todos los elementos en mis documentos xml.

Para lograr esto, la combinación de los valores necesito para los diferentes atributos (targetNamespace, espacio de nombres, xmlns, elementFormDefault etc) en los documentos XSD y XML?

Actualmente, cualquier elemento definido en el documento XSD importado requiere la calificación del espacio de nombres en el XML.

+0

¿Su documento comienza realmente con meaninging que tiene un elemento 'xml' se define en uno de los esquemas, o qué se refiere el documento comienza con ? – Jherico

+0

Quise decir que la raíz era xml. Lo arreglé para evitar confusiones. – cbp

Respuesta

13

Si no está utilizando espacios de nombres o sus esquemas comparten los mismos espacios de nombres, que sería mucho mejor usar xs: incluir en lugar de xs: importación. El esquema A puede incluir el esquema B si B tiene el mismo espacio de nombres que A o no tiene espacio de nombres declarado (si este último es el caso, B 'adopta' el espacio de nombres del includer cuando se incluye). Entonces ... algo así como:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns="http://www.example.com"> 
    <xs:include schemaLocation="Include.xsd" /> 

<!-- ... --> 

</xs:schema> 
+0

ahhh cierto! Gracias – cbp

1

Creo que debe establecer su elementFormDefault en "no calificado" si desea evitar los prefijos en sus elementos XML. El resto debería estar bien, creo, el espacio de nombres es el mismo entre tu maestro y tu XSD importado. Está bien. Usted especifica el xmlns = sin un prefijo, eso está bien. Usted debe ser bueno para ir.

Marc

+0

Gracias, tienes razón, estaba más cerca de lo que pensaba. Sin embargo, estoy descubriendo que cuando creo mi documento XML, los elementos que están definidos en el XSD importado requieren que se especifique el espacio de nombre (aunque tanto el XSD importado como el XSD real tienen elementFormDefault establecido en 'no calificado'). – cbp

Cuestiones relacionadas