我希望能够在我的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来命名一个抽象元素声明,它的类型定义了所需的属性,然后使所有允许的元素成为这个抽象元素的替换组的成员。