4

在 W3C Reco(这里)中,我发现

[...] ID 是一种属性,因此它不能应用于属性、元素或其内容

我可以在我必须处理的文件中找到一些,我想知道 xsi:ID 是否真的是一个有效的 xlm 元素类型

我现有的 xsd 提到:

<xsd:complexType name="customTypeName">
 <xsd:sequence>
  <xsd:element name="ID" type="xsd:ID"/>
  <xsd:element name="myElement" type="string"/>
 </xsd:sequence>
</xsd:complexType>

但根据我的阅读,我宁愿认为有效的声明应该是

<xsd:complexType name="customTypeName">
<xsd:element name="myElement" type="string"/>
<attribute name="ID" type="xsd:ID" use="required"/>  
</xsd:complexType>

但不幸的是,我无法更改已经使用的 xsd... 我愿意使用 id() 函数应用 xslt 搜索。我应该放弃还是有办法?

提前感谢您在论坛上对我的第一个问题的任何帮助。

4

1 回答 1

1

好问题,可惜当时没有得到足够的重视。)

ID 是一种属性,因此不能应用于属性、元素或其内容

这是规范中的一个错误。它应该说“不能应用于元素或其内容”。但是,在 XML Schema 1.1中非常清楚

为了兼容性,ID 应该只用于属性。

这意味着,您可以将类型应用于属性,但不能应用于元素,但这样做通常不会引发错误。

然而,使用xs:ID并不总是有人们期望的效果。例如,它需要一个NCName,这意味着它不能以数字开头。此外,不强制执行唯一性约束。

通常使用起来会好很多xml:id。它由规范很好地定义fn:id(),并且由您引用的函数很好地支持。此外,使用xml:id,人们不需要学习新名称,也不需要额外的命名空间定义。

即使您的 XSD 验证器接受xs:ID一个元素,XPath 规范也不接受它,并且在使用fn:id(). 但是,无论如何,此函数和element-with-id()函数都返回应用 ID 的元素,因此这不是太大的问题。

于 2015-09-13T22:05:28.357 回答