xml架构属性或复杂类型条件

时间:2011-01-02 21:06:50

标签: xsd

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

这样的东西
<myElement someAttr="..."/>

<myElement>
  <...>
</myElement>

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

原因是我希望有一个“包含”功能,其中包含一个基本上插入元素的文件。但我不想要两者。您可以在元素中包含其他外部xml代码,也可以添加两个外部xml代码。 (或者也可以从xml的单独部分插入)

这主要是为了简化复杂的xml,以便于理解结构。

2 个答案:

答案 0 :(得分:1)

我怀疑你现在能够在XML模式中表达类似的内容。

可以使属性可选,例如它可以存在与否。但如果属性不存在,则无法表达之类的内容,然后使用当前方法包含其他复杂内容

您必须自己以编程方式检查,或者调查其他XML描述语言(如RelaxNGSchematron)是否可以提供帮助。

答案 1 :(得分:0)

也许使用静态选择并更改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>