如果id
属性的目的
该id
属性有助于在 URI 中使用短格式或简写 XPointer 作为片段标识符:
XML Schema 第 1 部分:结构 > 3.15.2.2 从其他地方引用 Schema 组件
模式组件的名称(例如类型定义和元素声明)不是类型 ID:它们在模式中不是唯一的,只是在符号空间中。这意味着简单的片段标识符并不总是能够从模式文档的上下文之外引用模式组件。
[...]
在某些情况下,也可以使用短格式片段标识符,即当 DTD 或 XML 模式可用于所讨论的模式时,以及id
为所有主要和次要模式组件的表示提供一个属性,它的类型ID,已被利用。
片段标识符是 uri 的一部分(例如https://www.example.com/#fragment-identifier
) - 如何处理取决于媒体类型:
RFC 3986:统一资源标识符 (URI):通用语法 > 3.5。分段
因此,片段的格式和分辨率取决于可能检索到的表示的媒体类型 [RFC2046],即使只有在取消引用 URI 时才会执行这样的检索。
对于 XML,片段标识符是 XPointers:
RFC 7303:XML 媒体类型 > 5. 片段标识符
本规范中定义的 XML 媒体类型的片段标识符的语法和语义基于 [XPointerFramework] W3C 建议。
XPointer 框架指定速记指针如下:
XPointer 框架 > 3.2 速记指针
速记指针,以前称为barename,仅由一个NCName 组成。它最多标识资源信息集中的一个元素;具体来说,文档顺序中的第一个(如果有)具有匹配的 NCName 作为标识符。元素的标识符确定如下:
- 如果元素信息项在其[attributes]中有一个属性信息项是模式确定的ID,则它由该属性信息项的[schema normalized value]属性的值标识;
应该注意的是,XSD ID 类型 ( xs:ID
) 和id
具有此类型的属性不是数字,并且您在示例中使用的值 ( ) 对属性1
无效:id
XML 模式第 1 部分:结构 > 3.14.2(非规范)简单类型定义模式组件的 XML 表示
<simpleType
[...]
id = ID
(架构第 2 部分:数据类型 > 3.3.8 ID)[https://www.w3.org/TR/xmlschema-2/#ID]
[定义:] ID表示 [XML 1.0 (第二版)] 中的 ID 属性类型。ID的·值空间·是所有字符串的集合,这些字符串·匹配·[XML 中的命名空间] 中的 NCName 产生式。ID的·词汇空间·是所有字符串的集合,这些字符串·匹配·在[Namespaces in XML] 中的NCName 产生式。ID的·base type·是NCName。
XML 中的命名空间 > 2. 声明命名空间
[4] NCName ::= (Letter | '_') (NCNameChar)* /* An XML Name, minus the ":" */
[5] NCNameChar ::= Letter | Digit | '.' | '-' | '_' | CombiningChar | Extender
通过引用其他模式组件id
id
在 XSD 本身内无法引用其他 XSD 组件(包括 XSD 类型) 。XSD 中为引用其他模式组件指定的唯一语义是通过 QName。例如:
XML 模式第 1 部分:结构 > 3.3.2 元素声明模式组件的 XML 表示
<element
[...]
ref = QName
substitutionGroup = QName
type = QName
QName 在 XML Schema 中定义如下:
XML 模式第 2 部分:数据类型 > 3.2.18 QName
[定义:] QName 表示 XML 限定名称。QName 的·值空间·是元组{namespace name, local part}的集合,其中namespace name 是anyURI,local 部分是NCName。QName 的·词汇空间·是一组字符串·匹配·[XML 中的名称空间] 的QName 产生。
注意: ·词法空间· 中的文字和 QName··值空间· 中的值之间的映射要求命名空间声明在使用 QName 的上下文范围内。
XML 1.0 中的命名空间 > 4 限定名称
[7] QName ::= PrefixedName
| UnprefixedName
[8] PrefixedName ::= Prefix ':' LocalPart
[9] UnprefixedName ::= LocalPart
将 QName 解析为模式组件的过程定义为:
XML 模式第 1 部分:结构 > 3.15.3 模式的 XML 表示的约束
架构表示约束:QName 解析(架构文档)
要使·QName· 解析为指定类型的模式组件,以下所有条件都必须为真:
[...]
2 组件的{name} 与·QName· 的·local name· 匹配;
[...]
而{name}指的name
是组件的属性:
XML 模式第 1 部分:> 3.2.2 属性声明模式组件的 XML 表示
name
{name} [属性]的·实际值·
XML 模式第 1 部分:> 3.3.2 元素声明模式组件的 XML 表示
name
{name} [属性]的·实际值·
XML Schema 第 1 部分:> 3.4.2 复杂类型定义的 XML 表示
{name} [属性]的·实际值·name
如果存在,否则·不存在·。
总而言之,XSD 中引用其他模式组件的唯一语义是使用它们的名称。