54
SCHEMATRON 技技技技 99 技技技技技技技技技技技技技技 技技技技技技技技 B CDA R2 技技技技技技 本本本本本本本本1. 本本本本本本 97 本 98 本本本本本本本本本本本本本本

SCHEMATRON 技術說明

  • Upload
    ornice

  • View
    86

  • Download
    0

Embed Size (px)

DESCRIPTION

SCHEMATRON 技術說明. 99 年度電子病歷標準維護暨推廣案 教育訓練系列課程 B CDA R2 元素結構詳論. 本投影片參考來源: 1. 行政院衛生署 97 及 98 年度電子病歷推動案之專案成果. 大綱. Schematron 簡介 取得資源 語法結構 範例解析. 甚麼是 SCHEMATRON. 他是用來斷定某樣式 (pattern) 是否出現或沒有出現在被驗證的 XML 文件內。 其功能包含: Business rules validation Data reporting General validation - PowerPoint PPT Presentation

Citation preview

Page 1: SCHEMATRON 技術說明

SCHEMATRON 技術說明

99 年度電子病歷標準維護暨推廣案教育訓練系列課程 B CDA R2 元素結構詳論

本投影片參考來源: 1. 行政院衛生署 97及 98年度電子病歷推動案之專案成果

Page 2: SCHEMATRON 技術說明

大綱 Schematron 簡介 取得資源 語法結構 範例解析

Page 3: SCHEMATRON 技術說明

甚麼是 SCHEMATRON

他是用來斷定某樣式 (pattern) 是否出現或沒有出現在被驗證的 XML 文件內。

其功能包含: Business rules validation Data reporting General validation Quality control Quality assurance Constraint checking

Page 4: SCHEMATRON 技術說明

驗證模式 有兩種驗證模式

Grammar-based schema languages Rule-based schema languages

資料來源: http://www.xfront.com/schematron/Two-types-of-XML-Schema-Language.html

Page 5: SCHEMATRON 技術說明

SCHEMATRON 的版本 Schematron 1.5

http://xml.ascc.net/schematron/ 由中央研究院所發展 僅支援 XSLT 1.0

Schematron 1.6 介於 Schematron 1.5 與 ISO Schematron 使用不多。

ISO Schematron

Page 6: SCHEMATRON 技術說明

取得資源

Page 7: SCHEMATRON 技術說明

標準書 免費標準書下載網址:

http://standards.iso.org/ittf/PubliclyAvailableStandards/index.html

編號: ISO/IEC 19757-3:2006 文件名稱: Information technology -- Document Schema

Definition Language (DSDL) -- Part 3: Rule-based validation -- Schematron

Page 8: SCHEMATRON 技術說明

電子書 Schematron

出版社: O’REILLY 2007.3 出版 共 51 頁 價格: $9.99 Google Preview :

http://oreilly.com/catalog/9780596527716/preview.html

(寫的並不好 )

Page 9: SCHEMATRON 技術說明

線上教材 Schematron Tutorial

網址 1 : http://www.zvon.org/xxl/SchematronTutorial/General/contents.html

網址 2 : http://www.xfront.com/schematron/index.html

網址 3 : http://www.dpawson.co.uk/schematron/index.html

Schematron wiki 網址

http://en.wikipedia.org/wiki/Schematron ( 資料仍不完備 )

Page 10: SCHEMATRON 技術說明

重要資源網站 http://www.schematron.com/ http://xml.ascc.net/schematron/ http://www.topologi.com/

Page 11: SCHEMATRON 技術說明

支援 SCHEMATRON 的 XML 編輯器 XMLBlueprint XML Editor :

http://www.xmlblueprint.com/ <oXygen/> XML Editor :

http://www.oxygenxml.com/

Page 12: SCHEMATRON 技術說明

背景知識

Page 13: SCHEMATRON 技術說明

語法結構

Page 14: SCHEMATRON 技術說明

基礎宣告 Namespace

http://purl.oclc.org/dsdl/schematron

<?xml version=“1.0”?><sch:schema xmlns:sch=http://purl.oclc.org/dsdl/schematron> …</sch:schema>

Page 15: SCHEMATRON 技術說明

基本觀念 - RULES

Rules 是 Schematron 語法結構中最基礎區塊 簡單結構

<rule context="book">

<!--

Insert tests to be done on "book" elements here

-->

.../...

</rule>

補充說明Context 指的是被驗證 XML 檔中的可能元件。可用

Xpath 加以定義。

Page 16: SCHEMATRON 技術說明

基本觀念 - TESTING

定義規則區塊後,接著要說此規則的測試條件。 測試方式有兩種:

assert :當條件不符合時,警示訊息。一定有錯。 report :當條件符合時,報告資訊。不一定有錯。

範例

<rule context="book"> <assert test="@id">Missing "id" attribute.</assert> <assert test="isbn">Missing "isbn" element.</assert> <assert test=“@id = concat(‘b’, isbn)”>The “id” attribute should be the ISBN number with a prefix "b"</assert> </rule>

Page 17: SCHEMATRON 技術說明

