所以,我有一个.xsd文件,里面有很多重复。
<xs:complexType name="Square">
<xs:sequence>
<xs:element name="Side1" type="xs:integer" minOccurs="1"/>
<xs:element name="Side2" type="xs:integer" minOccurs="1"/>
<xs:element name="Side3" type="xs:integer" minOccurs="1"/>
<xs:element name="Side4" type="xs:integer" minOccurs="1"/>
</xs:sequence>
<xs:attribute name="squarename" type="xs:string" use="optional" />
<xs:attribute name="squarenumber" type="xs:integer" use="optional" />
</xs:complexType>
<xs:complexType name="Rectangle">
<xs:sequence>
<xs:element name="Side1" type="xs:integer" minOccurs="1"/>
<xs:element name="Side2" type="xs:integer" minOccurs="1"/>
<xs:element name="Side3" type="xs:integer" minOccurs="1"/>
<xs:element name="Side4" type="xs:integer" minOccurs="1"/>
</xs:sequence>
<xs:attribute name="rectanglecolor" type="xs:string" use="optional" />
<xs:attribute name="rectanglelabel" type="xs:string" use="optional" />
</xs:complexType>
<xs:complexType name="Rhombus">
<xs:sequence>
<xs:element name="Side1" type="xs:integer" minOccurs="1"/>
<xs:element name="Side2" type="xs:integer" minOccurs="1"/>
<xs:element name="Side3" type="xs:integer" minOccurs="1"/>
<xs:element name="Side4" type="xs:integer" minOccurs="1"/>
</xs:sequence>
<xs:attribute name="rhombosdance" type="xs:string" use="optional" />
<xs:attribute name="rhombusname" type="xs:string" use="optional" />
</xs:complexType>
请注意
<xs:sequence>
<xs:element name="Side1" type="xs:integer" minOccurs="1"/>
<xs:element name="Side2" type="xs:integer" minOccurs="1"/>
<xs:element name="Side3" type="xs:integer" minOccurs="1"/>
<xs:element name="Side4" type="xs:integer" minOccurs="1"/>
</xs:sequence>
出现在很多地方。
这看起来有点糟糕。是否有任何方法可以使用占位符或该序列的某些内容。我会创建一个包含所有这些的新类型,但我需要保持向后兼容性,所以我需要xsd采用它能够使用的相同xml,所以我不能转为
<Square>
<Side1>1</Side1>
<Side2>1</Side2>
<Side3>1</Side3>
<Side3>1</Side3>
</Square>
到
<Square>
<QuadSides>
<Side1>1</Side1>
<Side2>1</Side2>
<Side3>1</Side3>
<Side4>1</Side4>
<QuadSides>
</Square>
我还需要接受第一个xml。有没有办法做到这一点?
答案 0 :(得分:1)
另一种方法是使用元素组
(使用<xs:group>
元素声明的XSD组件)。
以下是如何重写这个XML模式:
<xs:group name="Sides">
<xs:sequence>
<xs:element name="Side1" type="xs:integer" minOccurs="1"/>
<xs:element name="Side2" type="xs:integer" minOccurs="1"/>
<xs:element name="Side3" type="xs:integer" minOccurs="1"/>
<xs:element name="Side4" type="xs:integer" minOccurs="1"/>
</xs:sequence>
</xs:group>
<xs:complexType name="Square">
<xs:group ref="Sides"/>
<xs:attribute name="squarename" type="xs:string" use="optional" />
<xs:attribute name="squarenumber" type="xs:integer" use="optional" />
</xs:complexType>
<xs:complexType name="Rectangle">
<xs:group ref="Sides"/>
<xs:attribute name="rectanglecolor" type="xs:string" use="optional" />
<xs:attribute name="rectanglelabel" type="xs:string" use="optional" />
</xs:complexType>
<xs:complexType name="Rhombus">
<xs:group ref="Sides"/>
<xs:attribute name="rhombosdance" type="xs:string" use="optional" />
<xs:attribute name="rhombusname" type="xs:string" use="optional" />
</xs:complexType>
答案 1 :(得分:0)
想出来。我可以使用扩展程序
<xs:complexType name="QuadSides" abstract="true">
<xs:element name="Side1" type="xs:integer" minOccurs="1"/>
<xs:element name="Side2" type="xs:integer" minOccurs="1"/>
<xs:element name="Side3" type="xs:integer" minOccurs="1"/>
<xs:element name="Side4" type="xs:integer" minOccurs="1"/>
</xs:complexType>
<xs:complexType name="Square">
<xs:complexContent>
<xs:extension base="QuadSides">
<xs:attribute name="squarename" type="xs:string" use="optional" />
<xs:attribute name="squarenumber" type="xs:integer" use="optional" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
等