Xml 如何在XSD中的XPATH中使用变量
我有这样一个XML,我想确保特定预定义配方的每个parameterDef ref都应该是其CoreConding配方的parameterDef的子集 例如,预定义配方中“面包”的所有参数应属于配方定义“面包”Xml 如何在XSD中的XPATH中使用变量,xml,xsd,xsd-validation,Xml,Xsd,Xsd Validation,我有这样一个XML,我想确保特定预定义配方的每个parameterDef ref都应该是其CoreConding配方的parameterDef的子集 例如,预定义配方中“面包”的所有参数应属于配方定义“面包” <recipeConfig> <recipeStructures> <!-- recipe template/ recipeStructureTypes--> <recipeStructureDef mnemonic=
<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>
.....
.....
我有以下代码,其中所有参数都属于RecipesStructures中的参数,但我想根据RecipesStructureDef助记符=“”验证每个预定义的Recipe type=“”
我假设方法是在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断言也能完成这项工作。要求是糖量、盐量、油量应始终在特定的条件下。在这种情况下,“preDefinedRecipe”中的OIL_QTY->BREAD不是对应的参数,所以它应该会弹出错误。我认为您对key和keyref的定义是错误的。我不明白你为什么认为变量会有用。