Ответ 1
selector
XPath выбирает узлы, которые должны быть уникальными (в этом случае он должен выбирать узлы автора).
field
XPath выбирает, что "делает их уникальными" (в этом случае использование .
приведет к их типизированному значению, в этом случае используется текст между тегами, обрабатываемый как строка).
Документ
<?xml version="1.0" encoding="UTF-8"?>
<authors>
<author>a1</author>
<author>a2</author>
<lastmodified>2010-01-01</lastmodified>
</authors>
должен быть действителен в отношении следующей схемы:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="authors">
<xs:complexType>
<xs:sequence>
<xs:element name="author" maxOccurs="unbounded" type="xs:string"/>
<xs:element name="lastmodified" type="xs:date" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="uniqueAuthor">
<xs:selector xpath="author"/>
<xs:field xpath="."/>
</xs:unique>
</xs:element>
</xs:schema>
в то время как этого не следует:
<?xml version="1.0" encoding="UTF-8"?>
<authors>
<author>a1</author>
<author>a1</author>
<lastmodified>2010-01-01</lastmodified>
</authors>