SCHEMATRON 最簡結構 <schema xmlns=“http://purl.oclc.org/dsdl/schematron”> 包含 [0..1]<title> 之後 [0..n] <ns prefix=“???” uri=“???” /> 用來定義 namespaces 與

prefixes , 如 Xpaths 等其他的標準,之後 [1..n] <pattern> ,包含

[1..n]<rule context=“???”> 式中 context 屬性內容是一個 XSLT 的表達式,包含

<assert test=“???”> 式中 test 屬性內容是一個 Xpath 位置。內容值則可是豐富文字內容,用以表達此警示的敘述。

<report test=“???”> 式中 test 屬性內容是一個 Xpath 位置。內容值則可是豐富文字內容,用以表達此報告的敘述。

Page 18: SCHEMATRON 技術說明

補充元素 – PHASE 、 ACTIVE

這兩個元素配合起來可宣告不同等級的驗證。例如說,可以規劃成 error 、 warning 、 manual 三種不同【嚴重度】之驗證規則。

phase 以屬性 id 名稱作辨識。 active 用屬性 patterm 作辨識。注意,此

patterm 的屬性值要與 patterm 元素的 id 屬性相對應。

範例

<phase id='errors'> <active pattern='ClinicalDocument'/> <active pattern='ClinicalDocument_General_Constraints'/> …</phase><phase id='warning'> <active pattern='ClinicalDocument_General_Constraints_Warnings'/> <active pattern='recordTarget_warnings'/> …</phase> <phase id='manual'> <active pattern='Body_manual'/> <active pattern='ClinicalDocument_code_manual'/> </phase>

Page 19: SCHEMATRON 技術說明

補充元素 – DIAGNOSTICS 、 DIAGNOSTIC 目的:提供更豐富的錯誤訊息報告。 結構

同一個 assert 或 report 可以有好幾個 diagnostic 。 ( 例如不同的語言 )

用此架構時,在 assert 或 report 元素中,要用 diagnostics屬性。

範例<rule context="*[@id]"> <report test=“preceding::*/@id = @id” diagnostics=“idAttribute ”>Duplicated id attribute in a "<name/>" element.</report> </rule> .../... <diagnostic id="idAttribute"> The value of the duplicated id attribute is "<value-of select="@id"/>".</diagnostic>

<diagnostics> <diagnostic id=“來自 assert/report的定義” >訊息內容 </diagnostic> <diagnostic id=“來自 assert/report的定義” >訊息內容 </diagnostic></diagnostics>

Page 20: SCHEMATRON 技術說明

補充元素 – 其他 let :設定變數之用。 include :引入其他 schematron 檔。 name :用以代表現在節點名稱。 (ISO 版廢 ) param :設定 key-value 。 emph :用在敘述文件區塊內。 p :定義一段文章 ( 與 HTML 同 ) 。

Page 21: SCHEMATRON 技術說明

範例解析

Page 22: SCHEMATRON 技術說明

範例 1

Page 23: SCHEMATRON 技術說明

範例 2

Page 24: SCHEMATRON 技術說明

範例 3

Page 25: SCHEMATRON 技術說明

範例 4

Page 26: SCHEMATRON 技術說明

範例 5

驗證字串是否包含字元@

Page 27: SCHEMATRON 技術說明

範例 6

Page 28: SCHEMATRON 技術說明

完整範例<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.ascc.net/xml/schematron"> <pattern name="main"> <rule context="book"> <assert test="@id">Missing "id" attribute.</assert> <assert test="isbn">Missing "isbn" element.</assert> <assert test=“@id = concat(‘b’, isbn)”>The “id” attribute should be the ISBN number with a prefix “b” </assert> </rule> <rule context="*[@id]"> <report test=“preceding::*/@id = @id” diagnostics="idAttribute-en idAttribute-fr "/> </rule> </pattern> <diagnostics> <diagnostic id=“idAttribute-en” xml:lang=“en”>The id attribute “<value-of select=”@id“/>” is duplicated in element "<value-of select="name()"/>".</diagnostic> <diagnostic id=“idAttribute-fr” xml:lang=“fr”>L‘attribut id “<value-of select=”@id“/>” de l’élément "<value-of select="name()"/> est dupliqué".</diagnostic> </diagnostics> </schema>

Page 29: SCHEMATRON 技術說明

用於 CDA R2

Page 30: SCHEMATRON 技術說明

基本說明 - 1

配合實作指引標準書的規則建立 Schematron 。 每一份實作指引標準書會宣告 TemplateId ,此元素

為 OID 編碼。一個 OID 碼就是一個驗證檔。 此編碼須向 HL7 Taiwan 註冊使用之。 此編碼可能的定義模式:

所有驗證條件式在同一個檔案。 分成 Level 1 、 Level 2 與 Level 3 三個檔案。因標準制定之層次讀取驗證檔。

每一個驗證條件式就指定一個 OID 碼 ( 就是一個驗證條件式一個檔案 ) 。

Page 31: SCHEMATRON 技術說明

基本說明 - 2

在實作指引標準書中

