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