Xsd xml方案属性或complextype条件

Xsd xml方案属性或complextype条件,xsd,Xsd,我希望允许元素包含属性或定义更复杂的类型 差不多 <myElement someAttr="..."/> 或 也就是说,如果someAttr存在,那么我不想允许子元素,如果它不存在,那么我想 这样做的原因是我希望有一个“include”功能,其中包括一个基本上插入到元素中的文件。但我不想两者兼而有之。您可以在元素中包含其他外部xml代码,也可以添加自己的代码,但不能同时添加这两种代码。(或者从xml的单独部分插入) 这主要是为了简化复杂的xml,使其结构易于理解。我怀疑您现

我希望允许元素包含属性或定义更复杂的类型

差不多

<myElement someAttr="..."/>


也就是说,如果someAttr存在,那么我不想允许子元素,如果它不存在,那么我想

这样做的原因是我希望有一个“include”功能,其中包括一个基本上插入到元素中的文件。但我不想两者兼而有之。您可以在元素中包含其他外部xml代码,也可以添加自己的代码,但不能同时添加这两种代码。(或者从xml的单独部分插入)


这主要是为了简化复杂的xml,使其结构易于理解。

我怀疑您现在是否能够在xml模式中表达类似的内容

您可以将属性设置为可选,例如,它可以存在也可以不存在。但是,您不能表达这样的内容:如果属性不存在,则使用当前方式包含其他复杂内容


您必须自己以编程方式检查这一点,或者调查其他XML描述语言是否喜欢或可能有帮助。

可能使用静态选项,然后更改myElement名称

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root">
  <xs:complexType>
    <xs:choice>
      <xs:element name="myElementWithAttrs">
        <xs:complexType>
          <xs:attribute name="someAttrs" type="xs:string"/>
        </xs:complexType>
      </xs:element>
      <xs:element name="myElementWithoutAttrs">
        <xs:complexType>
          <xs:sequence>
            <xs:any processContents="skip"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:complexType>
</xs:element>

</xs:schema>


如果您发布代码或XML,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮({}),将其格式化并语法突出显示!我考虑过这一点,但为了简单起见,我希望保留相同的元素名称。目前,我只是允许同时包含这两个案例。我也这么认为;/我希望会有一些技巧,让它的工作,虽然我相信这不是太罕见。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root">
  <xs:complexType>
    <xs:choice>
      <xs:element name="myElementWithAttrs">
        <xs:complexType>
          <xs:attribute name="someAttrs" type="xs:string"/>
        </xs:complexType>
      </xs:element>
      <xs:element name="myElementWithoutAttrs">
        <xs:complexType>
          <xs:sequence>
            <xs:any processContents="skip"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:complexType>
</xs:element>

</xs:schema>