Элемент key
не должен входить в элемент sequence
. Вместо этого вы указываете его как потомок xs:element
, который определяет ReferralCollection
. selector
и field
являются дочерними элементами элемента key
, которые определяют, что должно быть уникальным. Оба являются выражениями XPath. Значение selector
устанавливает контекст XPath, а элементы field
(их может быть больше одного) определяют комбинацию значений, которые должны быть уникальными. Так что в вашем случае элемент key
может выглядеть примерно так:
<xs:key name="URL">
<xs:selector xpath="."/>
<xs:field xpath="rd:keyword"/>
</xs:key>
selector
здесь выбирает сам элемент, то есть ReferralCollection
. Затем в этом контексте элемент field
обозначает значения элементов keyword
, которые, таким образом, должны быть уникальными. Значением элемента в XPath является его текстовое содержимое.
Я не так много сделал с элементами key
(или с XML-схемой в целом), поэтому некоторые приведенные выше детали могут быть неверными, но основная идея заключается в том, что я объяснил, поэтому должно быть легко исправить любые ошибки, которые я сделал. О, также обратите внимание, что я использовал префикс rd
для вашего пространства имен READOO
; По моему опыту, использование явных префиксов всегда лучше при работе с XPath, поэтому для этой работы необходим соответствующий атрибут xmlns:rd
в вашей схеме.
РЕДАКТИРОВАТЬ: Так что, кажется, вы хотите что-то вроде этого:
<xs:element name="ReferralCollection">
<xs:complexType>
<xs:sequence>
<xs:element name="URL" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="stem" type="xsd:string"/>
<xs:element name="keyword" maxOccurs="unbounded">
...
</xs:element>
...
</xs:complexType>
<xs:key name="URL">
<xs:selector xpath="./URL"/>
<xs:field xpath="stem"/>
</xs:key>
</xs:element>
Это ближе к тому, что вы имели в виду? Он содержит URL
элементов, один или несколько, каждый из которых содержит элемент stem
, за которым следует один или несколько keyword
элементов. Ограничение key
должно сделать содержимое элементов stem
уникальным.