xml 模式选择选择一个项目选项或另一个具有公共部分的选项

xml schema choice selecting one item option or the other with a common part

我有一个关于 xml 的问题 schema.I 不知道如何正确使用选择。 这是我的 xml 文本。

<serials>
     <serial>
        <title></title>
        <country></country>
        <director></director>
        <release date></release date>
     </serial>
     .
     .some of the same as the one above
     .
     <serial>
        <title></title>
        <country></country>
        <director></director>
        <uncertaine></uncertainee>
     </serial>
     <serial>
        <title></title>
        <country></country>
        <director></director>
        <scheduled time></scheduled time>
     </serial>
</serials>

这是 xml 架构中有问题的部分

<xsd:group name="serialData">
     <xsd:choice>
           <xsd:sequence>
                <xsd:element name="title" type="xsd"string"/>
                <xsd:element name="country" type="xsd"string"/>
                <xsd:element name="director" type="xsd"string"/>
                <xsd:element name="release date" type="xsd"string"/>
           </xsd:sequence>
           <xsd:sequence>
                <xsd:element name="title" type="xsd"string"/>
                <xsd:element name="country" type="xsd"string"/>
                <xsd:element name="director" type="xsd"string"/>
                <xsd:element name="scheduled time" type="xsd"string" minOccurs="0" maxOccurs="1"/>
                <xsd:element name="uncertaineetime" type="xsd"string" minOccurs="0" maxOccurs="1"/>
           </xsd:sequence>
     </xsd:choice>
</xsd:group>

问题是后者的非典型系列想要和前者一样的属性,却得不到

假设您的负载看起来像这样,这是有效的 XML

<serials>
     <serial>
        <title>Title</title>
        <country>Country</country>
        <director>Director</director>
        <release_date>2021-12-06</release_date>
     </serial>
     <serial>
        <title>Title2</title>
        <country>Country</country>
        <director>Director</director>
        <uncertain_time>Uncertain</uncertain_time>
     </serial>
     <serial>
        <title>Title3</title>
        <country>Country</country>
        <director>Director</director>
        <scheduled_time>Scheduled</scheduled_time>
     </serial>
</serials>

您可以简单地使用下面的模式,其中一些是可选的。

<?xml version="1.0" encoding="utf-16"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="serials">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="serial">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="title" type="xs:string" />
              <xs:element name="country" type="xs:string" />
              <xs:element name="director" type="xs:string" />
              <xs:element minOccurs="0" name="scheduled_time" type="xs:string" />
              <xs:element minOccurs="0" name="uncertain_time" type="xs:string" />
              <xs:element minOccurs="0" name="release_date" type="xs:date" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

如果你的意思是你可以有不确定的时间或计划时间或发布日期,那么这些就是你按照下面放在选择节点中的项目

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="serials">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="serial">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="title" type="xs:string" />
              <xs:element name="country" type="xs:string" />
              <xs:element name="director" type="xs:string" />
              <xs:choice>
                <xs:element name="scheduled_time" type="xs:string" />
                <xs:element name="uncertain_time" type="xs:string" />
                <xs:element name="release_date" type="xs:date" />
              </xs:choice>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>