XSD 可能未在 XML 中生成抽象类型

XSD abstract type possibly not generated in 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> 具有 maxOccurs=unbounded 并包括在序列 <q>+<a> 内,每个序列都有 minOccurs=maxOccurs=1。 但是,如果 <qa> 元素在 XML 中不可用怎么办? 我想创建一个 'abstract' <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>