如何根据元素的属性值限制元素的值

时间:2019-04-09 04:43:12

标签: xml xsd

在我大学的家庭作业项目中,我需要编写一个XSD(XML架构),它描述了学校历史记录应包含的要素。在一种情况下,我有一个元素“ Disciplina”,它具有属性“ categoria”(如下所示):

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

此外,元素“ situacao”在某些特定的字符串值上具有范围:“ AP,RM,RF,ED,AB,AE,AI,TR,TD,RI,IN”和“ categoria”相同逻辑:“眼镜蛇,眼镜蛇,livre escolha,书呆子。”

但是,当“类别”是“ atividade Academica”时,我想将元素“ situacao”的可能值仅限制为“ AC”或“ NC”,否则,限制值将为“ AP”, “ RM”,“ RF”,“ ED”,“ AB”,“ AE”,“ AI”,“ TR”,“ TD”,“ RI”,“ IN”。下面的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>

我的问题是:如何根据XML架构中的“类别”值来表示对“ situacao”值的限制的这种变化?

1 个答案:

答案 0 :(得分:0)

在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表达式完成的。