xml - XSD 抽象类型可能不在 XML 中生成
问题描述
这是一个通用的 XSD 验证问题。我正在尝试使 XSD 架构适应现有的 XML。让我们有以下 XML 分支:
<briefing>
<date/>
<supplier/>
<customer/>
...
<q>question 1</q>
<a>answer 1</a>
<q>question 2</q>
<a>answer 2</a>
...
</briefing>
现在,对于每个简报,我可以有 1 个客户、1 个供应商和 N 对问答:如果 a 想要控制这对 q+a,我应该创建一个包含并包含在序列中的元素<qa>
,每个都有。但是如果元素在 XML 中不可用怎么办?我想创建一个“抽象”元素(或组),这样父抽象元素根本不会生成,但它的子元素仍然可以与其属性(某种虚拟元素)一起出现。无论如何,抽象元素和组都没有以这种方式得到验证,我在规范中找不到类似的东西......
所以最后,我们可以对这些元素说些什么?maxOccurs=unbounded
<q>+<a>
minOccurs=maxOccurs=1
<qa>
<qa>
是否每个 XSD 父元素都必须出现在 finally XML 中才能使其子元素也出现在其中?
解决方案
您需要做的是将 q 和 a 元素放在 minOccurs 0 和 maxOccurs 设置为值或无界的序列下,如下所示。
<?xml version="1.0" encoding="utf-16"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="briefing">
<xs:complexType>
<xs:sequence>
<xs:element name="date" nillable="true" type="xs:date" />
<xs:element name="supplier" type="xs:string" />
<xs:element name="customer" type="xs:string" />
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="q" type="xs:string" />
<xs:element name="a" type="xs:string" />
</xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
这将非常愉快地解析
<briefing>
<date>1999-05-31</date>
<supplier>supplier_0</supplier>
<customer>customer_0</customer>
<q>question 1</q>
<a>answer 1</a>
<q>question 2</q>
<a>answer 2</a>
</briefing>
或者
<briefing>
<date>1999-05-31</date>
<supplier>supplier_0</supplier>
<customer>customer_0</customer>
</briefing>
推荐阅读
- session - NET Core 服务器端多会话 Blazor
- linux - Caffe2 好像没有看到 cuDNN?
- function - 为什么我的字符串变量没有在我的 Powershell 函数中连接?
- javascript - JavaScript 嵌套同名 JSON
- python - 熊猫图在条形线内显示数字
- c# - 我想为 Win Form 开发自己的 Dat Grid View
- maven - 带有源代码和编译文件的 exec-maven-plugin
- javascript - 无法在节点 js 中调用外部 api
- python - django-rest-framework,在列表响应中添加“包含”,带有分页
- wpf - 如何通过在 C# 中调用 winapi 来更改窗口图标