JBPM流程部署校验之XSD简介

-

JBPM流程定义校验之XSD简介

      JBPM的流程定义语言是JPDL,其本身是一种自定义结构的xml;JBPM的流程定义结构比较复杂,不仅元素的类型多样,而且对数据类型也有比较严格的要求,同时有很多元素有着相同的元素和属性等;做为流程引擎应该具有校验流程定义的有效性的能力,从而保证不会再流程流转过程中发生错误;同时流程引擎应该内置这种校验能力,而不能依赖流程设计器的校验!面对如此复杂的xml,JBPM首先使用XSD进行验证,然后再解析流程定义的同时进行一些XSD无法实现的校验!今天简单的介绍一下XSD的相关知识,然后接下来的将分别介绍在javascript、C#、java中怎样利用XSD对xml进行校验。
      XSD 是基于 XML 的 DTD 替代者,XSD 可描述 XML 文档的结构,XSD即是XML Schema Definition;XSD 的作用是定义 XML 文档的合法构建模块,类似 DTD。

      利用XSD我们可以对xml文档实现如下控制
           • 定义可出现在文档中的元素
           • 定义可出现在文档中的属性 
           • 定义哪个元素是子元素
           • 定义子元素的次序
           • 定义子元素的数目
           • 定义元素是否为空,或者是否可包含文本
           • 定义元素和属性的数据类型
           • 定义元素和属性的默认值以及固定值
       XSD与DTD比较有如下优势
           • XML Schema 可针对未来的需求进行扩展
           • XML Schema 更完善,功能更强大
           • XML Schema 基于 XML 编写
           • XML Schema 支持数据类型
           • XML Schema 支持命名空间 
      现在我们有如下格式的xml文档

     

复制代码
<?xml version="1.0"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</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>
复制代码

      那么我们怎样在xml中引入XSD呢?

      通过schemaLocation引用   

     

复制代码
<?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>
复制代码

     

复制代码
<?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>
复制代码

         通过noNamespaceSchemaLocation引用

        

复制代码
<?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>
复制代码

 

          

复制代码
<?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>
复制代码

       为IDE开发环境添加XSD,开启xml只能提示功能

       Visual studio添加XSD

       默认情况下,我们只需要将相应的xsd文件拷贝到Visual studio 安装目录\xml\schemas目录下即可

      

      

      eclipse添加XSD     

       • 点击窗口 --> 属性(Windows --> Preferences)
       • 选择XML --> 目录(XML --> CataLog)
       • 点击添加(Add)      

       •  添加XML目录(Add XML Catalog Entry)的窗口打开
       • 点击map-icon的图标下面的按钮并选择文件系统(File System) 
       • 在打开的对话框中, 选择相应的XSD文件

      



   

      
posted @   无风听海  阅读(591)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示