C# で最も単純な Web サービスを作成しました。
public void AddData(DataSet ds)
生成されたスキーマ (Wsdl) は次のようになります。
<s:schema xmlns:s="http://www.w3.org/2001/XMLSchema">
...
<s:element ref="s:schema" />
...
</s:schema>
スキーマには import/include 要素が含まれていないことに注意してください。
このスキーマを ac# System.Xml.XmlSchema にロードし、System.Xml.XmlSchemaSet に追加しようとしています。
var set = new XmlSchemaSet();
var fs = new FileStream(@"c:\temp\schema.xsd", FileMode.Open);
var s = XmlSchema.Read(fs, null);
set.Add(s);
set.Compile();
最後の行で次の例外がスローされます。
The 'http://www.w3.org/2001/XMLSchema:schema' element is not declared.
.Net によって生成されたスキーマは、インポートされていないスキーマで宣言されている "s:schema" タイプを使用します。
- .Net が無効なスキーマを作成するのはなぜですか?
- とにかくスキーマをコンパイルする方法は?私がしたことは、 http://www.w3.org/2001/XMLSchemaでスキーマをダウンロードし、それを XmlSchemaSet にも追加したことです。そのオンラインスキーマにはDTD定義が含まれているため、これは機能しませんでした。手動で削除する必要がありましたが、現在はすべて機能しています。これは理にかなっていますか、それとも何か不足していますか?