0

我尝试将.XSD文件写入下面显示的包含 2 个命名空间的 xml 文件

<?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文件

第一个(信封.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。

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

4

1 回答 1

0

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

为什么?

一些模式作者强烈认为本地元素应该表现得像本地属性,并且具有非限定名称;其他人同样强烈地认为,在特定命名空间的模式文档中声明的所有元素都应该在该命名空间中。开发 XSD 1.0 的工作组为此苦苦挣扎了几个月(您仍然可以通过对他们耳语“问题 208!”来让老 XSD WG 成员脸色苍白),然后通过将决定交给架构作者而妥协。不合格的一方赢得了抛硬币,并且elementFormDefault属性的默认值被设置为unqualified。这为希望本地元素不合格的人省去了麻烦,这意味着像您这样希望他们合格的人需要制作elementFormDefault="qualified"标准模式文档模板的一部分。

于 2013-01-16T16:33:58.207 回答