1

< xsd:element > でref属性を試していますが、次の結果が得られません。

一方、 ref属性を持つ< xsd:element > は、次のように非グローバル スコープ (つまり、< schema > の直下ではない) で定義できます。

ref1.xsd

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.dummy-example.com"
xmlns:foo="http://www.dummy-example.com">


<xs:element name="a" type ="xs:string"/>

<xs:element name="b">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="foo:a"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

たとえば、次はxmllintで検証します。

ref1.xml

<?xml version="1.0"?>
<foo:b xmlns:foo="http://www.dummy-example.com">
    <foo:a>whatever ...</foo:a>
</foo:b>

ただし、参照要素を直接グローバル レベルにすることはできません。たとえば、次のとおりです。

ref2.xsd

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.dummy-example.com"
xmlns:foo="http://www.dummy-example.com">
    <xs:element name="a" type ="xs:string"/>
    <xs:element ref="foo:a"/>
</xs:schema>

以下のref2.xmlは検証されません。

ref2.xml

<?xml version="1.0"?>
<foo:a xmlns:foo="http://www.dummy-example.com">
    whatever
 </foo:a>   

実際、 xmlファイルに到達する前であっても、 xsdファイルの解析中にxmlintは文句を言います。

ref2.xsd:6: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The attribute 'name' is required but missing.

アップデート

受け入れられた回答に続いて、 XML Schema Primerで説明されている制約を見つけました。

1 つの注意点は、グローバル宣言に参照を含めることはできないということです。グローバル宣言は、単純型と複合型を直接識別する必要があります。

4

1 に答える 1