javascript类型的xsd限制
xsd restriction of type javascript
我想根据模式验证我的xml,但对于某些节点,我想要比xsd模式更智能的验证。
例如,我有一个Person.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<person xmlns="urn:person.xsd">
<name>John Smith</name>
<id>123455</id>
</person>
我想以一种智能的方式验证ID节点:前5位数字(12345)是个人的ID,第六位数字(5)是一个校验和数字,由前五位数字的和模10(1+2+3+4+5模10=5)计算得出。
理想情况下,我希望扩展xsd模式的验证支持,以允许javascript等代码验证节点。
例如:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="urn:person.xsd" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="id">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:javascript>
var b= parseInt(input);
var b1= parseInt(b/100000)%10;
var b2= parseInt(b/10000)%10;
var b3= parseInt(b/1000)%10;
var b4= parseInt(b/100)%10;
var b5= parseInt(b/10)%10;
var b6= b%10;
if (b6 == (b1+b2+b3+b4+b5)%10 )
return "true";
else
return "false";
</xs:javascript>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
现在这当然是不支持的。我可以将这个节点作为字符串进行验证,并在源代码中进行进一步的验证。但我想要一个通用的解决方案,我的代码除了任何xml之外,我不想要一个硬编码的解决方案。
这可能是一个常见的问题,但我一直找不到解决方案。
那么,把额外的验证信息放在哪里最好呢?
或者,有没有一种方法可以扩展MSXML或.Net的XML验证器来支持自定义验证(我的程序主要用.Net编写)?
感谢
在标准XSD中,最接近的方法是使用pattern
元素。这指定了内容必须符合的正则表达式。
然而,正则表达式只适用于相当简单的验证,而不能满足您的要求。
一种选择是将脚本添加到类型的注释元素中。这是为"模式组件的以人和机器为目标的注释"而设计的。然后,您可以将此脚本作为第二阶段执行,从而创建您想要的更通用的解决方案。
由于您使用的是MSXML,因此可以使用SOM检索XSD数据类型。
相关文章:
- FabricJs-限制主对象内添加对象的移动区域
- 限制javascript变量的最小/最大整数
- Jquery限制输入框中的文本
- 将鼠标旋转限制为特定的度数
- d3.js:限制画笔的大小
- 基于数据元素限制动态表单字段
- WAMP响应内容长度限制
- 什么's导致了512字节的限制-openkeyval或其他什么
- 有没有办法限制Meteor-alded表格包中已发布的字段
- 将直流图表库中的折线图缩放限制为小时
- 如何在d3力有向图中最初限制节点数
- 在MSCRM 2015中使用javascript限制多实体查找
- 键按下上的正则表达式 仅限制数字
- 如何限制OpenLayers地图中的区域
- 无法限制所选复选框的数量(尝试了多个代码段)
- html,js-如何限制元素"范围“-命名空间
- 限制对HTML/CSS/IMG或根索引文件夹的访问
- 限制npm依赖模块's require(隔离)的用法
- HTML如何根据javascript函数的返回值限制文本输入
- javascript类型的xsd限制