XML技术在电子病历中的应用

XML技术在电子病历中的应用

南京都昌信息科技有限公司

袁永福

2013-03-17

前言

        无论是遵照卫生部的电子病历功能规范还是实际开发及应用,电子病历文档必须采用开放格式存储,而只采用封闭二进制格式是不与时俱进的。在各种可选的文档格式中,XML成为最优选择。本文就讨论XML技术在电子病历文档技术中的应用。

       此外在业界已经有人使用XML文档描述电子病历文档,不过其XML格式五花八门,本文中笔者提出一种详细的XML规范,希望能抛砖引玉,促进业界形成实用的电子病历文档XML标准。

关键字

电子病历,XML,标准XSD架构

XML的基础地位

XML在电子病历开发和应用中处于基础地位。

开放文档格式

       无论是遵照卫生部的电子病历功能规范还是实际开发及应用,电子病历文档必须采用开放格式存储,而只采用封闭二进制格式是不与时俱进的。

       从宏观上看,电子病历乃至医疗信息化是整个社会信息化中的一小部分,社会信息化是一个整体目标,而电子病历、医疗信息化不能封闭而自成一体,而是需要和社会信息化的其他部分进行密切的交流,这不仅仅是数据接口的层面,而是核心功能的相互引用。

       例如未来医改可能的一个趋势就是商业保险公司深度切入医疗过程。此时商业保险公司需要实时的获得详细的病历数据,可能包含一切数据,此时电子病历系统直接在底层选择开放存储格式显得很必要了。

       比如目前的区域平台及公卫很火,各个厂家卖力的争夺各个省和地区公卫单子,各自为政。未来几年后,各个公卫系统会融合,文档存储和交换格式标准化就是融合的基础。

XML文档格式

       开放文档格式有很多种,比如HTML、纯文本等等,RTF也勉强算一种,而DOC、ODT等文档格式由于是比较封闭的二进制格式,因此不能算是开放文档格式。在诸多开放文档格式中,谁也比不上XML。其理由有以下:

第一,XML的群众基础好。

       XML已经成为最为常用的国际标准,所有的开发平台和技术都能很好的支持XML技术。中国社会信息化中几乎所有领域已经开始普及XML技术。不懂XML,都不好意思说自己是程序猿。XML成为电子病历系统跨业务领域的数据交流的首选技术了。

       大家都知道电脑主板上的总线是很重要的,总线虽然未必完全符合CPU/GPU/内存/硬盘等各个专业领域的业务需求,但已经成为计算机系统的基础架构,各模块必须支持。而XML完全有能力成为各个信息化领域的总线,内部未必完全采用,但对外必须支持。

第二,XML得到各个IT巨头的支持。

       IT巨头,特别是数据库巨头都投入巨大的精力在进行XML技术的研究,逐渐的将XML技术融合在关系型数据库中。站在这些巨人的肩膀上,使得快速处理海量XML文件成为可能。

       反过来,若电子病历文件不是以XML格式存储,这些巨头们不大可能针对电子病历这个“小”领域而定制开发适合电子病历文档格式的数据存储和分析技术。脱离XML技术,电子病历行业也就无法利用巨头们在基础技术研究中获得的成果了。

第三,XML能很好的支持电子病历系统业务需求。

       在笔者具体的实践中,采用DOM技术实现了全功能的电子病历文档,尚未遇到不能满足电子病历系统业务需求的情况,预计未来也会很少遇到。而DOM技术的抽象概念和XML技术的抽象概念是高度一致的,因此也就非常容易的实现了电子病历文档以XML格式进行存储。

       另外XML技术的向上向下兼容性支持也是其他文件格式所少见的,而且各种特定格式的XML文件之间的转换也是低成本和高效率的。

第四,XML文档很适合文件的长期存储。

       病历文档是需要长期存储几十年上百年的。在长期的存储过程中,存储介质不能避免的出现损坏,都有数据存储时间极限。

       比如传统机械硬盘盘面上的数据只能存30年,之后由于机械故障及磁场衰减而出现数据丢失。

       光盘数据存储的时间更短,毕竟光盘在物理上不是晶体,只是一种非常粘稠的液体,分子结构不稳定,稍微遇热就容易变形,而且材料很容易被空气中的氧气所侵蚀氧化,因此常用的光盘数据只能保存几年而已。高端光盘能保存十几年,但成本比较高。

       大批量数据备份可采用磁带存储数据。理想情况下磁带能也只能保存几十年的数据,而且实际上磁带容易遭受空气中氧气、水分和霉菌的侵蚀破坏,因此存储时间也打折扣。

       人类曾经制造过号称能保存数据长达亿年的光盘,那就是太空探索飞船旅行者号携带的镀金铜质光盘。由于金和铜都是晶体,分子结构非常稳定,基本上可以说是能永久保存数据,而且这个光盘一直保存在星际空间这种高度真空环境中,没有氧气、水和霉菌的污染,而且不受外界磁场的影响,因此非常稳定。不过这种光盘成本高,无法普及。【参考1】

       由于当前普及的数据存储技术不能满足病历数据长期存储的需要,这些数据存储介质历经时间的沧桑,必然出现一些损坏,从而导致数据丢失。此时若采用专用的格式,特别是二进制格式,少数几个字节的损坏就会导致整个文档的不可还原的损坏而丢弃。

       而XML文件是自我描述的,存在不小的冗余,当文件数据发生部分损坏时,还是存在很大的可能性进行修复,其内容片段仍然可以读取的。因此当电子病历文档以XML的格式存储,虽然经过很长的时间,部分数据丢失,但其中的信息还是能幸存下很多的。

       更进一步的,XML文件在存储文本数据时可以采用实体模式,这样能增加文本数据的修复概率。

       例如对于文本“袁永福的电子病历”,若采用UNICODE编码,其16进制编码为“81 88 38 6C 8F 79 84 76 35 75 50 5B C5 75 86 53”,若某些字节数据损坏,比如第一个字节丢失,其可辨认的16进制编码为“88 38 6C 8F 79 84 76 35 75 50 5B C5 75 86 53”,则以UNICDE格式读取的文本就成为“㢈转葹㕶偵앛虵”,这就是不可识别的乱码了。

       如果采用XML实体模式存储这几个文字,则保存为“袁永福的电子病历”,若某些字节数据损坏,例如变成“&#x??1;永福的电子病历”,则这段受损的数据仍然可以准确的辨认出文本“永福的电子病历”,这样就能实现数据的最大程度的恢复。

 

       综上所述,电子病历文档XML化是一个趋势。趋势是一个很霸道的东西,体现了众生的意志,某个具体的公司和利益集团无论多么的强大,也无法阻挡趋势,反而会被趋势所践踏。

       电子病历的用户,包括医生、医院院长、卫生系统的官员等等不擅长IT技术,未必能理解这个趋势,但作为电子病历系统的软件开发商,必须认识到这个趋势,并顺应这个趋势,好好学习和利用XML技术。

电子病历文档标准功能

       笔者认为,电子病历文档不仅仅用于医生书写病历,还可以应用于护理文书、检查检验报告等多种医疗文书的编辑、显示和打印中,甚至可以说将报表功能也包含在其中,凡是可以打印的都可以说是广义上的电子病历文档。从这个方面上延伸,笔者认为电子病历系统和数字化医院系统的界限不必清晰。

       由于电子病历文档需要满足很多种情况下的功能需求,功能范围比较广,因此实用的电子病历文档具有两个层次:一,样式文档;二,电子病历业务数据。结合卫生部的电子病历系统功能规范,电子病历文档应当实现如下的标准功能:

