我希望能够在我的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>
答案 0 :(得分:1)
使用xs:任何你可以限制元素的命名空间,并使用processContents =&#34; strict&#34;要求元素是在模式中声明的元素,但是您不能将元素约束为特定类型。也许不是使用xs:any应该使用xs:element命名一个抽象元素声明,一个类型定义所需属性的声明,然后使所有允许的元素成为这个抽象元素的替换组的成员。