找回密码
 欢迎注册
搜索
热搜: 活动 交友 discuz
楼主: sbf2000

HL7V3DT在Cache数据库中的实施

[复制链接]
发表于 2003-4-4 15:42:12 | 显示全部楼层

HL7V3DT在Cache数据库中的实施

对sbf2000深表钦佩!
 楼主| 发表于 2003-4-4 16:20:20 | 显示全部楼层

HL7V3DT在Cache数据库中的实施

HL7V3DT中回答什么是数据类型:
每个数据元素都有一个数据类型,数据类型定义了数据元素中数据值的基本语意。数据类型定义是进行有意义的数据交换所必须的基本条件!
数据类型是其它如消息、文档、对象等的基本构件。作为一种数据类型,它是现实中固有,而并不是为某数据值所定义的标识、状态或状态的改变。数据类型是一种固定的对象,它的标识和状态是不变的。(这跟Cache中数据类型类没有属性是一致的!)
但不同的数据类型有不同的性质,有不同的字面表现形式。(在Cache中可以用参数来实现性质的表达)。性质还有其参数(在不同的条件下,这些性质是不同的)。(Cache中参数的数据类型是不是就可以表达它所代表的V3DT数据类型参数的参数?)
HL7V3DT只定义了数据类型的语意,并没有定义数据类型的表达和数据值的操作界面。(在Cache中实现HL7V3DT时,必须自已加入表达形式和操作界面了!如何实现?依赖于从Cache中系统的数据中继承?是否完全可行?)
HL7V3DT的数据类型抽象定义是为了能够有多种实现方式。(在Cache中实现也是一种实现方式,所以不能按它的XML实现技术去实现,因为这是两种不同的实现技术!?但所实现的语意肯定是一样的。)
HL7V3DT定义了统一的数据类型,目的是削除不同的编程技术所实现的数据类型之间的差异。(Cache实现的数据类型可以自已扩展,这是Cache的最大优点之一,也是我们用它来实现HL7V3DT的主要原因。但Cache是否能够完全表达HL7V3DT的定义?需要我们学习和努力取尝试!)
HL7V3DT的定义考滤了很多其它数据类型标准,它更注重于应用。(如果能在Cache中完美实现HL7V3DT,那么用Cache来实现HL7就比其它实现技术方便多了!Cache是表达复杂逻辑的优秀技术,应该是实现HL7的最佳选择!我们将用实际行动来尝试证明这一点!)
 楼主| 发表于 2003-4-4 16:44:53 | 显示全部楼层

HL7V3DT在Cache数据库中的实施

Cache中的数据类型及其支持的参数:
1.%Binary  MAXLEN, MINLEN
2.%Boolean
3.%Currency  DISPLAYLIST, FORMAT, MAXVAL, MINVAL, VALUELIST
4.%Date  DISPLAYLIST, FORMAT, MAXVAL, MINVAL, VALUELIST
5.%Float DISPLAYLIST, FORMAT, MAXVAL, MINVAL, SCALE, VALUELIST, XSDTYPE
6.%Integer  DISPLAYLIST, FORMAT, MAXVAL, MINVAL, VALUELIST, XSDTYPE
7.%List  ODBCDELIMITER
8.%Name  COLLATION, INDEXSUBSCRIPTS, MAXLEN, XSDTYPE
9.%Numeric  DISPLAYLIST, FORMAT, MAXVAL, MINVAL, SCALE, VALUELIST
11.%Status  
12.%String  COLLATION, DISPLAYLIST, MAXLEN, MINLEN, PATTERN, TRUNCATE, VALUELIST, XSDTYPE
13.%Time  DISPLAYLIST, FORMAT, MAXVAL, MINVAL, VALUELIST
14.%TimeStamp DISPLAYLIST, MAXVAL, MINVAL, VALUELIST
 楼主| 发表于 2003-4-4 17:09:48 | 显示全部楼层

HL7V3DT在Cache数据库中的实施

