这是一般的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对问题和答案:如果要控制夫妇q + a,我应该创建一个元素<qa>
,其中包含{{1} },并将其包含在序列maxOccurs=unbounded
中,每个序列都有<q>+<a>
。
但是,如果minOccurs=maxOccurs=1
元素在XML中不可用怎么办?
我想创建一个“抽象” <qa>
元素(或一个组),以使父抽象元素根本不会生成,但是它的子元素仍然可以带有它们的属性(虚拟元素)。
无论如何,抽象元素和组都没有通过这种方式得到验证,我在规范中找不到类似的东西...
最后,对于这些元素我们能说什么?
是否必须在最终XML中包含每个XSD父元素,以便在其内部也包含其子元素?
答案 0 :(得分:0)
您需要做的是将q和一个元素放在一个序列中,该序列的minOccurs为0,maxOccurs设置为一个值或无限制,如下所示。
ping -c2 barhost
这将很高兴地解析
<?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>