如何在XSD的XPATH中使用变量

问题描述 投票:0回答:1

我有这样的XML,我想确保特定preDefinedRecipe的每个parameterDef ref都应该是其corecponding recipeStructureDef的parameterDef的子集。

例如,来自预定义食谱的'BREAD'的所有参数都应属于主菜谱结构'BREAD'

  <recipeConfig>
    <recipeStructures> <!-- recipe template/ recipeStructureTypes-->

        <recipeStructureDef mnemonic="BREAD" title="Recipe.Bread"/>
        <parametersTab>
                <parameterTabDef title="Recipe.Bread.Main">
                    <parameterGroup title="group1">
                            <parameterDef mnemonic="SUGAR_QTY"/>
                            <parameterDef mnemonic="SALT_QTY"/ >
                    </parameterGroup>   
                </parameterTabDef>
        </parametersTab>

        <recipeStructureDef mnemonic="CAKE" title="Recipe.Bread"/> 
        .....
         <recipeStructureDef mnemonic="PANCAKE" title="Recipe.Bread"/> 
        .....
     </recipeStructures>


     <preDefinedRecipes>
        <preDefinedRecipe type="BREAD" name="sweet bread"  ordinal="1" writerLevel="Service">
        <parameterDef ref="SUGAR_QTY" value="3" />
                <parameterDef ref="SALT_QTY" value="3" />
                <parameterDef ref="OIL_QTY" value="1" /> 

        </preDefinedRecipe>
      </preDefinedRecipes>
</recipeConfig>

我有以下代码,所有parmams都属于recipeStructures中的参数,但是我想针对recipeStructureDef助记符=“”来验证每个preDefinedRecipe类型=“ =”

我认为方法是在XPATH中添加变量,但不确定如何继续。

  <xs:key name="paramKey">
    <xs:selector xpath="./recipeStructures/recipeStructureDef/parametersTab/parameterTabDef/parameterGroup/parameterDef" />
    <xs:field xpath="@mnemonic" />
    </xs:key>
    <xs:keyref name="paramKeyRef" refer="paramKey">
      <xs:selector xpath="./preDefinedRecipes/preDefinedRecipe/parameterDef"/>
      <xs:field xpath="@ref"/>
    </xs:keyref>
   </xs:element>

任何指导都会有帮助

xml xsd xsd-validation
1个回答
0
投票

定义为在xs:key / xs:keyref中使用的XPath子集不允许使用变量。

对于断言等的XSD 1.1中允许的(较大)XPath子集,也是如此。我不完全理解您的要求,但是在我看来,即使没有变量,XSD 1.1断言也可以完成这项工作。

© www.soinside.com 2019 - 2024. All rights reserved.