2013-02-13 35 views
1

我有以下架構問題 我要「匹配」 jobGroup與jobGroup元素屬性的作業元素的屬性,但我無法驗證此costraints通過驗證驗證錯誤:keyref

這是我的架構和你忘了在選擇使用完全合格的名稱應該失敗

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema targetNamespace="http://www.example.org/example" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:tns="http://www.example.org/example" 
      elementFormDefault="qualified" > 

    <xs:element name="cluster" type="tns:clusterType"> 
     <xs:keyref name="jobGroupKeyRef" refer="tns:jobGroupKey"> 
      <xs:selector xpath=".//job"></xs:selector> 
      <xs:field xpath="@jobGroup"></xs:field> 
     </xs:keyref> 
     <xs:key name="jobGroupKey"> 
      <xs:selector xpath=".//jobGroup"></xs:selector> 
      <xs:field xpath="@name"></xs:field> 
     </xs:key> 
    </xs:element> 

    <xs:complexType name="jobType"> 
     <xs:attribute name="id" 
        type="xs:positiveInteger" 
        use="required"/> 
     <xs:attribute name="submissionTime" 
        type="xs:dateTime" 
        use="required"/> 
     <xs:attribute name="jobGroup" 
        type="xs:string" 
        default="default"/> 
    </xs:complexType> 


    <xs:complexType name="jobGroupType"> 
     <xs:attribute name="name" 
        type="xs:string" 
        use="required"/> 
     <xs:attribute name="description" 
        type="xs:string" 
        default=""/> 
    </xs:complexType> 


    <xs:complexType name="clusterType"> 
     <xs:choice minOccurs="1" maxOccurs="unbounded"> 
     <xs:element name="job" 
        type="tns:jobType" 
        minOccurs="0" 
        maxOccurs="unbounded"/>   
     <xs:element name="jobGroup" 
        type="tns:jobGroupType" 
        minOccurs="0" 
        maxOccurs="unbounded"/> 
     </xs:choice> 
     <xs:attribute name="name" 
        type="xs:string" 
        use="required"/> 
    </xs:complexType> 

</xs:schema> 


<cluster xmlns="http://www.example.org/example" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" 
    xs:schemaLocation="http://www.example.org/example XSDFile.xsd" 
    name="CLUSTER1" > 
    <job submittedHost="HOST1" 
     id="1" 
     submissionTime="2009-03-31T17:40:35.000+02:00" 
     jobGroup="default"></job> 
    <job submittedHost="HOST2" 
     id="2" 
     submissionTime="2009-03-31T17:40:35.000+02:00" 
     jobGroup="wrongName"></job> 
    <jobGroup name="default" 
     description="Job Group number 1"></jobGroup> 

</cluster> 

回答

1

的例子。你錯過了命名空間。

試試這個:

<xs:element name="cluster" type="tns:clusterType"> 
    <xs:keyref name="jobGroupKeyRef" refer="tns:jobGroupKey"> 
     <xs:selector xpath=".//tns:job"></xs:selector> 
     <xs:field xpath="@jobGroup"></xs:field> 
    </xs:keyref> 
    <xs:key name="jobGroupKey"> 
     <xs:selector xpath=".//tns:jobGroup"></xs:selector> 
     <xs:field xpath="@name"></xs:field> 
    </xs:key> 
</xs:element> 
+0

謝謝,解決了 – 2013-02-13 16:05:12