使用openCDS中的概念Using OpenCDS Concepts内容
1 什么是openCDS中的概念
1.1概念类型
1.2openCDS中的概念
1.3概念映射规范
1.4概念映射实例
2Guvnor中的概念
2.1概念类型
2.2以openCDS中的概念作为Guvnor中的枚举
2.3特定领域语言dsl
2.4Guvnor中的概念映射
3OpenCDS决策支持服务中的概念
3.1OpenCDS内部数据中的概念类型
3.2OpenCDS 内部数据、概念映射规范和概念映射实例
3.3对OpenCDS概念映射规范和概念映射的更新
更新日志








































Date


Author



Notes



12-17-2011



David Shields



Initial document



12-20-2011



Ken Kawamoto


Minor edits; added more details on use of Apelon.

12-20-2011



David Shields


Add supporting graphics and examples, separate “OpenCDS Concepts” from “concept instances.”

12-21-2011



David Shields


More examples, improved graphics, explain both OpenCDS and user maintained concepts better.

4-6-2012



David Shields


Reworded definitions, improved graphics, worked on better linkage from ideas about OpenCDS Concepts to the actual setup files used for OpenCDS.

简介


OpenCDS是基于临床概念的思路构建的临床决策支持系统。我们将很多术语系统和医学信息交换系统称之为概念、概念描述符、或者是概念唯一标识符。

当我们提到一个OpenCDS概念时 我们指的是OpenCDS中所使用的特定的实现技术,它们与这些基本想法保持独立,但是更加具体的实现。
本文的目的在于阐述我们如何在OpenCDS使用这些术语,以及它们与临床上广义上理解的概念的关系。
1.什么是OpenCDS中的概念
OpenCDS中的概念是OpenCDS中一种实现技术。作为一个全局概念,OpenCDS拥有一种结构和方法,使得临床用户能够适用临床概念来开发决策支持规则。我们称这些特定的概念为OpenCDS中的概念,它们能够为表示临床概念实例的具体数据提供一个接口。
这意味着临床规则编辑人员能够利用医务人员能够理解的临床术语来工作。OpenCDS旨在支持为开源的Drool推理引擎编辑的规则,其中使用一种特定领域语言。这种特定领域语言使得可以如医务人员描述的那样来编辑规则,使用医务人员平常所使用的一些术语。
然后医学信息学人员、术语人员或词汇专家将这些概念与中实际临床数据中使用的编码系统中的值对应起来。很多情况下,这涉及到使用大型数据库的术语管理系统,如Apelon First DataBank 以及UMLS,这些能够支持大型和国际化的术语。然而,也可以通过构建简单的XML文件来实现专有代码或特殊代码与OpenCDS概念的对应。
临床规则使用OpenCDS概念要优于原始数据,多个不同的编码系统之间术语映射使得这些概念就是一些代码列表。这样就可以将规则的逻辑与规则所使用的具体数据分离开来。
因此,OpenCDS中的概念是医学想法与表达临床概念实例的数据细节的接口。
本节下面的部分会阐述如下项目,讨论它们在OpenCDS如何使用
概念类型
OpenCDS中的概念
概念实例
概念映射和枚举
下图可以很容易的看出它们间的关系

下面的章节会讨论如下软件中将病人数据与临床概念或想法关联起来的技术:

1.JBoss Drools Guvnor (our supported authoring environment for KnowledgeModules, aka “rules” or generically as “knowledge”)

