2012-04-11 7 views
4

Я, по общему признанию, новичок в Schema, и я пытаюсь получить уникальный атрибут, чтобы быть уникальным в наборе. Мне также нужно, чтобы это значение было ключевым, так как оно будет упоминаться в другом месте.XML Schema Unique Keys

Это моя текущая схема:

<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 является действительным, если он делает бросок предупреждение, если имя не существует. Я бы хотел, чтобы он бросил предупреждение, если два имени совпадают.

Может ли кто-нибудь указать мне в правильном направлении?

Спасибо за ваше время.

ответ

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> 

Исправлены проблемы, которые я имел.

Еще раз спасибо за ваше время, и я приношу свои извинения за его растрату.