我应该在 xs:field 到 select 元素内容中使用什么 XPath 表达式?

What XPath expression should I use in xs:field to select element content?

我知道通常使用 /the/path/to/a/node/text() 来提取字符串值。这还不足以解决我的问题。

我正在使用 XML 架构版本 1.0 来定义一些文档类型。我正在尝试为文档类型创建一个非常简单的 keywords 部分。所以我首先创建一个非常简单的复杂类型。

<xs:complexType name="KeywordsList">
    <xs:sequence>
        <xs:element name="tag" type="xs:token" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>

所以现在我有一个类型可以包含任意数量的包含 xs:token 值的元素的列表。 我的问题始于如何禁止重复的问题

我经常使用 xs:keyxs:unique 来完成这个非常琐碎的任务,但我只对属性值或更深层嵌套的元素做过。例如,如果关键字值存储在名为 value 的属性中,我知道我可以这样做。

...
<xs:element name="keywords" type="KeywordsList">
    <xs:unique name="KeywordsListUnique">
        <xs:selector xpath="child::tag"/>
        <xs:field xpath="@value"/>
    </xs:unique>
</xs:element>
...

真正让我困惑的是 <xs:selector xpath="child::tag"/> 足以让 XML 解析器定位值,但我需要至少包含一个 xs:field标签.

起初我认为我应该指定 <xs:field xpath="text()"/> 来引用节点的文本内容,但是当我这样做时,我从 OxygenXML.

收到错误消息

c-general-xpath: The expression 'text()' is not valid with respect to the XPath subset supported by XML Schema.

我收到了 child::text()./text() 和其他一些类似消息的类似消息。我已经通过使用一个点来引用当前节点来摆脱错误消息,但我不知道 . 是否是要使用的正确表达式。

那么我应该在xs:field标签里放什么呢?

答案确实是使用 <xs:field xpath="."/>,如 this post