使用x:any元素,我可以定义任何元素的属性



我希望能够在我的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的子元素可以取任何名称,但必须具有上述指定的属性。谢谢!

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

使用xs:any,您可以约束元素的名称空间,并且使用processContents="strict"来要求元素是在模式中声明的元素,但是您不能约束元素为特定类型。也许您不应该使用xs:any,而应该使用xs:element来命名一个抽象元素声明,它的类型定义了所需的属性,然后使所有允许的元素成为这个抽象元素的替换组的成员。

最新更新