2016-08-18 41 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])?$

這僅僅是第一次篩選,作爲真正的日期/時間值沒有被驗證。