我的webservice应该能够针对模式验证xml-input(request.xsd)。模式中复杂的唯一元素拥有不同的子元素,这些子元素在其他xsds中定义。我正在导入所有的xsds。但最终无法解析元素类型。 这是我的“request.xsd”:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fe="http://www.some.dir/featurenamespace"
xmlns="http://this.is.my.space"
targetNamespace="http://this.is.my.space"
elementFormDefault="qualified">
<xs:import schemaLocation=" http://www.some.dir/featurenamespace/cmplxtypes.xsd "
namespace=" http://www.some.dir/featurenamespace"/>
<xs:element name="elem1" type="request"/>
<xs:complexType name="request">
<xs:complexContent>
<xs:extension base="fe:complexElement">
<xs:sequence>
<xs:element name="record" type="fe:complexElement "/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
这是架构(例如cmplxtypes.xsd),其中定义了“complexElement”类型:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fe="http://www.some.dir/featurenamespace"
xmlns:ofe ="http://www.some.dir/otherfeaturenamespace"
targetNamespace="http://www.some.dir/featurenamespace"
version="1.1.0"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:include schemaLocation="fe_types.xsd" />
<xs:import schemaLocation="ofe_types.xsd" namespace="http://www.some.dir/otherfeaturenamespace"/>
<xs:complexType name="complexElement">
<xs:sequence>
<xs:element name="feature" type="fe:FeatureType "/>
<xs:element name="otherfeature" type="ofe:otherFeatureType"/>
</sequence>
</xs:complexType>
文件:cmplxtypes.xsd,fe_types.xsd和ofe_types.xsd共享相同的命名空间。
现在,尝试针对request.xsd验证myxml我得到:无法将'complexElement'解析为'type defintion'组件。 我很感激任何帮助。
答案 0 :(得分:0)
模式中存在一些可能解释错误的不一致。
request.xsd似乎没有导入cmplxtypes.xsd,其中定义了fe:complexElement。
<xs:import
schemaLocation="http://www.some.dir/featurenamespace/cmplxtypes.xsd"
namespace=" http://www.some.dir/featurenamespace" />
cmplxtypes.xsd包含ofe_types.xsd,即使命名空间根据request.xsd中的import不匹配。包含其他模式时,命名空间非常匹配(或者包含的模式必须没有目标命名空间)。