定义complexContent限制时出错

时间:2018-11-16 13:08:26

标签: xsd restriction complextype

我有两个模式。 第一个架构定义类型BasicSequence(文件Basic.xsd)。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns="http://basic-schema.com" 
    targetNamespace="http://basic-schema.com" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified">

    <xs:complexType name="BasicSequence">
        <xs:sequence>
            <xs:element name="ElementA" type="xs:string"/>
            <xs:any />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="MySequence1">
        <xs:complexContent>
            <xs:restriction base="BasicSequence">
                <xs:sequence>
                    <xs:element name="ElementA" type="xs:string"/>
                    <xs:element name="ElementB" type="xs:string"/>
                </xs:sequence>
            </xs:restriction>
        </xs:complexContent>
    </xs:complexType>    

</xs:schema>

在第二个模式中,我试图基于BasicSequence定义类型:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:basic="http://basic-schema.com" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified">
    <xs:import namespace="http://basic-schema.com" schemaLocation="Basic.xsd"/>
    <xs:complexType name="MySequence2">
        <xs:complexContent>
            <xs:restriction base="basic:BasicSequence">
                <xs:sequence>
                    <xs:element name="ElementA" type="xs:string"/>
                    <xs:element name="ElementB" type="xs:string"/>
                </xs:sequence>
            </xs:restriction>
        </xs:complexContent>
    </xs:complexType>
</xs:schema>

但是在解析过程中,我会遇到下一个错误:

通过限制无效的粒子派生-根据Elt:Elt-NameAndTypeOK,“派生元素'ElementA'不是对基本元素'http://basic-schema.com:ElementA'的有效限制”。

如您所见,MySequence1MySequence2具有相同的结构。但是MySequence1已成功解析,而MySequence2未成功解析。

请帮助您理解问题所在。

1 个答案:

答案 0 :(得分:0)

对于我来说,您尝试使用xs:import而不是xs:include似乎很奇怪。

有关详细信息,请参见What's the difference between xsd:include and xsd:import?