2011-04-27 10 views
3

に属性値を制限しますか?私のXSDスキーマの下は、私はこのようなXMLを持っている子属性(参照既存の値)

<xs:complexType name="userCredential"> 
    <xs:attribute name="username" type="xs:string" use="required" /> 
    <xs:attribute name="password" type="xs:string" use="required" /> 
</xs:complexType>  

<xs:complexType name="userCredentials"> 
    <xs:sequence> 
    <xs:element name="userCredential" type="tns:userCredential" minOccurs="1" 
       maxOccurs="unbounded" /> 
    </xs:sequence> 
    <xs:attribute name="default" use="required" > 
     <xs:simpleType> 
     <xs:restriction> 
      <xs:pattern value="" /> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:attribute>   
</xs:complexType> 

答えて

8

これは完全に可能です。ブロック内のすべてのユーザー名の一意性を強制するXSDの例を次に示します。また、default属性でこれらの値のいずれかを参照する必要があります。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="userCredentials" type="CredsType"> 

    <!-- ensure all user names are unique --> 
    <xs:unique name="uniqueUserNames"> 
     <xs:selector xpath="userCredential"/> 
     <xs:field xpath="@username"/> 
    </xs:unique> 

    <!-- ensure that the `default` attribute references existing username --> 
    <xs:keyref name="defaultNameRef" refer="userNames"> 
     <xs:selector xpath="."/> 
     <xs:field xpath="@default"/> 
    </xs:keyref> 
    <xs:key name="userNames"> 
     <xs:selector xpath="./userCredential"/> 
     <xs:field xpath="@username"/> 
    </xs:key> 
    </xs:element> 

    <xs:complexType name="CredsType"> 
    <xs:sequence> 
     <xs:element name="userCredential" type="UserCredentialType" 
        maxOccurs="unbounded" /> 
    </xs:sequence> 
    <xs:attribute name="default" type="xs:NCName" /> 
    </xs:complexType> 

    <xs:complexType name="UserCredentialType"> 
    <xs:attribute name="username" type="xs:NCName"/> 
    <xs:attribute name="password" type="xs:string"/> 
    </xs:complexType> 
</xs:schema> 
関連する問題