Xml XSD混淆:导入和/或包含

Xml XSD混淆:导入和/或包含,xml,xsd,Xml,Xsd,我有几个小的xsd文件,由于重复,我从其他文件中去掉了。我想如果换一种类型,我可以减少维护。这里有一个例子: <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:simpleType name="StartCodeType"> <xs:restriction base="xs:integer">

我有几个小的xsd文件,由于重复,我从其他文件中去掉了。我想如果换一种类型,我可以减少维护。这里有一个例子:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:simpleType name="StartCodeType">
        <xs:restriction base="xs:integer">
            <xs:pattern value="99[0-9]{3,6}"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

现在我有一个xsd,它正试图像这样包含这个文件:

<?xml version="1.0"?>
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.quikq.com/xsd/unlukupRequest" 
    xmlns="http://www.quikq.com/xsd/unlukupRequest"
    elementFormDefault="qualified" >

    <xs:include schemaLocation="TrimmedStringType.xsd" />
    <xs:include schemaLocation="StartCodeType.xsd" /> 
    <xs:include schemaLocation="AscendDescendFlag.xsd" /> 

(等)

我的程序使用Xerces SAX2解析XML。下面是我得到的错误:

文件“/home/dfcuser/unlukupRequest.xsd”中出错,行=32,列=69,XML元素=,在中找不到类型

文件“/home/dfcuser/unlukupRequest.xsd”中出错,行=34,列=87,XML元素=,在中找不到类型

文件“/home/dfcuser/unlukupRequest.xsd”中出错,行=38,列=68,XML元素=,找不到基类型:TrimmedStringType

文件“/home/dfcuser/unlukupRequest.xsd”中出错,行=50,列=108,XML元素=,SimpleType(http://www.quikq.com/xsd/unlukupRequest:AscendDescendFlag)对于属性:未找到ad_标志

无论如何,我认为这会起作用,因为我的“类型”没有定义名称空间

这是XSD

<?xml version="1.0"?>
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.quikq.com/xsd/unlukupRequest" 
    xmlns="http://www.quikq.com/xsd/unlukupRequest"
    elementFormDefault="qualified" >

    <!--
        Homebrewed data types for more strict checking on different fields 
    -->
    <xs:include schemaLocation="StartCodeType.xsd" /> 
    <xs:include schemaLocation="TrimmedStringType.xsd" />
    <xs:include schemaLocation="AscendDescendFlag.xsd" /> 

    <!-- 
        Describes the root element 
    -->
    <xs:element name="unlukupRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="transaction" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <!--
        Describes the response element, which is the child to the authNotifyResponse root
    -->
    <xs:element name="transaction">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="startCode" type="StartCodeType" />
                <xs:element name="ununit" type="xs:string" minOccurs="0" />
                <xs:element name="exception" type="TrimmedStringType" minOccurs="0" />
                <xs:element name="opt" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:simpleContent>
                            <xs:extension base="TrimmedStringType">
                                <xs:attribute name="name" type="xs:NMTOKEN" use="required" />
                            </xs:extension>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
                <xs:element name="orderBy" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="field" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:attribute name="name"    type="xs:NMTOKEN"        use="required" />
                                    <xs:attribute name="ad_flag" type="AscendDescendFlag" use="required" />
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="rangeLower" type="xs:integer" minOccurs="0" />
                <xs:element name="rangeUpper" type="xs:integer" minOccurs="0" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

您提供的XSD驱动程序文件似乎是合法的;当我在本地保存它和StartCodeType.xsd文件时,它们的行为与预期的一样。我的猜测是,由于某些原因,我猜Xerces没有找到包含的文件

如果将语法或其他错误注入到包含的模式文档中,Xerces是否会抱怨这些错误?(如果没有,可能它没有读取它们;这可以解释为什么它找不到类型定义。)


如果在包含的架构文档中显式地提供目标命名空间,而不是依赖chameleon include,这会改变行为吗?

我认为您没有向我们显示错误所在的行号。我为本例添加了XSD文件。谢谢你给我的建议。我为这件事绞尽脑汁,谢谢!