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

时间:2018-12-23 21:24:21

标签: xml xsd abstract

这是一般的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父元素,以便在其内部也包含其子元素?

1 个答案:

答案 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>