- 醫療衛生信息標準化技術與應用(第2版)
- 李小華主編
- 8029字
- 2022-04-21 15:51:04
第三節 數據類型
一、數據類型概述
數據類型是通信中最基本的組件,CDA標準中使用的數據類型由HL7 V3數據規范定義,該規范被描述為抽象規范,因為它定義了可以在數據類型上執行的屬性、語義和操作,而不是具體的計算表示。XML更詳細地描述了這些數據類型在XML中的表示,CDA 2.0標準版中包含了實現技術規范。該規范使這些數據類型的實現更加具體,并指示了如何傳輸信息。彩圖9-4顯示了HL7 V3數據類型的層次結構,以及相關的細分內容。

彩圖9-4 數據類型圖
ANY數據類型是所有HL7數據類型的根。數量數據類型是所有數值數據類型的根。布爾值有兩種形式,支持未知值的BL數據類型和不支持未知值的布爾值或BN數據類型。
封裝數據(ED)數據類型支持在CDA中包含多媒體內容。在封裝的數據類型中發現的比特流表示為文本、XML或文本中的base-64編碼內容。元素中的CDA元素使用具有固定媒體類型和XML表示的ED數據類型。字符串(ST)受ED數據類型的約束。
名稱和地址可以混合使用文本和XML元素。一個地址可以使用超過25個不同的部分,但通常只使用6個。名稱部分可以以任何順序出現。標識符有一個確保唯一性的部分(在根XML屬性中找到)和一個可選的部分(在extension XML屬性中找到),可以在必要時用于表示標識符的其余部分。ISO對象標識符(oid)是表示根XML屬性的首選形式,但也允許使用通用唯一標識符(uuid)。所有類型的電信地址都使用url表示。如果沒有關于未知電信地址含義的貿易伙伴協議,就不能表示特定類型的未知電信地址。
編碼是HL7參考信息模型的一個基本特征。編碼系統是一組代碼的集合,這些代碼標識由組織維護的離散概念。使用后協調允許使用更簡單的概念來描述復雜的概念。編碼系統可以表示有限或無限的概念集。值集是一組代碼,可能來自多個代碼系統,可以通過列出其中的代碼或通過算法描述應該顯示哪些代碼來定義。
代碼在由編碼系統定義的概念空間中標識獨特的概念。HL7使用OID標識編碼系統。概念描述符(CD)數據類型表示一個概念,它可以在編碼系統中包含一個代碼、描述該概念的原始文本、一些改進原始概念的代碼(稱為限定符),以及對其他編碼系統的轉換。所有不同的編碼數據類型都源自概念描述符(CD)數據類型。
時間戳以YYYYMMDDhhmmss的形式出現。其中每個字母都是一個數字。時間戳的組件按從最重要到最不重要的順序排列。時間戳的長度決定了它的精度。IVL_TS數據類型與HL7 V3數據類型中的其他區間類似。比較區間需要注意,因為在比較中沒有考慮區間邊界的精度。PIVL_TS數據類型允許指定“類脈沖”波形。周期間隔的制度化指定組件(PIVL_TS)以重要的方式影響如何解釋它。基于事件的間隔可以使用EIVL_TS數據類型根據睡眠和進食時間指定。
集合、列表和包都是可以與許多HL7數據類型一起使用的不同類型的集合。集合不允許重復,可以指定連續或不連續范圍。interval數據類型允許創建連續范圍,也是一個集合。可以通過使用各種不同的集合操作來創建集合。列表是有序的,并且允許復制內容。包是無序的,可以重復內容。
二、基礎數據
(一)ANY
所有HL7 V3數據類型的屬性都來自ANY。所有數據類型的通用特性都可以在這實現。例如,幾乎所有HL7數據類型都可以說該值是未知的,此屬性通過ANY數據類型在CDA模式中實現。具有單根層次結構的數據類型,允許CDA XML中的元素支持任何任意選擇的HL7數據類型。對患者的觀察可以采用任何不同的數據類型。在指定觀察類型之前,數據類型是未知的,因此CDA 〈observation〉的〈value〉元素被指定為ANY這種類型。
(二)布爾
通常在編程語言中只有一種布爾數據類型。但是,由于使用了null格式,HL7比大多數其他語言有更多的含義。一個典型的布爾值可以有兩個非異常值中的一個。HL7版本3使用值“true”和“false”表示兩種常見情況。HL7有兩種不同的布爾數據類型,下面將對它們進行詳細描述。
1.BL Boolean
普通布爾數據類型有兩個非異常值:true和false。它還可以表示null的各種形式。BL數據類型用于〈entryRelationship〉和〈reference〉元素中的〈separatableInd〉元素、〈language ecomcommunication〉元素中的〈preferenceInd〉元素,以及〈supply〉元素中的〈independent dentind〉元素。
2.BN BooleanNonNull
BooleanNonNull數據類型稍微傳統一些,它只能表示true或false,而不允許取空值“null”。
(三)數量
在CDA 文檔中,數量最常用于報告臨床觀察中的數值測量。數量是數字形式的,也可以有與它們相關聯的度量單位(常見)或貨幣面額(罕見)。CDA 文檔中發現的大多數數量將出現在與臨床陳述相關的觀察(〈觀察〉)參考范圍(〈觀察范圍〉)或前提條件(〈前提〉)中的〈值〉元素中。此外,數量還可以以報告列表中項目的序號(數字位置)出現在CDA 模式的其他一些地方。這些數量將始終使用整數數據類型。
三、文本及多媒體數據
(一)二進制
二進制(BIN binary)數據類型是原始位的集合。HL7在概念上將其視為一個BooleanNonNull值列表。二進制數據的空流被認為是異常值(null)。二進制數據類型是一種抽象數據類型,意味著該數據類型不能在CDA文檔中使用。
(二)封裝數據
封裝數據(encapsulated data,ED)是HL7以非HL7定義的格式傳輸數據的方式。這種數據類型可以包括圖像、視頻、音頻、波形、遺傳序列、多媒體等。封裝的數據可以以兩種方式之一出現在CDA中:被引用(通過URL),或者直接合并到CDA文檔中。
ED數據類型最常用的是在CDA文檔的〈section〉元素或各種臨床陳述元素中找到的〈text〉元素。CDA文檔的〈observationMedia〉元素的〈value〉元素中也放置了封裝好的數據,用于存儲與臨床文檔相關的多媒體數據。它也可以出現在〈observation〉的〈value〉元素中,用于存儲多媒體數據,如以標準(但非hl7)格式存儲的基因組序列,也可以出現在臨床陳述的〈text〉元素和編碼數據的〈originalText〉元素中。
(三)字符串
字符串(ST string)數據類型可能是最容易理解的,它編碼簡單的文本數據。該數據類型在HL7數據類型中表示為ED數據類型的約束。陳述和媒體類型的XML屬性分別固定為TXT值和text/plain值。這些簡單的文本字符串沒有引用、完整性檢查或縮略圖,使用language XML屬性處理ED數據類型,不需要記錄字符集信息,因為文本是使用CDA文檔的XML聲明中指定的字符集合并到XML文檔中的。
四、人口學數據
CDA提供了九種不同的數據類型來記錄通常認為的人口統計數據,包括地址部分、地址、名稱部分、實體名稱、機構名稱、個人、俗名、實例標識器和通信端點。
(一)地址部分
可以將郵政地址解析為不同部分的集合。每個部分都在一定程度上確定了地理或政治邊界。CDA標準支持識別郵政地址的25個不同部分,包括房屋或建筑編號、街道方向指示、郵政信箱號和公寓號等部分。CDA文檔中很少使用這些更詳細的地址部分。
(二)地址
地址數據類型用于記錄郵政地址。它們被建模為不同層次上的地理或政治邊界的集合,用于投遞郵件或包裹。CDA標準將地址視為地址部分元素的任意列表和文本。這種文本和元素的混合被XML標準稱為混合內容模型。
根據XML模式,〈addr〉元素的每個不同部分可以根據需要出現多次。但是,地址有兩個〈state〉或〈postalCode〉元素是沒有意義的。其他幾個元素也是如此。除了streetAddressLine〉或〈deliveryAddress-Line〉元素外,幾乎所有組件都應只出現一次。
(三)名稱部分
名稱可以解析為不同部分的集合,就像地址一樣。實體名稱部件數據類型支持名稱的這些不同部分的表示。HL7將名稱分為3種類型:人員、組織和其他(包括位置)。人名被解析為前綴、后綴、名、姓和分隔符。機構名稱可以有前綴或后綴(如Inc或BV)和分隔符。地方和事物的名稱沒有不同部分。
(四)實體名稱
名詞是人、地方或事物。實體是名詞的另一種說法。實體名稱數據類型的存在是為了提供各種名詞的名稱。它支持以單一數據類型表示機構、人員、位置或事物名稱。實體名稱是以下機構名稱、人員名稱和常用名稱派生的數據類型。此數據類型僅在CDA中用于命名藥物或其他材料。EN數據類型是ENXP數據元素的列表,類似于〈addr〉使用混合內容模型來包含數據。
(五)機構名稱
機構名稱是表示機構名稱的〈前綴〉、〈后綴〉、〈分隔符〉和文本部分的列表。通常出現在機構名稱中的后綴是縮寫或首字母縮寫,如LLC、Inc或Gmbh。組織名稱通常在CDA文檔中表示,而不需要將組織名稱解析為單獨的部分。多數CDA實現不使用帶有機構名稱的前綴或后綴。
(六)人名
人名是〈prefix〉〈given〉〈family〉〈suffix〉和〈delimiter〉元素及文本的列表。PN數據類型存在于〈assignedPerson〉〈associatedPerson〉〈guardianPerson〉〈informationreceiver〉〈maintainingPerson〉〈relatedPerson〉〈playingEntity〉〈specimenPlayingEntity〉和〈subject〉元素的〈name〉元素中,PN數據類型派生自EN數據類型,因此還支持該數據類型的use屬性和〈validTime〉元素。
(七)俗名
地點和事物的名字通常以俗名來命名,因為它們不像個人或機構名稱那樣能被分解成不同的部分。
(八)實例標識器
標識數據類型用于對一個對象進行唯一的標識。Instance Identifier(II)即實例標識器,它是個識別器,在一次注冊時能夠唯一地標識一個對象、東西或人。CDA規范中廣泛使用這種數據類型來標識人員、位置、事物、動作、角色等。II數據類型通常出現在CDA模式中的〈id〉元素中。它還用于〈setId〉〈templateId〉和〈typeId〉元素。在某些情況下,CDA標準允許使用標識符的集合(一組),因為使用不同標識符的不同機構可能知道的是相同事情。
(九)通信地址
通信地址或端點指定如何使用通信設備與某人或某事聯系,包括電話、傳真機、電子郵件、網絡、即時通訊等。所有通信地址都可以用URI表示。TEL數據類型用于在各種實體和角色中找到的〈telecom〉元素,也出現在ED數據類型使用的〈reference〉元素中。
五、代碼及詞匯表數據
詞匯表是HL7 RIM中的一個重要組成部分。HL7 V3 RIM通常被描述為一種關于醫療保健的通信語言。如果RIM是一種語言,那么V3標準所使用的代碼就是在不斷發展的醫療保健領域賦予這種語言可擴展含義的詞匯。隨著新思想、新疾病和新療法的發現,新的規范也會定期出臺。CDA中廣泛使用代碼來溝通問題、藥物、過敏、程序和許多其他概念。使用代碼在軟件應用程序之間進行通信可以追溯到最早的計算機系統。它們執行的指令只是告訴計算機該做什么的代碼。代碼很短,有很好的定義意義。敘事文本需要更多的注意避免歧義。
(一)概念
名詞是一個人、一個地方、一件事或一個想法。代碼用于標識這些不同的概念(concepts)。這個概念可能是非常離散的,就像特定的藥物在特定的包裝中含有特定的活性成分;也可能是非常寬泛的,描述了特定類別的疾病。編碼系統使用不同的方法來定義由特定代碼表示的概念邊界,HL7 V3詞匯表為它們所表示的概念提供人類可讀的定義;ICD-9-CM和ICD-10-CM提供一組術語,用于確定概念是否包含在特定代碼所表示的概念中,或排除在概念之外;LOINC通過描述被測量的(通常是化學)成分、被分析的物質、測量產生的數據類型、用于生成結果的特定實驗室方法以及完全定義代碼的許多其他屬性來描述實驗室測試;SNOMED CT為概念提供許多首選和可選的術語(同義詞),并使用概念在代碼層次結構中的位置來定義概念含義;UCUM使用數學規則來定義其編碼概念的含義。
(二)編碼
代碼標識編碼系統中的唯一概念。多個代碼可能代表相同的概念,但在編碼系統中很少使用。代碼可以是不透明的標識符,這意味著代碼值本身沒有人類可解釋的結構。SNOMED CT和UMLS使用不透明標識符。這些類型的編碼系統需要某種人工接口來為概念選擇合適的代碼。一些機構為這些編碼系統開發接口詞匯表,提供易于理解和容易記住的短語來定位代碼。代碼也可以有一個可解釋的結構。ICD-9-CM和ICD-10-CM編碼系統是分層組織的。代碼具有不同的可識別塊,使人們更容易記住代碼值。由于編碼系統的結構,編碼人員通常可以使用ICD-9-CM編碼多個臨床文檔而不需要查找任何編碼。編碼系統的結構即其人機界面。
(三)編碼系統
編碼系統是一組代碼,可以是簡單的術語列表,彼此之間沒有明確的關聯(如LOINC);也可以在層次結構中組織(如ICD-9-CM和ICD-10-CM)或通過各種不同的關系(如SNOMED CT)組織。編碼系統可以表示的概念數量可能是有限的長度(如LOINC和ICD-9-CM),或通過后協調(如SNOMED CT)或代碼構造規則(如UCUM)具有無限的長度。它可以有多個版本,編碼的最佳實踐表明,代碼永遠不會在不同版本中重用以表示不同的概念,但這一規則有時也會在某些編碼系統(如ICD-9-CM)中被打破。對于這樣的編碼系統,發送編碼系統版本在通信中是很重要的,否則就不會搞清楚使用了代碼的哪個定義。編碼系統中的每個代碼標識一個唯一概念。代碼可以是原子的,表示單個簡單概念;也可以表示由較小概念組成的復雜概念。
(四)預處理和后處理
當單個代碼表示概念的組合時,使用的是所謂的預處理。在其他情況下,幾個代碼可以以受控的方式一起使用來表示概念的組合。這種類型的編碼稱為后處理。編碼系統可以包含帶有不同代碼的預處理概念,或者支持多個代碼的后處理以表示一個復雜的概念,或兩者兼而有之。一些編碼系統是為了支持使用不同的代碼組合來描述概念的不同屬性而特意開發的。SNOMED CT是一種支持后處理的編碼系統。這些編碼系統可以包含預處理概念來表達復雜的后處理概念。使用這些代碼系統的CDA實現應該準備好處理這兩個概念的表示。CDA實現還應該考慮交換的業務規則是否應該允許或禁止使用這些替代表示。HL7 TERMINFO規范對后處理SNOMED CT概念的使用提供了指導。其他常用的編碼系統在單個代碼中指定概念的所有細節,并可在單個代碼中合并多個更簡單的概念,例如ICD-9-CM中的糖尿病腎衰竭代碼將這兩個獨立的概念合并到一個代碼中,這是預處理的一個例子。
(五)值集
值集是可能來自多個編碼系統的代碼集合,表示一組(通常)不同的概念。值集可以表示用于特定目的的編碼系統的子集,通常用于約束實現指南中出現的合法值。通過枚舉其中找到的每個代碼來定義一個擴展值集。意向值集是通過提供規則(一種算法)來確定代碼是否是該集的成員來定義的。意向值集可以是動態的,這意味著它生成的值集可以隨底層代碼系統的更新而變化;也可以是靜態的,使用固定的代碼系統版本。擴展值集總是靜態的。在可能的情況下,應該從單個代碼系統中提取值集。HL7規范(包括CDA)使用的值集由一個稱為OID的唯一標識符標識,可以有多個版本。
六、日期及時間數據
(一)時間戳
時間戳(time stamp,TS)即一個時間點。由于這是一個隱含的時間量,是任意選擇的時間點,所以它是數量層次結構的一部分。HL7標準沒有定義要使用的歷元日期,系統可以使用任何歷元值,并仍可以正確地處理時間戳。HL7時間戳數據類型的表示基于ISO 8601時間表示標準。這與其他時間表示標準中使用的標準是相同的。ISO 8601標準允許標點符號分隔出現或不出現的時間戳部分。與W 3C Schema數據類型等標準不同,這種數據類型的HL7不使用標點字符。時間戳數據類型記錄CDA文檔中通常命名為〈time〉或〈effectiveTime〉元素的值XML屬性中的時間。
時間的表示 用兩位數字分別表示世紀、世紀內的年、月、日、小時、分鐘和秒。秒后面可以跟一個小數點和一個秒的小數部分。時間可以包括一個“+”或“-”符號,后面跟著最多4位數字,表示從通用協調時間(UTC)開始的以小時和分鐘為單位的偏移量。時間戳僅限于時間戳部分的合法組合。
(二)時間間隔
時間間隔(interval of time,IVL_TS)的數據類型通常用于記錄某個觀察或事件發生或打算發生的時間間隔。它最多使用以下任意兩個組件指定。由于時間戳是一個物理量,CDA模式中的IVL_TS類型對于前面提到的其他時間間隔遵循相同的規則。
(三)周期性時間間隔
周期間隔的時間數據類型用于記錄重復的周期事件。可以將這種數據類型視為脈沖波形的表示形式,例如藥物通常是每天給藥,一天幾次(如一天三次)。周期性時間間隔(periodic interval of time,PIVL_TS)數據類型允許記錄這些事件之間的周期。有些治療需要在特定的時間內以給定的頻率進行(如每周三次為1小時的PT)。
(四)事件相關的周期性時間間隔
事件相關的周期性時間間隔(event-related periodic interval of time,EIVL_TS)用于表示與吃飯和睡覺相關的周期性事件。
(五)一般的時間規范
通用計時規范允許使用各種不同的集合操作(包括交叉、聯合、差異和稱為hull周期的復雜操作)將復雜的計時表示為一組時間間隔。周期性的hull操作本質上允許兩個不同集合中的操作數對作為它們之間間隔的邊界。幾乎任何可以想象到的時間表都可以用這種方式表示,包括許多有效的無限長度。
(六)藥物使用時間數據類型
CDA標準中上述時間數據類型最復雜的使用情況出現在描述給藥頻率時。〈 substanceAdministration〉XML元素使用GTS數據類型在〈effectiveTime〉元素中指定劑量頻率。這意味著必須使用上述類型的組合來構建完整的表達式。
有許多方法可以使用HL7時間數據類型合法地完成這一任務,而基于HL7 RIM的信息系統將把它們視為相同的。然而,實際情況是系統很少處理這種復雜級別的管理時間安排。集成醫療企業建立了這樣一個約定:計時將使用以下兩種表示之一進行編碼:表示單個管理事件的時間的單個時間戳;一種表示給藥方案的開始和停止時間的間隔,與劑量頻率相交,表示為周期性時間間隔(PIVL_TS)或事件相關的周期性時間間隔(EIVL_TS)。
七、聚集數據
HL7抽象數據類型規范包括幾種不同數據類型的抽象集合,包括包、集合和列表。這些收集數據類型可以與任何其他更簡單的數據類型一起使用。與其他對象模型不同,HL7集合類型不從bag集合類型派生集合或列表,即使集合和列表可以被認為是bag類型的專門化。CDA很少直接使用這些集合類型(最常用的是Set集合類型),CDA層次描述符的Message元素類型列是查找此信息的好地方。CDA模式中定義的所有數據類型,包括各種集合類型,都可以出現在〈observation〉元素的〈value〉元素中。必須使用適當的xsi:type聲明來使用這些類型。CDA的大多數實現無須深入研究收集數據類型的細節就可以理解。其中的聚集數據類型只處理數量(包括時間戳)和編碼概念,不處理多媒體、文本或人口統計數據類型。
關于使用聚集數據類型,比較困難的事情之一是確定在CDA模式中使用哪種類型來表示聚集組件。這是因為datatypes.xsd模式只定義了表示各種聚集類型所需的數據類型,而沒有為更受約束的使用創建類型。例如,PQ的一個區間可以表示單個物理量,也可以表示一系列物理量。因此,模式中定義了一種支持一組PQ區間(BXIT_IVL_PQ)的類型,但沒有定義只支持一組PQ的類型。
(一)包
一個包(BAG bag)是一個無序的項目集合,可以復制。在XML中,任何數據類型的包通常都是使用與包相關的數據類型,將其編寫為項目序列。順序并不重要,因此可以按不同的順序將這些信息寫出來,而不改變其含義。CDA標準不直接使用BAG數據類型。可以使用BXIT_CD數據類型在〈value〉元素中使用代碼包。由于所有編碼數據類型都來自CD,因此可以使用該類型創建包含更簡單編碼類型的包。物理量、整數或實數的包應該在數據類型中使用BXIT_IVL_PQ的datatypes.xsd模式。這是因為IVL_PQ也可以用來表示PQ,而PQ足以表示實數或整數。這種類型足以表示信息,但不會將實現限制為通過模式使用PQ、INT或真實表示,必須使用其他技術應用這些限制。
(二)集合
集合(set)是唯一項的無序集合,其中每個項可能不會重復。在CDA XML實例中,任何數據類型的集合通常都是使用與該集合相關聯的數據類型作為項的序列編寫的。像包一樣,項目設置的順序并不重要,因此信息可以以不同的順序寫出來,沒有任何意義的變化。在CDA 2.0版本中,set類型與地址、名稱、標識符、通信地址以及大多數參與方和act關系一起使用,但這些是模式中的匿名類型。匿名類型是在模式中以不允許在其他地方重用的方式在本地定義的類型。但不妨礙在CDA實例中包含這些數據類型的集合,因為有些數據元素(如〈observation〉中的〈value〉元素)允許使用任何數據類型,只需重復〈value〉元素多次,并使用set成員類型(如ADDR、PN、II、TEL等)即可。set集合類型也可以用于連續的范圍(如實數或物理量)。CDA中這種功能最常用的地方是出現通用時間規范(general timing specification,GTS),GTS只是一組時間戳。集合可以通過各種集合操作創建,包括聯合、差異和與另一個集合的交集。在CDA標準的datatypes.xsd模式中定義的各種SXCM類型,可用于創建代碼、整數、實數、時間戳或物理量集。
(三)間隔
間隔(IVL)是一個從一點到另一點的范圍,另一種類型的集合也是。間隔只能用于HL7數據類型,這些數據類型表示數量,在數量型數據類中有詳細的描述。
(四)列表
列表(list)是可重復項的有序集合。在XML中,任何數據類型的列表都是按照適當的順序使用與該列表相關聯的數據類型以項目序列的形式編寫的。由于順序很重要,因此必須按照與原始順序相同的順序將此信息寫回,以避免含義被更改。在CDA中,列表集合類型只出現在〈regionOfInterest〉元素中的〈value〉元素中。這些值用于指定圖像上的坐標。但是,LIST也可以用作〈observation〉元素中〈value〉的數據類型。HL7定義了另外兩種列表數據類型——生成的列表(GLIST)和抽樣列表(SLIST)。GLIST數據類型通過算法生成一個列表,非常類似于許多編程語言中的FOR語句。采樣列表允許使用原始輸出傳輸來自采樣設備(如連接到某個輸入信號的模擬到數字信號轉換器)的數據。