2.OpenCDS Decision Support Service (our software service to do clinical decision support)
1.1 概念类型
1.1.1定义
OpenCDS中的概念类型是一个术语,我们常常指的是OpenCDS中的java类,它们是为结构化成vmr的输入数据中找到的
每个概念描述符和模板而构建的。
一个概念类型表示在临床声明中很多地方都能找到的一类信息。临床声明是vmr的基石,有关vmr更多的讨论可以在Notes on OpenCDS internal Data Structure 中找到。另外 也有一些处理模板和vmr结构化元素的概念类型。
在本文中,我用大写的Concept Type来表示java类,而用小写的来表示通常的concept概念。
有时候,在输入数据中我们也会post-coordinated不止一个CD,例如bodysite身体部位和laterality侧面,因为可能需要对这两种的组合做出一些决策,或者手术/操作和问题的常见的编码系统可能没有足够特殊的代码,我们需要将二者关联起来来表示。比如,我们想表示皮疹同时出现在左右胳膊上。
Concept Type的例子有 “ProcedureConcept,”、“AdverseEventAgentConcept,”、ProblemConcept”,“MedicationClassConcept.”
因为它们都是基于vmr中的一些特殊数据元素,OpenCDS支持的Concept Type的列表是固定的,包括很少的能够满足大多数其他分类的需要。当需求出现时,我们能够添加更多的Concept Type,我们认为当前的列表是可用的。支持额外的Concept Type不是件小事,所以不常常这么做。
所支持的Concept Type的列表总能够在源代码中找到,它们是位于module opencds-vmr-1_0-internal中的单独的文件,是org.opencds.vmr.v1_0.internal.concepts.中单独的java类。这些文件的名称就是Concept Type,你可以在Drool rule中找到。出于其他目的在org.opencds.common.terminology.OpenCDSConceptTypes.java中也有单独的罗列出来。
在本文档成文的时候 有如下的Concept Types
AdverseEventAffectedBodySiteConcept AdverseEventAffectedBodySiteLateralityConcept AdverseEventAgentConcept AdverseEventConcept AdverseEventCriticalityConcept AdverseEventSeverityConcept AdverseEventStatusConcept BrandedMedicationConcept CDSInputTemplateConcept CDSOutputTemplateConcept ClinicalStatementEntityInRoleRelationshipConcept ClinicalStatementRelationshipConcept ClinicalStatementTemplateConcept DataSourceTypeConcept DoseTypeConcept DosingSigConcept EncounterCriticalityConcept EncounterTypeConcept EntityRelationshipConcept EntityTemplateConcept EntityTypeConcept EthnicityConcept EvaluatedPersonRelationshipConcept GenderConcept GenericMediccationConcept GoalCodedValueConcept GoalCriticalityConcept GoalFocusConcept GoalStatusConcept GoalTargetBodySiteConcept GoalTargetBodySiteLateralityConcept ImmunizationConcept InformationAttestationTypeConcept InformationRecipientPreferredLanguageConcept InformationRecipientTypeConcept ManufacturerConcept MedicationClassConcept MedicationConcept ObservationCodedValueConcept ObservationCriticalityConcept ObservationFocusConcept ObservationInterpretationConcept ObservationMethodConcept ObservationTargetBodySiteConcept ObservationTargetBodySiteLateralityConcept ObservationUnconductedReasonConcept PreferredLangugageConcept ProblemAffectedBodySiteConcept ProblemAffectedBodySiteLatgeralityConcept ProblemConcept ProblemImportanceConcept ProblemSeverityConcept ProblemStatusConcept ProcedureApproachBodySiteConcept ProcedureApproachBodySiteLateralityConcept ProcedureConcept ProcedureCriticalityConcept ProcedureMethodConcept ProcedureTargetBodySiteConcept ProcedureTargetBodySiteLateralityConcept RaceConcept ResourceTypeConcept RoleConcept SubstanceAdministrationApproachBodySiteConcept SubstanceAdministrationApproachBodySiteLateralityConcept SubstanceAdministrationCriticalityConcept SubstanceAdministrationGeneralPurposeConcept SubstanceAdministrationTargetBodySiteConcept SubstanceAdministrationTargetBodySiteLateralityConcept SubstanceDeliveryMethodConcept SubstanceDeliveryRouteConcept SubstanceFormConcept SubstanceManufacturerConcept SupplyConcept SupplyCriticalityConcept SupplyTargetBodySiteConcept SupplyTargetBodySiteLateralityConcept SystemUserPreferredLanguageConcept SystemUserTaskConctextConcept SystemUserTypeConcept UndeliveredProcedureReasonConcept UndeliveredSubstanceAdministrationReasonConcept VmrOpenCdsConcept VMRTemplateConcept 2.OpenCDS Concepts
2.1定义
OpenCDS Concept就是指OpenCDS Concept Type的一个特殊的实例,它能够在决策支持的语境中标识一个医师熟悉的或有用的临床概念,并且是在OpenCDS中通过Apelon DTS分配一个id ,是可标识的。
每个OpenCDS Concept都可能是某个特殊的OpenCDS KnowledgeModule的某个Concept Type的0到多个实例之一,
比如,ProblemConcept的实例可能是diabetes mellitus, asthma, or chronic heart disease,可能有更多其他的。MedicationClassConcept 的实例可能有bronchodilator支气管扩张剂, or ACE inhibitor等等。
我们为了保证所有OpenCDS用户的知识模块间的互操作性,对OpenCDS Concept code进行集中式管理,这样不同的组织就能够共享知识模块。
在软件和知识模块开发时,可以通过OpenCDS 配置文件创建临时的 OpenCDS Concept,但是任意临时的OpenCDS Concept都应该添加到中央的OpenCDS Concept 列表中,这个列表部署在Apelon DTS 术语服务器上,是由犹他大学负责维护的 。将概念添加到OpenCDS Apelon 实例中会为其分配一个唯一ID,这样所有OpenCDS的实现人员就可以使用。
如下步骤就可以浏览此服务器的内容:
登录Apelon.opencds.org网站
使用如下参数登录 其中密码为welcome2opencds
The master set of concepts can be generated for local use within the OpenCDS service from this central Apelon repository using a utility in the opencds-decision-support-service module named org.opencds.terminology.OpenCDSConceptsFileCreator. 3概念映射规范 定义 OpenCDS中的概念映射规范是OpenCDS的一个概念,其中有一个与之关联的Determination方法,可能会或不会指定一个与之相关的编码系统。 为每一个OpenCDS中的概念创建一个或多个概念映射规范是很常用的。一般地概念映射规范会得到相关的编码系统的code的集合,这些code能够满足与之相关的determination方法的要求,当用在概念实例上时我们简单的称之为概念映射。然而,即使没有映射的实例也可以构建一个概念映射规范。
我们常常没有区分有映射的概念实例和无映射的概念实例,因为定义映射规范一般是构建映射的第一步。而,将概念映射规范与映射到概念区分开来是很有用的,因为这是两个步骤:每个OpenCDS Concept可能有多个概念映射规范,对于每个概念映射规范特定的code可能有多个映射实例。
Associated Determination Method
OpenCDS中概念映射规范的一个重要属性就是总是有一个与之相关的determination method.这样就可以根据不同的需求构建类似的概念映射。当你要处理一个由某些职能部门如HEDIS 或NQF定义的概念时特别有用。这些机构一般都有自己特殊的code列表和编码系统来描述他们感兴趣的特定概念。
为特殊的概念实例定义属于你自己的determination method.也是可以的。可能包括“best available,” “in approved formulary,” “board approved,” “expensive,” or “cost effective,”等等。背后的思路是将特殊code实例和编码系统与通用概念对应起来的条件加以标注。
单一OpenCDS Concept拥有多个determination method也是可行的,在同一系列的rule中使用不止一个也是可能的。比如,你可能需要区分你的特殊医学场景下讨论糖尿病的NQF determination method, the HEDIS determination method, and the best available determination method。
然而一般地,在一个特殊的知识模块中你可能只想要一个determination method。我们包含了一个DSL的例子来为rule选择determination method,但是你可以根据自己的需要来使用他们。
(1)Associated Code System
OpenCDS中概念映射规范的第二个重要属性是它可能与某个特殊的code system关联。这意味着不同的编码系统如LOINC, CPT, ICD9, ICD10, SNOMED-CT, RXNORM, proprietary in-house systems,OpenCDS中中可能有不同的概念实例
总结一下的话,OpenCDS concept mapping specification会与一个OpenCDS Concept关联,能够标识一个OpenCDS Concept的特殊实例,其中对于不同的编码系统可能有多个不同的determination methods。典型的concept mapping specification的名称中包含对clinical concept和determination method, and possibly the code system.的引用,

值得注意的是概念实例的名称没有计算机化的值,它是描述性的,只是为了人们理解。在OpenCDS启动时,不管文件名称,目录中所有文件都被装载,尽管我们想给文件一些有意义的名称。所有计算机化的知识都是位于概念实例的xml之中。

1.Concept Mapping Instances
在很多情况下 映射只构建一次,然后就是不常见的在这个基础上更新。其他情况下 特别是在药物中,可能需啊哟与术语服务器实时连接来查询最新的映射,因为它们变化地很频繁。在未来OpenCDS的版本中会加入术语服务的这种实时查询。
对于OpenCDs而言,可以通过如下方法来构建存储映射的文件: Apelon DTS和包含在OpenCDS中的内嵌接口来生成XML文件;
可以生成XML文件的其他术语管理系统;
手动编辑XML文件
自动得到的概念映射与手动构建的单独存储(比如files constructed by any method other than download from Apelon
)以免疏忽大意覆盖了手动的概念映射。
概念映射意在以分布式的方式由多个参与者在本地维护,这与知识模块类似。与

这与OpenCDS Concepts相反,它是要集中式维护的。

