xsd因素出多用途属性
我不确定如何计算出这段XSD:xsd因素出多用途属性,xsd,refactoring,Xsd,Refactoring,我不确定如何计算出这段XSD: <xs:attribute name="status" use="required"> <xs:simpleType> <xs:restriction base="xs:token"> <xs:enumeration value="not run"/> <xs:enumeration value="passed"/>
<xs:attribute name="status" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="not run"/>
<xs:enumeration value="passed"/>
<xs:enumeration value="failed"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
在
和
标记中都需要:
<?xml version="1.0" encoding="UTF-16"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="FlowBi:Emis:FeatureTests"
xmlns="FlowBi:Emis:FeatureTests"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="featureTests">
<xs:complexType>
<xs:sequence>
<xs:element name="test" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="summary" type="xs:string"/>
<xs:sequence>
<xs:element name="step" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="status" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="not run"/>
<xs:enumeration value="passed"/>
<xs:enumeration value="failed"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:sequence>
<xs:attribute name="status" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="not run"/>
<xs:enumeration value="passed"/>
<xs:enumeration value="failed"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
将重复的部分排除在外并在每个使用它的地方引用它会很好,但我不确定如何对属性类型执行此操作。这应该可以做到
<?xml version="1.0" encoding="utf-16"?>
<!--Created with Liquid XML Studio 2012 Developer Edition 10.1.2.4113 (http://www.liquid-technologies.com)-->
<xs:schema xmlns="FlowBi:Emis:FeatureTests" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="FlowBi:Emis:FeatureTests" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="featureTests">
<xs:complexType>
<xs:sequence>
<xs:element name="test" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="summary" type="xs:string" />
<xs:sequence>
<xs:element name="step" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="status" type="statusType" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:sequence>
<xs:attribute name="status" type="statusType" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="statusType">
<xs:restriction base="xs:token">
<xs:enumeration value="not run" />
<xs:enumeration value="passed" />
<xs:enumeration value="failed" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
由@Sprotty提供的答案是正确的(+1)。我会添加不适合评论的澄清/变更(因此答案) 通常,Sprotty只重用简单类型的原因与XSD中的属性通常不合格的方式有关。因为在您的示例中属性是非限定的,所以只有当属性包装在attributeGroup下时,才能重用整个属性。基本上,重用全局定义的属性意味着限定该属性 因此,这是重新使用属性声明的另一种可能性(与仅使用简单类型相反):
<?xml version="1.0" encoding="UTF-16"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="FlowBi:Emis:FeatureTests" xmlns="FlowBi:Emis:FeatureTests" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="featureTests">
<xs:complexType>
<xs:sequence>
<xs:element name="test" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="summary" type="xs:string"/>
<xs:sequence>
<xs:element name="step" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attributeGroup ref="gaStatus" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:sequence>
<xs:attributeGroup ref="gaStatus" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:attributeGroup name="gaStatus">
<xs:attribute name="status" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="not run"/>
<xs:enumeration value="passed"/>
<xs:enumeration value="failed"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:attributeGroup>
</xs:schema>