2014-01-19 17 views
5

私はスキーマ定義を記述したいXMLを持っています。問題は、xsi:typeを属性として定義する方法がわかりません。ここではXML要素は次のとおりです。xsi:typeをXMLスキーマの属性として定義する方法は?

<SerializedData xsi:type="xs:double">300.0</SerializedData> 

私のXMLスキーマ定義は、これまでに次のようになります。

<complexType name="SerializedDataType"> 
    <simpleContent> 
     <extension base="double"> 

     </extension> 
    </simpleContent> 
</complexType> 

イアン・ロバーツが提案のように私もそれを定義しようとしている:

<element name="SerializedData"/> 

をしかし、 BPELデザイナを使用してこのように初期化すると、次のようになります。

私は、次のような警告を得る:あなたが入力された固定値(正常に動作するように固定値のいくつかのタイプのために必要とされる)、有効なXMLではありません

を。テキスト形式で保存されます。私はこのようにそれを初期化する場合は

が警告ありません:

<SerializedData>300.0</SerializedData> 

しかし、問題は、私が起動しようとしているWebサービスは、リクエストSOAPメッセージが属性XSIを含めるように期待していることである:タイプ= "xs:double"どのようにSOAPリクエストメッセージに含めることができますか?

ご協力いただければ幸いです!

答えて

12

タイプを指定しないで要素を宣言するだけで済みます。

<element name="SerializedData" /> 

xsi:type属性は、要素の特定のインスタンスの実際の型は、要素の宣言された型ではなく、宣言された型に由来するサブタイプでないスキーマ・バリデータを示すために使用されます。型のない要素を宣言することによって、の型を持つことができ、の型が指定され、インスタンスにはxsi:typeが使用されます。

厳密には、タイプがXMLスキーマ型階層のルートである「ur-type」である要素を宣言しています。すべての型は単純で複雑で、最終的にはur型から派生しています。あなたは、単純なコンテンツのみ(サブ要素または属性)へSerializedData要素を制限したい場合は、あなたの質問の後半部分に関しては

<element name="SerializedData" type="anySimpleType" /> 

としてそれを宣言し、あなたのデザイナーツールがその権利の分離である

は、xsi名前空間が宣言されていないため、正しいXMLではありません。名前空間宣言を追加してみてください:

<SerializedData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xsi:type="xs:double">300.0</SerializedData> 
+0

はお返事をあなたにイアン・ロバーツありがとうござい書くべきであることを意味します。私の編集した質問をお読みください。 – Peter

+0

@Peterは正しい名前空間宣言を追加しようとします。 –

+1

それはトリックでした!ありがとう! – Peter

4

のxsi:type属性は、スキーマ内で宣言する必要はありません:それは暗黙的に宣言だし、任意の要素に使用することができます。しかし、ある例では、有効なQNameでなければなりません。

あなたは(a)の名前空間整形式であることを

その後、

<SerializedData xsi:type="xs:double">300.0</SerializedData> 

を記述する場合、あなたは

(b)はschema-する "XSI" の名前空間を宣言する必要があります有効であれば、 "xs"名前空間も宣言する必要があります。

ロバーツが示されているように、これはあなたが

<SerializedData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xsi:type="xs:double">300.0</SerializedData> 
+0

"xsi:type"のプレフィックスに "xs:"を付ける必要がありますか? –

+0

xsi:typeには、スキーマで定義された任意の型を指定できます。組み込み型である必要はありません。 –

+0

xsi:type = "double"は有効でしょうか?どのスキーマが二重であるか知っていますか? –

関連する問題