XSD 中元素的 ref 属性有啥作用?

Posted

技术标签:

【中文标题】XSD 中元素的 ref 属性有啥作用?【英文标题】:What does the ref attribute on an element in an XSD do?XSD 中元素的 ref 属性有什么作用? 【发布时间】:2010-11-29 18:02:17 【问题描述】:

文档似乎说它引用了架构中的另一个元素,但是如何使用它 - 我从未在我使用过的架构中看到它。

有人有什么好的用例或可以进一步解释其用途的东西吗?

【问题讨论】:

【参考方案1】:

例如,如果您想要声明可以出现深度嵌套的元素类型,但也可以作为实例文档中的***元素。

XML Schema Primer 有这方面的示例:http://www.w3.org/TR/xmlschema-0/

【讨论】:

【参考方案2】:

基本上它引用另一个在别处声明的元素,可能是也可能不是同一个架构文档。

例如,它可能来自不同命名空间中的外部引用架构。假设您在几个不同的模式中大量使用 item 元素,您可以在 common 模式中声明它(以及任何其他常见的类型和属性),然后在所有其他架构。

如果您使用命名空间 c 引用您的 common 架构,则可以单独或作为一部分声明 item 元素的实例类型如下:

<xs:element ref="c:item" /><!-- reference here -->
<xs:complexType name="something">
    <xs:sequence>
        <xs:element ref="c:item" /><!-- and here -->
    </xs:sequence>
    <xs:element name="other" type="xs:Name" />
</xs:complexType>

数据模式中的定义如下所示:

<xs:element name="item" type="itemType" /><!-- referenced element -->
<xs:complexType name="itemType">
    <xs:sequence>
        <xs:element name="code" type="xs:Name" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
    <xs:attribute name="description" type="xs:normalizedString" use="required" />
</xs:complexType>

【讨论】:

我对此投了赞成票,因为这是一个很好的解释。但是,ref 属性通过其“id”而不是“name”来引用外部实体。为了使您的示例正常工作,第二个代码块中的“item”声明需要是: 根据我看到的所有 XSD 文档,“ref”适用于“名称”,如下所示:w3schools.com/schema/el_element.asp(ref - 可选。指的是另一个元素的名称。。 ..) 什么时候会选择参考而不是类型?

以上是关于XSD 中元素的 ref 属性有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

扩展 XSD 模式以允许一种 XSD 标准元素类型中的新属性

elementFormDefault 在 XSD 中做了啥?

HTML5中input元素新增加哪些type属性值?它们有啥作用?

vue中ref的用法

enable-background 属性到底有啥作用?

为啥在 XSD 中定义为属性时,自动生成的类中的字段会序列化为元素?