使用xs:any元素可以定义任何元素的属性吗?

时间:2014-07-21 21:45:36

标签: xml xsd xsd-validation

我希望能够在我的XSD中允许以下内容,但我很难过。我知道我可以在这样的结构中使用xs:any但是这不允许我为发生的元素定义属性。

<xs:element name="parent">
  <xs:complexType>
    <xs:sequence>
      <xs:any minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

我希望能够有一个已定义的父级,然后将任何元素作为子级,但子级必须具有以下指定的属性。

<xs:attribute name="attribute1" type="xs:string" use="required" />
<xs:attribute name="attribute2" type="xs:string"  />
<xs:attribute name="attribute3" type="xs:string" use="required" />

所以我想我真正要问的是我可以定义任何元素的属性吗?以下是我想要实现的结构。父元素的子元素可以采用任何名称,但必须具有上面指定的属性。谢谢!

<parent>
    <AnyElementName1 attribute1="val1" attribute2="val2" attribute3="val3"/>
    <AnyElementName2 attribute1="val1" attribute2="val2" attribute3="val3"/>
    <AnyElementName3 attribute1="val1" attribute3="val3"/>
</parent>

1 个答案:

答案 0 :(得分:1)

使用xs:任何你可以限制元素的命名空间,并使用processContents =&#34; strict&#34;要求元素是在模式中声明的元素,但是您不能将元素约束为特定类型。也许不是使用xs:any应该使用xs:element命名一个抽象元素声明,一个类型定义所需属性的声明,然后使所有允许的元素成为这个抽象元素的替换组的成员。