样式文档

  1. 文字编辑:可自由输入文字,可设置文字的字体名称、大小、粗体、斜体、下划线、删除线样式。可设置文字的颜色和背景色。
  2. 图片:可插入图片,图片和文字混排,能手动拖拽设置图片的宽度和高度,能保持图片的宽度高度比例。图片的图像数据可保持在文档中,也可链接引用其他地方的图像数据。能设置文字围绕模式。支持替换文字。
  3. 段落:可设置段落的行间距、段前间距、段后间距。可设置段落的首行缩进和整体缩进量。可设置多种段落列表头显示样式。
  4. 表格:支持单元格的横向合并和纵向合并。支持表格单元格内部的图文混排,支持表格套嵌表格。支持鼠标拖拽表格线来设置表格列的宽度和表格行的高度。支持设置每页都显示的标题行。支持表格单元格边框线的设置和背景颜色的设置。支持单元格斜线。
  5. 页眉页脚:支持设置页眉页脚,其内容和正文一样编辑和排版。能插入页码元素。
  6. 排版:支持文档,能设置文档节的边框和背景。支持使用分页符进行强制分页。
  7. 操作:支持OLE拖拽插入数据,支持和其他程序的复制、粘贴,支持重做和撤销操作。支持鼠标和键盘拖拽选择文档的部分内容。
  8. 打印:支持页面设置,支持文档的打印,支持打印预览。支持多个文档在一个界面中预览和打印。
  9. 开发:支持B/S和C/S开发。这不是规范所规定的,但却是实际应用必须满足的条件。特别的对于B/S开发,要求相关的客户端软件组件文件短小精悍,建议不超过10MB。
  10. 痕迹保留:支持痕迹保留,用户对文档中的内容的新增、修改和删除都能产生痕迹信息并保留在文档中,痕迹信息包括操作员的名称、时间、操作类型和操作的文档内容。痕迹信息能在用户界面上展现出来。
  11. 权限控制:支持多级权限控制,每个用户可以分配不同的权限等级。高权限等级的用户能修改和删除低权限等级的文档内容;低权限等级的用户无法修改和删除高权限等级的文档内容,只能看,不能改。
  12. 半结构化:支持半结构化文档的录入和存储。文档中关键区域被标记出来,而且对用户的文本自由录入的影响很小。
  13. 输入域:支持在文档中插入输入域,输入域可以设置背景文本、固定宽度、数据录入方式、数据校验格式等信息。
  14. 知识库:支持加载知识库,知识库中以树状结构组织了多个知识库节点,节点可以采用可选内容列表,也可以链接引用到模板中。知识库的内容可以动态的来自其他程序模块或数据库。
  15. 数据源绑定:文本输入域能绑定数据源。应用程序能传递数据源来批量的修改文档中输入域中的内容。
  16. 级联模板:通过设置输入域的动作表达式就能实现级联模板的功能。
  17. 医学表达式:支持各种常用的医学表达式。
  18. 图片标注:能在位图或矢量图上添加标注。标注信息可以再次编辑,可以删除。
  19. 网格线:支持整个文档的网格线。对于护理记录,需要支持单元格中设置网格线。
  20. 继续打印:支持断点继续打印。同时支持手动及自动设置继续打印的位置。
  21. 整洁打印:支持不带有痕迹信息的整洁打印。
  22. 文件格式:必须支持XML格式,建议可导出HTML/PDF等开放格式。

电子病历业务数据

 

       在实际开发中,完全实现上述标准功能还是不容易的,不过这也是各个电子病历厂家努力的方向。

电子病历文档标准XML架构

       业界有些人开始采用XML格式存储电子病历文档数据,不过具体的XML格式五花八门,HL7和CDA格式的XML很适合用于病历数据的交换,但主要用于描述数据,在描述文档样式、用户痕迹等信息还是有些麻烦。因此在实践中,应用系统本地存储中采用特定的XML格式,执行数据交换时采用通用的XML格式。

       针对电子病历文档业务,笔者提出一种详细的XML规范,希望能抛砖引玉,促进业界形成实用的电子病历文档XML标准。其XSD代码可参看本文档的附录。以下是符合这种架构的XML文档范例:

                       

在这个XML文档中,XML结构大致可以分为四个部分:

第一部分:正文部分,这个部分保存了文档中所有的病历数据部分,比如文本、图片、输入域、表格、段落符号等等。在这里每一个表示文档内容的XML元素都具有一个StyleIndex的属性值,这是一个整数数值,表示该元素引用的文档样式编号。

第二部分,文档信息部分,这部分包含了电子病历文档的一些基本信息。

第三部分,用户历史记录部分,这部分包含文档操作历史记录信息。列出了历史上修改并保存了该文档的用户名、姓名、权限等级、时间、相关说明文字等信息。这里有一个PermissionLevel元素指明了用户的权限等级,它是一个从0开始的 整数。数值越大,权限等级越大。高权限的用户能修改低权限的用户输入的内容,低权限的用户对高权限用户输入的内容只能看不能改。

第四部分,文档样式列表,列出了文档内容元素所使用的文档样式信息。比如字体样式、对齐样式、颜色等等。

 

可以看出对于这种XML架构,具有2个最显著的特点:

第一.样式信息集中管理。将文档中所有用到的样式信息编组,然后统一保存在样式列表中,而且文档内容元素使用SytleIndex属性值对样式组进行引用。这样做能大幅降低XML文档的大小。

例如对于文档中的“腹痛。”,理论上可以采用“<TextElement Underline="true" CreatorIndex="1">腹痛。</TextElement>”方式进行存储,实际上无论是存储还是编程实现上这样做都比较浪费存储资源。

第二.用户痕迹信息被视作一种文档样式设置。文档样式设置中包含了CreateIndex子元素,其数值表示文档内容的创建者历史信息编号;包含了DeleterIndex子元素,其数值表示文档内容的逻辑删除者历史信息编号。

        例如对于XML片段“<TextElement StyleIndex="2">腹痛。</TextElement>”,它的StyleIndex属性值为2,据此可以在ContentStyles/Styles列表中找到XML片段“<Style Index="2"> <CreatorIndex>1</CreatorIndex> <Underline>true</Underline> </Style>”,可以获得UnderLine元素值为true,说明在用户界面上显示或打印这段文本时是具有下划线的;CreatorIndex元素值为1,系统可以进而在UserHistories元素下查找,可以获得XML片段

<History>

  <ID>li</ID>

  <Name>李医师</Name>

  <SavedTime>2012-11-15 9:30:13</SavedTime>

  <PermissionLevel>1</PermissionLevel>

  <Description>查房</Description>

</History>

这样就可以知道这段文本是李医师于2012年11月15日输入的,而且李医师的PermissionLevel为1,一般解释为中级医生权限。 

有了这种电子病历文档XSD架构,完整功能的电子文档技术就能落地实现了。而且在开发数据接口时也很容易被转换为HL7或者CDA格式。

 小结

本文探讨了在电子病历技术中XML技术的基础地位。包括为什么采用XML技术,如何采用XML技术,此外还提出了一种完整的电子病历文档标准的XSD架构。

参考

参考1. 百度百科,旅行者号探测器http://baike.baidu.com/view/38693.htm?fromId=392306】

 

附录

以下是完整的电子病历XML架构XSD代码

<?xml version="1.0" encoding="utf-8"?>
<!--

  电子病历文档XML架构定义V1.0
  袁永福
