在我大学的家庭作业项目中,我需要编写一个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”值的限制的这种变化?
答案 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表达式完成的。