限制对特定元素组的 ID 引用 [英] Restrict ID references to a particular element group

查看:29
本文介绍了限制对特定元素组的 ID 引用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我们有以下架构:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="a_elements">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="a_element" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:attribute name="id" type="xs:ID" use="required"/>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="b_elements">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="b_element" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:attribute name="id" type="xs:ID" use="required"/>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="c_elements">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="c_element" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:attribute name="id" type="xs:ID" use="required"/>
                                <xs:attribute name="ref" type="xs:IDREF" use="required"/>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

这里是示例 xml 文件:

and here's the sample xml file:

<root>
    <a_elements>
        <a_element id="id1"/>
        <a_element id="id2"/>
    </a_elements>
    <b_elements>
        <b_element id="id3"/>
        <b_element id="id4"/>
    </b_elements>
    <c_elements>
        <c_element id="id5" ref="id1"/>
        <c_element id="id6" ref="id2"/>
    </c_elements>
</root>

这样 c_elements 就可以通过 id 引用 a_elements 和 b_elements.是否有可能以某种方式将 ref 属性限制为仅接受对一组元素的引用,例如 a_elements?

So that c_elements can reference a_elements and b_elements by id. Is it possible to somehow restrict ref attribute to only accept references to elements from one group, say a_elements?

推荐答案

根据我之前的回答,理论上您不能限制使用纯粹的 ID/IDREF,但是可以添加满足您要求的身份约束:

Further to my earlier answer, in theory you can't restrict using purely ID/IDREF however it's possible to add an identity constraint which fulfil your requirement:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">

    <xs:complexType>

      <xs:sequence>
        <xs:element name="a_elements">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="a_element" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:attribute name="id" type="xs:ID" use="required"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="b_elements">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="b_element" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:attribute name="id" type="xs:ID" use="required"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="c_elements">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="c_element" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:attribute name="id" type="xs:ID" use="required"/>
                  <xs:attribute name="ref" type="xs:IDREF" use="required"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
    <xs:keyref name="theKeyRef" refer="theKey">
      <xs:selector xpath="c_elements/*"/>
      <xs:field xpath="@ref"/>
    </xs:keyref>
    <xs:key name="theKey">
      <xs:selector xpath="a_elements/*"/>
      <xs:field xpath="@id"/>
    </xs:key>
  </xs:element>
</xs:schema>

这篇关于限制对特定元素组的 ID 引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