xml 元素,未知名称但知道它不是复杂类型
xml element, unkown name but known it's no complextype
所以我正在尝试验证如下所示的 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>
但是我尝试做的事情失败了。
如有任何帮助,我们将不胜感激。
这不能在 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: Assertion evaluation ('not(*[*|@*])') for element 'params' with type '#anonymous' did not succeed.
所以我正在尝试验证如下所示的 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>
但是我尝试做的事情失败了。
如有任何帮助,我们将不胜感激。
这不能在 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: Assertion evaluation ('not(*[*|@*])') for element 'params' with type '#anonymous' did not succeed.