我们可以创建一个组并引用该组的元素吗?
例如,我们有一个小组说
<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>
假设我想创建另一个只有customerId
和mobile
的元素:
<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
。
答案 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)
你在这里混合了两种不同的模式构建模型。
您可以使用模型组从一组构建块中组合类型。
您可以使用“按限制派生”来“分组”某种类型。
但是你不能以你试图的方式混合两者。