尽管可以不使用Guvnor来为OpenCDS编辑rule,不引用任意的OpenCDS Concepts,我们支持Gnvor,也推荐根据OpenCDS Concepts来编辑你的rule。Guvnor和OpenCDS Concepts的组合能够得到rule,它们是可视化的且有易于理解的逻辑,可以直接由医师来核对其准确性。
Guvnor是一个工具,它能够完成两件事:
1编辑rule (我们有时候也称之为有关临床概念的知识)
2.测试这些rule的逻辑上的有效性
在Guvnor中为你的rule编写完整的测试是一种良好的实践,在知识模块(也就是 Guvnor中的Package)中rule有任意改变时都要运行它们。Guvnor中可以直接点击运行某个package的所有测试来完成。
定义 OpenCDS中的Concept Types的java类是通过导入名为opencds-vmr-v1_0-internal的OpenCDS

模块得到的。然后你就可以得到在web服务中可以使用的Concept Types。你也会需要OpenCDS 的通用jar,他们是opencds-common.模块。

如果选择Edit标签而不是Assets标签,你就可以查看模型的内容/
如果点击Advanced View按钮,你就能以文本形式编辑模型,你需要这样来做, 当你导入了OpenCDS的两个jar包,在Guvnor中构建了一个新模型之后,它们的顺序是随机的,也会包含一些你不要的元素。我们提供了一个排好序的导入声明,在你删除得到的内容之后,你可以将其复制到该窗口。该排好序的列表在OpenCDS 源代码中的名称为ImportStatementsForOpenCDSGuvnor.txt 位于opencds-vmr-1_0-internal module之中。 每次更改之后别忘了验证、构建和保存模型。 一旦你定义好了模型就不用再管它。更改模型可能会破坏基于这个模型的rule。

译自Notes on OpenCDS Internal Data Structure

目的
openCDS的内部数据结构大致上是基于HL7 2011年9月份投票版中VMR(虚拟医疗记录)的逻辑模型。该逻辑模型中严格定义了所有的数据元素,数据元素的定义都有对应的内部数据结构。
内部数据结构更多地与schema保持一致,schema是对逻辑模型的说明性补充材料。schema
提供了2种方式来定义数据关联。
1.嵌套式 XML和对象结构中特有的
2.列表式 关系型数据库结构中特有的
内部数据结构中嵌套式结构位于父类的子节点中,这样临床声明中的嵌套数据出现在闭合式数据元素的末尾。罗列式的数据关系位于一个“已评估个体”所有其他数据的末尾。
内部数据结构不是对外部的schema的完完全全的实现,抑或说,因为它试图使用单一的列表数据结构,这样规则编辑人员就可以很容易的使用。这意味着所有的嵌套式数据源是都被映射成列表式的,并且与列表格式的数据整合起来。
需要注意的是OpenCDS的使用者是否在嵌套式和列表式结构间复制数据。2种结构都可能用到,但是一个数据元素只能是其中的一种结构。
下面是一个VMR的实例,
嵌套式 相关的实体entity和临床声明都嵌套在源临床声明中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<vmr>
<templateId root=""/>
<patient>
<id root=""/>
<demographics/>
<clinicalStatements>
<adverseEvents>
<adverseEvent>
. . .
<relatedEntityInRole>
<targetRole/>
<administrableSubstance>
. . .
</administrableSubstance>
</relatedEntityInRole>
<relatedClinicalStatement>
<targetRelationshipToSource/>
<observationResult>
. . .
</observationResult>
</relatedClinicalStatement>
</adverseEvent>
</adverseEvents>
</clinicalStatements>
</patient>
</ vmr>

罗列式 每个临床声明和实体entity以及他们间的关系都单独罗列出来,没有嵌套

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<vmr>
<templateId root=""/>
<patient>
<id root=""/>
<demographics/>
<clinicalStatements>
<adverseEvents>
<adverseEvent>
<id root="adverseEventId"/>
. . .
</adverseEvent>
</adverseEvents>
<observationResults>
<observationResult>
<id root="observationId"/>
. . .
</observationResult>
</observationResults>
</clinicalStatements>
<clinicalStatementRelationships>
<clinicalStatementRelationship>
<sourceId root="adverseEventId"/>
<targetId root="observationId"/>
<targetRelationshipToSource code="reasonFor">
</clinicalStatementRelationship>
</clinicalStatementRelationships>
<clinicalStatementEntityInRoleRelationships>
<clinicalStatementEntityInRoleRelationship>
<clinicalStatementId root="adverseEventId"/>
<entityId root="substanceId"/>
<role code="allergen"/>
</clinicalStatementEntityInRoleRelationship>
</clinicalStatementEntityInRoleRelationships>
<entityLists>
<administrableSubstances>
<administrableSubstance>
<id root="substanceId"/>
. . .
</administrableSubstance>
</administrableSubstances>
</entityLists>
</patient>
</vmr>

