2015-05-20 95 views
1

我已經嘗試了很多次Google,但這不是可能的,或者我使用的術語不正確。是否有可能爲以下例如XSD:XSD元素的值是另一個元素的名稱

<inputs> 
    <input> 
     <name>Test 1</name> 
     <valuesTag>values_generated_15Jan2015</valuesTag> 
    </input> 
<inputs> 
<values> 
    <values_generated_15Jan2015> 
     ... 
    </values_generated_15Jan2015> 
</values> 

之所以這樣做,這是我們必須只爲值列表的幾個選擇,但大量的投入,其中值的每個列表被多個輸入使用,並且不會重複值。

+0

也許你可以用XSD 1.1來做到這一點。如果我理解的很好,對於每個* *節點,它應該出現在* *之內,該節點的名稱等於值* *。你需要哪種內容(例如)* *? – sergioFC

+0

這是正確的。這些值是一個複雜數字列表,範圍可以從50到1000個條目。 – steveo225

+0

可以使用類似於* *? – sergioFC

回答

1

看看這個使用XSD 1.1斷言的例子,這些斷言在註釋中進行了解釋。

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1"> 

    <xs:element name="root"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="inputs" type="inputsType" /> 
       <xs:element name="values" type="valuesType" /> 
      </xs:sequence> 
      <!-- Ensures that there is the same number of value nodes than input nodes --> 
      <xs:assert test="count(values/value) = count(inputs/input)" /> 
      <!-- Ensures that every value in a valueId node is unique --> 
      <xs:assert test="count(inputs/input/valueId) = count(distinct-values(inputs/input/valueId))" /> 
      <!-- Ensures that every value in a id attribute is unique --> 
      <xs:assert test="count(values/value) = count(distinct-values(values/value/@id))" /> 
      <!-- Ensures that all values in id attributes appear in valueId --> 
      <xs:assert test="count(values/value[@id = ../../inputs/input/valueId]) = count(values/value)" /> 
     </xs:complexType> 
    </xs:element> 

    <xs:complexType name="inputsType"> 
     <xs:sequence> 
      <xs:element name="input" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="name" type="xs:string" /> 
         <xs:element name="valueId" type="xs:string" /> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="valuesType"> 
     <xs:sequence> 
      <xs:element name="value" maxOccurs="unbounded"> 
       <xs:complexType> 
        <!-- Content --> 
        <xs:attribute name="id" type="xs:string" use="required" /> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 

</xs:schema> 
+1

雖然我必須編寫自己的'getElementById()'Xerces並不好玩 – steveo225

+0

我很高興它的工作。我不熟悉Xerces – sergioFC

相關問題