Visual Studio IDEのXSDによるXML検証


96

以前にこれを行ったことは知っていますが、今日は機能していません。また、その方法を説明する場所も見つかりません。睡眠不足かもしれませんが、グレムリンが疑われます。

XMLドキュメントと、それを定義するXSDでいっぱいのディレクトリがあります。検証エラーを通知するようにVisual IDEを設定し、特定のコンテキストで有効なタグと属性のインテリセンスリストを提供するにはどうすればよいですか?

私が試したこと:

  • XSDをXMLドキュメントと共にプロジェクトに追加しました。
  • XSDをXMLスキーマリストに追加しました([XML /スキーマ...]メニュー項目の下)。
  • schemaLocation属性とnoNamespaceSchemaLocation属性をXMLドキュメントに含めました。

Visual Studioは、有用なデバッグ情報や編集情報をまだあきらめていません。2010年と2008年の両方を試しました(私は以前に2008年にそれをやったことがあると思いました)

更新:別の開発者に試してもらいましたが、彼も失敗しました。彼は他のXML文書でそれを実行し、それを機能させたことを知っています。次に、Oxygen XMLエディターをダウンロードしましたが、同じXMLファイルとXSDファイルで問題なく動作したため、ファイルは問題ないように見えます(またはOxygenの方が許容範囲が広い/柔軟性が高い...)。

回答:


138

Visual StudioのXMLドキュメントを、使用しているXSDファイルに関連付ける必要があります。

  1. XMLドキュメントの[プロパティ]ウィンドウに次のようなものが表示されます。

    XMLプロパティ>スキーマ

  2. XMLスキーマセットエディター([プロパティ]ウィンドウの[スキーマ]テキストボックスで省略記号(...)をクリックすると開きます)で、スキーマが存在することを確認する必要があります。また、Useそのスキーマの列が有効になっていることを確認します。有効になっていない場合は、クリックしてください。オプションのドロップダウンリストが表示さUseれ、緑色のチェックマークが付いている列を選択します。

    XMLスキーマセレクター

  3. Visual Studioのエラーリストウィンドウが表示されていることを確認します(メニューの[表示]> [エラーリスト])。これにより、XMLスキーマ定義とXSDスキーマ定義の間のすべての不整合が表示されます。

  4. 以上がすべて完了すると、Visual Studio XMLエディターは、青い波線を使用してエディターでXMLの問題を強調表示します。

    エラーの例


おかげで、それは非常に詳細な説明ですが、私のものはまだ機能していません。そのようなプロパティからスキーマリストにアクセスできることを知りませんでした。
ジムマッキース2010

@ジム・マッキース:XMLを変更して再度保存するとどうなりますか?XML検証でトリガーが必要になる場合があります...
marc_s

うまくいかなかったにもかかわらず、私はあなたの答えを受け入れました。私のシステムは正常に機能していないと思いますが、新しいコンピュータに移動しましたが、すべて正常に動作します。
ジムマッキース

38
あなたは同じ問題を抱えていたが、私は、XMLファイルをエディタで開いていなければならないことに気づいた前に、私は時間のとんでもない金額を過ごし、フォーカスがあることが必要かどうかわからない@jim エディタで [プロパティ]ウィンドウを呼び出すときに。その後、スキーマを割り当てることができる「XMLドキュメント」プロパティを取得します。ソリューションエクスプローラーにフォーカスがある場合、[プロパティ]ウィンドウにはファイルのプロパティのみが表示されます。つまり、そこでスキーマを割り当てることはできません。
herzbube

2
@herzbubeの調査結果を回答自体に追加する必要があると思います。
アシシ

35

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>

targetNamespaceがある場合のスキーマでのタイプの使用に関する注意

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" />

3

ここでのもう1つの障害ポイントは、Windows 7の「ブロック」スキーマファイルです。ディスク上のxsdファイルを右クリックし、[プロパティ]> [全般]をクリックします。ブロックされている場合は、[ブロック解除]ボタンが表示されます。これにより、VS2012でXML検証が失敗していました。



0

私はこれと同じ問題を抱えていましたが、VSはすでに私のスキーマを正しく参照していました。検証しようとしたファイルに 'xml'ファイル拡張子がないことがわかりました。ファイル名の最後に.xmlを追加すると、検証が機能し始めました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.