xml - 如何根据元素的属性值来限制元素的值
问题描述
在我大学的家庭作业项目中,我需要编写一个 XSD(XML Schema)来描述学校历史将具有哪些元素。在其中一种情况下,我有一个元素“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”是相同的逻辑:“ obrigatoria,optativa,livre escolha,atividade Academica。"
但是,当“categoria”是“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 Schema 中的“categoria”值来表示“situacao”值限制的变化?
解决方案
这不能在 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 表达式完成的。
推荐阅读
- python-3.x - Kivymd 对话框关闭
- php - 如何在没有if else的情况下执行由传入参数决定的函数
- php - 使用未定义的常量 id - 假定为“id”(这将在 PHP 的未来版本中引发错误)
- html - 使用ajax提交表单jquery
- java - ClassCastException:OnWebApplicationCondition 无法转换为 org.springframework.context.annotation.Condition
- r - 是否有一个函数可以一次在多个列中搜索一个值,然后返回包含匹配值的行
- mysql - 〜1天后mysql崩溃
- unity3d - Unity XR Direct Interactor Attach Point 不改变对象方向
- python - 排序影响子程序外的值
- drake - 如何实现离散多体设备仿真的联合限制