XSD元素的值是另一个元素的名称

问题描述:

我已经尝试了很多次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

看看这个使用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