4

私は確かにスキーマに不慣れで、特定の属性をセット内で一意にしようとしています。他の場所で参照されるため、この値をキーにする必要もあります。

これは私の現在のスキーマです:

 <xs:element name="subroutines" type="guisubroutines_Type" minOccurs="1">

    <xs:key name="Subroutine_Key">
      <xs:selector xpath="subroutine"/>
      <xs:field xpath="@name"/>
    </xs:key>

    <xs:unique name="Subroutine_Unique">
      <xs:selector xpath="subroutine"/>
      <xs:field xpath="@name"/>
    </xs:unique>

  </xs:element>

  <xs:complexType name="guisubroutines_Type" >
    <xs:sequence>
      <xs:element name="subroutine" type="subroutine_Type" minOccurs="0" maxOccurs="unbounded"/>        
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="subroutine_Type">
    <xs:attribute name="name" type="xs:string" use="required"/>
  </xs:complexType>

これは私のxmlです:

  <subroutines>
    <subroutine name="one"></subroutine>
    <subroutine name="one"></subroutine>
  </subroutines>

現在 Visual Studio 2010 を使用していますが、この xml は有効であると表示されていますが、名前が存在しない場合は警告がスローされます。2 つの名前が同じ場合に警告をスローしたいと思います。

誰かが私を正しい方向に向けてもらえますか?

お時間をいただきありがとうございます。

4

1 に答える 1

4

だから私はここを見た後にそれを理解しました:

http://social.msdn.microsoft.com/Forums/en-US/xmlandnetfx/thread/25603e1c-d7dd-48d2-a9f6-8d4177845441/

簡単な答えは、名前空間を xpath 式に追加する必要があるということです。これがVSのことなのか、それとも一般的なのかはわかりませんが...

<xs:key name="Subroutine_Key">
   <xs:selector xpath="mstns:subroutine"/>
   <xs:field xpath="@name"/>
</xs:key>

抱えていた問題を修正しました。

貴重なお時間を割いていただき、重ねて御礼申し上げます。

于 2012-04-11T05:57:51.537 に答える