请参阅XSD模型组的特定元素?

时间:2017-10-30 14:37:16

标签: xml xsd xsd-validation xml-validation

我们可以创建一个组并引用该组的元素吗?

例如,我们有一个小组说

<xs:group name="custGroup">
  <xs:sequence>
    <xs:element name="customerId" type="xs:string"/>
    <xs:element name="customerName" type="xs:string"/>
    <xs:element name="Address1" type="xs:string"/>
    <xs:element name="Address2" type="xs:string"/>
    <xs:element name="mobile" type="xs:string"/>
  </xs:sequence>
</xs:group>

假设我想创建另一个只有customerIdmobile的元素:

<xs:element name="custBrief">
  <xs:sequence>
    <xs:element name="customerId" type="xs:string"/>
    <xs:element name="mobile" type="xs:string"/>
  </xs:sequence>
</xs:element>

所以,我应该可以参考custGroup

2 个答案:

答案 0 :(得分:0)

选项1:通过引用而不是按名称声明构成元素,重新使用组的部分:

<xs:group name="custGroup">
  <xs:sequence>
    <xs:element ref="customerId"/>
    <xs:element ref="customerName"/>
    <xs:element ref="Address1"/>
    <xs:element ref="Address2"/>
    <xs:element ref="mobile"/>
  </xs:sequence>
</xs:group>

<xs:element name="customerId" type="xs:string"/>
<xs:element name="customerName" type="xs:string"/>
<xs:element name="Address1" type="xs:string"/>
<xs:element name="Address2" type="xs:string"/>
<xs:element name="mobile" type="xs:string"/>

这样,您的第二个类似组至少可以共享引用元素的全局声明:

<xs:element name="custBrief">
  <xs:sequence>
    <xs:element ref="customerId"/>
    <xs:element ref="mobile"/>
  </xs:sequence>
</xs:element>

选项2:使用子组:

<xs:group name="custGroup">
  <xs:sequence>
    <xs:group ref="custBriefGroup"/>
    <xs:element ref="customerName"/>
    <xs:element ref="Address1"/>
    <xs:element ref="Address2"/>
  </xs:sequence>
</xs:group>

<xs:group name="custBriefGroup">
  <xs:sequence>
    <xs:element name="customerId" type="xs:string"/>
    <xs:element name="mobile" type="xs:string"/>
  </xs:sequence>
</xs:group>

<xs:element name="custBrief">
  <xs:sequence>
    <xs:group ref="custBriefGroup"/>
  </xs:sequence>
</xs:element>

这样,custBriefGroup在一个地方被定义为重复使用。

请注意,我通过重新安排元素排序来获得自由。

另请参阅:The difference between <all> <sequence> <choice> and <group> in XSD?

答案 1 :(得分:0)

你在这里混合了两种不同的模式构建模型。

您可以使用模型组从一组构建块中组合类型。

您可以使用“按限制派生”来“分组”某种类型。

但是你不能以你试图的方式混合两者。