如何为没有包装元素的列表编写XSD

时间:2012-10-10 08:42:19

标签: xml xsd

是否可以xsd:complexType包含xsd:sequencexsd:element

<xsd:complexType name="employeesType" mixed="true">
    <xsd:sequence>
        <xsd:element name="employee" type="employeeType"
            maxOccurs="unbounded" minOccurs="0" />
    </xsd:sequence>
    <!-- ERROR
    <xsd:element name="responseTime" type="responseTimeType"></xsd:element>
     -->
</xsd:complexType>

1 个答案:

答案 0 :(得分:1)

正如您在上面的示例中所示,不允许<xsd:element />作为<xsd:complexType />的直接子项(请参阅reference at w3schools.com)。考虑到previous question中的示例,我认为您可以使用这样的模式实现您想要做的事情:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="root">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="date" type="xsd:string" />
            <xsd:element name="responseTime" type="xsd:decimal" />
            <xsd:element name="employee" minOccurs="0" maxOccurs="unbounded">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="name" type="xsd:string" />
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
</xsd:schema>

这将验证您的示例代码:

<?xml version="1.0"?>
<root>
    <date> 9:51 AM 10/10/2012 </date>
    <responseTime> 1.20</responseTime>
    <employee>
        <name> Mohammad</name>
    </employee>
    <employee>
        <name> Ali</name>
    </employee>
    <employee>
        <name> Mostafa</name>
    </employee>
    <employee>
        <name> Mahmoud</name>
    </employee>
</root>

您可能希望将<date />的类型更改为xsd:date