Как иметь переменную в XPATH в XSD - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть XML, как это, я хочу убедиться, что каждый параметр parameterDef конкретного preDefinedRecipe должен быть подмножеством parameterDef его corecponding recipeStructureDef.

например) Все параметры «BREAD» из предопределенных рецептов должны принадлежать recipeStructureDef «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, но я хочу , проверяйте это каждый preDefinedRecipe type = "" против recipeStructureDef mnemonic = ""

Я предполагаю, что нужно добавить переменную в 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>

Любое руководство будет полезно

1 Ответ

1 голос
/ 04 февраля 2020

Подмножество XPath, определенное для использования в xs: key / xs: keyref, не позволяет использовать переменные.

То же самое верно для (большего) подмножества XPath, разрешенного в XSD 1.1 для утверждений и тому подобного , Я не совсем понимаю ваши требования, но мне кажется, что утверждение XSD 1.1 выполнит свою работу, даже без переменных.

...