2012-04-11 13 views
4

私は確かにスキーマを初めて使用しています。特定の属性をセット内で一意にすることを試みています。私はまた、他の場所で参照されるので、この値をキーにする必要があります。XMLスキーマ固有のキー

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

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

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

は、私は現在のVisual Studio 2010を使用していて、それがスローをするのに、このXMLは、有効であることを述べていますその名前がない場合の警告。私は2つの名前が同じであれば警告を発することを望みます。

誰かが正しい方向に向いていますか?

ありがとうございます。

答えて

4

だから私はここで見た後、それを考え出した:

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

迅速な答えはあなたがXPath式に名前空間を追加する必要があるということです。 これは

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

は私が持っていた問題を修正... VSの事か、単に一般的であるが、かどうかわかりません。

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

関連する問題