zoukankan      html  css  js  c++  java
  • JBPM流程部署校验之javascript利用XSD校验XML

    JBPM流程定义校验之javascript利用XSD校验XML

     

     

         上篇我们简单的介绍了一下XSD的相关知识,今天我们来学习一下在javascript中怎样利用XSD来验证xml;现在各大浏览器厂商中,好像就微软公布了相应的接口,其他的厂商需要我们自己来实现类库;所以今天我们讲的是在IE下利用XSD来验证xml。
          我们先了解一下MSXML个版本对XML验证的支持情况



    Version                      Support         

    MSXML

    仅支持 DTD 验证,不支持xsd方式.

    MSXML 2.0 through 4.0

    支持 XML-Data Reduced (XDR) 验证.

    MSXML 4.0 and later

    支持xsd验证方式.

    MSXML 5.0 for Microsoft Office Applications

    支持内联xsd验证.

    MSXML 6.0

    移除 XML-Data Reduced (XDR) 验证方式.

          从图中我们可以看到从MSXML4以后的版本就都支持直接利用XSD来验证xml了,试了一下,高版本的抛出的错误信息更精确和详细。

          MSXML支持两种方式的验证,一种是将xsd直接嵌入到xml文件中(内联xsd),一种是验证是动态的指定XSD文件;

          校验类库

          

                  WFTH={};
                  
    var xsdValidationManager = WFTH.XSDValidationManager = {                  
                      validationWithXSD: 
    function (xmlFilePath, xsdFilePath, nameSpace) {
                                 
    var xd = new ActiveXObject("MSXML2.DOMDocument.6.0");
                                 
    //直接指定使用的xsd文件,否则需要内联xsd文件
                                 if (arguments.length==3&& xsdFilePath != null && xsdFilePath!=undefined) {
                                        
    var xs = new ActiveXObject("MSXML2.XMLSchemaCache.6.0");            
                                        xs.add(nameSpace, xsdFilePath);
                                        xd.schemas 
    = xs;       
                                 }  ;                                

                                 xd.async 
    = false;          
                                 xd.validateOnParse 
    = true;          
                                 xd.resolveExternals 
    = true;
                                 xd.load(xmlFilePath);
                                 
    if (xd.parseError.errorCode != 0) {
                                     return (
    "Validation failed on " + xmlFilePath + "\n=====================" + "\nReason: " + xd.parseError.reason + "\nSource: " + xd.parseError.srcText + "\nLine: " + xd.parseError.line + "\n");
                                 }
                                 
    else
                                     return (
    "Validation succeeded for " + xmlFilePath + "\n======================\n" + xd.xml + "\n");
                        }
                  };

             客户端调用

            

                  //独立的xml和xsd
                  alert(xsdValidationManager.validationWithXSD("a.xml","note.xsd","http://www.w3school.com.cn/"));
                  //内联xsd
                  alert(xsdValidationManager.validationWithXSD(
    "a.xml"));

             附xsd及xml实例
             内联模式之指定了命名空间

            

    //xsd文件
    <?xml version="1.0"?>
    <note xmlns="http://www.w3school.com.cn"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://www.w3school.com.cn  note.xsd">  
        
    <to >George</to>
        <from>John</from>
        <heading>Reminder</heading>
      <body>Don't forget the meeting!</body>
      <name></name>
    </note>


    //xsd文件
    <?xml version="1.0"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3school.com.cn" xmlns="http://www.w3school.com.cn"  elementFormDefault="qualified">
    <xs:element name="note">
        <xs:complexType>
          <xs:sequence>
                <xs:element name="to" type="xs:string"/>
                <xs:element name="from" type="xs:string"/>
                <xs:element name="heading" type="xs:string"/>
                <xs:element name="body" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
    </xs:element>
    </xs:schema>

             

            内联模式之无命名空间

           

    //xml文件
    <?xml version="1.0"?>
    <note   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:noNamespaceSchemaLocation="note.xsd">  
        
    <to >George</to>
        <from>John</from>
        <heading>Reminder</heading>
      <body>Don't forget the meeting!</body>
      <name></name>
    </note>


    //xsd文件

    <?xml version="1.0"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"  xmlns="http://www.w3school.com.cn"  elementFormDefault="qualified">
    <xs:element name="note">
        <xs:complexType>
          <xs:sequence>
                <xs:element name="to" type="xs:string"/>
                <xs:element name="from" type="xs:string"/>
                <xs:element name="heading" type="xs:string"/>
                <xs:element name="body" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
    </xs:element>
    </xs:schema>

          单独的xsd和xml文件

         

    //xml
    <?xml version="1.0"?>
    <note   xmlns="http://www.w3school.com.cn">  
        
    <to >George</to>
        <from>John</from>
        <heading>Reminder</heading>
      <body>Don't forget the meeting!</body>
      <name></name>
    </note>



    //xsd
    <?xml version="1.0"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"  targetNamespace="http://www.w3school.com.cn" xmlns="http://www.w3school.com.cn"  elementFormDefault="qualified">
    <xs:element name="note">
        <xs:complexType>
          <xs:sequence>
                <xs:element name="to" type="xs:string"/>
                <xs:element name="from" type="xs:string"/>
                <xs:element name="heading" type="xs:string"/>
                <xs:element name="body" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
    </xs:element>
    </xs:schema>
  • 相关阅读:
    蔚来NIO Pilot 全球首试 终于摘掉半成品帽子
    这个机械手可精准灵活地接住一颗掉落的棉花糖并使其“安然无恙”
    谷歌已经领先 那么苹果的人工智能战略又在哪里
    你见过机器船吗?MIT新版ROBOAT可以自动组装
    谷歌、亚马逊、苹果三大语音助手发展现状 谁被甩在身后了
    Python中的十大图像处理工具
    测试用例设计理论
    Flask+Mysql搭建网站之数据库问题
    Flask+Mysql搭建网站之网页设计
    Flask+Mysql搭建网站之安装Mysql
  • 原文地址:https://www.cnblogs.com/wufengtinghai/p/2137664.html
Copyright © 2011-2022 走看看