我担心您无法使用 XSD 1.0 实现这一目标。您只能将元素属性的值限制为key
在元素属性中存在<word>
一些值,例如以下模式。name
<model>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:complexType name="root_type">
<xs:sequence>
<xs:element name="model" type="model_type" maxOccurs="unbounded">
<xs:key name="name_key">
<xs:selector xpath="."/>
<xs:field xpath="@name"/>
</xs:key>
</xs:element>
<xs:element name="word" type="word_type" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="model_type">
<xs:attribute name="name"/>
</xs:complexType>
<xs:complexType name="word_type">
<xs:sequence>
<xs:element name="value"/>
</xs:sequence>
<xs:attribute name="key"/>
</xs:complexType>
<xs:element name="root" type="root_type">
<xs:keyref name="name_keyref" refer="name_key">
<xs:selector xpath="word"/>
<xs:field xpath="@key"/>
</xs:keyref>
</xs:element>
</xs:schema>
但是不可能强制所有name
属性都被name
属性覆盖。在这种情况下,我会更改结构,因为如果您有这样的需要,它表明<word>
元素应该包含在<model>
元素中。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:complexType name="root_type">
<xs:sequence>
<xs:element name="model" type="model_type" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="model_type">
<xs:sequence>
<xs:element name="word" type="word_type" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name"/>
</xs:complexType>
<xs:complexType name="word_type">
<xs:sequence>
<xs:element name="value"/>
</xs:sequence>
</xs:complexType>
<xs:element name="root" type="root_type"/>
</xs:schema>