8

私は答えを探していましたが、見つけることができませんでした:

  • Visual Studio 2010 のIntellisenseを介した XSD キー/キー参照の検証サポートはありますか?
  • もしそうなら、それを機能させる方法は?
  • いいえの場合、Visual Studio に XSD スキーマを持つ XML でキー/参照の検証を行う (組み込みの) 方法はありますか?

ありがとう!

更新:質問は、XSD ファイルを持つ XML を検証する方法に関するものではないことに注意してください。私は、Visual Studio でのキー/キーリファレンス インテリセンス/その他のサポートについて具体的に尋ねていますが、これはまったく追加されていないようです。

4

3 に答える 3

1

この機能は現在、VS2010 ではサポートされておらず、VS2012 でもサポートされていません (MS テクニカル サポートによる)。

多分彼らは将来のバージョンでそれをサポートするでしょう...

于 2012-11-07T19:28:37.327 に答える
1

VS 2013 と VS 2015 で試してみました。キー/refkey を検証しました。ただし、親レベルで警告が表示されました。

しかし、@antiduh が言ったように、彼らはまだ xsd ファイルをチェックしていません。したがって、xsd の key/refkey が正しいことを確認する必要があります。

簡単なサンプルを理解するのに何時間もかかりました。MSDNのサンプルでさえ機能しません。少し変更する必要がありました。

まず、選択した xsd に対して Visual Studio で xml を検証する方法を理解していることを確認してください。

次に、次のサンプル xsd および xml を使用してキー/refkey を検証します。key/ref ルールに違反する要素ではなく、ルート要素を閉じるときに警告が表示されることに注意してください。

xsd ファイルは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        targetNamespace="namespace1"
        xmlns:r="namespace1"
        elementFormDefault="qualified">

  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="A" type="r:A" maxOccurs="unbounded"/>
        <xs:element name="B" type="r:B"/>
      </xs:sequence>
    </xs:complexType>
    <xs:keyref name="dummy" refer="r:pNumKey">
      <xs:selector xpath="r:A/r:part"/>
      <xs:field xpath="@ref-number"/>
    </xs:keyref>
    <xs:key name="pNumKey">
      <xs:selector xpath="r:B/r:part"/>
      <xs:field xpath="@key-number"/>
    </xs:key>
  </xs:element>

  <xs:complexType name="A">
    <xs:sequence>
      <xs:element name="part" maxOccurs="unbounded">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="xs:string">
              <xs:attribute name="ref-number" type="xs:integer"/>
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="B">
    <xs:sequence>
      <xs:element name="part" maxOccurs="unbounded">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="xs:string">
              <xs:attribute name="key-number" type="xs:integer"/>
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

</xs:schema>

xml ファイルは次のようになります。

<?xml version="1.0" encoding="utf-8" ?>
<root xmlns="namespace1">
  <A>
    <!-- if the ref-number is equal to one of the key-number, the validation will pass -->
    <part ref-number="1"/>
  </A>
  <A>
    <!-- if the ref-number is not equal to one of the key-number, the validation will give error -->
    <part ref-number="5"/>
  </A>
  <B>
    <part key-number="1"/>
    <part key-number="2"/>
    <part key-number="3"/>
  </B>
</root><!--you will see warnings here-->
于 2016-09-08T21:20:51.233 に答える