0

以下に示す2つの名前空間を含むxmlファイルに.XSDファイルを書き込もうとしました

<?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ファイルを定義するために2つの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 を検証できないことです。

問題が何であるかを知っている機関はありますか?ありがとう!!!

4

1 に答える 1

0

スキーマ ドキュメント ConversionRate.xsd で宣言されたローカル要素が ns2 名前空間にあるように指定する必要があります。これを行う最も簡単な方法はelementFormDefault="qualified"xs:schema要素を追加することです。別の方法として、 およびform="qualified"の要素宣言で指定することもできます。FromCurrencyToCurrency

なんで?

一部のスキーマ作成者は、ローカル要素はローカル属性のように動作し、修飾されていない名前を持つべきだと強く感じています。特定の名前空間のスキーマ ドキュメントで宣言されたすべての要素は、その名前空間にある必要があると同様に強く感じている人もいます。XSD 1.0 を開発しているワーキング グループは、それをめぐって 2 か月間激しく争った (「issue 208!」と小声でささやくことで、古い XSD WG メンバーを青ざめさせることができます)、その後、スキーマの作成者に決定を渡すことで妥協しました。無資格者がコイントスに勝利し、elementFormDefault属性のデフォルト値を にしましたunqualified。これにより、ローカル要素を修飾しないことを望む人々の手間が省けます。つまり、修飾されることを期待するあなたのような人々elementFormDefault="qualified"は、標準のスキーマ ドキュメント テンプレートの一部を作成する必要があります。

于 2013-01-16T16:33:58.207 に答える