【问题标题】:XML (XSD) How-To: Element content is the name of another elementXML (XSD) How-To:元素内容是另一个元素的名称
【发布时间】:2019-04-10 03:17:06
【问题描述】:

我试图弄清楚如何编写我的 XSD 架构以正确表达元素引用。这是一个简短的示例,解释了我想要实现的目标。 我有一些基本元素都有不同的(唯一)名称。我想通过按名称引用它们来将它们分组到一个更大的元素中。

XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<RootNode>
  <BasicElements>
    <BasicElement name="Element1"/>
    <BasicElement name="Element2"/>
    <BasicElement name="Element3"/>
  <BasicElements>

  <ElementGroups>
    <ElementGroup name="ElementsAlongAPath">
      <LeftSide>Element1</LeftSide>
      <RightSide>Element2></RightSide>
    </ElementGroup>
    <ElementGroup name=OtherElementsAlongAPath">
      <LeftSide>Element2</LeftSide>
      <RightSide>Element3</RightSide>
    </ElementGroup>
  </ElementGroups>
</RootNode>

XSD 文件

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="TestNS" xmlns:test="TestNS">
  <xs:element name="RootNode">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="test:BasicElements" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="test:ElementGroups" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="BasicElements">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="test:BasicElement" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="BasicElement">
    <!--Attributes, stuff... -->
  </xs:element>
  <xs:element name="ElementGroups">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="test:ElementGroup" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="ElementGroup">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="LeftSide" minOccurs="0" maxOccurs="1">
          <!-- How to express reference to BasicElement here ?-->
        </xs:element>
        <xs:element name="RightSide" minOccurs="0" maxOccurs="1">
          <!-- How to express reference to BasicElement here ?-->
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

我可以很好地写出 LeftSideRightSide 子元素属于 type=xs:string 并且只需写下我的 BasicElements 的名称上面有,但我想知道如何以符合 XSD 语法的方式进行操作。 谢谢!

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

    这就是keykeyref 的用途。在RootNode 级别,定义一个键以使每个.//BasicElement 具有不同的@name,并定义一个keyref 来表示每个.//LeftSide.//Rightside 必须是对这些键之一的引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      相关资源
      最近更新 更多