Как ограничить значения элемента в соответствии со значением его атрибута - PullRequest
0 голосов
/ 09 апреля 2019

В моем домашнем проекте по университету мне нужно написать XSD (XML-схему), которая описывает элементы школьной истории. В одном из случаев у меня есть элемент «Disciplina», который имеет атрибут «категория» (см. Пример ниже):

<Disciplina categoria = "atividade academica">
  (...other elements here...)
  <situacao>AC</situacao>
</Disciplina>

Кроме того, элемент «situacao» имеет диапазон для некоторых конкретных строковых значений: «AP, RM, RF, ED, AB, AE, AI, TR, TD, RI, IN» и «category» одинаковы логика: «обригатория, optativa, livre escolha, atividade академика».

Но, когда "категорией" является "atividade acadea", я хочу ограничить возможные значения элемента "situacao" только "AC" или "NC", в противном случае значения ограничения будут "AP", «РМ», «РЧ», «ЭД», «АВ», «АЕ», «МА», «ТР», «ТД», «РИ», «В». Приведенный ниже xml выражает высокий уровень идей, которые я пытаюсь представить:

<element>
  <name>situacao</name>
  <type>String</type>
  <range>AP,RM,RF,RF,ED,AB,AE,AI,TR,TD,RI,IN</range>
  <range categoria = "atividade academica">AC,NC</range>
</element>

Мой вопрос: Как я могу представить это изменение ограничения значений «situacao» согласно значению «категорий» в XML-схеме?

1 Ответ

0 голосов
/ 09 апреля 2019

Этого нельзя сделать в XSD 1.0 (это версия, поддерживаемая многими процессорами XSD, например, от Microsoft). В XSD 1.1 (поддерживается Xerces, Saxon и Altova) это можно сделать несколькими способами:

(a) утверждения общего назначения, например

<xs:assert test="(@categoria = 'atividade academia' and situacio = ('AC', 'NC')) 
  or (@categoria = 'xxxx' and situacio = ('ED', 'AB'))...."/>

(b) условное присвоение типа с использованием xs:alternative: идея состоит в том, чтобы определить тип элемента как функцию значений его атрибутов; опять это делается с помощью выражений XPath.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...