内部结构
数据类型
起初通过复制得到内部数据类型
我们一开始通过复制逻辑模型和schema中的数据类型得到内部数据类型的定义。然后对数据类型的不同类做出一些改变将其变为可以在Drools和OpenCDS中可用的java bean
移除所有JaxB生成的所有批注,除了类的描述以外以及导入的JaxB类和生成代码中的所有方法。
利用Eclipse,我们进行如下操作:
1.添加getter setter方法
2.添加hash code和equal方法
3.添加toString方法
4.在类的头部添加Apache许可证的批注
修改一些内部数据类型
修改或优化一些内部数据类型以便我们使用。特别地,如下需要改变:
1.将CD数据类型(概念描述符)中嵌套式的displayName变为CD的一个属性,这是为了方便编辑rule。
2.将II数据类型中的root和extension改为一个单独的字符串,成为“root^extension”
的形式,这是为了在rule中将其作为唯一标识符来使用。注意II的实例并不包含extension 只包含root
3.将TS数据类型更换为java.util.Date数据类型
映射工具
有一个完成内部和外部数据类型间对应的映射工具类MappingUtility。映射的方法的命名如”DT2InternalDT”或”InternalDT2DT” DT表示数据类型的名称。
vMR中的类
外部的schema中定义的所有VMR中的类在内部结构中都有,除了以下几个:

  • 1.RelatedEntity
  • 2.RelatedClinicalStatement
  • 3.RelatedEntityInRole
    如如上三个类中的数据被标准化地分割为2部分。第一部分包含在Realted_class中包含的原始的实体或临床声明,将其移至对应的临床声明或者实体列表中去。第二部分包含了关系的本质,以及源和目标的id,这些关系类从原来的嵌套式结构更改为如下对应的列表式内部类结构:
  • EntityRelationship
  • ClinicalStatementRelationship
  • ClinicalStatementEntityInRoleRelationship
    需要注意的是对vmr类的处理和数据类型的一样,同时还有一个相关联的Mapper类,其中实现了pullIn和pushOut方法。在alpha版本以后对这些方法进行了修订,从原来的内部java bean中移除,转移到单独的方法中。
    也有一些原本不属于vmr所定义的内部类,它们旨在简化rule的编辑。
    从外部结构映射
    接口org.opencds.vmr.v1_0.mappings.inPayloadUnmarshaller.java
    PayloadUnmarshaller.java
    此接口能够从DSS消息中读取base64编码的负载,将其转化为结构化的jaxb元素就可作为CDSInput。然后调用PayloadUnmarshaller接口来产生一个内部的vmr数据结构,这样推理引擎就可以处理了。
    IBuildFactLists.java
    该接口接收一个JaxB CDSInput 的元素,将其转化为内部的vmr结构,也就是一些事实的列表,这其中其实就是对提交数据的标准化,以便推理引擎的使用。
    我们也提供了一种支持Drool 事实列表的实现。用户与不同的推理引擎交互就需要不同的内部结构,但是仍然是基于vmr的,我们也可以按照需要来替换这个模块。
    向外部结构映射
    接口org.opencds.vmr.v1_0.mappings.out
    IBuildResultSet.java
    该接口接收推理引擎处理过的事实列表,产生一个CDSOutput schema结构
    的结构化输出,然后该结构进一步被IMappingOutbound接口 处理。
    IMappingOutbound.java该接口接收IBuildResultSet 产生的 CDSOutput structure,产生一个base64编码的字符串作为DSS 服务的响应。
    使用OpenCDS vMR
    下面是对vMR的组织结构的概述,也是你如何使用它大体上的指导。首先,是一个VMR的组织结构概览,后面有一些在OpenCDS中如何使用它的建议,输入和输出都是一样。
    Abstract Base Classes
    在VMR中有2大类数据结构:临床声明表示感兴趣的活动/行为,实体就是指人/地,物在这些医疗活动中所拥有的角色。这些抽象类不可能单独实例化,但你可以在rule中涉及到它们。比如,你可以研究基本类中的通用元素来得到大概的结论一个特殊的活动是否发生,没有发生,已计划或者已预订。
    临床声明
    我们将医疗活动分为8类,对于每个类都有一个base类。临床声明自身就是如下子类的base类,包含它们所共有的元素。
  • AdverseEventBase
  • EncounterBase
  • GoalBase
  • ObservationBase
  • ProblemBase
  • ProcedureBase
  • SubstanceAdministrationBase
  • SupplyBase
    EntityBase
    它包含了所有人、地点,组织和其他事物的通用元素。它是EvaluatedPerson和其他7类entity的基础。
    实例化的类
    如下所列不是抽象类。你可以实例化其中之一来给OpenCDS传递数据,你也可以在rule中实例化它们来返回从OpenCDS中推论出的数据给你的应用程序。
    EvaluatedPerson
    它是VMR的根类,所有的ClinicalStatements和相关的entity都与一个EvaluatedPerson关联起来(更通俗的讲就是patient)。在家族病史或者传染病接触或其他类似的场景中,vmr也可能包含与patient 相关的其他的EvaluatedPerson 。这些EvaluatedPerson有2个属性:1)他们与病人有某种医学上的关系2)他们可能有某些和病人一样的医疗活动相关的数据。
    然而,总是只有一个person 也就是patient,也是vmr中所关注的。OpenCDS中编写的rule旨在辅助patient的医疗服务。
    当EvaluatedPerson继承自entityBase类时,采取与其他次要的entity不同的处理方法。patient是vmr的客体,而其他实体则参与与病人相关的医疗活动当中。
    entity类
    这些就是在医疗活动中扮演某个角色的次要实体。他们可能是用药、医护人员、实验室样本或者是医疗路径。
  • AdministrableSubstance
  • Entity
  • Facility
  • Organization
  • Person
  • Organization
  • Specimen
    Event类
    这些类用来描述一个已经发生或者正在发生的医疗活动
  • AdverseEvent
  • EncounterEvent
  • Goal
  • ObservationResult
  • Problem
  • ProcedureEvent
  • SubstanceAdministrationEvent
  • SubstanceDispensationEvent
  • SupplyEvent
    DeniedEvent类 这些类用来描述一个并未发生的医疗活动,比如 血压的UnconductedObservation意味着并没有采集血压值(本来应该已经采集了的)。DeniedProblem表示病人并没有所描述的症状或问题
  • DeniedAdverseEvent
  • MissedAppointment
  • UnconductedObservation
  • DeniedProblem
  • UndeliveredProcedure
  • UndeliveredSubstanceAdministration
  • UndeliveredSupply
    Proposal类
    这些类大多数openCDS的输出。如病人需要MMR,或者HbA1c检测,但他们也能表示输入。比如,会有一些类如给病人某种药物的提议,openCDS会依据病人目前的用药进行一些药物-药物反应评估。提议/建议没有医嘱或申请权威性强,常常用来给医务人员传递一些需要考虑的信息。
  • AppointmentProposal
  • GoalProposal
  • ObservationProposal
  • ProcedureProposal
  • SubstanceAdministrationProposal
  • SupplyProposal
    Request and Order类
    申请和医嘱常常是由医务人员为解决病人的某个问题或症状而提出的,它们比proposal要更正式一些,表示一些必须完成的请求,通常由辅助人员来完成
  • AppointmentRequest
  • ObservationOrder
  • ProcedureOrder
  • SubstanceAdministrationOrder
  • SupplyOrder
    Populating Data for submission to OpenCDS
    Choose your structureVMR是非常灵活的,通常不止一种解决办法。一般而言,根据你的数据选择最接近的结构化方法是不错的思路。
    如果你的数据是对象结构或者xml格式,嵌套式结构可能更适合你的输入。
    另一方面,如果你从关系型数据库获取数据,罗列式的可能效果更好。
    Use a template
    一个模板就是对特定目的的输入数据的约束和要求的集合。因为不止一种方法来表示事物,最好为特定目的收集模板,这样rule就可以重用和共享。
    随着时间的推移,OpenCDS会收集和发布模板。如果不存在一个模板能够满足你的特殊需要,在你开发rule的时候把需求记录下来,我们会帮你一起构建一个模板。
    一旦openCDS中记录了一个模板,我们就会为它分配一个模板标识符templateID,可以在rule中引用这个templateID来确保提交的数据满足规则作者的要求。
    注意同一个模板可以用在以不同结构提交的数据中 如对象/xml结构或者列表/关系型结构,因为模板解决数据内容的问题 而不是它们的结构。
    Use Best Practices
    我们会收集表达各种通用医疗数据结构的最佳实践,以及这些数据结构中的元素。在管理rule时我们也会努力这么做。
    这些最佳实践会在单独的文档中记录。
    Populating Data in rules for return from OpenCDS
    OpenCDS Output StructureOpenCDS的输出结构的一部分是预先定义好的,但仍有不止一种方法来构建输出。只要有2种选择1)单个结果元素2)CDS输出结构包含Vmr的结构化数据
    单个元素结果
    如果你选择这种类型的结果,你的输出数据就是一个单一元素,使用任意ISO21090中支持的任意数据类型
    。比如你可能返回布尔值 true,或者返回23的一个整数值。
    CDSOutput Result如果你选择这种结果,你的输出会将你发送给OpenCDS的输入进行重组。某些情况下,甚至会很类似。
    Use a template

