Visual Studio IDEのXSDを使用したXML検証
-
01-10-2019 - |
質問
私は以前にこれをやったことがあることを知っていますが、今日は機能していませんし、それを行う方法を説明する場所を見つけることもできません。それは私の睡眠不足かもしれませんが、私はグレムリンを疑っています。
XMLドキュメントと、それを定義するXSDでいっぱいのディレクトリがあります。 Visual IDEを設定して検証障害を通知し、特定のコンテキストで有効なタグと属性のIntelliSenseリストを提供するにはどうすればよいですか?
私が試したこと:
- XMLドキュメントを使用して、XSDをプロジェクトに追加しました。
- XSDをXMLスキーマリストに追加しました(XML / Schemas ...メニュー項目)。
- XMLドキュメントへの回路図および非ムーズスペースムロケーション属性も含めました。
Visual Studioはまだ有用なデバッグや編集情報を放棄していません。私は2010年と2008年の両方を試しました(2008年に私はそれをやったと思いました)
アップデート: 私は別の開発者にこれを試してもらいましたが、彼にとっても失敗しました。彼は、他のXMLドキュメントでそれを行ったことを知っています。次に、Oxygen XMLエディターをダウンロードしましたが、同じXMLおよびXSDファイルで正常に動作したため、ファイルは問題ないようです(または、酸素はより寛容 /柔軟性があります。)
解決
Visual StudioのXMLドキュメントを、持っているXSDファイルに関連付ける必要があります。
XMLドキュメントのプロパティウィンドウにこのようなものが表示されます。
XMLスキーマセットエディター(プロパティウィンドウの「スキーマ」テキストボックスの(...)ellipsisをクリックすると開きます)。スキーマが存在することを確認する必要があります。また、確認してください
Use
そのスキーマの列が有効になっています - そうでない場合は、それをクリックしてください - オプションのドロップダウンリストが取得されます。Use
グリーンチェックマークの1つ:Visual Studioのエラーリストウィンドウが表示されていることを確認してください(メニュービュー>エラーリスト)。これにより、XMLとXSDスキーマの定義の間のすべての矛盾が表示されます。
これらすべてが整ったら、Visual Studio XMLエディターは、Blue Squiggliesを使用してエディターのXMLの問題を強調する必要があります。
他のヒント
Visual Studioでファイルを手動で関連付ける必要はありません - それは 自動的 XMLファイルをXSDファイルを両方とも開いている場合は、名前空間を正しく定義する場合があります。
名前空間を定義するには:
XMLファイルのルート要素:
<Data xmlns='http://yourdomain.com/yourschema.xsd'>
...
</Data>
XSDファイルのスキーマ要素:
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://yourdomain.com/yourschema.xsd"
xmlns:this="http://yourdomain.com/yourschema.xsd"
elementFormDefault="qualified">
...
</xs:schema>
TargetNamesSpaceがあるときのスキーマでタイプを使用することに関するメモ
あなたが指定しているので targetNamespace
スキーマでは、スキーマで定義されているタイプへの参照には、名前空間が付いている必要があります(そのため、追加しました。 xmlns:this
上記の属性 <xs:schema />
エレメント)。
<!-- Define the type as normal -->
<xs:complexType name="Row">
<xs:sequence>
<xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="Value" type="xs:float" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
<!-- Use the type (note the "this:" prefix) -->
<xs:element name="Row" type="this:Row" minOccurs="0" maxOccurs="unbounded" />
ここでの障害のもう1つのポイントは、Windows 7の「ブロック」スキーマファイルです。ディスク上のXSDファイルを右クリック、プロパティ>一般的に、ブロックされている場合、「ブロック解除」ボタンがあります。これにより、XML検証がVS2012で失敗しました。
XSDには属性が含まれていますか "targetNamespace"
/schema/@targetNamespace
それはあなたがXMLで参照している名前空間に似ていますか?
例:
XSD:
<xs:schema .... targetNamespace="Datafile.xsd" ... >
XML:
<data xmlns="Datafile.xsd" >...</data>
私はこれと同じ問題を抱えていましたが、VSは私のスキーマをすでに正しく参照していました。検証しようとしていたファイルには、「XML」ファイル拡張子がないことがわかりました。ファイル名の最後に.xmlを追加すると、検証が機能し始めました。