Как проверить, является ли одно значение атрибута всегда значением другого атрибута в XML по XSD - PullRequest
0 голосов
/ 30 января 2020

У меня есть такая структура xm, и я хочу проверить XMl с помощью XSD

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

        <recipeStructureDef mnemonic="BREAD" title="Recipe.Bread"/>
        <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>

Я хочу проверить, является ли <preDefinedRecipe type="BREAD"> всегда значением атрибута mnemoni c из recipeStructureDef mnemonic = ""

Чтобы поместить его другими словами, в поле «preDefinedRecipe» всегда должно быть значение атрибута mnemoni c в «recipeStructureDef»

Так что я должен сделать некоторую проверку , Я застрял здесь, и я не знаю, как действовать. Ниже моя часть кода XSD

  <xs:complexType name="preDefinedRecipeType">
    <xs:sequence>

    <xs:element type="preDefinedRecipeParameterDefType" name="parameterDef" maxOccurs="unbounded" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute type="xs:string" name="type" use="required"/>
    <xs:attribute type="xs:string" name="name" use="required"/>
    <xs:attribute type="xs:byte" name="ordinal" use="required"/>
    <xs:attribute type="xs:string" name="writerLevel" use="required"/>
  </xs:complexType>

Заранее спасибо за помощь

1 Ответ

1 голос
/ 30 января 2020

Поиск xs:key и xs:keyRef.

В объявлении элемента для recipeConfig объявите xs:key с выбором .//recipeStructureDef и полем @mnemonic; и соответствующий xs:keyRef с выбором .//predefinedRecipe и полем @type.

...