Use Best Practices

上大学在我的儿时的那个年代,几乎是所有娃儿的梦。
寒门的子弟上大学是不易的,需要结合的因素众多。
2012 07 如果顺利的话 我可以从这里毕业,拿到一个硕士学位证书。
是的 我贷款了,是的,即便是贷款了,仍然学费没有缴清,欠着学校7642.00。
不缴清 不让你参加答辩,虽然我们学院教务处的老师为人甚好,知道我的情况,允诺可以让我先答辩。可钱始终是个难题。
穷人的子弟 上大学 不容易。

读论文是每个学生必修课之一 不管是主动抑或被动 其中一些专业词汇 对于我等非医学专业的it逼来说 着实困难。
解决办法
1网上查呗 最直接的就是google 关键词 如 episode of care 请具备基本的鉴别能力
推荐网站
http://www.reference.md/ 应该是美国FDA的网站吧 还是比较全
http://www.wisegeek.com/health.htm 这个网站是我最喜欢的 因为很形象和生动
http://meteor.aihw.gov.au/content/index.phtml/itemId/181162 澳大利亚的数据字典
http://www.datadictionaryadmin.scot.nhs.uk/isddd/9215.html 英国的数据字典?
2.当然有一些整理好的资料

Health informatics — System of concepts to support continuity of care —Part 1: Basic concepts Part 2: Health care process and workflow

这里真心的感谢付出这些劳动的人们

3.专业字典

http://medical-dictionary.thefreedictionary.com 最imba的词典

From looking at your XSLT and expected results, it looks like that for each a element in your XML, you want to output infomation on the following c elements present, if any occur before the next a element present.

For this, you could use an xsl:key to look up c elements for a given a element

1
<xsl:key name="lookup" match="c" use="generate-id(preceding-sibling::a[1])" />

i.e. Group together all c elements by the first preceding a element.

Then, you can firstly select a elements for which there are such c elements like so:

1
<xsl:apply-templates select="a[key('lookup', generate-id())]" />

Then, within this template, you can select the cc elements for output, like so:

1
<xsl:apply-templates select="key('lookup', generate-id())" />

So, given the following XSLT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="yes"/>

<xsl:key name="lookup" match="c" use="generate-id(preceding-sibling::a[1])" />

<xsl:template match="/root">
<xsl:apply-templates select="a[key('lookup', generate-id())]" />
</xsl:template>

<xsl:template match="a">
<xsl:value-of select="concat(@id, ':&#13;', '&#13;')" />
<xsl:apply-templates select="key('lookup', generate-id())" />
</xsl:template>

<xsl:template match="c">
<xsl:apply-templates select="@*" />
<xsl:value-of select="'&#13;'" />
</xsl:template>

<xsl:template match="c/@*">
<xsl:value-of select="concat(local-name(), ':', ., ':&#13;')" />
</xsl:template>
</xsl:stylesheet>

When applied to the following XML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<root>
<a id="a1" name="a1"/>
<b text="b1"/>
<d test="test0" location="L0" text="c0"/>
<a id="a2" name="a2"/>
<b text="b2"/>
<c test="test1" location="L1" text="c1"/>
<c test="test2" location="L2" text="c2"/>
<a id="a3" name="a3"/>
<b text="b3"/>
<c test="test3" location="L3" text="c3"/>
<c test="test4" location="L4" text="c4"/>
<c test="test5" location="L5" text="c5"/>
</root>

The following is output

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
a2:

test:test1:
location:L1:
text:c1:

test:test2:
location:L2:
text:c2:

a3:

test:test3:
location:L3:
text:c3:

test:test4:
location:L4:
text:c4:

test:test5:
location:L5:
text:c5:

Note that I am output the attributes on the c element in the order they appear in the XML document.

两篇来自 Bruce Friedman的博文
http://labsoftnews.typepad.com/lab_soft_news/2012/08/data-vs-information-the-emr-readability-problem.htmlhttp://labsoftnews.typepad.com/lab_soft_news/2012/08/data-vs-information-the-emr-readability-problem-part-ii.html
其中审视了当前医疗信息结构化所忽略的一些问题,主要是在强调结构化的同时,忽略了对数据的加工、忽略数据的人可读性所能带来的好处。机器和人不一样,各自有各自的特点和需求,如何在二者之间取得一个很好的权衡点,是件不容易的事情,CDA从诞生至今,至少朝着这个方向一直在努力,而且FHIR中也强调了这一特性,值得让人去关注。

Tuesday, November 1, 2011 By Keith Boone
Value Sets and QueryHealth

Query Health的一大难题就是一个特殊的measure就可能引用大量的编码值。在HL7中它们称之为值集。比如 TCNY Quality Measures中在Query Health “Query and Data Analysis”就引用了大量的code
下面是一个例子

1
2
3
4
Eligible encounters (CPT codes)
99201; 99202; 99203; 99204; 99205; 99211; 99212; 99213; 99214; 99215; 99241; 99242;
99243; 99244; 99245; 99354; 99355; 99385; 99386; 99387; 99395; 99396; 99397; 99401;
99402; 99403; 99404; 99406; 99407

那么,我们就希望能够访问这些code。有很多种方法可以在query中对此值集进行编码
在HQMF中,可以写成由OR组成的单独encounter的条件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<sourceOf typeCode="PRCN">
<conjunctionCode code="OR"/>
<encounter>
...
<code code='99201' codeSystem='2.16.840.1.113883.6.12'/>
</encounter>
</sourceOf>
<sourceOf typeCode="PRCN">

<conjunctionCode code="OR"/>
<encounter>
...
<code code='99202' codeSystem='2.16.840.1.113883.6.12'/>
</encounter>
</sourceOf>