Cache中数据类型参数的研究:
1.COLLATION 指明排序规则
2.DISPLAYLIST 显示值,与VALUELIST一起使用。每个DISPLAYLIST值对应一个VALUELIST值。LogicalToDisplay方法显示DISPLAYLIST值。
3.FORMAT 指定数据的显示格式,$FNUMBER函数用来是执行这个格式化的。
4.INDEXSUBSCRIPTS 只用在%Name中(对HL7V3DT不知是否有用?)
5.MAXLEN 最大长度
6.MAXVAL 最大值
7.MINLEN 最小长度
8.MAXVAL 最小值
9.ODBCDELIMITER 用于%List,指定ODBC用什么分隔符。
10.PATTERN 字符串的范式
11.SCALE 尺度,只用于%Float,指定小数点位置的吧。
12.TRUNCATE 指定字符串是否自动截断到MAXLEN长度。
13.VALUELIST 值列表,可以用空格式“,”分隔。
14.XSDTYPE 定义对应的XSD(XML Schema)中的数据类型,使用XML时有用。
这些参数有的直接可以用来定义HL7V3DT,但其它的需要增加的参数还有不少!
 楼主| 发表于 2003-4-4 20:37:11 | 显示全部楼层

HL7V3DT在Cache数据库中的实施

HL7V3DT中的数据类型及别名:
1.DataValue ANY
2.Boolean BL
3.BooleanNonNull BN
4.Encapsulated Data ED
5.Character String ST
6.Concept Descriptor CD
7.Coded Simple Value CS
8.Coded With Equivalents CE
9.Character String with Code SC
10.Instance Identifier II
11.Telecommunication Address TEL
12.Postal Address AD
13.Entity Name EN
14.Trivial Name TN
15.Person Name PN
16.Organization Name ON
17.Integer Number INT
18.Real Number REAL
19.Ratio RTO
20.Physical Quantity PQ
21.Monetary Amount MO
22.Point in Time TS
23.Set SET
24.Sequence LIST
25.Bag BAG
26.Interval IVL
27.History HIST
28.Uncertain Value - Probabilistic UVP
29.Parametric Probability Distribution PPD
30.Periodic Interval of Time PIVL
31.Event-Related Periodic Interval of Time EIVL
32.General Timing Specification GTS
 楼主| 发表于 2003-4-4 21:23:29 | 显示全部楼层

HL7V3DT在Cache数据库中的实施

HL7V3DT中的Datavalue(ANY)的定义:
abstract type DataValue alias ANY {
    TYPE  dataType"
    BN  nonNull"
    CS  nullFlavor"
    BN  isNull"
    BL  notApplicable"
    BL  unknown"
    BL  other"
    BL  equal(ANY x)"
}"
 楼主| 发表于 2003-4-4 21:53:15 | 显示全部楼层

HL7V3DT在Cache数据库中的实施

对应的Cache数据类型:
Class V3DT.ANY [ Abstract, ClassType = datatype ]
{
  Method dataType() As TYPE  //因为数据类型不能和Property,所以用方法来实现,
  {
    //这里的代码还不知如何写?
  }
  Parameter nonNull As BN = 0"
  Parameter nullFlavor As CS"
  Parameter isNull As BN = 0"
  Parameter notApplicable As BL"
  Parameter unknown As BL"
  Parameter other As BL"
}
数据比较功能,Cache系统本身就应该有吧,所以BL  equal(ANY x)就不用再定义了。
还有一些方法应当定义吗?,如ANYValidDT等。
 楼主| 发表于 2003-4-4 22:25:17 | 显示全部楼层

HL7V3DT在Cache数据库中的实施

以上定义不如改为这样:
Class V3DT.ANY [ Abstract, ClassType = datatype ]
{
Parameter nullFlavor As STRING [ Constraint = "NI,NA,UNK,NASK,ASKU,NAV,OTH,PINF,NINF,MSK,NP" ]"
}
 楼主| 发表于 2003-4-4 22:36:50 | 显示全部楼层

HL7V3DT在Cache数据库中的实施

Boolean BL的定义如下:
Class V3DT.BL Extends (V3DT.ANY, %Library.Boolean) [ ClassType = datatype, ClientDataType = BOOLEAN, ProcedureBlock, SqlCategory = INTEGER ]
{
Parameter nullFlavor As STRING [ Constraint = "NI,NA,UNK,NASK,ASKU,NAV,OTH,PINF,NINF,MSK,NP" ] = "NI""
}
它继承自ANY和%Boolean,并重写了nullFlavor的默认值为“NI”。
 楼主| 发表于 2003-4-4 22:51:51 | 显示全部楼层

HL7V3DT在Cache数据库中的实施

