我有几个小的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”,line = 32,column = 69,XML element =,http://www.quikq.com/xsd/unlukupRequest:StartCodeType中找不到类型
文件错误“/home/dfcuser/unlukupRequest.xsd”,line = 34,column = 87,XML element =,http://www.quikq.com/xsd/unlukupRequest:TrimmedStringType中找不到类型
文件错误“/home/dfcuser/unlukupRequest.xsd”,line = 38,column = 68,XML element =,找不到基本类型:TrimmedStringType
文件“/home/dfcuser/unlukupRequest.xsd”,line = 50,column = 108,XML element =,SimpleType(http://www.quikq.com/xsd/unlukupRequest:AscendDescendFlag)属性错误: ad_flag未找到
无论如何,我认为这可行,因为我的'类型'没有定义命名空间。
这是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>
答案 0 :(得分:0)
您提供的XSD驱动程序文件似乎是合法的;当我在本地保存它和你的StartCodeType.xsd文件时,它们的行为与预期的一样。我的猜测是因为我无法猜测Xerces没有找到包含的文件。
如果您在包含的架构文档中注入语法或其他错误,Xerces会抱怨它们吗? (如果没有,也许它不是在阅读它们;这可以解释为什么它找不到类型定义。)
如果您在包含的架构文档中显式提供目标命名空间,而不是依赖于chameleon include,那会改变行为吗?