这看起来并不是很美观,或者重用性很好。本质上讲,你使用确定value set的某个code system中的一个code。
另一种方法是在code中使用valueSet属性。HQMF并不推荐这样的原因在于M&M工作组的一些人认为这不是个好主意。 如果要用的话,会是如下的样子

1
2
3
4
5
6
<sourceOf typeCode="PRCN">
<encounter>
...
<code valueSet='2.16.840.1.113883.19.1091'/>
</encounter>
</sourceOf>

这种方法的问题在于你只是引用了value set,系统需要处理query的话就必须解决如何解引用的问题。
至少有2种方法来处理。一就是使用HL7定义的 Common Terminology Service specification。另一种就是用 IHE Sharing Value Sets (SVS) profile .该规范同时支持HTTP和SOAP两种绑定方法。
下面是一个检索value set的URL示例
https://example.com/RetrieveValueSet?id=1.2.840.10008.6.1.308
下面是它所能返回的示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<RetrieveValueSetResponse xmlns="urn:ihe:iti:svs:2008" cacheExpirationHint="2008-08-15T00:00:00-05:00">
<ValueSet id="1.2.840.10008.6.1.308"
displayName="Common Anatomic Regions Context ID 4031" version="20061023">
<ConceptList xml:lang="en-US">
<Concept code="T-D4000" displayName="Abdomen"
codeSystem="2.16.840.1.113883.6.5"/>
<Concept code="R-FAB57" displayName="Abdomen and Pelvis"
codeSystem="2.16.840.1.113883.6.5"/>
<Concept code="T-15420" displayName="Acromioclavicular joint"
codeSystem="2.16.840.1.113883.6.5"/>
<Concept code="T-15750" displayName="Ankle joint"
codeSystem="2.16.840.1.113883.6.5"/>
<Concept code="T-280A0" displayName="Apex of Lung"
codeSystem="2.16.840.1.113883.6.5"/>
<Concept code="T-D8200" displayName="Arm"
codeSystem="2.16.840.1.113883.6.5"/>
<Concept code="T-60610" displayName="Bile Duct"
codeSystem="2.16.840.1.113883.6.5"/>
<Concept code="T-74000" displayName="Bladder"
codeSystem="2.16.840.1.113883.6.5"/>
<Concept code="T-04000" displayName="Breast"
codeSystem="2.16.840.1.113883.6.5"/>
<Concept code="T-26000" displayName="Bronchus"
codeSystem="2.16.840.1.113883.6.5"/>
<Concept code="T-12770" displayName="Calcaneus"
codeSystem="2.16.840.1.113883.6.5"/>
<Concept code="T-11501" displayName="Cervical spine"
codeSystem="2.16.840.1.113883.6.5"/>
</ConceptList>
</ValueSet>
</RetrieveValueSetResponse>

