XSD架构:如何引用块?

时间:2013-09-04 15:33:45

标签: xml xsd schema

在以下示例中,您可以看到Name,Roll和Adress块正在重复。是否可以将它们声明为类型然后重用它而不是像以前那样重复相同的代码。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="NameEntry">
    <xs:annotation>
        <xs:documentation>Comment describing your root element</xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Asked">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Name"/>
                        <xs:element name="Roll"/>
                        <xs:element name="Adress"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="Given">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Name"/>
                        <xs:element name="Roll"/>
                        <xs:element name="Address"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

1 个答案:

答案 0 :(得分:0)

这是创建类型并重用它的方法:

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="NameEntry">
        <xs:annotation>
            <xs:documentation>Comment describing your root element</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Asked" type="ToReuse"/>
                <xs:element name="Given" type="ToReuse"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:complexType name="ToReuse">
        <xs:sequence>
            <xs:element name="Name"/>
            <xs:element name="Roll"/>
            <xs:element name="Adress"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

为了引起兴趣,还有其他方法可以重用...类型层次结构或命名组。以下是命名组重用:

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="NameEntry">
        <xs:annotation>
            <xs:documentation>Comment describing your root element</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Asked">
                    <xs:complexType>
                        <xs:group ref="ToReuse"/>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Given">
                    <xs:complexType>
                        <xs:group ref="ToReuse"/>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:group name="ToReuse">
        <xs:sequence>
            <xs:element name="Name"/>
            <xs:element name="Roll"/>
            <xs:element name="Address"/>
        </xs:sequence>
    </xs:group>
</xs:schema>