驗證檔案

<ClinicalDocument xmlns='urn:hl7-org:v3'> … <templateId extension='IMPL_CDAR2_LEVEL1' root='2.16.840.1.113883.10.1'/> <templateId extension=‘IMPL_CDAR2_LEVEL2’ root=‘2.16.840.1.113883.10.2’/> … …</ ClinicalDocument>

(此為 CCD之驗證檔 )

Page 32: SCHEMATRON 技術說明

驗證範例一 <!-- 驗證元素 --> <sch:pattern name="ClinicalDocument" id="ClinicalDocument"> <sch:p> 驗證是否為 CDA R2 之臨床文件 </sch:p> <sch:rule id="cda-root" context="/*"> <sch:assert test="self::cda:ClinicalDocument"> 錯誤:出院病歷摘要必須要有於 urn:hl7-org-v3 命名空間的 ClinicalDocument 元素。 </sch:assert> </sch:rule> </sch:pattern>

測此文件是否以ClinicalDocument 為根元素部分內容

此部分在實作指引此部分在實作指引標準書中屬一般限標準書中屬一般限制式制式

Page 33: SCHEMATRON 技術說明

驗證範例二 <!-- 驗證屬性值是否為某個值 --> <sch:pattern name="ClinicalDocument_typeId" id="ClinicalDocument_typeId"> <sch:rule id='cda-typeid' context="/cda:ClinicalDocument/cda:typeId"> <sch:assert id='typeId-extension' diagnostics='L1-1' test='@extension = "POCD_HD000040"'/> </sch:rule> </sch:pattern> <sch:diagnostic id="L1-1"> 錯誤: typeId 元素中 extension 屬性必須是POCD_HD000040 </sch:diagnostic>

部分內容

實作指引標準書之內容

驗證測試條件錯誤之詳細訊息內容(可由實作指引書複

製)

Page 34: SCHEMATRON 技術說明

驗證範例三 <!-- 驗證屬性值是否符合編碼規範 以 voc.xml 來驗證之。 --> <sch:pattern name="ClinicalDocument_code" id="ClinicalDocument_code"> <sch:rule id="cda-code" context="/cda:ClinicalDocument/cda:code"> <sch:assert diagnostics='L1-7‘test='document("voc.xml")/systems/system[@codeSystemName="LOINC"]/code[@value = current()/@code]'> /ClinicalDocument/code/@code 的值需來自 LOINC 適當之編碼。 </sch:assert>

Code Set 對照表

部分內容

Page 35: SCHEMATRON 技術說明

實務做法純以 XSLT技術,將所有驗證條件式寫在一個 SCH檔案中。可參考 CRS (Care Record Summary) 範本。

採 HL7 Template技術架構,為每一個 Template 建立一個 SCH 檔案。可參考 CCD (Continuity of Care Document) 範例。

Page 36: SCHEMATRON 技術說明

CRS 範例說明

Page 37: SCHEMATRON 技術說明

CRS 範例說明 - PHASE

Page 38: SCHEMATRON 技術說明

CRS 範例說明 - PATTERM

Page 39: SCHEMATRON 技術說明

CRS 範例說明 - RULE

Page 40: SCHEMATRON 技術說明

CRS 範例說明 - DIAGNOSTICS

Page 41: SCHEMATRON 技術說明

CCD 範例說明

Page 42: SCHEMATRON 技術說明

補充說明 -TEMPLATE

Level 1

Level 2

Level 3

Page 43: SCHEMATRON 技術說明

CCD 範例說明 – 主檔

Page 44: SCHEMATRON 技術說明

CCD 範例說明 – ROOT

SCHENT

Page 45: SCHEMATRON 技術說明

CCD 範例說明 – TEMPLATEID

Page 46: SCHEMATRON 技術說明

工具使用

編輯階段驗證階段

Page 47: SCHEMATRON 技術說明

編輯階段 Schematron 符合 XML 規範,任何編輯器皆可編輯。但就方便性而言,應慎選 XML 編輯器。

本教材利用 XMLBlueprint 。

Page 48: SCHEMATRON 技術說明
Page 49: SCHEMATRON 技術說明

目前僅支援 ISO 版,所以, Namespace 須為: http://purl.oclc.org/dsdl/schematron

Page 50: SCHEMATRON 技術說明
Page 51: SCHEMATRON 技術說明

1. 此驗證是指針對此 SCH 檔案是否符合SCHEMATRON 規範的驗證,而非CDA R2 XML 檔案之驗證。

2. 目前支援之驗證工具有Jing 、 Libxml2 、 MSV 。

Page 52: SCHEMATRON 技術說明

驗證階段 驗證方式有

透過有支援 Schematron 的 XML 編輯器採用 Schematron Validator ( 目前不支援中文 ) XSLT設計模式 ( 有點複雜。抱歉!目前我尚未測試成

功 )

Page 53: SCHEMATRON 技術說明

使用編輯器驗證 - XMLBLUEPRINT

Page 54: SCHEMATRON 技術說明

使用編輯器驗證 – OXYGEN XML