在我的 XML 架构中引用另一个标签
Reference another tag in my XML Schema
我正在为事后制作的所有 XML 设计一个 XSD 架构。我知道我应该先做这件事,但我对它有点陌生。到目前为止,我所有的 XML 都为我的应用程序创造了奇迹,我也只是想对其进行一些良好的验证。
这是我想要的一个简单示例。
<fields>
<field id="name" type="text">
<display>Somethings Name</display>
<description>The name of the something.</description>
</field>
</fields>
<forms>
<form id="custom_form">
<widgets>
<widget type="text-input">
<field id="name"/>
</widget>
</widgets>
</form>
</forms>
这里是 XSD 我有的简化示例:
<xs:sequence>
<xs:element name="fields" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="field" type="fieldType"
minOccurs="1" maxOccurs="unbounded">
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="forms" maxOccurs="1" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="form" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="widgets" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="widget" minOccurs="1" maxOccurs="unbounded">
<!-- What do I put here to reference a field? -->
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
我的主要问题是如何告诉 XSD 模式 widget
节点中的元素是对其上方 fields
节点中定义的字段之一的引用?现在我只是使用代码来进行验证。
这种场景下应该如何定义字段节点?我是否应该简单地定义 field
节点两次,一次用于主要定义,一次用于引用小部件节点中的字段?
我还看到有一个选项可以重新定义 XSD 中的节点。我是否应该定义主 field
定义,然后将其重新定义为小部件的引用样式节点?我怎么会这样做?
对于这种情况下常见或流行的内容有什么建议吗?
您可以使用 XML 架构 key/keyref 构造将属性的可能值限制为在文档其他位置的一组属性中使用的值。请参阅 XML Schema key/keyref - how to use them? 和答案中的链接以获取使用示例,忽略 JAXB 细节。
我正在为事后制作的所有 XML 设计一个 XSD 架构。我知道我应该先做这件事,但我对它有点陌生。到目前为止,我所有的 XML 都为我的应用程序创造了奇迹,我也只是想对其进行一些良好的验证。
这是我想要的一个简单示例。
<fields>
<field id="name" type="text">
<display>Somethings Name</display>
<description>The name of the something.</description>
</field>
</fields>
<forms>
<form id="custom_form">
<widgets>
<widget type="text-input">
<field id="name"/>
</widget>
</widgets>
</form>
</forms>
这里是 XSD 我有的简化示例:
<xs:sequence>
<xs:element name="fields" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="field" type="fieldType"
minOccurs="1" maxOccurs="unbounded">
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="forms" maxOccurs="1" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="form" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="widgets" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="widget" minOccurs="1" maxOccurs="unbounded">
<!-- What do I put here to reference a field? -->
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
我的主要问题是如何告诉 XSD 模式 widget
节点中的元素是对其上方 fields
节点中定义的字段之一的引用?现在我只是使用代码来进行验证。
这种场景下应该如何定义字段节点?我是否应该简单地定义 field
节点两次,一次用于主要定义,一次用于引用小部件节点中的字段?
我还看到有一个选项可以重新定义 XSD 中的节点。我是否应该定义主 field
定义,然后将其重新定义为小部件的引用样式节点?我怎么会这样做?
对于这种情况下常见或流行的内容有什么建议吗?
您可以使用 XML 架构 key/keyref 构造将属性的可能值限制为在文档其他位置的一组属性中使用的值。请参阅 XML Schema key/keyref - how to use them? 和答案中的链接以获取使用示例,忽略 JAXB 细节。