xml - 如何有条件地验证允许的子元素列表中元素的存在?
问题描述
我有一个包含部分和布局的 xml 架构。我有一系列布局,例如
<layouts>
<layout name="wiki" type="page"/>
</layouts>
我有参考布局的部分。例如
<section name="intro-page">
<allowedLayouts>
<layout name="wiki" type="page"/>
</allowedLayouts>
</section>
我需要验证存在的layout
sallowedLayouts
仅来自<layouts>
如何完成此操作?
解决方案
这就是最终为我工作的东西。
秘诀是使用密钥和 idrefs。
在根元素中,我添加了以下限制。
<xs:key name="PK_layout">
<xs:selector xpath="layouts/layout"/>
<xs:field xpath="@name"/>
</xs:key>
这确保了布局的名称不能在布局集合中重复。
这是在根元素内指定的部分中对外键的限制。
<xs:keyref name="FK_sectionToLayout" refer="PK_layout">
<xs:selector xpath="sections/section/allowedLayouts/layout"/>
<xs:field xpath="@layoutid"/>
</xs:keyref>
以下是如何从sections 集合中的section 链接到 layouts 集合中的布局
<xs:element name=section>
...
<xs:attribute name="layoutid type="xs:IDREF"/>
...
</xs:element>
这是一个示例部分
<section name="intro-page">
<allowedLayouts>
<layout layoutid="wiki"/>
</allowedLayouts>
</section>
这可确保该部分在交叉引用布局集合时仅使用有效布局。
推荐阅读
- subquery - 如何使用不同的标准多次拉取 MaxDate
- javascript - 我怎样才能让discord js随机选择两张图片?
- java - Spring.schemas 在提取的 jar 中不起作用
- java - 关于效率: .filter(Optional::isPresent).map(Optional::get) 不是比 .flatmap(Optional::stream) 好吗?
- python - Pandas:解析损坏的 .xls 文件
- java - 如何在 Java 16 中将 JAR 动态加载到运行时?
- sql - SQL 查询 - 只显示非空行
- web - 为网站托管视频的最佳方式是什么?
- python - 日期时间索引评估中的日期列值
- vue.js - Vue Pages 可以在不进行任何重建或重新部署的情况下获取更新的变量值吗?