javascript类型的xsd限制

javascript类型的xsd限制,javascript,xml,xsd,msxml,Javascript,Xml,Xsd,Msxml,我希望根据模式验证xml,但是对于某些节点,我希望使用比xsd模式更智能的验证 例如,我有一个Person.xml文件: <?xml version="1.0" encoding="utf-8"?> <person xmlns="urn:person.xsd"> <name>John Smith</name> <id>123455</id> </person> 约翰·史密斯 123455 我想以一种

我希望根据模式验证xml,但是对于某些节点,我希望使用比xsd模式更智能的验证

例如,我有一个Person.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<person xmlns="urn:person.xsd">
  <name>John Smith</name>
  <id>123455</id>
</person>

约翰·史密斯
123455
我想以一种智能的方式验证ID节点:前5位数字(12345)是个人的ID,第六位数字(5)是校验和数字,由前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>

var b=parseInt(输入);
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;
风险值b6=b%10;
如果(b6==(b1+b2+b3+b4+b5)%10)
返回“真”;
其他的
返回“false”;
现在这当然不受支持。我可以将此节点作为字符串进行验证,并在源代码中进行进一步验证。但是我想要一个通用的解决方案,我的代码可以删除任何xml,我不想要硬编码的解决方案

这可能是一个常见的问题,但我还没有找到解决方案

那么,把额外的验证信息放在哪里最好呢

或者,有没有办法扩展MSXML或.Net的XML验证器以支持自定义验证(我的程序主要是用.Net编写的)


谢谢

在标准XSD中,最接近的方法是使用。这指定内容必须符合的正则表达式

然而,正则表达式只适用于相当简单的验证,不能满足您的需要

一个选项是将脚本添加到类型的。这是为“模式组件的面向人和机器的注释”而设计的。然后,您可以将此脚本作为第二阶段执行,从而创建所需的更通用的解决方案

由于您使用的是MSXML,因此可以使用