如何向xsd:any元素添加属性?例如,给出以下内容:
<xsd:element name="requests">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="http://xxx.yyy.com" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
如何将any作为属性添加到任何属性中,以便可以针对架构验证以下xml而不会出现错误:
<requests>
<operation count="1">
<requests>
答案 0 :(得分:0)
xsd:any不能包含任何属性声明,因为它实质上允许在命名空间“http://xxx.yyy.com”中定义的任何元素在序列中声明。如果您没有使用单独的XSD来验证该命名空间,那么您只需使用以下代替xsd:any:
<xsd:element name="operation">
<xsd:complexType>
<xsd:attribute name="count" type="nonNegativeInteger" use="required"/>
</xsd:complexType>
</xsd:element>
否则,您将需要在XSD顶部为“http://xxx.yyy.com”声明名称空间前缀,并引用该模式中的元素而不是xsd:any。因此,如果“http://xxx.yyy.com”的架构包含以下声明:
<xsd:complexType name="operationType">
<xsd:attribute name="count" type="nonNegativeInteger" use="required"/>
</xsd:complexType>
然后您可以在XSD中引用此类型:
<xsd:element name="requests">
<xsd:complexType>
<xsd:sequence>
<xsd:element type="optype:operationType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
答案 1 :(得分:0)
如果你想要允许任何元素作为孩子,只要它有一个count属性,那么你就不能在XSD 1.0中这样做。你可以在XSD 1.1(目前在Saxon和Xerces中支持)中使用断言:
<xs:assert test="every $x in * satisfies (exists($x/@count) and $x/@count castable to xs:integer)"/>