0

这是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>
4

1 回答 1

0

我能看出你的困惑;选择“选项”几乎可以是任何粒子;一个合成器(例如xs:sequenceor another 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>
于 2013-04-01T12:59:13.047 回答