Значения элемента, доступные в XSD, основаны на значении другого элемента - PullRequest
0 голосов
/ 10 октября 2018

Учитывая следующий XML:

<category>1000</category>
<type>a</type>

И этот XSD для проверки:

<xs:element name="category" type="categoryType"/>
<xs:element name="type" type="xs:string">

<xs:simpleType name="categoryType">
  <xs:restriction base="xs:string">
    <xs:enumeration value="1000"/>
    <xs:enumeration value="1010"/>
    <xs:enumeration value="1020"/>
    <xs:enumeration value="1030"/>
    <xs:enumeration value="1040"/>
  </xs:restriction>
</xs:simpleType>

Как проверить значение типа, если:

  • type = a (доступно в категории: все)
  • type = b (доступно в категории: 1000,1010,1030)
  • type = c (доступно в категории: 1000,1010,1030,1040)
  • type = d (доступно в категории: 1000, 1010, 1010, 1030)

1 Ответ

0 голосов
/ 10 октября 2018

XSD 1.0

Невозможно без изменения структуры XML, чтобы дифференциация типов передавалась через имя элемента, а не через атрибут @type.

XSD 2.0

Определить новыйвводите через ограничения categoryType для каждого из b, c, d, затем используйте Условное присвоение типа , чтобы разрешить изменение типа для @type.

См. также: Как сделатьтип зависит от значения атрибута с использованием условного присвоения типа

...