以下是xsd错误

时间:2013-04-01 11:07:44

标签: xsd

这是xml

     <?xml version="1.0" encoding="utf-8"?>
    <Modules xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="XSDQu3.xsd">
        <Module code="CSE1246">
            <Name shortName="ADSA">Applied Data Structures and Algorithms</Name>
            <Level>1</Level>
            <ResourcePerson>
                <Name>Anwar</Name>
                <Surname>Chutoo</Surname>
            </ResourcePerson>
        </Module>
    <Module code="CSE2041">
    <Name shortName="Web 2">Web Technologies II</Name>
        <Level>2</Level>
        <ResourcePerson>
            <FullName>Shehzad Jaunbuccus</FullName>
        </ResourcePerson>
    </Module>

</Modules>

我的名字有错误。资源人员可以包含全名,姓名和姓氏。请帮忙。我正确地做了这个部分

这是xsd

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:complexType name="NameNSurnameType">
        <xs:sequence>
          <xs:element name="Name" type="xs:string"/>
          <xs:element name="Surname" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="ResourcePersonType">
        <xs:sequence>
            <xs:choice>
                <xs:element name="NameNSurnameType" type="NameNSurnameType"/>
                <xs:element name="FullName" type="xs:string"/>
            </xs:choice>
        </xs:sequence>
    </xs:complexType>

    <xs:attribute name="code">
        <xs:simpleType>
            <xs:restriction base="xs:ID">
                <xs:pattern value="CSE(\d{4})"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:attribute>

    <xs:complexType name="nameType">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="shortName" type="xs:string"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:element name="Modules">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Module" minOccurs="1" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Name" type="nameType"/>
                        <xs:element name="Level" type="xs:positiveInteger"/>
                        <xs:element name="ResourcePerson" type="ResourcePersonType"/>

                    </xs:sequence>
                    <xs:attribute ref="code" use="required"/>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    </xs:element>
  </xs:schema>

1 个答案:

答案 0 :(得分:0)

我可以看到你的困惑;选择“选项”几乎可以是任何粒子;合成器(例如xs:sequence或其他xs:choice)将与描述匹配。您需要做的最小事情是更改以下定义。

<xs:complexType name="ResourcePersonType">
    <xs:sequence>
        <xs:choice>
            <xs:sequence>
                <xs:element name="Name" type="xs:string"/>
                <xs:element name="Surname" type="xs:string"/>
            </xs:sequence>
            <xs:element name="FullName" type="xs:string"/>
        </xs:choice>
    </xs:sequence>
</xs:complexType>

如果您想要引用名称,因为您似乎想要使用全局复杂类型,那么可以创建一个组并引用它。以下是与上述情况一致的修改后的XSD:

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:group name="NameNSurnameType">
        <xs:sequence>
            <xs:element name="Name" type="xs:string"/>
            <xs:element name="Surname" type="xs:string"/>
        </xs:sequence>
    </xs:group>

    <xs:complexType name="ResourcePersonType">
        <xs:sequence>
            <xs:choice>
                <xs:group ref="NameNSurnameType"/>
                <xs:element name="FullName" type="xs:string"/>
            </xs:choice>
        </xs:sequence>
    </xs:complexType>

    <xs:attribute name="code">
        <xs:simpleType>
            <xs:restriction base="xs:ID">
                <xs:pattern value="CSE(\d{4})"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:attribute>

    <xs:complexType name="nameType">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="shortName" type="xs:string"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:element name="Modules">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Module" minOccurs="1" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Name" type="nameType"/>
                            <xs:element name="Level" type="xs:positiveInteger"/>
                            <xs:element name="ResourcePerson" type="ResourcePersonType"/>

                        </xs:sequence>
                        <xs:attribute ref="code" use="required"/>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>