BooleanNonNull BN :
Class V3DT.BN Extends V3DT.BL [ ClassType = datatype, ClientDataType = BOOLEAN, ProcedureBlock, SqlCategory = INTEGER ]
{
/// Tests if the boolean value <var>%val</var> is valid.
///
Returns true (1) if the value <var>%val</var> is valid, otherwise false (0).
ClassMethod IsValidDT(%val As %Boolean = "") As %Integer [ CodeMode = expression ]
{
$isvalidnum(%val,0,0,2)&amp;&amp;(+%val\'=2)
///这是系统自带的验证方法,BN不允许空值,这个验证应当改一下,还知如何改?
}
}
 楼主| 发表于 2003-4-5 11:19:14 | 显示全部楼层

HL7V3DT在Cache数据库中的实施

希望大家多提意见和看法。
Cache本身就是基于关系数据库的面象对象工具,也就是所谓“后关系数据库”。不知熟透番薯所指的“把数据库中得一些思维方式引入到这里来”是指些方面?我这里研究的是实现技术,并不是编程语言或数据类型规范本身,所以难免要把各种思维综合应用。
研究到了这里,有必要去研究一下Cache ObjectScript和Cache Basic的语句及用法了,否则有些代码没法完成。
现在我作个小结:
1.Cache是实现HL7V3DT的很好的工具,原因是它的数据类型可自定义,它是面象对象的,它本身有较多的数据类型实现并可在此基础上派生。
2.跟据HL7V3DT的定义,所有V3DT都应当是Cache中的数据类型类,并且大多可以从
Cache系统的数据类型中继承到很多HL7的定义。
3.现在还有几个问题没有弄清:
  a.HL7V3DT是全部继承自ANY类,而在Cache中我用的是ANY和系统数据类型类的双重继承,这样有些类就有不同的方法可以实现,如BIN,V3DT中是继承自LIST<BN>,而Cache本身就有%Binary(我的系统不能实现对%Binary的继承,不知是Bug还是什么原因?),按理说从ANY和%Binary就可以很容易得到BIN,而从LIST<BN>继承来的BIN可能有些%Binary的功能可能较难实现,但可能这样才更符合HL7的定义。
  b.V3DT的长名和短名(既别名)在Cache不知如何实现,我想暂时不去实现它,名称也只用别名(比较容易知道这是V3DT中的数据类型),不知可否?
  c.Cache系统本身的数据类型实现方式和思维还需要仔细研究,否则难以实现完美的可重用的复杂自定义数据类型,如LIST<BN>,BAG,IVL等。
我的目的是学习Cache和HL7V3,因为它们都是面象对象的思维,很容易结合。实现完HL7V3DT后我想就可以实现RIM、CMET和各种MIM了,把这些HL7的抽象定义模型实现了,再去编写医用软件就非常规范和标准了,这样的软件就实现了HL7 Ready了。同时也可以只把精力用在具体应用的事务模型上了,而不用再对所面对的内容进行建模了,因为HL7的RIM是非常底层的抽象,具有广泛的适用性!
欢迎朋友参与并与我交流,我现在的动机是学术性是,无商业目的。研究如果有什么成果,我愿意以文本形式免费与大家共享,但只限于研究目的,如果要商业应用,必须得到我及所有贡献者的共同授权!
发表于 2003-5-26 19:36:33 | 显示全部楼层

HL7V3DT在Cache数据库中的实施

目前我是利用cache\' studio所提供的XML Schema wizard把V3的Schema給匯入。
目前能夠成功的事Data type
RIM的部分會有好多錯誤
我的想法是RIM是可以產生兩個部分
1. 應用系統 ─ Persistent
2. 訊息格式 ─ Registered
而兩者都是用相同的data type
我也期望能把ROSE這邊把Model + Cache\' + HL7 V3綁在一起
還在試圖突破中
 楼主| 发表于 2003-5-28 14:32:21 | 显示全部楼层

HL7V3DT在Cache数据库中的实施

Rational Rose我用过,原本HL7V3DT也是用Rose建模的,可后来分出来了,因为V3DT使用的约束机制,不能用Rose很好地表达。RIM我手工都输入Cache了,都是继承Persistent的。
现在问题是如何使用RIM,HL7用RIM来构建消息,方法是通过约束机制,但现在的所有编程工具都没有能够很好地解决约束机制的现成方法,包括Cache还不行。
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

快速回复 返回顶部 返回列表