2012-04-11 16 views
4

Ich bin zugegebenermaßen neu in Schema, und ich versuche, ein bestimmtes Attribut innerhalb eines Satzes eindeutig zu sein. Ich brauche diesen Wert auch als Schlüssel, da er an anderer Stelle referenziert wird.XML-Schema eindeutige Schlüssel

Dies ist mein aktuelles Schema:

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

Das ist mein xml ist:

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

ich derzeit Visual Studio 2010, und es sagt, bin mit, dass diese XML gültig ist, wenn es throw tut eine Warnung, wenn der Name nicht da ist. Ich möchte, dass es eine Warnung gibt, wenn zwei Namen gleich sind.

Könnte mir bitte jemand in die richtige Richtung zeigen?

Vielen Dank für Ihre Zeit. So

Antwort

4

ich es dachte, hier nach einem Blick aus:

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

Die schnelle Antwort ist, dass Sie den Namespace zu dem XPath-Ausdruck hinzufügen müssen. Nicht sicher, ob dies eine Sache VS ist oder einfach nur im Allgemeinen, aber ...

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

die Probleme behoben, die ich habe.

Nochmals vielen Dank für Ihre Zeit, und ich entschuldige mich für die Verschwendung.

Verwandte Themen