web-dev-qa-db-ja.com

Visual StudioでのXSDを使用したXML検証IDE

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

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

私が試したもの:

  • XMLドキュメントを使用して、プロジェクトにXSDを追加しました。
  • XSDをXMLスキーマリストに追加しました(XML/Schemas ...メニュー項目の下)。
  • SchemaLocationおよびnoNamespaceSchemaLocation属性もXMLドキュメントに含めました。

Visual Studioは、まだ有用なデバッグ情報や編集情報を放棄していません。私は2010と2008の両方を試しました(2008年に思ったことはあります)

更新:私は別の開発者にこれを試してもらったが、彼にも失敗した。彼は、他のXML文書でそれを実行し、機能していたことを知っています。次に、Oxygen XMLエディターをダウンロードしましたが、同じXMLファイルとXSDファイルで正常に機能したため、ファイルは正常に見えます(または、Oxygenの方がより寛容で柔軟です...)

92
Jim McKeeth

Visual StudioのXMLドキュメントを、お持ちのXSDファイルに関連付ける必要があります。

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

    XML Properties > Schema

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

    XML Schema Selector

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

  4. これらすべてが整ったら、Visual Studio XMLエディターは青い波線を使用してエディターでXMLの問題を強調表示します。

    Example of Error

132
marc_s

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" />
33
Ross McNab

ここでのもう1つの失敗点は、Windows 7のスキーマファイルの「ブロック」です。ディスク上のxsdファイルを右クリックし、[プロパティ]> [全般]を選択します。これにより、VS2012でXML検証が失敗していました。

3
EJA

Xsdには、XMLで参照しているネームスペースに似た属性"targetNamespace"/schema/@targetNamespaceが含まれていますか?

例:

[〜#〜] xsd [〜#〜]

<xs:schema .... targetNamespace="Datafile.xsd" ... >

[〜#〜] xml [〜#〜]

<data xmlns="Datafile.xsd" >...</data>

参照: XML/XSDインテリセンスがVisual Studio 2010で機能しない

1
k3b

これと同じ問題がありましたが、VSはすでにスキーマを正しく参照していました。検証しようとしていたファイルには、「xml」ファイル拡張子がありませんでした。ファイル名の末尾に.xmlを追加すると、検証が機能し始めました。

0
John Livermore