我有这样的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>
任何指导都会有帮助
定义为在xs:key / xs:keyref中使用的XPath子集不允许使用变量。
对于断言等的XSD 1.1中允许的(较大)XPath子集,也是如此。我不完全理解您的要求,但是在我看来,即使没有变量,XSD 1.1断言也可以完成这项工作。