元素的内联子元素,如果只有该类型的一个元素

问题描述 投票:0回答:1

假设我要为<Product>建模。产品可以具有变体(例如,具有不同颜色的T恤),也可以具有单一变体,例如仅具有一种颜色的毛衣。

我想创建一个允许这两种语法都有效的模式:

<MyXMLDoc>

<Product>
  <Variants>  
    <Variant>
      <Name>Red T-Shirt</Name>
      <Description>A red t-shirt</Description>
    </Variant>

    <Variant>
      <Name>Green T-Shirt</Name>
      <Description>A green t-shirt</Description>
    </Variant>

    <Variant>
      <Name>Blue T-Shirt</Name>
      <Description>A blue t-shirt</Description>
    </Variant>

  </Variants>
</Product>

<Product>
  <Name>Black sweater</Name>
  <Description>A plain ol' black sweater</Description>
</Product>

</MyXMLDoc>

我能得到的最接近的是:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="MyXMLDoc">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" ref="Product"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="Product">
        <xs:complexType>
            <xs:choice>
                <xs:element ref="Variant"/>
                <xs:element ref="Variants"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>

    <xs:element name="Variants">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" ref="Variant"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="Variant">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Name"/>
                <xs:element ref="Description"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="Name" type="xs:string"/>
    <xs:element name="Description" type="xs:string"/>
</xs:schema>

xs:choice<Variant>之间的<Variants>使我摆脱了<Variants>嵌套层次,但是<Name><Description>仍需要在单个<Variant>下进行父操作。

是否有一种方法可以告诉XML模式期望元素(<Variant>)或元素的内联成员(<Name>中的<Description><Variant>,而不需要实际包裹在<Variant>中)?注意<Name>和`

xml xsd xmlschema
1个回答
0
投票

我认为这是您的目标:

© www.soinside.com 2019 - 2024. All rights reserved.