-->
<xs:schema 
  elementFormDefault="qualified" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <!-- XML文档根节点  -->
  <xs:element name="DocumentElement" nillable="false" type="DocumentElement" />
  <!-- 文档元素类型  -->
  <xs:complexType name="DocumentElement">
    <xs:complexContent mixed="false">
      <!-- 派生自ContainerElement -->
      <xs:extension base="ContainerElement">
        <xs:sequence>
          <!-- 文档基本信息  -->
          <xs:element minOccurs="0" maxOccurs="1" name="Info" type="DocumentInfo" />
          <!-- 患者基本信息  -->
          <xs:element minOccurs="0" maxOccurs="1" name="Patient" type="Patient" />
          <!-- 用户操作日志信息列表  -->
          <xs:element minOccurs="0" maxOccurs="1" name="UserHistories" 
                      type="UserHistoryInfoCollection" />
          <!-- 文档内容样式列表  -->
          <xs:element minOccurs="0" maxOccurs="1" name="ContentStyles"
                      type="ContentStyleContainer" />
          <!--  页面设置 -->
          <xs:element minOccurs="0" maxOccurs="1" name="PageSettings"
                      type="PageSettings" />
          <!-- 文档正文纯文本内容  -->
          <xs:element minOccurs="0" maxOccurs="1" name="BodyText" type="xs:string" />
        </xs:sequence>
        <!-- 保存文档的电子病历编辑器版本信息  -->
        <xs:attribute name="EditorVersionString" type="xs:string" />
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!--******** 文档元素基础类型  -->
  <xs:complexType name="Element" abstract="true">
    <xs:sequence>
      <!-- 元素编号  -->
      <xs:element minOccurs="0" maxOccurs="1" name="ID" type="xs:string" />
    </xs:sequence>
    <!-- 元素使用的样式编号  -->
    <xs:attribute default="-1" name="StyleIndex" type="xs:int" />
  </xs:complexType>
  <!--******** 段落元素  -->
  <xs:complexType name="ParagraphElement">
    <xs:complexContent mixed="false">
      <xs:extension base="ContainerElement" />
    </xs:complexContent>
  </xs:complexType>
  <!--******** 容器元素  -->
  <xs:complexType name="ContainerElement">
    <xs:complexContent mixed="false">
      <xs:extension base="Element">
        <xs:sequence>
          <!-- 子元素列表  -->
          <xs:element minOccurs="0" maxOccurs="1" name="Elements"
                      type="ElementCollection" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 文档元素列表  -->
  <xs:complexType name="ElementCollection">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="Element" 
                  nillable="true" type="Element" />
    </xs:sequence>
  </xs:complexType>

  <!-- 病人基本信息  -->
  <xs:complexType name="Patient">
    <xs:sequence>
      <!-- 病历编号 -->
      <xs:element minOccurs="0" maxOccurs="1" name="MRID" type="xs:string" />
      <!-- 病人姓名 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
      <!-- 病人证件编号 -->
      <xs:element minOccurs="0" maxOccurs="1" name="CerID" type="xs:string" />
      <!-- 性别 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Sex" type="xs:string" />
      <!-- 生日 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Birthday" type="xs:dateTime" />
      <!-- 地址 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Address" type="xs:string" />
      <!-- 说明 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Description" type="xs:string" />
      <!-- 药物过敏史 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Allergy" type="xs:string" />
    </xs:sequence>
  </xs:complexType>

  <!-- 文档基本信息  -->
  <xs:complexType name="DocumentInfo">
    <xs:sequence>
      <!-- 文档编号 -->
      <xs:element minOccurs="0" maxOccurs="1" name="ID" type="xs:string" />
      <!-- 文档版本号 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Version" type="xs:string" />
      <!-- 文档标题 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Title" type="xs:string" />
      <!-- 说明 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Description" type="xs:string" />
      <!-- 文档创建时间  -->
      <xs:element minOccurs="1" maxOccurs="1" name="CreationTime" type="xs:dateTime" />
      <!-- 文档最后修改时间  -->
      <xs:element minOccurs="1" maxOccurs="1" name="LastModifiedTime" type="xs:dateTime" />
      <!-- 文档编辑的分钟数  -->
      <xs:element minOccurs="0" maxOccurs="1" default="0" name="EditMinute" type="xs:int" />
      <!-- 最后一次打印的时间  -->
      <xs:element minOccurs="1" maxOccurs="1" name="LastPrintTime" type="xs:dateTime" />
      <!-- 文档作者 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Author" type="xs:string" />
      <!-- 说明文字 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Comment" type="xs:string" />
      <!-- 操作文档的系统的名称  -->
      <xs:element minOccurs="0" maxOccurs="1" name="Operator" type="xs:string" />
      <!-- 文档页数  -->
      <xs:element minOccurs="0" maxOccurs="1" default="0" name="NumOfPage" type="xs:int" />
    </xs:sequence>
  </xs:complexType>
  <!-- 用户操作日志列表  -->
  <xs:complexType name="UserHistoryInfoCollection">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="History"
                  nillable="true" type="UserHistoryInfo" />
    </xs:sequence>
  </xs:complexType>
  <!-- 用户操作日志信息  -->
  <xs:complexType name="UserHistoryInfo">
    <xs:sequence>
      <!-- 用户编号 -->
      <xs:element minOccurs="0" maxOccurs="1"
                  name="ID" type="xs:string" />
      <!-- 用户名 -->
      <xs:element minOccurs="0" maxOccurs="1"
                  name="Name" type="xs:string" />
      <!-- 保存文档的时间 -->
      <xs:element minOccurs="1" maxOccurs="1" 
                  name="SavedTime" type="xs:dateTime" />
      <!-- 用户权限等级,数值越高等级越高,
      比如 0:管床医生,1:主治医生,2:主任医生-->
      <xs:element minOccurs="0" maxOccurs="1" default="0" 
                  name="PermissionLevel" type="xs:int" />
      <!-- 一些说明信息 -->
      <xs:element minOccurs="0" maxOccurs="1" 
                  name="Description" type="xs:string" />
      <!-- 额外的数据  -->
      <xs:element minOccurs="0" maxOccurs="1" 
                  name="Tag" type="xs:string" />
    </xs:sequence>
    <!-- 从0开始计算的编号 -->
    <xs:attribute default="0" name="Index" type="xs:int" />
  </xs:complexType>
  <!-- 文档样式容器  -->
  <xs:complexType name="ContentStyleContainer">
    <xs:sequence>
      <!-- 默认文档的内容样式  -->
      <xs:element minOccurs="0" maxOccurs="1" 
                  name="Default" type="ContentStyle" />
      <!-- 文档内容样式列表 -->
      <xs:element minOccurs="0" maxOccurs="1"
                  name="Styles" type="ContentStyleCollection" />
    </xs:sequence>
  </xs:complexType>
  <!-- 文档样式列表  -->
  <xs:complexType name="ContentStyleCollection">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" 
                  name="Style" nillable="true" type="ContentStyle" />
    </xs:sequence>
  </xs:complexType>
  <!-- 文档样式定义  -->
  <xs:complexType name="ContentStyle">
    <xs:sequence>
      <!-- 创建或修改文档内容的用户操作日志编号,和UserHistoryInfo元素的Index属性值关联。Level2 -->
      <xs:element minOccurs="0" maxOccurs="1"
                  default="-1" name="CreatorIndex" type="xs:int" />
      <!-- 删除文档内容的用户操作日志编号,和UserHistoryInfo元素的Index属性值关联。Level2 -->
      <xs:element minOccurs="0" maxOccurs="1" default="-1"
                  name="DeleterIndex" type="xs:int" />
      <!-- 背景色,默认为透明色  -->
      <xs:element minOccurs="0" maxOccurs="1" default="Transparent"
                  name="BackgroundColor" type="xs:string" />
      <!-- 背景图像  -->
      <xs:element minOccurs="0" maxOccurs="1" 
                  name="BackgroundImage" type="ImageValue" />
      <!-- 背景图像的位置  -->
      <xs:element minOccurs="0" maxOccurs="1" default="TopLeft"
                  name="BackgroundPosition" type="ContentAlignment" />
      <!-- 是否重复背景图片  -->
      <xs:element minOccurs="0" maxOccurs="1" default="false"
                  name="BackgroundRepeat" type="xs:boolean" />
      <!-- 文字颜色  -->
      <xs:element minOccurs="0" maxOccurs="1" default="Black" 
                  name="Color" type="xs:string" />
      <!-- 字体名称  -->
      <xs:element minOccurs="0" maxOccurs="1" name="FontName"
                  type="xs:string" />
      <!-- 字体大小 -->
      <xs:element minOccurs="0" maxOccurs="1" default="11" 
                  name="FontSize" type="xs:float" />
      <!-- 粗体样式,可以为指定数字,也可以是“五号”、“小四”、“四号”等  -->
      <xs:element minOccurs="0" maxOccurs="1" default="false" 
                  name="Bold" type="xs:boolean" />
      <!-- 斜体样式  -->
      <xs:element minOccurs="0" maxOccurs="1" default="false"
                  name="Italic" type="xs:boolean" />
      <!-- 下划线样式  -->
      <xs:element minOccurs="0" maxOccurs="1" default="false"
                  name="Underline" type="xs:boolean" />
      <!-- 删除线样式  -->
      <xs:element minOccurs="0" maxOccurs="1" default="false"
                  name="Strikeout" type="xs:boolean" />
      <!-- 上标样式,和Subscript互斥  -->
      <xs:element minOccurs="0" maxOccurs="1" default="false"
                  name="Superscript" type="xs:boolean" />
      <!-- 下标演示,和Superscript互斥  -->
      <xs:element minOccurs="0" maxOccurs="1" default="false"
                  name="Subscript" type="xs:boolean" />
      <!-- 字符间距  -->
      <xs:element minOccurs="0" maxOccurs="1" default="0" 
                  name="Spacing" type="xs:float" />
      <!-- 段后间距  -->
      <xs:element minOccurs="0" maxOccurs="1" default="0" 
                  name="SpacingAfterParagraph" type="xs:float" />
      <!-- 段前间距  -->
      <xs:element minOccurs="0" maxOccurs="1" default="0" 
                  name="SpacingBeforeParagraph" type="xs:float" />
      <!-- 行间距计量方式  -->
      <xs:element minOccurs="0" maxOccurs="1" default="SpaceSingle"
                  name="LineSpacingStyle" type="LineSpacingStyle" />
      <!-- 行间距数值  -->
      <xs:element minOccurs="0" maxOccurs="1" default="0" 
                  name="LineSpacing" type="xs:float" />
      <!-- 段落文档对齐方式  -->
      <xs:element minOccurs="0" maxOccurs="1" default="Left" 
                  name="Align" type="DocumentContentAlignment" />
      <!-- 段落首行缩进量  -->
      <xs:element minOccurs="0" maxOccurs="1" default="0"
                  name="FirstLineIndent" type="xs:float" />
      <!-- 段落左缩进量  -->
      <xs:element minOccurs="0" maxOccurs="1" default="0"
                  name="LeftIndent" type="xs:float" />
      <!-- 垂直对齐方式  -->
      <xs:element minOccurs="0" maxOccurs="1" default="false"
                  name="VertialText" type="xs:boolean" />
      <!-- 边框颜色  -->
      <xs:element minOccurs="0" maxOccurs="1" default="Black"
                  name="BorderColor" type="xs:string" />
      <!-- 边框样式  -->
      <xs:element minOccurs="0" maxOccurs="1" default="Solid"
                  name="BorderStyle" type="DashStyle" />
      <!-- 边框线宽度  -->
      <xs:element minOccurs="0" maxOccurs="1" default="0" 
                  name="BorderWidth" type="xs:float" />
      <!-- 显示左边框线  -->
      <xs:element minOccurs="0" maxOccurs="1" default="false"
                  name="BorderLeft" type="xs:boolean" />
      <!-- 显示下边框线  -->
      <xs:element minOccurs="0" maxOccurs="1" default="false" 
                  name="BorderBottom" type="xs:boolean" />
      <!-- 显示上边框线  -->
      <xs:element minOccurs="0" maxOccurs="1" default="false"
                  name="BorderTop" type="xs:boolean" />
      <!-- 显示右边框线  -->
      <xs:element minOccurs="0" maxOccurs="1" default="false" 
                  name="BorderRight" type="xs:boolean" />
      <!-- 左内边距  -->
      <xs:element minOccurs="0" maxOccurs="1" default="0" 
                  name="PaddingLeft" type="xs:float" />
      <!-- 上内边距  -->
      <xs:element minOccurs="0" maxOccurs="1" default="0"
                  name="PaddingTop" type="xs:float" />
      <!-- 右内边距  -->
      <xs:element minOccurs="0" maxOccurs="1" default="0"
                  name="PaddingRight" type="xs:float" />
      <!-- 下内边距  -->
      <xs:element minOccurs="0" maxOccurs="1" default="0"
                  name="PaddingBottom" type="xs:float" />
      <!-- 元素是否可见  -->
      <xs:element minOccurs="0" maxOccurs="1" default="true"
                  name="Visible" type="xs:boolean" />
      <!-- 圆点段落列表样式  -->
      <xs:element minOccurs="0" maxOccurs="1" default="false"
                  name="BulletedList" type="xs:boolean" />
      <!-- 数字段落列表样式  -->
      <xs:element minOccurs="0" maxOccurs="1" default="false"
                  name="NumberedList" type="xs:boolean" />
    </xs:sequence>
    <xs:attribute default="-1" name="Index" type="xs:int" />
  </xs:complexType>
  <!-- 图片对象  -->
  <xs:complexType name="ImageValue">
    <xs:sequence>
      <!-- 表示图片的二进制数据的BASE64字符串 -->
      <xs:element minOccurs="0" maxOccurs="1" name="ImageDataBase64String" 
                  type="xs:string" />
    </xs:sequence>
  </xs:complexType>
  <!-- 内容对齐方式  -->
  <xs:simpleType name="ContentAlignment">
    <xs:restriction base="xs:string">
      <!-- 顶端左对齐 -->
      <xs:enumeration value="TopLeft" />
      <!-- 顶端居中对齐 -->
      <xs:enumeration value="TopCenter" />
      <!-- 顶端右对齐 -->
      <xs:enumeration value="TopRight" />
      <!-- 垂直居中左对齐 -->
      <xs:enumeration value="MiddleLeft" />
      <!-- 垂直居中水平居中对齐 -->
      <xs:enumeration value="MiddleCenter" />
      <!-- 垂直居中右对齐 -->
      <xs:enumeration value="MiddleRight" />
      <!-- 底端左对齐 -->
      <xs:enumeration value="BottomLeft" />
      <!-- 底端居中对齐 -->
      <xs:enumeration value="BottomCenter" />
      <!-- 底端右对齐 -->
      <xs:enumeration value="BottomRight" />
    </xs:restriction>
  </xs:simpleType>
  <!-- 行间距计量方式  -->
  <xs:simpleType name="LineSpacingStyle">
    <xs:restriction base="xs:string">
      <!-- 单倍行间距 -->
      <xs:enumeration value="SpaceSingle" />
      <!-- 1.5倍行间距 -->
      <xs:enumeration value="Space1pt5" />
      <!-- 2倍行间距 -->
      <xs:enumeration value="SpaceDouble" />
      <!-- 最小值 -->
      <xs:enumeration value="SpaceExactly" />
      <!-- 指定行间距 -->
      <xs:enumeration value="SpaceSpecify" />
      <!-- 多倍行间距 -->
      <xs:enumeration value="SpaceMultiple" />
    </xs:restriction>
  </xs:simpleType>
  <!-- 对齐方式  -->
  <xs:simpleType name="DocumentContentAlignment">
    <xs:restriction base="xs:string">
      <!-- 左对齐 -->
      <xs:enumeration value="Left" />
      <!-- 居中对齐 -->
      <xs:enumeration value="Center" />
      <!-- 右对齐 -->
      <xs:enumeration value="Right" />
      <!-- 两边对齐 -->
      <xs:enumeration value="Justify" />
    </xs:restriction>
  </xs:simpleType>
  <!-- 垂直对齐方式  -->
  <xs:simpleType name="VerticalAlignStyle">
    <xs:restriction base="xs:string">
      <!-- 垂直靠上对齐 -->
      <xs:enumeration value="Top" />
      <!-- 垂直居中对齐 -->
      <xs:enumeration value="Middle" />
      <!-- 垂直靠下对齐 -->
      <xs:enumeration value="Bottom" />
      <!-- 垂直两边对齐 -->
      <xs:enumeration value="Justify" />
    </xs:restriction>
  </xs:simpleType>
  <!-- 线条样式  -->
  <xs:simpleType name="DashStyle">
    <xs:restriction base="xs:string">
      <!-- 实线 -->
      <xs:enumeration value="Solid" />
      <!-- 划线 -->
      <xs:enumeration value="Dash" />
      <!-- 划线 -->
      <xs:enumeration value="Dot" />
      <!-- 点划线 -->
      <xs:enumeration value="DashDot" />
      <!-- 双点划线 -->
      <xs:enumeration value="DashDotDot" />
    </xs:restriction>
  </xs:simpleType>
  <!-- 页面设置 -->
  <xs:complexType name="PageSettings">
    <xs:sequence>
      <!-- 指定的打印机名名称  -->
      <xs:element minOccurs="0" maxOccurs="1"
                  name="PrinterName" type="xs:string" />
      <!-- 指定的纸盒的名称  -->
      <xs:element minOccurs="0" maxOccurs="1"
                  name="PaperSource" type="xs:string" />
      <!-- 纸张类型,若为Custom则表示为自定义纸张大小  -->
      <xs:element minOccurs="0" maxOccurs="1" 
                  default="A4" name="PaperKind" type="xs:string" />
      <!-- 自动纸张大小  -->
      <xs:element minOccurs="0" maxOccurs="1" default="false" 
                  name="AutoPaperWidth" type="xs:boolean" />
      <!-- 内容适应到纸张大小  -->
      <xs:element minOccurs="0" maxOccurs="1" default="false"
                  name="AutoFitPageSize" type="xs:boolean" />
      <!-- 从纸张顶端到页眉顶端的距离  -->
      <xs:element minOccurs="0" maxOccurs="1" default="50"
                  name="HeaderDistance" type="xs:int" />
      <!-- 从页脚低端到纸张下边缘的距离  -->
      <xs:element minOccurs="0" maxOccurs="1" default="50"
                  name="FooterDistance" type="xs:int" />
      <!-- 自定义时的纸张宽度  -->
      <xs:element minOccurs="0" maxOccurs="1" default="827" 
                  name="PaperWidth" type="xs:int" />
      <!-- 自定义时的纸张高度  -->
      <xs:element minOccurs="0" maxOccurs="1" default="1169"
                  name="PaperHeight" type="xs:int" />
      <!-- 左边距  -->
      <xs:element minOccurs="0" maxOccurs="1" default="100"
                  name="LeftMargin" type="xs:int" />
      <!-- 上边距  -->
      <xs:element minOccurs="0" maxOccurs="1" default="100" 
                  name="TopMargin" type="xs:int" />
      <!-- 右边距  -->
      <xs:element minOccurs="0" maxOccurs="1" default="100" 
                  name="RightMargin" type="xs:int" />
      <!-- 下边距  -->
      <xs:element minOccurs="0" maxOccurs="1" default="100"
                  name="BottomMargin" type="xs:int" />
      <!-- 是否横向打印  -->
      <xs:element minOccurs="0" maxOccurs="1" default="false"
                  name="Landscape" type="xs:boolean" />
    </xs:sequence>
  </xs:complexType>
  <!-- 文本元素  -->
  <xs:complexType name="TextElement">
    <xs:complexContent mixed="false">
      <xs:extension base="Element">
        <xs:sequence>
          <!-- 文本内容 -->
          <xs:element minOccurs="0" maxOccurs="1" name="Text" type="xs:string" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!-- 对象元素  -->
  <xs:complexType name="ObjectElement">
    <xs:complexContent mixed="false">
      <xs:extension base="Element">
        <xs:sequence>
          <!-- 名称 -->
          <xs:element minOccurs="0" maxOccurs="1" 
                      name="Name" type="xs:string" />
          <!-- 是否可用 -->
          <xs:element minOccurs="0" maxOccurs="1" default="true"
                      name="Enabled" type="xs:boolean" />
          <!-- 额外标记数据 -->
          <xs:element minOccurs="0" maxOccurs="1" 
                      name="Tag" type="xs:string" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!-- 按钮元素  -->
  <xs:complexType name="ButtonElement">
    <xs:complexContent mixed="false">
      <xs:extension base="ObjectElement">
        <xs:sequence>
          <!-- 提示文本 -->
          <xs:element minOccurs="0" maxOccurs="1" 
                      name="ToolTip" type="xs:string" />
          <!-- 数据源绑定信息  -->
          <xs:element minOccurs="0" maxOccurs="1"
                      name="ValueBinding" type="DataBinding" />
          <!-- 用户能否删除 -->
          <xs:element minOccurs="0" maxOccurs="1" 
                      default="false" name="Deleteable" type="xs:boolean" />
          <!-- 组名 -->
          <xs:element minOccurs="0" maxOccurs="1" 
                      name="GroupName" type="xs:string" />
          <!-- 复选框样式 -->
          <xs:element minOccurs="0" maxOccurs="1" default="CheckBox"
                      name="ControlStyle" type="ButtonControlStyle" />
          <!-- 勾选状态 -->
          <xs:element minOccurs="0" maxOccurs="1" default="false"
                      name="Checked" type="xs:boolean" />
          <!-- 按钮数据 -->
          <xs:element minOccurs="0" maxOccurs="1" name="Value" type="xs:string" />
          <!-- 动作表达式列表 -->
          <xs:element minOccurs="0" maxOccurs="1" name="EventExpressions"
                      type="EventExpressionInfoCollection" />
          <!-- 文本值 -->
          <xs:element minOccurs="0" maxOccurs="1" name="Text" type="xs:string" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!-- 数据源绑定设置  -->
  <xs:complexType name="DataBinding">
    <xs:sequence>
      <!-- 数据源名称 -->
      <xs:element minOccurs="0" maxOccurs="1" name="DataSource" type="xs:string" />
      <!-- 格式化字符串 -->
      <xs:element minOccurs="0" maxOccurs="1" name="FormatString" type="xs:string" />
      <!-- 绑定路径 -->
      <xs:element minOccurs="0" maxOccurs="1" name="BindingPath" type="xs:string" />
      <!-- 自动更新数据源 -->
      <xs:element minOccurs="0" maxOccurs="1" default="false"
                  name="AutoUpdate" type="xs:boolean" />
      <!-- 数据源只读 -->
      <xs:element minOccurs="0" maxOccurs="1" default="true" name="Readonly" type="xs:boolean" />
    </xs:sequence>
  </xs:complexType>
  <!-- 复选框样式  -->
  <xs:simpleType name="ButtonControlStyle">
    <xs:restriction base="xs:string">
      <!-- 复选框样式 -->
      <xs:enumeration value="CheckBox" />
      <!-- 单选框样式 -->
      <xs:enumeration value="RadioBox" />
      <!-- 按钮样式 -->
      <xs:enumeration value="Button" />
    </xs:restriction>
  </xs:simpleType>
  <!-- 动作表达式列表  -->
  <xs:complexType name="EventExpressionInfoCollection">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="Expression"
                  nillable="true" type="EventExpressionInfo" />
    </xs:sequence>
  </xs:complexType>
  <!-- 动作表达式信息  -->
  <xs:complexType name="EventExpressionInfo">
    <xs:sequence>
      <!-- 触发事件的名称 -->
      <xs:element minOccurs="0" maxOccurs="1" default="ContentChanged" 
                  name="EventName" type="xs:string" />
      <!-- 表达式文本 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Expression" type="xs:string" />
      <!-- 下一个元素类型 -->
      <xs:element minOccurs="0" maxOccurs="1" default="NextElement"
                  name="Target" type="EventExpressionTarget" />
      <!-- 指定的目标元素名称 -->
      <xs:element minOccurs="0" maxOccurs="1" name="CustomTargetName" 
                  type="xs:string" />
      <!-- 目标属性名称 -->
      <xs:element minOccurs="0" maxOccurs="1" default="Visible"
                  name="TargetPropertyName" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
  <!-- 动作表达式执行目标  -->
  <xs:simpleType name="EventExpressionTarget">
    <xs:restriction base="xs:string">
      <!-- 下一个元素 -->
      <xs:enumeration value="NextElement" />
      <!-- 自定义 -->
      <xs:enumeration value="Custom" />
    </xs:restriction>
  </xs:simpleType>
  <!-- 表格元素  -->
  <xs:complexType name="TableElement">
    <xs:complexContent mixed="false">
      <xs:extension base="Element">
        <xs:sequence>
          <!-- 表格列元素列表 -->
          <xs:element minOccurs="0" maxOccurs="1" name="Columns" >
            <xs:complexType>
              <xs:sequence >
                <!-- 只能接受表格列元素 -->
                <xs:element minOccurs="0" maxOccurs="unbounded" 
                            name="Column" type="TableColumnElement" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <!-- 表格行元素列表  -->
          <xs:element minOccurs="0" maxOccurs="1" name="Rows" >
            <xs:complexType>
              <xs:sequence >
                <!-- 只能接受表格行元素 -->
                <xs:element minOccurs="0" maxOccurs="unbounded" 
                            name="Row" type="TableRowElement" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
        <!-- 行数  -->
        <xs:attribute name="NumOfRows" type="xs:int" use="required" />
        <!-- 列数  -->
        <xs:attribute name="NumOfColumns" type="xs:int" use="required" />
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!-- 表格列元素  -->
  <xs:complexType name="TableColumnElement">
    <xs:complexContent mixed="false">
      <xs:extension base="Element">
        <xs:sequence>
          <!-- 宽度 -->
          <xs:element minOccurs="1" maxOccurs="1" name="Width" type="xs:float" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!-- 表格行元素  -->
  <xs:complexType name="TableRowElement">
    <xs:complexContent mixed="false">
      <xs:extension base="Element">
        <xs:sequence>
          <!-- 指定的高度 -->
          <xs:element minOccurs="0" maxOccurs="1" default="0" 
                      name="SpecifyHeight" type="xs:float" />
          <!-- 标题行样式 -->
          <xs:element minOccurs="0" maxOccurs="1" default="false"
                      name="HeaderStyle" type="xs:boolean" />
          <!-- 表格列信息列表 -->
          <xs:element minOccurs="0" maxOccurs="1" name="Cells" >
            <xs:complexType>
              <xs:sequence >
                <!-- 只能接受表格单元格元素 -->
                <xs:element minOccurs="0" maxOccurs="unbounded" 
                            name="Cell" type="TableCellElement" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!-- 表格单元格元素  -->
  <xs:complexType name="TableCellElement">
    <xs:complexContent mixed="false">
      <xs:extension base="ContainerElement">
        <xs:sequence>
          <!-- 标题 -->
          <xs:element minOccurs="0" maxOccurs="1" name="Title" 
                      type="xs:string" />
          <!-- 跨行数 -->
          <xs:element minOccurs="0" maxOccurs="1" default="1"
                      name="RowSpan" type="xs:int" />
          <!-- 跨列数 -->
          <xs:element minOccurs="0" maxOccurs="1" default="1"
                      name="ColSpan" type="xs:int" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!-- 文档域对象  -->
  <xs:complexType name="FieldElement">
    <xs:complexContent mixed="false">
      <xs:extension base="ContainerElement">
        <xs:sequence>
          <!-- 文本值 -->
          <xs:element minOccurs="0" maxOccurs="1" name="TextValue" type="xs:string" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!-- 输入域基础对象  -->
  <xs:complexType name="InputFieldBaseElement">
    <xs:complexContent mixed="false">
      <xs:extension base="FieldElement">
        <xs:sequence>
          <!-- 指定宽度  -->
          <xs:element minOccurs="0" maxOccurs="1" default="0" 
                      name="SpecifyWidth" type="xs:float" />
          <!-- 内容只读 -->
          <xs:element minOccurs="0" maxOccurs="1" default="false" 
                      name="Readonly" type="xs:boolean" />
          <!-- 允许接收的内容样式 -->
          <xs:element minOccurs="0" maxOccurs="1" default="Text" 
                      name="AcceptChildElementTypes" type="ElementType" />
          <!-- 动作表达式  -->
          <xs:element minOccurs="0" maxOccurs="1" name="EventExpressions"
                      type="EventExpressionInfoCollection" />
          <!-- 用户可以直接修改输入域的内容 -->
          <xs:element minOccurs="0" maxOccurs="1" default="true"
                      name="UserEditable" type="xs:boolean" />
          <!-- 输入域名称 -->
          <xs:element minOccurs="0" maxOccurs="1" name="Name" 
                      type="xs:string" />
          <!-- 输入域接收Tab符号 -->
          <xs:element minOccurs="0" maxOccurs="1" default="false" 
                      name="AcceptTab" type="xs:boolean" />
          <!-- 允许多个段落 -->
          <xs:element minOccurs="0" maxOccurs="1" default="false"
                      name="MultiParagraph" type="xs:boolean" />
          <!-- 显示格式 -->
          <xs:element minOccurs="0" maxOccurs="1" name="DisplayFormat" 
                      type="ValueFormat" />
          <!-- 数据源绑定  -->
          <xs:element minOccurs="0" maxOccurs="1" name="ValueBinding"
                      type="DataBinding" />
          <!-- 数据校验格式  -->
          <xs:element minOccurs="0" maxOccurs="1" name="ValidateStyle"
                      type="ValueValidateStyle" />
          <!-- 输入域数据 -->
          <xs:element minOccurs="0" maxOccurs="1" name="Value" 
                      type="xs:string" />
          <!-- 提示文本 -->
          <xs:element minOccurs="0" maxOccurs="1" name="ToolTip" 
                      type="xs:string" />
          <!-- 背景文本 -->
          <xs:element minOccurs="0" maxOccurs="1" name="BackgroundText"
                      type="xs:string" />
          <!-- 允许高亮度显示  -->
          <xs:element minOccurs="0" maxOccurs="1" default="Enabled"
                      name="EnableHighlight" type="EnableState" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!-- 元素类型   -->
  <xs:simpleType name="ElementType">
    <xs:list>
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <!-- 没有任何元素 -->
          <xs:enumeration value="None" />
          <!-- 文本元素 -->
          <xs:enumeration value="Text" />
          <!-- 文档域元素 -->
          <xs:enumeration value="Field" />
          <!-- 输入域元素 -->
          <xs:enumeration value="InputField" />
          <!-- 表格元素 -->
          <xs:enumeration value="Table" />
          <!-- 对象元素 -->
          <xs:enumeration value="Object" />
          <!-- 分行元素 -->
          <xs:enumeration value="LineBreak" />
          <!-- 分页符元素 -->
          <xs:enumeration value="PageBreak" />
          <!-- 段落标记元素 -->
          <xs:enumeration value="ParagraphFlag" />
          <!-- 复选框元素 -->
          <xs:enumeration value="CheckBox" />
          <!-- 图片元素 -->
          <xs:enumeration value="Image" />
          <!-- 任何类型的元素 -->
          <xs:enumeration value="All" />
        </xs:restriction>
      </xs:simpleType>
    </xs:list>
  </xs:simpleType>
  <!-- 格式化信息对象  -->
  <xs:complexType name="ValueFormat">
    <xs:sequence>
      <!-- 格式化样式 -->
      <xs:element minOccurs="0" maxOccurs="1" default="None"
                  name="Style" type="ValueFormatType" />
      <!-- 格式化字符串 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Format"
                  type="xs:string" />
      <!-- 内容为空时的文本 -->
      <xs:element minOccurs="0" maxOccurs="1" name="NoneText" 
                  type="xs:string" />
    </xs:sequence>
  </xs:complexType>
  <!-- 格式化样式  -->
  <xs:simpleType name="ValueFormatType">
    <xs:restriction base="xs:string">
      <!-- 无设置 -->
      <xs:enumeration value="None" />
      <!-- 数值 -->
      <xs:enumeration value="Numeric" />
      <!-- 货币 -->
      <xs:enumeration value="Currency" />
      <!-- 时间 -->
      <xs:enumeration value="DateTime" />
      <!-- 字符串 -->
      <xs:enumeration value="String" />
      <!-- 布尔型 -->
      <xs:enumeration value="Boolean" />
      <!-- 百分比 -->
      <xs:enumeration value="Percent" />
    </xs:restriction>
  </xs:simpleType>
  <!-- 数据校验样式  -->
  <xs:complexType name="ValueValidateStyle">
    <xs:sequence>
      <!-- 数据名称 -->
      <xs:element minOccurs="0" maxOccurs="1" name="ValueName"
                  type="xs:string" />
      <!-- 是否是必填字段 -->
      <xs:element minOccurs="0" maxOccurs="1" default="false"
                  name="Required" type="xs:boolean" />
      <!-- 数据格式 -->
      <xs:element minOccurs="0" maxOccurs="1" default="Text"
                  name="ValueType" type="ValueTypeStyle" />
      <!-- 文本最大长度,为0表示无限制 -->
      <xs:element minOccurs="0" maxOccurs="1" default="0"
                  name="MaxLength" type="xs:int" />
      <!-- 文本最小长度,为0表示无限制 -->
      <xs:element minOccurs="0" maxOccurs="1" default="0" 
                  name="MinLength" type="xs:int" />
      <!-- 数值的最大值,数据格式和ValueType设置相关;
      若为空,则没有最大值限制。 -->
      <xs:element minOccurs="0" maxOccurs="1" name="MaxValue" 
                  type="xs:string" />
      <!-- 数值的最小值,数据格式和ValueType设置相关;
      若为空,则没有最小值限制。 -->
      <xs:element minOccurs="0" maxOccurs="1" name="MinValue"
                  type="xs:string" />
      <!-- 选择区域 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Range" 
                  type="xs:string" />
      <!-- 自定义消息 -->
      <xs:element minOccurs="0" maxOccurs="1"
                  name="CustomMessage" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
  <!-- 数据校验格式  -->
  <xs:simpleType name="ValueTypeStyle">
    <xs:restriction base="xs:string">
      <!-- 文本型 -->
      <xs:enumeration value="Text" />
      <!-- 整数型 -->
      <xs:enumeration value="Integer" />
      <!-- 数字型 -->
      <xs:enumeration value="Numeric" />
      <!-- 日期型 -->
      <xs:enumeration value="Date" />
      <!-- 时间型 -->
      <xs:enumeration value="Time" />
      <!-- 时间日期型 -->
      <xs:enumeration value="DateTime" />
    </xs:restriction>
  </xs:simpleType>
  <!-- 可用状态  -->
  <xs:simpleType name="EnableState">
    <xs:restriction base="xs:string">
      <!-- 默认值 -->
      <xs:enumeration value="Default" />
      <!-- 可用 -->
      <xs:enumeration value="Enabled" />
      <!-- 不可用 -->
      <xs:enumeration value="Disabled" />
    </xs:restriction>
  </xs:simpleType>
  <!-- 分页符元素  -->
  <xs:complexType name="PageBreakElement">
    <xs:complexContent mixed="false">
      <xs:extension base="Element" />
    </xs:complexContent>
  </xs:complexType>
  <!-- 医学表达式元素  -->
  <xs:complexType name="MedicalExpressionFieldElement">
    <xs:complexContent mixed="false">
      <xs:extension base="InputFieldElement">
        <xs:sequence>
          <!-- 宽度 -->
          <xs:element minOccurs="1" maxOccurs="1"
                      name="Width" type="xs:float" />
          <!-- 高度 -->
          <xs:element minOccurs="1" maxOccurs="1"
                      name="Height" type="xs:float" />
          <!-- 表达式样式 -->
          <xs:element minOccurs="0" maxOccurs="1" 
                      name="ExpressionStyle" type="xs:string" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 段落符号元素  -->
  <xs:complexType name="ParagraphFlagElement">
    <xs:complexContent mixed="false">
      <xs:extension base="Element">
        <xs:sequence>
          <!-- 元素是自动创建的  -->
          <xs:element minOccurs="0" maxOccurs="1"
                      default="false" name="AutoCreate" type="xs:boolean" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- 文件内容来源  -->
  <xs:complexType name="FileContentSource">
    <xs:sequence>
      <!-- 文件系统名称 -->
      <xs:element minOccurs="0" maxOccurs="1" name="FileSystemName" type="xs:string" />
      <!-- 文件名 -->
      <xs:element minOccurs="0" maxOccurs="1" name="FileName" type="xs:string" />
      <!-- 文档区域名 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Range" type="xs:string" />
    </xs:sequence>
  </xs:complexType>

  <!-- 页码元素  -->
  <xs:complexType name="PageInfoElement">
    <xs:complexContent mixed="false">
      <xs:extension base="Element">
        <xs:sequence>
          <!-- 显示的页码类型 -->
          <xs:element minOccurs="0" maxOccurs="1" default="PageIndex" 
                      name="ContentType" type="PageInfoContentType" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!-- 页码类型  -->
  <xs:simpleType name="PageInfoContentType">
    <xs:restriction base="xs:string">
      <!-- 页号 -->
      <xs:enumeration value="PageIndex" />
      <!-- 总页数 -->
      <xs:enumeration value="NumOfPages" />
    </xs:restriction>
  </xs:simpleType>
  <!-- 强制分行元素  -->
  <xs:complexType name="LineBreakElemenet">
    <xs:complexContent mixed="false">
      <xs:extension base="Element" />
    </xs:complexContent>
  </xs:complexType>
  <!-- 图片元素  -->
  <xs:complexType name="ImageElement">
    <xs:complexContent mixed="false">
      <xs:extension base="ObjectElement">
        <xs:sequence>
          <!-- 标题 -->
          <xs:element minOccurs="0" maxOccurs="1" name="Title" 
                      type="xs:string" />
          <!-- 替换文本 -->
          <xs:element minOccurs="0" maxOccurs="1" name="Alt" 
                      type="xs:string" />
          <!-- 保持宽度高度比 -->
          <xs:element minOccurs="0" maxOccurs="1" default="true" 
                      name="KeepWidthHeightRate" type="xs:boolean" />
          <!-- 来源 -->
          <xs:element minOccurs="0" maxOccurs="1" name="Source"
                      type="xs:string" />
          <!-- 保持图片到文档中 -->
          <xs:element minOccurs="0" maxOccurs="1" default="true"
                      name="SaveContentInFile" type="xs:boolean" />
          <!-- 宽度 -->
          <xs:element minOccurs="1" maxOccurs="1" name="Width"
                      type="xs:float" />
          <!-- 高度 -->
          <xs:element minOccurs="1" maxOccurs="1" name="Height" 
                      type="xs:float" />
          <!-- 附加的批注图形数据  -->
          <xs:element minOccurs="0" maxOccurs="1" 
                      name="AdditionShapeContent" type="xs:string" />
          <!-- 固定批注大小  -->
          <xs:element minOccurs="0" maxOccurs="1" default="false"
                      name="AdditionShapeFixSize" type="xs:boolean" />
          <!-- 图片 -->
          <xs:element minOccurs="0" maxOccurs="1" 
                      name="ImageBase64String" type="xs:string" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!-- 文本输入域元素  -->
  <xs:complexType name="InputFieldElement">
    <xs:complexContent mixed="false">
      <xs:extension base="InputFieldBaseElement">
        <xs:sequence>
          <!-- 输入域设置 -->
          <xs:element minOccurs="0" maxOccurs="1"
                      name="FieldSettings" type="InputFieldSettings" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!-- 输入域设置  -->
  <xs:complexType name="InputFieldSettings">
    <xs:sequence>
      <!-- 编辑方式 -->
      <xs:element minOccurs="0" maxOccurs="1" default="Text"
                  name="EditStyle" type="InputFieldEditStyle" />
      <!-- 多选 -->
      <xs:element minOccurs="0" maxOccurs="1" default="false"
                  name="MultiSelect" type="xs:boolean" />
      <!-- 列表内容来源 -->
      <xs:element minOccurs="0" maxOccurs="1" name="ListSource"
                  type="ListSourceInfo" />
    </xs:sequence>
  </xs:complexType>
  <!-- 编辑方式  -->
  <xs:simpleType name="InputFieldEditStyle">
    <xs:restriction base="xs:string">
      <!-- 文本编辑 -->
      <xs:enumeration value="Text" />
      <!-- 下拉列表样式 -->
      <xs:enumeration value="DropdownList" />
      <!-- 日期样式 -->
      <xs:enumeration value="Date" />
      <!-- 时间日期演示 -->
      <xs:enumeration value="DateTime" />
    </xs:restriction>
  </xs:simpleType>
  <!-- 列表来源  -->
  <xs:complexType name="ListSourceInfo">
    <xs:sequence>
      <!-- 名称 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Name" 
                  type="xs:string" />
      <!-- 来源名称 -->
      <xs:element minOccurs="0" maxOccurs="1" name="SourceName"
                  type="xs:string" />
      <!-- 格式化字符串  -->
      <xs:element minOccurs="0" maxOccurs="1" name="FormatString"

                  type="xs:string" />
      <!-- 显示的文本的路径 -->
      <xs:element minOccurs="0" maxOccurs="1" name="DisplayPath"
                  type="xs:string" />
      <!-- 后台数值的路径 -->
      <xs:element minOccurs="0" maxOccurs="1" name="ValuePath"
                  type="xs:string" />
      <!-- 列表内容 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Items"
                  type="ListItemCollection" />
    </xs:sequence>
  </xs:complexType>
  <!-- 列表项目集合  -->
  <xs:complexType name="ListItemCollection">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded"
                  name="Item" nillable="true" type="ListItem" />
    </xs:sequence>
  </xs:complexType>
  <!-- 列表项目  -->
  <xs:complexType name="ListItem">
    <xs:sequence>
      <!-- 编号 -->
      <xs:element minOccurs="0" maxOccurs="1" name="ID" 
                  type="xs:string" />
      <!-- 文本 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Text" 
                  type="xs:string" />
      <!-- 数值 -->
      <xs:element minOccurs="0" maxOccurs="1" name="Value"
                  type="xs:string" />
      <!-- 额外的附加数据  -->
      <xs:element minOccurs="0" maxOccurs="1" name="Tag"
                  type="xs:string" />
      <!-- 拼音码  -->
      <xs:element minOccurs="0" maxOccurs="1" name="SpellCode"
                  type="xs:string" />
    </xs:sequence>
  </xs:complexType>
  <!-- 字符串对齐方式  -->
  <xs:simpleType name="StringAlignment">
    <xs:restriction base="xs:string">
      <!-- 左对齐 -->
      <xs:enumeration value="Near" />
      <!-- 居中对齐 -->
      <xs:enumeration value="Center" />
      <!-- 右对齐 -->
      <xs:enumeration value="Far" />
    </xs:restriction>
  </xs:simpleType>
  <!-- 正文内容  -->
  <xs:complexType name="BodyElement">
    <xs:complexContent mixed="false">
      <xs:extension base="ContainerElement" />
    </xs:complexContent>
  </xs:complexType>
  <!-- 页眉元素  -->
  <xs:complexType name="HeaderElement">
    <xs:complexContent mixed="false">
      <xs:extension base="ContainerElement" />
    </xs:complexContent>
  </xs:complexType>
  <!-- 页脚元素  -->
  <xs:complexType name="FooterElement">
    <xs:complexContent mixed="false">
      <xs:extension base="ContainerElement" />
    </xs:complexContent>
  </xs:complexType>
  <!-- 大小改变模式  -->
  <xs:simpleType name="ResizeableType">
    <xs:restriction base="xs:string">
      <!-- 固定大小,不能修改 -->
      <xs:enumeration value="FixSize" />
      <!-- 可改变宽度 -->
      <xs:enumeration value="Width" />
      <!-- 可改变高度 -->
      <xs:enumeration value="Height" />
      <!-- 可改变宽度和高度 -->
      <xs:enumeration value="WidthAndHeight" />
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

 

posted on 2013-04-14 23:01  袁永福 电子病历,医疗信息化  阅读(3244)  评论(3编辑  收藏  举报

导航