2016-08-18 81 views
2

我看到TSDT数据类型在默认模式2.3:验证HL7架构中的时间戳吗?

<SegmentStructure name='SMPL' description='Patient Identification'> 
    <SegmentSubStructure piece='1' description='A sample datetime field' datatype='DT' max_length='12' required='O' ifrepeating='0'/> 
</SegmentStructure> 

<DataType name='TS' description='time stamp'> 
    <DataSubType piece='1' description='time of an event' datatype='ST'/> 
    <DataSubType piece='2' description='degree of precision' datatype='ST'/> 
</DataType> 

<DataType name='DT' description='Date (2.8.13)'> 
    <DataSubType piece='1' description='Date (2.8.13)'/> 
</DataType> 

,但它不会出现,这实际上验证格式。这可能吗?我们最近有一个实例,客户发送带有缺失数字的时间戳(例如,20160503120)。如果可以的话,我想用模式来验证它。

编辑:添加一些澄清希望

我们用当一个ADT进来它通过与扩展.hl7一个验证。默认情况下,这是2.3.hl7或类似(取决于版本)。它看起来就像上面的代码。我想知道如果我能以某种方式将正则表达式放在那里。无论是在分段结构定义(SMPL)还是在数据类型定义中。

+1

你显示的不是代码,而是代码正在处理的模式/描述。 Intersystems产品最初基于Mumps和其他编程语言的API。 – sqlab

+0

您可能想要为DateTime邮票构建外部验证过程。 – Sid

+0

我明白这是架构。我正在处理的项目是修复所有模式并在所有名称空间上启用验证警报。使用模式我可以很容易地说“这个字段的值只能是整数和5个字符长”。我只是问我能否比这更详细。 –

回答

0

您可以向模式添加正则表达式。这是来自v3模式的完整TS正则表达式:

[0-9] {1,8} |([0-9] {9,14} | [0-9] {14,14}。[ 0-9] +)([+ - ] [0-9] {1,4})?

+0

认真吗?你有没有一个在v2架构中看起来像什么的例子? –

+0

哦 - 你不是指v2的w3c模式?如果不是,你指的是什么? –

0

第2版的文档有这样的美女:

YYYY[MM[DD[HH[MM[SS[.S[S[S[S]]]]]]]]][+/-ZZZZ] 

方括号表示可选部分。也许只是看看断点?像这样?假设你先分割出时区,然后将它传递给你实际用来解析日期的任何东西。

switch (datePart.length) { 
case 4: 
    return parseDate(datePart, "YYYY"); 
case 6: 
    return parseDate(datePart, "YYYYMM"); 
case 8: 
    return parseDate(datePart, "YYYYMMDD"); 
case 10: 
    return parseDate(datePart, "YYYYMMDDHH"); 
case 12: 
    return parseDate(datePart, "YYYYMMDDHHmm"); 
case 14: 
    return parseDate(datePart, "YYYYMMDDHHmmss"); 
case 16: 
    return parseDate(datePart, "YYYYMMDDHHmmss.S"); 
case 17: 
    return parseDate(datePart, "YYYYMMDDHHmmss.SS"); 
case 18: 
    return parseDate(datePart, "YYYYMMDDHHmmss.SSS"); 
default: 
    return undefined; 
} 
+0

我在哪里把它放在架构中? –

+0

我建议你编写自己的自定义验证。不确定你使用的是什么工具。 –

0

根据规范为HL7 V2(见http://www.hl7.eu/refactored/dtDTM.html),DT的格式是:YYYY [MM [DD [HH [MM [SS [.S [S [S [S]]]]] ]]]] [+/- ZZZZ]。

因此,适当的正则表达式表达为: ^((\d{2}){2,7}|\d{14}.\d{1,4}([+-]\d{4})?)$

然而,如果你正在谈论的TS数据类型,它可以包括一个脱字符号和一个精确的指示器。

在这种情况下,正则表达式表达可以是: ^((\d{2}){2,7}|\d{14}.\d{1,4}([+-]\d{4})?)(\^[YLDHMS])?$

这仅仅是第一次筛选,作为真正的日期/时间值没有被验证。