【问题标题】:Reference another tag in my XML Schema在我的 XML Schema 中引用另一个标签
【发布时间】:2018-06-07 13:41:46
【问题描述】:

我正在为事后创建的所有 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 xsd xsd-validation


    【解决方案1】:

    您可以使用 XML Schema key/keyref 构造将属性的可能值限制为文档中其他地方的一组属性中使用的值。请参阅XML Schema key/keyref - how to use them? 和答案中的链接以获取使用示例,忽略 JAXB 细节。

    【讨论】:

    • 天哪,正是我要找的。奇怪的是 W3Schools 和 eclipse XSD 工具都没有提到 key/keyref,所以我自己从来没有遇到过。看起来有不少这样的 XSD 功能。
    猜你喜欢
    • 2021-07-31
    • 1970-01-01
    • 2020-09-26
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 2015-12-22
    相关资源
    最近更新 更多