2012-01-18 2 views
7

これはただのタイプを宣言しfoo.xsdの私の既存のXSDスキーマ、次のとおりです。XSDタイプをルートスキーマにインポートする方法は?

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

これは、要素を宣言して別のスキーマ、次のとおりです。

<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> 

これは私がSAXから取得していますものです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." 

私は間違っていますか?

答えて

14

関連するXSDのtargetNamespace(tns)属性が指定されていて同じ場合、xsd:includeのみが許可されます(targetNamespace属性は値として空の文字列を持つことはできません)。

ただし、tnsを持つスキーマ(s2)のtnsがないスキーマ(s1)を含めることができます。正味の効果は、s1コンポーネントがs2スキーマの名前空間を想定していることです。この使用法は、しばしばカメレオン構成と呼ばれる。

この2つの違いを説明するSOはhereです。

+0

ありがとう、これは私が探していたものです! – yegor256

+0

"tns"は "targetNamespace"と同じですか? – Line

関連する問題