对value set使用SVS有一些很好的特点。如果你想将value set放到SQL表中,你可以用XSLT来转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:svs="urn:ihe:iti:svs:2008"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:apply-templates select=".//svs:ConceptList"/>
</xsl:template>
<xsl:template match="svs:ConceptList">
<xsl:text>INSERT INTO VALUESETMEMBERS (VALUESETID, CODE, CODESYSTEMID, DISPLAYNAME)&#x0A;</xsl:text>
<xsl:apply-templates select="svs:Concept"></xsl:apply-templates>
</xsl:template>
<xsl:template match="svs:Concept">
<xsl:text>VALUES ('</xsl:text>
<xsl:value-of select="../../@id"/>
<xsl:text>', '</xsl:text>
<xsl:value-of select="@code"/>
<xsl:text>', '</xsl:text>
<xsl:value-of select="@codeSystem"/>
<xsl:text>', '</xsl:text>
<xsl:value-of select="@displayName"/>
<xsl:text>')&#x0A;</xsl:text>
</xsl:template>
</xsl:stylesheet>
`

另外你可以构建一些包含value set内容的JSON 对象
你也可以用XPath document功能来访问value set

1
document("https://example.com/RetrieveValueSet?id=1.2.840.10008.6.1.308")

Thursday, January 26, 2012 BY Keith Boone
The XSLT document() function
有人在Structured Document 工作组邮件列表中问了一个如何将code转换成display name的问题。
在XSLT中,我一直在使用一种技术,它能够让我不用在XSLT stylesheet中嵌入转换逻辑,轻松地访问要查询的表。
在描述这种技术之前,我想先说说它的多种用途:
1.code转换
常常你需要将一种编码系统下的code转换为另一种code system下的code。我常使用这种技术实现本地code到标准词汇的转换 例如
从ANSI+到UCUM的单位转换
从问题严重程度的本地码到HITSP C32中要求的severity 的SNOMED CT code的转换
从问题状态的本地码到问题状态的SNOMED CT 码的转换
从问题类型的本地码到问题类型的SNOMED CT码的转换
从生命体征的本地码到生命体征的SNOMED CT码的转换
2.display name的查询 和code转换差不多,我们常常有的是标准的code,而没有与之相关的display name。利用此技术可实现比较小(不超过1000个code)的值集中display name的查询
3.标识符到web服务 end point的对应
从家庭社区的ID到XCA web服务地址
从DICOM AE标题到WADOweb服务endpoint
4.动态变化规则的验证,比如验证一个code是否符合词汇或值集的当前版本

此技术最基本的就是构建一个你要在stylesheet中使用的XML文档资源,为了声明此资源 你要:


它能够构建一个变量,此变量在你随后的XML中使用的XPath表达式中会用到。对于开篇提到的问题,我们所要做的就是如何根据一个语言code 也就是病人优先选用的语言,获取相应的display name。此code的值位于patient/languageCommunication/languageCode/@code
下面的XSLT片段展示了一个通过查询XML文档来获取病人语言的display name的模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<xsl:variable name="langs" select="document('lang.xml')"/>
...
<xsl:template name='patientLanguage'>
<!-- get the code -->
<xsl:variable name='lang'
select='//patient/languageCommunication/languageCode/@code'/>

<xsl:variable name='mappedLang' select='langs//language[@code=lang]'/>
<xsl:choose>
<xsl:when test='$mappedLang'>
<xsl:value-of select='$mappedLang/@displayName'/>
</xsl:when>
<xsl:otherwise>Unknown</xsl:otherwise>
</xsl:choose>
</xsl:template>

此技术也可用在访问由RESTFUL web服务器endpoint所动态构建的resource中。在Values Sets and Query Health博文中我进行了演示

此技术的另外一个用途就是在schematron 规则中核对值集的一致性。如果你要求code/@code的值必须来自某一特殊的值集,你可以写一个访问web资源的规则,如下

1
2
3
4
5
6
7
8
<rule context='*/cda:templateId[@root = templateIdentifier]'>
...
<let name='code' value='cda:code/@code'/>
<let name='valueSetDoc' value='document("https://example.com/RetrieveValueSet?id=1.2.840.10008.6.1.308")'/>
<assert test='valueSetDoc//ihe:Concept[@code=code]'>
The code/@code element must come from the XXX Value Set (OID: 1.2.840.10008.6.1.308)
</assert>
</rule>

能够使用外部的XML数据文件是XSLT的一大优势。能够与web服务动态构建的XML资源结合起来使之功能更加强大。

在大概了解了CDA文档实例的模样,手头上也有了各式各样自己喜好的XML编辑器,那么我们可能就希望实践一把。该怎么做呢?

如果你希望先了解CDA前前后后的一些东西,那么你需要看看下面的PPT

1.参考各个机构所带来的对CDA介绍的PPT

台湾范士展老师整理的相关资料

mayo的资料

Grahame Grieve的介绍材料

Liora Alschuler2005在芝加哥的材料

IBM 中国研究院卫生部电子病历委员会临床检验结果共享系统互操作性规范厂商培训研讨会的材料

Oracle王海彤卫生部电子病历委员会临床检验结果共享系统互操作性规范厂商培训研讨会

Gay Giannone2009的宣传材料

2.相关介绍性论文

Dolin RH, Alschuler L, Boyer S, Beebe C, Behlen FM, Biron PV, Shabo A. HL7 Clinical Document Architecture, Release 2. J Am Med Inform Assoc. 2006;13:30–39.

http://www.jamia.org/cgi/reprint/13/1/30

下载链接

JEFFREY M. FERRANTI,MD,R.CLAYTON MUSSER,MD,MS,KENSAKU KAWAMOTO,W.ED HAMMOND,PHD

The Clinical Document Architecture and the Continuity of Care Record: A Critical Analysis

J Am Med Inform Assoc. 2006;13:245–252. DOI 10.1197/jamia.M1963.

下载链接

IHE, HL7和 HITSP 中的临床文档标准

鲍永坚

下载链接

3.快速入门

cda快速入门

CCD快速入门

4.相关技术

XML

http://www.w3.org/TR/xml

XSLT

http://www.w3.org/TR/xslt

XHTML

http://www.w3.org/TR/xhtml-modularization/

Schematron

http://www.schematron.com/

http://xml.ascc.net/resource/schematron/schematron.html

CDA文档均为XML文件,故我们采用一些市面上常用的XML编辑软件。列举如下:
1.Oxygen XML Editor
它是一款基于Java的XML编辑器,支持XML, XSL, TXT, XSD, DTD文档,能自行校验XML, XSL, XSD代码,提示脚本错误。Oxygen能自动完成结束标签,代码高亮现实,支持Unicode。

Oxygen XML Editor是一款简洁并且功能一流的集XML察看和编辑等功能为一体的软件。由于它提供了对XML编辑特性的完整覆盖,因此,无论在企业界还是学术界,该软件的应用都很普及。它能工作在XML Schemas/ DTDs/Relax NG schemas和NRL Schemas.强大的转换支持让你不仅能编辑XSLT和XSL-FO文档,也能把它们转换成为你想要的如HTML/PS/PDF等文件。
个人感觉比较美观 易用性较高
2.Altova XMLSpy©
在网上可以找到2006 2011的破解版本,易用性最高 我最喜欢和熟悉

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
XMLSpy的主要功能


XMLSpy 2005是一个用于XML工程开发的集成开发环境(Integrated Development Environment,简称IDE)。XMLSpy 2005可连同其他工具一起进行各种XML及文本文档的编辑和处理、进行XML文档(比如与数据库之间)的导入导出、在某些类型的XML文档与其他文档类型间作相互转换、关联工程中的不同类型的XML文档、利用内置的XSLT 1.0/2.0处理器和XQuery 1.0处理器进行文档处理,甚至能够根据XML文档生成代码。

XMLSpy 2005还提供了一中XML文档的图形化编辑视图——Authentic视图(直观视图),它使得用户可以像使用字处理软件那样对XML文档进行数据录入。Authentic视图在下列场合特别有用:



· 不熟悉XML的人被要求把数据录入XML文档

· 多个用户需要浏览或将数据录入位于某个服务器或共享资源上的单个文档。



本节我们仅对XMLSpy 2005的主要功能作简要的概述。这些功能在后面介绍各个视图(Text视图、Schema/WSDL视图、Authentic视图等)的章节和用户参考手册中还会被详细描述。请注意,本节没有完全列出XMLSpy 2005的所有功能。本节的目的只是给您提供一个XMLSpy 2005所支持功能的大致印象。


在多种编辑格式下编辑XML文档
您可以将XML文档作为普通文本来编辑(Text视图)、也可以在一个具有层次结构的表中进行编辑(增强型Grid视图),还可以在图形化的所见即所得(WYSIWYG)视图中编辑(Authentic视图)。对于XML Schema和WSDL文档,您还可以使用Schema/WSDL视图,它的图形化用户界面极大地简化了复杂schema和WSDL文档的创建。您可以根据需要在各种视图间进行切换。Browser视图(浏览器视图)可用于浏览XSLT样式表对XML文档的转换结果和HTML文档。


良构性(well-formedness)检查和内置验证器(validator)
在您切换视图或保存文件时,XMLSpy会自动对XML文档进行良构型检查。如果是关联了schema(DTD或XML Schema)的XML文件,XMLSpy还会对它进行验证(validation)。对于其他类型的文档(如DTD等),XMLSpy也会作语法和结构上的检查。


结构化编辑
在Text视图中,行号、缩进、书签以及可展开/折迭的元素显示等功能将协助您快速而有效地浏览文档。


智能编辑
在Text视图中,如果正在编辑的XML文档已经关联了schema,那么自动完成功能将在编辑过程中提供极大的帮助。在您敲击键盘的同时,光标所在位置会出现一个列有元素(element)、属性(attribute)和允许出现的枚举型属性值(enumerated attribute values)的窗口。另外,在您完成首标签(opening tag[译注//正式名称为start tag])的输入时,自动完成功能会自动为您插入相应的尾标签(closing tag[译注//正式名称为end tag]),而您在弹出窗口中选择的属性也会被自动插入并被引号括起来。如果一个元素下必须出现某些元素或/和属性,那么您还可以选择在该元素被插入时为它自动生成那些必需的成分。此外,每个视图都有一组输入助手(Entry Helper)[译注//输入助手是对IDE中一些窗口的统称,利用这些窗口,用户可以方便地往文档中插入成分。],通过它们使您可以往文档中插入成分[译注//比如插入一个元素(element)]或为主窗口中选中的成分指定属性。


Schema的编辑和管理
您可以在Schema/WSDL视图中轻松而快捷地创建XML Schema。该视图免除了许多由学习XML Schema结构、语法和设计原则而带来的困难。您还可以创建DTD(XMLSpy会对它们的语法进行检查)、在Schema和DTD间进行转换和生成档案(documentation),SchemaAgent功能将使您能够访问并使用存放于其他服务器上的schema —— 所有这些都为专业的XML Schema管理和编辑提供了高效的XML开发环境。


内置的XSLT 1.0和XSLT 2.0处理器
内置的XSLT 1.0和XSLT 2.0处理器都是符合相关W3C草案[译注//这里的草案指的是W3C工作草案(Working Draft),即正在制定过程中而尚未定型的W3C文档]的。它们使您可以直接在IDE中用XSLT 1.0或XSLT 2.0样式表来转换XML文档,并用XSLT调试器对XSLT样式表进行调试。


内置的XQuery 1.0处理器
内置的XQuery 1.0处理器是符合2004723日发布的W3C XQuery 1.0工作草案的。通过它,您可以直接在IDE中执行和调试XQuery文档。


XML文档的转换
XML文档的转换可以直接在IDE中进行(利用内置的XSLT处理器或其他外部的XSLT处理器)如果您要在XMLSpy 2005 IDE中生成PDF文件[译注//XSL分为XSLT和XSL-FO,前者一般用于将XML文档转换为另一个XML文档或HTML文档,而后者一般用于将XML文档转换为PDF等文件格式。],可以使用外部的FO处理器;在您指定样式表之后,只需一个点击即可将XML转换为PDF。此外,可以在IDE中给XSLT转换(transformation)传递参数值。


XPath求值
对于一个给定的XML文档,XPath求值(Evaluate XPath)功能可以列出一个XPath表达式返回的序列(或结点集)。您可以将文档结点(Document Node)或选择一个元素作为上下文结点(context node)。在创建XSLT样式表的过程中常常需要对XPath表达式进行求值,此时XPath求值功能是非常有用的。您还可以浏览返回序列中的各个结点。


XSLT 1.0/2.0调试器
XMLSpy 2005提供的XSLT 1.0和XSLT 2.0调试器是符合相关W3C草案的。您可以使用XSLT调试器来调试XSLT样式表。XSLT调试器在一个XML文件上运行要调试的XSLT样式表,并按转换的步骤逐步生成输出结果,其间您可以看到上下文结点(context node)、被执行的模板(template)以及转换过程中各步的其他细节。


XQuery 1.0调试器
XQuery 1.0调试器是符合W3C于2004723日发布的XQuery 1.0工作草案的。XQuery调试器用于调试XQuery文档,功能与XSLT相似。


XML工程管理
在XMLSpy 2005 IDE中,您可以将相关的文件组织为工程(project)。与其他开发工具不同的是,在XMLSpy中,工程可以是一个树状结构(即可以在一个工程下创建另一个工程)。工程(project)中可以包含schema文件、XML数据文件、转换文件[译注//如一个XSLT文件]和输出文件等。工程中的文件被列在Project窗口(工程窗口)中,以便于访问工程中的文件。此外,您还可以为整个项目或整个目录做统一的设定,比如为整个目录的文件指定一个schema文件或XSLT文件。


Authentic视图
Authentic视图是XMLSpy 2005提供的一种图形化的XML文档视图。用户可以像使用字处理软件那样轻易地将数据录入XML文档。StyleVision Power Stylesheet是一个已经用StyleVision 2005创建好的样式表,用于指定在Authentic视图中如何格式化XML文档、以及如何进行数据录入。注意:Altova的免费软件Authentic 2005 Desktop Edition中也提供了Authentic视图。


数据库导入
您可以将数据库中的数据导入为一个XML文件、并生成一个与数据库结构对应的XML Schema文件。XMLSpy 2005目前支持下列数据库的导入:MS Access、MS SQL Server、Oracle、MySQL、Sybase、IBM DB2。


WSDL和SOAP
Schema/WSDL视图中,您可以通过易用的图形用户界面创建和编辑WSDL文档。您也可以在IDE中创建、编辑并调试SOAP请求(SOAP request)。


对比XML文件(寻找差异)
XMLSpy 2005的对比功能让您能够发现两个XML文件的差异。您可以设置各种选项以配置该功能,比如忽略属性或子元素的次序、是否解析实体(entity)、是否忽略命名空间(namespace)等。对比功能还可用于进行文件夹的比较。


与Visual Studio .NET集成
XMLSpy 2005可以与您的Visual Studio .NET开发环境集成。您只要从Altova网站下载一个可执行程序然后运行它即可。


与Eclipse 3.0集成
Eclipse 3.0是一个集成了以插件形式发布的不同类型应用的开放源码框架。XMLSpy 2005 for the Eclipse Platform是一个Eclipse 3.0的插件,通过它您可以在Eclipse 3.0 Platform中使用XMLSpy 2005的功能(如果已经安装的话)。


代码生成
如果您要使用Java、C++或C#代码来处理XML文件中的数据,代码生成功能可以依据XML文档为您生成包含有关schema(DTD或XML Schema)的类定义代码。在XMLSpy 2005中,您可以直接根据DTD或XML Schema生成这样的代码。

3 XML Notepad 2007
台湾的范士展老师在其PPT中推荐了此编辑软件 不曾用 不熟悉
4.notepad++
简易编辑器 功能强大 很好用

1
2
3
4
5
6
7
8
9
Notepad++ 是一款非常有特色的编辑器,是开源软件,可以免费使用。

功能有:
①、内置支持多达 27 种语法高亮度显示(囊括各种常见的源代码、脚本,值得一提的是,完美支持 .nfo 文件查看),也支持自定义语言;
②、可自动检测文件类型,根据关键字显示节点,节点可自由折叠/打开,代码显示得非常有层次感!这是此软件最具特色的体现之一;
③、可打开双窗口,在分窗口中又可打开多个子窗口,允许快捷切换全屏显示模式(F11),支持鼠标滚轮改变文档显示比例,等等;
④、提供数个特色东东,如 邻行互换位置、宏功能,等等...现在网上有很多文件编辑器,这个却是不可多得的一款,不论是日常使用还是手写编程代码,都能让你体会到它独有的优势和方便。

支持的语言: C, C++ , Java , C#, XML, HTML, PHP, Javascript , RC resource file, makefile, ASCII art file (extension .nfo , screenshot1, screenshot2), doxygen, ini file, batch file, ASP , VB/VBS source files , SQL , Objective-C , CSS, Pascal, Perl, Python and Lua.