所以我试图验证一个看起来像这样的xml:
<module name="example" alias="ex1">
<params>
<p1>1</p1>
<pcomplex>
<p>2</p>
</pcomplex>
<foo>2</foo>
<bar>3</bar>
.....
<pn>this is the n'th element</pn>
</params>
pcomplex块应该抛出错误,因为我不想允许任何complexTye
内部参数序列
我试过这个xsd:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="module">
<xs:complexType>
<xs:sequence>
<xs:element name="params" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:any processContents="lax" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="name" use="required"/>
<xs:attribute type="xs:string" name="alias" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
但它在我试图做的事情上失败了。
任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
这在XSD 1.0中无法完成。但是,XSD 1.1可以很容易地处理这种情况。下面是一个可能的方法:@test正在检查具有嵌套元素的元素。
<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<xsd:element name="module">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="params">
<xsd:complexType>
<xsd:sequence>
<xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:assert test="not(*[*|@*])"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="alias" type="xsd:string" use="required"/>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
如果您想允许具有简单内容的复杂类型(即没有嵌套元素,允许属性),那么只需将测试更改为not(*[*])
无效的XML可能会产生这种情况(基于以上架构):
cvc-assertion.3.13.4.1:对于元素&#39; params&#39;的断言评估(&#39; not(* [* | @ *])&#39;)类型&#39; #anonymous&#39;没有成功。