2012-01-18 13 views
7

Este es mi esquema XSD existentes en foo.xsd, declara que sólo el tipo:cómo importar tipos XSD en el esquema raíz?

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" 
    targetNamespace="foo"> 
    <xs:complexType name="alpha"> 
    <!-- skipped --> 
    </xs:complexType> 
</xs:schema> 

Este es otro esquema, que declara el elemento:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" 
    targetNamespace="foo"> 
    <xs:import schemaLocation="foo.xsd" namespace="foo" /> 
    <xs:element name="RootElement" type="alpha"/> 
</xs:schema> 

Esto es lo que recibo de SAX analizador en Java:

"The namespace attribute 'foo' of an <import> element information 
item must not be the same as the targetNamespace of the schema it exists in." 

¿Qué estoy haciendo mal?

Respuesta

14

Cuando se especifican los atributos targetNamespace (tns) de los XSD implicados y son los mismos, solo se permite xsd: include (un atributo targetNamespace no puede tener cadena vacía como su valor).

Sin embargo, uno puede incluir un esquema (s1) sin un tns de un esquema (s2) que tenga un tns; el efecto neto es que los componentes s1 asumen el espacio de nombres del esquema s2. Este uso a menudo se conoce como composición camaleónica.

Una referencia en SO que describe la diferencia entre los dos, es here.

+0

¡Muchas gracias, esto es exactamente lo que estaba buscando! – yegor256

+0

¿Es "tns" lo mismo que "targetNamespace"? – Line

Cuestiones relacionadas