2013-01-16 27 views
0

我试着写一个.XSD文件,XML文件如下所示的包含2个命名空间编写XML方案定义为一个简单的SOAP文件

<?xml version="1.0" encoding="UTF-8"?> 
<ns1:Envelope 
    xmlns:ns1="http://www.webserviceX.NET/ConversionRate/Input" > 
    <ns1:Body> 
    <ns2:ConversionRate 
     xmlns:ns2="http://www.webserviceX.NET"> 
    <ns2:FromCurrency>USD</ns2:FromCurrency> 
    <ns2:ToCurrency>USD</ns2:ToCurrency> 
    </ns2:ConversionRate> 
    </ns1:Body> 
</ns1:Envelope> 

我写了两个XML方案定义此XML文件

第一个(Envelope.xsd

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:ns1="http://www.webserviceX.NET/ConversionRate/Input" 
    xmlns:ns2="http://www.webserviceX.NET/" 
    targetNamespace="http://www.webserviceX.NET/ConversionRate/Input"> 
    <xs:import namespace="http://www.webserviceX.NET/" 
    schemaLocation="C:\Documents and Settings\RoGulk\Desktop\SPM\ConversionRate.xsd"/> 
    <xs:element name="Body"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="ns2:ConversionRate"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="Envelope"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="ns1:Body"></xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

ConversionRate.xsd(内XSD)看起来像这样

<?xml version="1.0"?> 
<xs:schema targetNamespace="http://www.webserviceX.NET/" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" > 
    <xs:element name="ConversionRate"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="FromCurrency" type="xs:string"/> 
     <xs:element name="ToCurrency" type="xs:string"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

但问题是我不能验证上述针对这些方案定义XML。

有没有人知道问题是什么? 谢谢!!!

回答

0

您需要指定模式文档ConversionRate.xsd中声明的本地元素位于ns2命名空间中。最简单的方法是在xs:schema元素上添加elementFormDefault="qualified";另一种方法是在FromCurrencyToCurrency的元素声明中指定form="qualified"

为什么?

一些模式作者强烈认为,本地元素应该像本地属性一样行为,并且具有非限定名称;其他人同样强烈地认为,在特定命名空间的模式文档中声明的所有元素都应该位于该命名空间中。开发XSD 1.0的工作组苦苦挣扎了好几个月(您仍然可以通过在他们耳边嘀咕“问题208!”让旧的XSD WG成员变得苍白),然后通过将决策交给架构作者进行妥协。不合格的一方赢得投币,并且elementFormDefault属性的默认值为unqualified。这为那些想要本地元素不合格的人节省了麻烦,这意味着像你这样的人,他们期望他们是合格的,需要将elementFormDefault="qualified"作为标准模式文档模板的一部分。

+0

该解决方案正常工作很好,非常感谢你 – Dimuthu