我正在试验< 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>
事实上xmlint在解析xsd文件的过程中会抱怨,甚至在到达xml文件之前:
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中阐明的约束:
一个警告是全局声明不能包含引用。全局声明必须直接识别简单和复杂类型。