[英]How to validate XML elements with XSD schema?
我想在XSD模式中为XML文档使用条件。
我使用了限制,但功能并不强大。
这是我到目前为止所做的一个示例:
<xs:element name="Matricule">
<xs:complexType>
<xs:sequence>
<xs:element name="valeur">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"></xs:minInclusive>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element type="xs:string" name="backgroundcolor"/>
</xs:sequence>
</xs:complexType>
</xs:element>
此示例工作正常,但我只是检查该值是否大于0。但是我想验证该值是否为Integer以及该值为空。
也许是这样的:
如果(值> 0 AND值<100 AND值='')
我在Google上发现了一个需要断言的主题,因此我阅读了文档,然后做到了
<xs:element name="Matricule">
<xs:complexType>
<xs:sequence>
<xs:element name="valeur">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"></xs:minInclusive>
**<xs:assertion test="($value mod 10) = 0"/>**
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element type="xs:string" name="backgroundcolor"/>
</xs:sequence>
</xs:complexType>
</xs:element>
但这不起作用,我总是有一个错误。
例1的值:
<racine>
<row>
<Matricule>
<valeur>55</valeur>
<backgroundcolor></backgroundcolor>
</Matricule>
</row>
</racine>
示例2无值:
<racine>
<row>
<Matricule>
<valeur></valeur>
<backgroundcolor></backgroundcolor>
</Matricule>
</row>
</racine>
这两个例子必须正确,但是这个没有:
<racine>
<row>
<Matricule>
<valeur>gfd</valeur>
<backgroundcolor></backgroundcolor>
</Matricule>
</row>
</racine>
我怀疑您的意思是该值必须为0到100之间的数字,或者为空字符串。 如果真是这样,您将在AND和OR之间陷入混乱。
空字符串不是xs:integer的有效实例,因此您不能将此类型定义为xs:integer的限制(因为限制只能定义为基值空间的子集的值空间)。
有两种常见的方法来定义一个简单类型,其中值必须为X或为空:
定义一个成员类型为X的联合类型,以及一个从xs:string派生的类型,其唯一允许的值为“”
定义一个列表类型,其项类型为X,maxOccurs为1。
(在这种情况下,X是xs:integer
的限制,其中minInclusive = 0,maxInclusive = 100)。
我个人更喜欢(2):如果您使用的是模式感知型查询和转换,它会更好。 但是,如果您仅使用模式进行验证,则没有任何区别。
如果您需要接受空元素,则它们的内容不是整数类型,因为空字符串不代表数字。
您将不得不选择xs:string类型,并仅使用接受整数或空字符串的模式对其进行限制。
这将工作:
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]*"/>
</xs:restriction>
</xs:simpleType>
如您所接受,它是0到9之间的数字,连续零次或更多次。
如果您的要求也低于100,我将让您找到一种强制执行此附加条件的模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.