XSD类型,它是一个列表,具有属性

时间:2018-04-17 13:05:13

标签: list xsd attributes

以下是我希望能够作为XML示例(请注意file元素)的示例:

...
<run-list>
  <topic name="topic1"/>
  <topic name="topic2">
    <file number="2"/>
    <file number="3">
      /a/b/c /a/b/d /a/b/g/h/i
    </file>
  </topic>
</run-list>
...

run-list元素可以包含任意数量的topic元素。 topic元素可以包含零个或多个file个元素。 file元素具有number属性(必需),可能包含零个或多个路径字符串(列表)。

我无法弄清楚如何定义模式类型以允许如上所述定义file元素。我需要file元素具有number属性,并且我希望能够指定路径值的可选列表。我已经能够为其他情况定义简单列表类型,但它们没有任何属性。

我能够做一些与此接近的事情,但需要为路径定义另一种模式类型,并将其作为file元素中的元素实现。所以我会有这样的事情:

...
<file number="3">
   <path>/a/b/c</path>
   <path>/a/b/d</path>
   <path>/a/b/g/h/i</path>
</file>
...

我想避免必须定义单独的模式类型和元素来指定给定file元素下的路径。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我想我明白了。这里的模式似乎有效:

<xs:complexType name="TestSpecification">
  <xs:sequence>
    <xs:element name="topic" type="TopicSpecification"
      minOccurs="1" maxOccurs="unbounded" />
  </xs:sequence>
</xs:complexType>

<xs:complexType name="TopicSpecification">
  <xs:sequence>
    <xs:element name="file" type="FileSpecification" minOccurs="0"
      maxOccurs="unbounded" />
  </xs:sequence>
  <xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>

<xs:complexType name="FileSpecification">
  <xs:simpleContent>
    <xs:extension base="EntityPathList">
      <xs:attribute name="number" type="xs:positiveInteger" use="required" />
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>

<xs:simpleType name="EntityPathList">
  <xs:list itemType="xs:string" />
</xs:simpleType>

如果有人发现任何潜在的问题,建议如何改进或替代,请随时发表评论。