XML模式唯一键

问题描述:

我承认对Schema来说是新的,我试图让一个特定的属性在一个集合中是唯一的。我也需要这个价值是一个关键,因为它会在其他地方引用。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> 

这是我的xml:

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

我目前使用Visual Studio 2010,它说,这个XML是有效的,但它确实扔如果名字不在那里,会发出警告。如果两个名字相同,我希望它会发出警告。

难道有人请指点我正确的方向吗?

谢谢你的时间。

所以我想通了找这里经过:

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> 

固定的,我遇到的问题。

再次感谢您的时间,我对此表示歉意。