요약 : Office Open XML 형식 및 HL7 CDA 를 사용하여 의료 데이터를 업계표준 형식에서 안전하게 송수신합니다.
Ted Pattison, Chris Predeek, Ted
Pattison Group
Chris Predeek,
Ted Pattison Group
Wouter van Vugt,
Info Support
2007 년 10 월
적용 대상 : 2007 Microsoft Office system
예제 파일의 다운로드 :2007
Office Sample: Using the Office Open XML Formats to Support Electronic
Health Records Portability and Health Industry Standards (영어)
목차
개요
환자 및 소비자가 전자 의료 기록을 안전하게 송수신하는 것은 전세계 의료 업계의 큰
과제입니다. 여기에서는 안전한 데이터 교환을 위해서, Office Open XML 형식 및 사용자 지정 XML
형식 사용 방법을 학습합니다. 여기서 채택하는 시나리오에서는 HL7 (Health Level Seven)의 CDA
(Clinical Document Architecture)를 사용하여 전자 의료 기록을 업계표준 형식으로 기술하는 방법을
보여줍니다. 또, 여러 의료 종사자간의 이식성으로, Office Open XML 형식에 근거하여 보안 보호된 문서에 데이터를 보관하는 방법도 보여줍니다.
고객 시나리오
최근 새롭게 이사해 온 A씨는 새로운 주치의를 신청하려고 합니다. 선택한 의료 기관은
Contoso 병원 입니다. Contoso 는 의료 분야 뿐만이 아니라, 기술 채택과
고객 서비스도 뛰어난 기관입니다. 내원할 가능성이 있는 고객은 단순한 양식에 기입하는 것만으로, 안전하게 온라인으로
등록할 수 있고, 현재 치료중 환자는 자신의 진료 기록의 복사를 안전하게 다운로드할 수 있습니다. A 씨는 등록 양식에
정보를 기입합니다. 기입한 정보는 자동적으로 추출되어 Contoso 의 시스템에 보관되고 처음 환자로서 내원했을
때에 확인됩니다. A 씨가 몇 년동안 Contoso 로 일상 진료를 받을 때에 Contoso 의 전자 의료 기록
(EHR: Electronic Health Record) 시스템에 안전하게 보관되어 진료 기록이 다수 축적됩니다.
종이 기반의 시스템으로 진료 기록을 보관 유지하는 다른 많은 의료 기관과 달리, Contoso에서는 환자가
업계표준 형식을 사용하여 자신의 진료 기록을 외부로 내보낼 수 있는 EHR 시스템에 투자합니다. 진료 기록에는 HL7
CDA 가 사용되어 Office Open XML 형식에 근거하여 디지털 서명 된 문서에 의해서 비주얼인 표시와 안전한 전송이
가능합니다. HL7 CDA 형식의 진료 기록이 가지는 풍부한 정보와 의미 내용을 완전하게 보관 유지하면서, 환자는 표시 및
인쇄에 적절한 풍부한 형식에서 이 문서에 액세스 할 수 있습니다.
기술적인 관점에서 보면, 이러한 진료 기록의 데이터는 Contoso 의 EHR 시스템에 보관됩니다. A 씨와 같은
환자가 안전한 웹 사이트에서 진료 기록을 다운로드하기 위한 링크를 클릭 하면, HL7 CDA 가 동적으로
(필요에 따라서 여러 데이터 소스 및 시스템에서) 접근되어 문서에 포함되어 환자의 데스크톱에 다운로드됩니다.
A 씨는 Microsoft Office Word 2007 을 사용하여, 자신의 진료 기록을 표시하여, 필요에 따라서
저장용으로 인쇄할 수 있습니다. 또, 문서를 전자적으로 백업하고, 다른 중요한 기록과 함께 보관할 수도 있습니다. 자신의
진료 기록을 완전하게 관리할 수 있는 것으로, A 씨는 가족 또는 다른 의사나 조직등과 기록을 공유할 수도 있습니다.
의사의 컴퓨터에 저장된 의료 기록은 복사본이기 때문에, 의료 기록을 중앙에서 받기 전에 설정된 디지털 서명이 적용되어 있어
수정 혹은 위조할 수 없습니다.. 이런 작업을 하면, Contoso 의 웹 사이트에서 다운로드되기
전에 의료 기록에 적용되었던 디지털 서명이 깨집니다.
A 씨가 자신의 진료 기록을 다른 조직과 공유하는 경우, 시스템은 문서가 위조되지 않고 온전한 지와 문서가 다운로드
되는 시점에 정확한 정보가 HL7CDA 문서에 포함되어 있는 검증할 수 있습니다.
A 씨는 온라인 개인 건강 기록 (PHR) 서비스에 등록하기로 결정했습니다. 이 서비스를 선택한 것은
Office Open XML 형식 기반 문서에 임베디드 형태로 HL7 CDA 형식의 진료 기록을 받을 수 있기
때문입니다. 이 기능을 이용하면, A 씨의 진료 기록이 Contoso에서 엄밀하게 완전한 형태로 전송 되기 위해, 정보를
재입력하는 시간이 들지 않고, 입력 오류의 가능성도 회피할 수 있습니다. PHR 서비스에 의해, A 씨는 자신의 진료
기록을 개인적으로 열람하고, 자신의 건강을 보다 효과적 및 적극적으로 관리할 수 있습니다. 업로딩 프로세스 내에 문서는
검사되어 디지털 서명이 확인됩니다. 문서가 PHR 서비스에 대한 기존의 조직 (Contoso 등)에 의해 디지털 서명
되어, 그 디지털 서명이 올바르게 확인되면, HL7 CDA 를 추출해 PHR 서비스 시스템에 보관 할 수 있습니다. 디지털
서명에 의해서 올바르게 확인되는 것으로, PHR 서비스에서는 이러한 진료 기록이 Contoso 에 의해서 제공된 것으로,
변경되지 않은 높은 안정성으로 확인할 수 있습니다.
코드 개요
이 문서에는 이 시나리오의 샘플 구현을 포함한 Microsoft .NET Framework 기반의 솔루션이 부속되어
있습니다. 자세한 내용은 「2007
Office Sample: Using the Office Open XML Formats to Support
Electronic Health Records Portability and Health Industry Standards
(영어)」를 참조해 주세요.
두개의 웹 사이트가 있습니다. 하나는 의사 대상이고 다른 하나는 PHR 서비스 대상입니다. 당신이
A 씨라고 가정하면, 실제로 Contoso에 등록하여 자신의 진료 기록을 다운로드 할 수 있습니다. 이러한 기록은
문서의 유효성 검사를 보장하기 위해, 의사에 의해서 서명 됩니다. 서명의 유효성 검사는 Office Word
2007 을 사용하여 간단하게 확인할 수 있습니다. 확인 후, 기록을 온라인 PHR 서비스에 송신 할 수 있습니다.
HL7 CDA 를 보관하는 방법은 경우에 의해 다릅니다. 예를 들어, 문서를 분해해 진료 기록의 각 요소를
데이터베이스에 보관 할 수 있습니다. 또는 XML 문서 전체를 보관 해, 필요에 따라서 요소를 추출할 수도 있습니다. 이
예에서는 HL7 CDA 가 그대로 보관 되어 HL7 의 CDA 표준으로 제공되는 표준 XSLT 를 사용하여 내용이
표시되도록 됩니다. 이 시나리오로 사용되는 샘플데이터 및 샘플코드는 HL7 표준에 포함된 샘플 CDA 문서에서 얻을 수
있습니다.
표준 개요
여기에서는 이 솔루션의 구현에 사용되는 표준에 대해 설명합니다.
Office Open XML 파일 형식
2007 Microsoft Office system 는 문서, 스프레드시트 및 프레젠테이션에 대해,
Office Open XML 형식 라는 새로운 마크업 언어 표준에 기반합니다. Office Open XML 형식
표준의 자세한 내용은 「TC45
- Office Open XML Formats (영어)」를 참조해 주세요. 또, 이 파일 형식은 사양과
라이선스 다운로드 에 근거하여 XML
Paper Specification (XPS) 가 사용 됩니다. Office Open XML 형식 표준에서는 문서를 사용하여 실행되는 많은 다른 작업을 간단하게 하도록 디자인 된 문서 마크 업 표준이
제공되어 문서내에서 비즈니스 관련 데이터를 표현하기 위한 모델도 제공됩니다. 이 표준에는 장해를 가지는
사용자에서도 문서를 이용할 수 있도록 하는 사용자 보조 지원 등 다양한 기능이 포함되어 있습니다. Office
Open XML 형식은 복수의 상용 및 오픈 소스의 생산성 제품군으로 구현됩니다. Office Open XML
형식을 문서에 사용자 지정 XML 데이터를 묻는 기능과 조합하는 것으로, 문서를 의료 업계에서 이용할 수 있도록
하는 좋은 기회가 생깁니다. 표준화 프로세스에 의해, 문서의 사용 기간 전체에 걸쳐서 투명성과 호환성이
보장됩니다.
의료 업계의 조직에서는 환자의 진료기록카드, 퇴원시의 정보, 소개장, 처방전 등 많은 임상 문서를 장기간에
걸쳐서 생성 및 관리해야 합니다. 진료 기록을 전자 형식에서 관리하기 위한 어떠한 기술도, 지속적이어야 합니다.
도입 후 곧바로 사용 중 중지해지는 기술에서는 정보에의 액세스에 관해서 문제가 생깁니다. Office Open XML
형식은 국제표준입니다. 그 때문에 문서의 보관 유지에 대해의 과제나, 문서의 기술에 사용되는 형식등의 문제가
줄어듭니다. Office Open XML 형식 표준과 거기에 부수하는 사양을 구조화 정보에 대한 HL7 CDA 등의
업계표준과 조합해 사용하는 것으로, 누구나가 그러한 진료 기록의 지속적인 표현을 만들 수 있습니다. 이러한 표준에
의해, 병원이나 PHR 서비스등의 조직간에 상호 운용이 가능하게 되는 것과 동시에 소비자가 자신의 진료 기록을
관리하는데 적극적인 역할을 연기할 수 있습니다.
환자 기록이나 연구 결과 등의 기밀성의 높은 데이터를 처리 및 보관 할 때 한가지 중요한 측면은 데이터가
변경되지 않은 것을 보장하는 것입니다. 부정한 변경의 검색을 간단하게 하기 위해서, Office Open
XML 형식에서는 문서의 내용에 서명하기 위한 정교한 구조를 준비합니다. X509 증명서 등의 업계표준을
사용하는지, 또는 사용자 지정 구현을 사용할 수 있습니다.
Office Open XML 형식에서는 코어의 문서 파트로서 업계표준을 사용해, 거기에 기초를 두어 문서
생성 용무의 풍부한 환경을 구축합니다. 이러한 기술은 어느 플랫폼으로도 사용할 수 있습니다. 문서는 ZIP
컨테이너내에 어셈블(assemble) 된 XML 파일에서 구성됩니다. 이 XML 데이터의 대부분은 3 개의 마크업
언어의 하나로 표현됩니다. 이것들 각 언어의 이름은 단순한 패턴에 따라서 있습니다.
WordprocessingML은 워드프로세서 문서의 내용을 정의합니다. SpreadsheetML은
스프레드시트 문서의 내용을 정의하고PresentationML 은 프레젠테이션 내용을 정의합니다. 그리고, 그림, 그래프, 표 등을 정의하기 위한 공용 언어를 제공하는 DrawingML 등의 지원 언어가
있습니다.
그림 1. Open XML 표준의 메인 구성요소
문서의 내용을 정의하기 위한 구조를 제공하고, Office Open XML 형식에서는 문서내에서 비즈니스
데이터를 표현하기 위한 몇가지의 기술을 제공합니다. 이 형식과 비즈니스 데이터 의 편성에 의해서, 뛰어난 고객
솔루션을 구현 할 수 있습니다. Office Open XML 형식 이전에는 일반적으로 비즈니스 관련 데이터는
일반적인 문서 컨텐츠로서 보관 되어
있었습니다. 환자 번호나 처방전등의 데이터를 취득하기 위한 표준적인 접근
방식은 문서를 프로그램으로 열려, 해당 데이터를 나타내는 최초의 이탤릭 텍스트를 찾아내는 등의 방법이었습니다. 이 접근 방식에는 분명한 결점이 있습니다. 문서의 형식을 정돈하거나 같은 데이터에 새로운
템플릿을 적용하거나 하면, 코드가 망가져 그것을 개정할 필요가 생깁니다. Office Open XML 형식을
사용하면, 굵은 글씨나 이탤릭제등의 구조화 비즈니스 데이터가 가지는 서식을 정의하는 레퍼런스 스키마를 조인 할 수
있습니다. 환자 번호의 서식에 근거하여 액세스하는 대신에 환자 번호에 직접 액세스 할 수 있습니다. 추가적인 이점의
하나는 데이터를 메인 문서 expression body 의 외부에서 보관 유지 하기 때문에, 문서 추출이나 삽입
시에 간단하게 액세스 할 수 있는 것입니다.
그림 2. 서식 지정에 의한 데이터 특정과 컨텐츠 컨트롤에 의한 데이터 특정
HL7 (Health Level Seven) CDA (Clinical
Document Architecture)
HL7 (Health Level Seven)는 의료 정보 통신 기술의 분야에서 전 세계적으로 활동하고
있는 많은 표준 개발 조직 (SDO: Standards Development Organization)의 하나입니다. HL7 는 1980 년대에 임상 통합에 관한 표준의 책정 작업을 시작 했습니다. 오늘로는
의료 관련의
표준 책정으로 가장 성공한 조직의 하나 입니다. HL7 는 전세계로 가장 넓게 사용되고 있는 임상
정보교환 표준의 몇가지를 보관 유지합니다. 구체적으로는 HL7 Messaging Version 2, HL7
Version 3 및 CDA (Clinical Document Architecture)입니다.
HL7 CDA 는 XML 에 근거하는 문서 마크 업 표준입니다. HL7 Version 3 의 RIM
(Reference Information Model)에서는 교환의 목적을 위해서, 문서내의 각 데이터 요소의
구조와 의미의 양쪽 모두를 지정했습니다. HL7 CDA 는 주로, 퇴원시의 정보, 소개장, 받아쓰기 리포트 등의
임상 문서에 사용됩니다.
CDA 가 2005 년에 ANSI 표준으로서 승인되고 나서, 그 개발에 종사하는 HL7 위원회는 일반적으로
사용되는 임상 문서에 대한 재사용 가능한 템플릿 및 제약을 생성하는 것에 초점을 맞추어 왔습니다. 이 작업의
최초 성과가 이 문서에 부속의 샘플코드로 환자의 개인 건강 기록을 나타내기 위해서 사용한 CCD
(Continuity of Care Document)입니다.
HL7, CDA 및 CCD 의 자세한 내용은 Health
Level Seven (영어) 의 웹 사이트를 참조해 주세요.
이 새로운 파일 형식 컨테이너는 단순한 파트 기반의 압축 ZIP 파일 형식 사양에 근거합니다. 새로운
Office Open XML 형식의 코어가 되는 것은 XML 레퍼런스 스키마와 ZIP 컨테이너의 사용입니다. 각 파일에는
다양한 수의 파트의 집합이 포함되어 이 집합이 문서를 정의합니다.
문서의 각 파트는 업계표준의 ZIP 형식을 사용하여 컨테이너파일 또는 패키지에 보관됩니다. 대부분의 파트는 XML
파일로, 응용 프로그램 데이터를 나타내는 것도 있으면, 메타데이터나 사용자 데이터를 나타내는 것까지 있어, 모두
컨테이너파일 안에 저장 됩니다. 이미지를 나타내는 이진 파일이나 문서의 OLE 개체등의 XML 이 아닌 파트도,
컨테이너 패키지 내에 저장 됩니다. 또, 파트간의 관계를 지정하는 관계 파트도 있어, 이 디자인에 의해서 Office 파일의
구조가 형성됩니다. 파트가 파일의 컨텐츠를 구성해, 컨텐츠의 각부가 어떻게 협조해 동작하는지를 관계가 나타냅니다.
새로운 파일 형식의 내부를 보기 위한 간단한 방법은 Word 2007 의 문서를 새로운 기본값 형식에서 저장하고,
그 파일의 확장자(extension)를 .zip 로 변경하는 것입니다. 파일을 더블 클릭하여 열고, 그 내용을 표시합니다.
메모
: |
|
Office Open XML 형식 기반 파일의 구성을 이해하려면, 그 각 파트를 추출해야
합니다. 파일을 열려면, WinZip 등의 ZIP 응용 프로그램이 컴퓨터에 설치되어 있어야 합니다.
.
|
Word XML 형식의 파일을 Word 2007에서 열려면
-
파일과 그 파트를 저장하기 위한 일시 폴더를 생성합니다.
-
(텍스트나 이미지 등을 포함한다) Word 2007 문서를 .docx 파일로 저장합니다.
-
파일 이름의 말미에 확장자(extension) .zip 를 추가합니다.
-
파일을 더블 클릭합니다. ZIP 응용 프로그램으로 파일이 열립니다. 파일에 포함되어 있는 문서 파트가
표시됩니다.
-
생성한 폴더에 파트를 추출합니다.
그림 3. 이미지 및 삽입 개체를 포함한 Word 2007 문서의 계층적 파일구조
Open Packaging Conventions 사양은 새로운 파일 형식을 사용한 Word 2007 문서의 구조를
정의합니다. Open Packaging Conventions 의 자세한 내용은 「사양과
라이선스 다운로드」를 참조해 주세요. 이것은 XML
Paper Specification 가 사용 됩니다. 또, 최근 출시 된 Java 기반의 버전도
있습니다. OpenXML4J 는 Office Open XML (ECMA-376) 및 OPC 기반의 문서 (예를 들어,
Microsoft Office Word 2007, Microsoft Office Excel 2007 및 Microsoft
Office PowerPoint 2007 문서)의 생성 및 조작 전용의 Java 라이브러리입니다.
이 문서에서는 샘플 문서로서 "Hello World" 의 예를 사용합니다.
예제에서는 Packaging
API 를 사용하여 XML 와 ZIP 의 하위수준의 세부 사항을 처리합니다. Hello World 문서에는 3
개의 파트가 포함되어 그 중의 두개만 수동으로 생성합니다. 먼저,"Hello World" 라는 텍스트를 보관하는 문서
파트를 생성합니다. WordprocessingML에서는 다른 문서 파트를 사용하여 이 데이터를 보관합니다. 다음에 관계
파트를 생성하여, 데이터를 포함한 문서 파트와 패키지와의 사이의 관계를 생성합니다. 마지막으로 Packaging API에서 컨텐츠 유형의 목록을 생성합니다. 이 컨텐츠 유형 목록은 패키지내의 각 문서 파트의 내용을 식별합니다. Packaging
API 는 ZIP 의 세부 사항을 추상화할 뿐이므로, System.Xml 을 사용하여, "Hello
World" 텍스트를 형성하는 XML 마크 업을 수동으로 생성해야 합니다.
그림 4. "Hello World" 텍스트의 XML 마크 업예
이후의 섹션에서는 Office Open XML 형식 아키텍처의 주요한 구성요소에 대해 설명합니다.
컨텐츠 유형
최초의 중요한 개념은 컨텐츠 유형 목록입니다. 문서 컨테이너의 루트에는 [Content_Types].xml
라는 이름의 문서 파트가 있습니다. 이 문서 파트는 고유하게 패키지내의 다른 모든 파트에 대한 컨텐츠 유형
문자열의 사전을 보관합니다. 컨텐츠 유형은 파트내에 포함된 컨텐츠의 종류를 사용자에 보이는 것입니다. 이진
데이터와 XML 데이터가 구별됩니다만, 패키지내의 파트의 대부분은 XML 를 사용하여 정의되기 때문에 XML
데이터는 한층 더 복수의 유형에 분류됩니다. 컨텐츠 유형은 2 개의 모델을 사용하여 정의할 수 있습니다. 특정의 파일
이름의 확장자(extension)에 기본값의 컨텐츠 유형을 관련하는지 또는 컨테이너내의 패키지 파트의 위치에
근거하여 이 기본값의 컨텐츠 유형을 변경할 수 있습니다. 다음의 코드 예는 단순한 컨텐츠 유형 목록을 보여줍니다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
<Default
Extension="rels"
ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
<Default
Extension="xml"
ContentType="application/xml"/>
<Override
PartName="/word/document.xml"
ContentType="application/vnd.openxmlformats-…
…officedocument.wordprocessingml.document.main+xml"/>
</Types>
관계
ZIP 컨테이너내에서는 확장자(extension) .rels 를 가지는 다른 XML 파일이 _rels 라는
폴더에 항상 보관됩니다. 이러한 관계 파트는 문서의 각종 파트를 서로 관련 짓습니다. 패키지 파트간의 관계를 각 파트
그 자체에 인라인으로 보관하는 대신에 관계 파트 모델이 사용 됩니다. 어느 문서 파트도, 관계를 사용하여 다른
임의의 파트와 관련지을 수 있습니다. 이것에는 순환적인 관계도 포함됩니다. 관계 모델에 의해, 패키지에서 특정의
요소를 참조할 필요가 있는 응용 프로그램의 작업부하가 크게 경감합니다. 머리글을 찾아내기 위해서 큰 문서의 내용
전체를 분석 할 필요는 없습니다. 그 대신해, 관계 파트에 의해서 이 정보가 제공됩니다. 이것은 Office Open
XML 형식 기반 패키지의 사용에 관한 매우 중요한 측면의 1 개입니다. 관계 파트에 의해, 패키지 내에서의
임의의 파트의 위치를 각 사용자의 기호에 근거하여 변경할 수 있습니다. 패키지내의 경로는 정적이지는 않습니다. 문서의
버전 마다, 또는 문서를 다른 생산성 응용 프로그램으로 변경했을 경우에 경로는 변화할 가능성이 있습니다. 항상,
관계를 사용하여 작업하는 것이 필요합니다.
관계에는 4 개의 데이터가 보관됩니다. 각 관계에는 고유의 관계 ID 가 사용됩니다. 이 ID 는 관계의
각 소스에 대해 고유해야 합니다. 다음에 관계 유형을 적용합니다. 이것은 패키지 내에서 문서 파트를
검색하기 위해서 사용할 수 있는 제 2 의 모델입니다. WordprocessingML 기반의 문서의 경우, 머리글과
바닥글은 관계 유형에 근거하여 배포 됩니다. 삽입 이미지는 관계 ID 를 사용하여 검색되는 문서 파트의 예입니다.
관계에는 그것이 지시하는 장소의 대상 URI 가 보관됩니다. 이 URI 는 패키지의 내부에서도 외부에서도
괜찮습니다. 이것은 다음의 코드 예와 같이, 관계 마크 업내의 플래그에 의해서 나타납니다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships
xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1"
Type="http://schemas.openxmlformats.org/officeDocument/
2006/relationships/extended-properties"
Target="docProps/app.xml"/>
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/
2006/relationships/officeDocument"
Target="word/document.xml"/>
</Relationships>
Open XML 사양에서는 두가지 유형의 관계가 정의되어 이것들은 항상 확장자(extension) .rels
의 파일에 보관됩니다. 소스 파트가 정의된 관계와 정의되어 있지 않은 관계가 있습니다.
소스 파트의 정의되어 있지 않은 관계는 패키지 수준의 관계입니다. 패키지 전체를 관계의 소스라고 생각할 수
있습니다. 패키지 수준의 관계는 패키지내의 검색을 시작하다 때에 사용됩니다. 이러한 관계는 항상 특정의 관계
파일에 보관됩니다. 구체적으로는 _rels/.rels 파일입니다. 이 장소는 변경할 수 없습니다. Office
Open XML 형식 기반 문서의 대부분에는 적어도 3 개의 패키지 수준의 관계가 포함되어 있습니다. 코어
속성용으로 1 , 응용 프로그램 속성용으로 1 및 시작 파트로 불리는 패키지내의 특수한 파트의 검색용으로 1
입니다. 이 관계는 문서의 분석을 시작하는 장소를 보이는 특정 유형을 가지고 있습니다. 이 관계는 시작 파트로
불리는 패키지 파트를 지시합니다. 시작 파트의 검색에 사용되는 관계 유형을 다음에 보여줍니다.
http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument
시작 파트는 일반적으로, 스타일이나 테마 등 다른 문서 컨텐츠를 포함하는 파트를 보이는 관계를
정의합니다. 이 관계는 소스 파트내에서 정의되어 아이템 수준의 관계라고 생각할 수 있습니다. 이러한 아이템
수준의 관계는 소스 파트의 장소를 기준으로 한 _rels 서브 폴더에 보관됩니다. 각 관계 파일의 이름은 관계
붙일 수 있는 파트의 완전한 파일 이름에 확장자(extension) .rels 를 추가한 것이 됩니다. 예를 들어,
document.xml 라는 파트의 관계 파트는 document.xml.rels 라는 이름이 됩니다.
그림 5. 패키지 관계와 문서 파트
Open Packaging Conventions 사양 이용
Open Packaging Conventions에서는 파일구조의 정의에 같은 개념을 사용합니다. Package
클래스는 Open XML 패키지 전체를 정의합니다. PackageRelationship은 하나의
관계를 정의합니다. PackagePart 클래스는 패키지내의 패키지 파트를 캡슐화합니다.
샘플 문서를 생성 하려면, Packaging API 의 3 행의 코드와 "Hello World" 텍스트를 표시하는 WordprocessingML 마크 업을 생성하기 위한 몇가지 코드가 필요합니다.
패키지 생성
최초의 순서는 패키지 생성입니다. 이것에는 Package 클래스와 정적인 Open
메서드를 사용합니다. 이 메서드는 새로운 Package 인스턴스를 반환합니다.
class Program
{
static void Main()
{
using (Package package = Package.Open("Sample.docx", FileMode.Create))
{
// The rest of the code goes here.
}
}
}
메인 문서 파트 생성
패키지를 생성 한 후, 다음의 순서는 메인 문서 파트의 생성입니다. 문서 파트는 열려 있는 패키지의 CreatePart
메서드를 호출하는 것으로 생성합니다. 파트를 생성 하려면, 먼저, 새로운 파트를 보관하기 위한 패키지내의
고유의 장소를 지정합니다. 이 장소는 URI 를 사용하여 특정합니다. 장소가 이미 사용중인 경우는 예외가 예외로
처리됩니다. CreatePart 메서드의 제 2 의 매개 변수는 새로운 파트의 컨텐츠 유형
정의입니다. 이것에 의해, 패키지내의 [Content_Types].xml 목록이 자동적으로 업데이트 됩니다. 이것을
수동으로 실시할 필요는 없습니다.
PackagePart mainPart = package.CreatePart(
new Uri("/document.xml", UriKind.Relative),
"application/vnd.openxmlformats-
officedocument.wordprocessingml.document.main+xml");
관계 생성
마지막 순서는 메인 패키지 파트를 지시하는 관의 생성입니다. 이 관계는 소스 개체의 CreateRelationship
메서드를 호출하는 것으로 생성합니다. 소스가 패키지인 경우는 package.CreateRelationship을 호출합니다. 소스가 다른 문서 파트인 경우는
mainPart.CreateRelationship을 호출합니다. 예를 들어, mainPart 에 다른 자식 파트와의 관계가 필요하다고 합니다. 지정하는
데이터는 3 개 있습니다. 우선, URI 값을 사용하여, 상대 파트를 지정합니다. 다음에 이 상대 파트가 패키지의
내부에 있는지 (TargetMode.Internal), 또는 외부에 있는지 (TargetMode.External)을
지정합니다. 두번째의 대상 모드는 하이퍼 링크나 다른 외부 링크에 대해서 사용합니다. 또한 마지막 매개
변수로서 관계 유형을 지정해야 합니다. 다음에 이 관계 유형을 사용하여 패키지 안을 참조할 수 있습니다.
PackageRelationship mainRelationship = package.CreateRelationship(
mainPart.Uri,
TargetMode.Internal,
"http://schemas.openxmlformats.org/officeDocument/2006/
relationships/officeDocument");
System.Xml 사용
패키지의 세부 사항을 처리한 다음은 다음의 순서로서 메인 문서 파트에 컨텐츠를 보관합니다. Hello
World 의 예에는 기본적인 계층이 포함되어 있습니다. <document> 태그가 루트입니다. 다음에 문서의 본문을
포함한 <body> 이 있습니다. 본문은 단락이나 표등의 차단 수준의 내용을 사용하여 구성됩니다. 단락에는
<r>이 나타나는 런이 포함됩니다. 런은<t> 에서 나타나는 텍스트편에 분할됩니다. 이 모델을 사용하는 이유는
런(run)이 서식 설정을 적용할 수 있는 최저 수준의 요소이기 때문입니다. 런에는 개행 코드 (<cr />)등의 인쇄되지
않는 문자도 포함할 수 있습니다.
Open Packaging Conventions API에서는 Office Open XML 형식의 XML 의
자세한 것은 구현되지 않습니다. 파트의 컨텐츠는 Stream 개체로서 제공됩니다. XmlWriter
인스턴스를 사용하여 이 스트림에 XML 를 쓸 수 있습니다. 여기서, 중요한 고려사항이 1 개 있습니다. 문서
텍스트를 구성하는 노드는 모두 WordprocessingML 네임 스페이스에 존재해야 합니다.
http://schemas.openxmlformats.org/wordprocessingml/2006/main
다음의 코드예를 사용하여 하나의 단락을 포함한 기본적인 문서를 생성할 수 있습니다.
string xmlNamespace = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
using (XmlWriter writer = XmlWriter.Create(
mainPart.GetStream(FileMode.Create, FileAccess.ReadWrite))) {
writer.WriteStartDocument();
writer.WriteStartElement("w", "document", xmlNamespace);
writer.WriteStartElement("w", "body", xmlNamespace);
writer.WriteStartElement("w", "p", xmlNamespace);
writer.WriteStartElement("w", "r", xmlNamespace);
writer.WriteStartElement("w", "t", xmlNamespace);
writer.WriteString("Hello World");
writer.WriteEndDocument();
}
System.Xml 의 대체 방법
여기에서는 코드를 사용하지 않고 문서를 생성하기 위한 대체 방법에 대해 설명합니다.
XSLT 구현
XML 관련 코드를 사용하여 문서 전체를 생성하는 것은 귀찮은 프로세스입니다. 극히 단순한 문서를 생성하는 경우에도
많은 코드를 보관 유지해야 합니다. 100% 코드를 사용하여 큰 문서를 생성하는 대신에 두가지 주요한 솔루션을
이용해 곤란을 줄일 수 있습니다. 문서 템플릿과 XSLT 파일, 또는 그것들 2 개의 임의의 편성을 사용할 수
있습니다. 문서 템플릿을 사용하면, 문서의 서식 부분을 템플릿 안의 메인 코드베이스의
외부에 유지할 수 있기 위해,
작업부하를 크게 줄일 수 있습니다. 이러한 템플릿은 보다 간단하게 편집할 수 있어 직접 서식을 변경할 수 있습니다. 다만,
데이터를 포함한 영역의 특정이 어렵다는 문제가 있습니다. 따라서 사용할 수 있는 기술을 이 문서의 뒷부분에서 설명합니다.
먼저, XSLT 파일을 자세히 조사해야 합니다.
단순한 XSLT 파일의 예는 다음과 같이 됩니다.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<w:document
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p>
<w:r>
<w:t>Hello World!</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
</xsl:template>
</xsl:stylesheet>
XSLT 파일 안의 XML 데이터는 XML 형식을 보관 유지 하기 위해, XSLT 파일을 변경하는 것이
간단합니다. XSLT 파일은 텍스트 파일이므로, 컴파일 된 코드를 다시 테스트 할 필요는 없습니다. 이것에 의해, 개발 및 보수의
프로세스가 간단하게 됩니다.
XSLT 파일로의 작업에 대해는 두 가지 중요한 고려사항이 있습니다. 첫번째는 코드베이스의 접근 방식에 비해 표현력이
부족한 것입니다. 많은 XSLT 엔진에서는 XSLT 파일을 사용자 지정 개체로 확장하고, XSLT 사양에서는 정의되지 않은
고급 기능을 제공할 수 있도록 됩니다. .NET Framework에서 사용되고 있는 엔진에서는 확장 개체 및 사용자 지정 매개 변수를 사용할 수
있습니다.
2 번째의 고려사항은 XSLT 엔진의 출력기능에 관련합니다. Open XML 패키지는 다수의 XML 파일에서
구성되어 그 대부분은 다양한 속성을 통해서 서로 관련합니다. XSLT 1.0 사양에서는 XSLT 마다 하나의 출력 파일 밖에 허가 되지 않습니다. XSLT 2.0 사양에서는
하나의 XSLT 파일을 사용하여 복수의 파일을 생성할 수
있지만, XSLT 2.0 을 구현하는 엔진은 아직 일반적이지는 않습니다.
Open XML SDK 사용
Open XML 솔루션으로 기술하여 보수할 필요가 있는 코드량을 줄이는 하나의 접근 방식은 2007 년
6 월에 처음으로 출시된 Microsoft SDK for Open XML Formats 를 사용하는 것입니다. 이 API에서는 문서의 시작 파트나 다른
파트 등의 개념이 높은 수준으로 추상화 되기 위해, 관계나 컨텐츠 유형을 코드내에서 명시적으로 관리할 필요가 없습니다.
이 문서의 집필 시점에서는 이 API 의 최종 버전의 출시 일이나 제공 기능에 대해는 발표되지
않았습니다. Microsoft에서는 로드맵의 책정에 유용하게 쓰기 위해서, 「Open
XML Format SDK (영어)」에 있는 MSDN 지원 포럼을 통해서, 새로운 API 에 대한 개발자
피드백을 모집합니다.
문서 구조 이해
단순한 환자 등록 양식에서는 일반적으로 두가지 수준의 컨텐츠가 정의됩니다. 첫번째 수준은 폼의 레이아웃과
기본적인 서식 설정에 의한 정의됩니다. 두번째 수준은 환자의 상세 정보나 보험 정보 등 각종의 정보에 대한 개체
틀입니다. 이러한 문서를 디지털 형식에서 취급할 때 어려운 점은 확실하고, 올바른 내용을 취득할 수 있는 방법으로
데이터에 액세스 하도록 프로그램을 생성하는 것입니다. 서식이 조금 변경되어 등록 양식 형태가 바뀌었다고 해서, 추출된
환자 이름이 "이름을 입력해 주세요" 라는 사태는 피해야 합니다.
Office Open XML 형식에서는 Microsoft ActiveX 와 같은 코드베이스의 솔루션에 의지하지 않고
문서내의 데이터의 접근성을 높이기 위해서, 다양한 기술이 도입됩니다. WordprocessingML 의 경우, 주요한
기술은 컨텐츠 컨트롤로, 이것은 "구조화 문서 태그"
라고도 불립니다. 이러한
구조화 문서 태그를 사용하여 일자등이 단순한 요소나 단락이나 페이지등이 복잡한 구조에 대한 개체 틀을 생성할 수 있습니다. 다음에
보이는 환자 등록 양식을 생각합니다. 이것은 의료 기관 (위의 시나리오의 Contoso 등)에 의해서 제공되어 거기에
속하는 많은 의사를 사용할 수 있는 일반 양식입니다.
그림 6. 환자 등록 양식 샘플
등록 양식 안에는 많은 데이터가 정의 됩니다. 단순한 텍스트, 일자, 선택 필드 등 다양한 종류의 데이터가 있는 것을
알 수 있습니다. 인쇄된 폼의 경우, 폼이 올바르게 기입된 것을 유효성 검사하는 것은 어렵습니다. 컨텐츠 컨트롤을 사용하면,
이러한 필드타이프 모두에 대해서, 삭제 금지나 내용 확인등의 추가 기능을 제공할 수 있습니다.
컨텐츠 컨트롤은 WordprocessingML 의 마크 업 요소의 1 개에 지나지 않기 때문에 데이터는 역시
WordprocessingML 마크 업내에 보관됩니다. 등록 양식의 데이터에 대해서 구축되는 사용자 지정 솔루션에서는 네이티브의
비즈니스 관련 폼 그대로 사용되는 경우와 비교해서, 이 데이터에의 액세스에 곤란을 따릅니다. 데이터와 서식의 분리를 간단하게
하기 위해서, 문서내에 몇가지의 XML 데이터 아일랜드를 생성하여, 그 데이터를 문서내의 컨텐츠 컨트롤에
바인드 할 수 있습니다.
환자 등록 양식에서는 이 데이터 바인드 테크노로지를 사용하여 사용자 지정 솔루션으로 데이터를 추출할 수 있도록
합니다. 이것에 의해, 환자 등록 양식을 의사의 웹 사이트에 업로딩 하고, 환자를 등록 생깁니다. 웹 사이트에서는 문서의
데이터 바인드에 의해서, 등록 양식의 데이터를 간단하게 사용할 수 있습니다. 문서에서의 XML 데이터가 처리되어
백 엔드의 데이터 저장소에 보관됩니다. 일반적으로, 이 컨텐츠 보관에는 데이터베이스 또는 EHR 시스템이 사용됩니다만,
이 시나리오에서는 단순하게 하기 위해서, 데이터를 XML 형식에서 보관 유지합니다. 새로운 환자를 확인하기 위해서, XSLT
에 의해서 등록의 세부 사항이 HTML 에 변환된 후, 의사의 웹 사이트에 표시됩니다.
그림 7. XSLT 를 사용하여 환자 데이터를 표시용으로 변환
이 시나리오에서는 Contoso 는 환자에 대해서 진료 기록을 HL7 CDA 형식에서 제공합니다. HL7
CDA 의 데이터의 일부는 환자 등록 양식에서 추출된 데이터로 구축됩니다. HL7 CDA 문서를 생성하기 위해서 필요한
것은 추출된 환자 데이터에 근거하는 XSLT 변환 뿐입니다.
그림 8. 하나의 XSLT 를 사용하여 환자 데이터를 HL7 형식으로 변환한다
중요한 것은 폼에 기입하기 위한 가장 적절한 도구의 선택은 시나리오에 따라서 다른 것에 주의해
주세요. 여기에서는 컨텐츠 컨트롤의 개념을 보여주기 위해 Word 2007 을 사용하고 있지만, 다른 경우에서는
Microsoft Office InfoPath 2007 등 다른 응용 프로그램이 적절한 경우도 있습니다.
XML 데이터 저장소 생성
이름에서도 아는 대로, XML 데이터 아일랜드는 Office Open XML 형식 기반 문서내에서,
비즈니스 관련 데이터를 XML 형식에서 보관합니다. 이것은 사용자 지정 XML 파트의 일례입니다. 이 XML 에는 Office Open XML
형식 참조는 포함되어 있지 않습니다. 이것은 순수한 비즈니스 관련 데이터로, 임의의
유효한 XML 문서를 보관 할 수 있습니다. XML 데이터 아일랜드는 패키지 내에 별개의 파트로서 보관됩니다. 이 패키지
파트는 XML 데이터를 찾아낼 수 있도록, 메인 문서 파트에서 특정 관계 유형을 사용하여 관련지을 수 있습니다.
http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml
새로운 환자 폼에는 모든 형식 필드의 XML 데이터를 보관하는 하나의 XML 데이터 아일랜드가 포함되어
있습니다. 다음에 보이는 XML 는 폼에 정의된 메시지의 일부를 발췌한 것입니다.
Xml
<?xml version="1.0" encoding="utf-8"?>
<Data xmlns="http://www.example.org/ooxml/healthcare/registrationform">
<Patient>
<MaritalStatus>Married</MaritalStatus>
<BirthDate>2007-05-01T00:00:00</BirthDate>
<Age>12</Age>
<Sex>Male</Sex>
<SSN>123-23-1234</SSN>
<Name />
<Address />
<Contact />
<Employer />
</Patient>
<Insurance covered="false">
<Subscriber />
</Insurance>
<Emergency>
<Name />
<Relationship />
<HomePhone />
<WorkPhone />
</Emergency>
</Data>
이 환자 등록 양식에는 하나의 등록만이 포함되지 않지만 예를 들어, 과거 한달간의 모든 등록을 목록
표시하는 문서를 생성하는 경우 등 복수의 등록을 표시하는 폼도 생성할 수 있습니다. 이러한 등록 양식을 조인하는 경우, XML 데이터 아일랜드를 변경할 필요는 없습니다. XML 데이터는 속성집합을 사용하여
고유합니다. 또,
이러한 속성을 사용하여 등록 양식의 데이터를 확인하기 위해서 XML 스키마 참조를 할 수도 있습니다. 속성은
패키지내의 다른 파트에 보관됩니다. XML 데이터 아일랜드는 사용자 지정 XML 파트입니다. 속성은 사용자 지정 XML
속성 파트로 불립니다.
그림 9. 사용자 지정 XML 파트 생성
사용자 지정 XML 파트내의 데이터를 Microsoft Office 등의 생산성 응용 프로그램 외부에서 표시하는
경우, 가장 간단한 접근 방식은 Open
XML Package Explorer 등의 패키지 viewer 응용 프로그램을 사용하는 것입니다. 이 도구를
사용하여 Office Open XML 형식 기반 임의의 문서를 열어, 문서의 개개의 파트를 표시 또는 편집할 수
있습니다.
그림 10. Package Explorer 를 사용하여 문서 파트를 표시 및 편집한다
컨텐츠 컨트롤 사용
환자 등록 양식에는 컨텐츠의 영역을 식별하는 많은 개체 틀이 포함되어 있습니다. 고객이 등록 양식에 상세
정보를 올바르게 입력하는 것은 중요합니다. 이것을 쉽게 하기 위해서, 샘플 폼에서는 구조화 문서 태그를 사용하여 폼의
상부에 개체 틀을 생성합니다. 폼의 하반부에서는 서식 기반의 개체 틀이 오래된 모델로 생성 되어, 연속하는
밑줄 _____ 또는 다른 배경색을 사용합니다. 구조화 문서 태그는 폼내에서 컨텐츠 영역을 정의하기 위한
, 보다 표현이 풍부하고, 영향이 적은 모델을 제공합니다.
그림 11. 컨텐츠 폼 영역을 정의한다
구조화 문서 태그는 사용자와 상호작용을 향상시키는 사용자 지정 사용자 인터페이스를 제공하는 것과 동시에
허가 되는 데이터의 유형을 정의하는 안전한 모델을 제공합니다. 이 사용자 인터페이스는 사용자가 개체 틀에 대해서
조작을 실시하고 있을 때만 표시됩니다. 문서를 표시했을 때에는 일반적으로는 컨텐츠만이 표시됩니다. 구조화 문서
태그에서는 시각적인 식별을 위해서, 제목 및 개체 틀의 텍스트를 정의할 수 있습니다.
코드를 사용하여 구조화 문서 태그를 식별하려면, 태그명 매핑. 이 태그명에 의해, 문서내의 위치에 관계없이
개체 틀을 식별할 수 있습니다. 태그명을 사용하면, 다양한 솔루션을 구현 할 수 있습니다. 각 의사에 대해서,
의사마다의 독자적인 로고나 스타일을 사용한 사용자 지정 등록 양식을 생성하는 것을 생각합니다. 같은 태그명을
사용하면, 등록 양식에 대해서 구축되는 응용 프로그램에서는 각 의사에 대해서 코드를 수정할 필요 없이 이런
시나리오를 지원할 수 있습니다.
구조화 문서 태그의 한가지 이점은 문서를 자동화하는 코드에서 문서 템플릿 생성을 분리할 수 있는
것입니다. 스스로 코드를 생성하면서, 아름다운 문서를 생성하는 기능을 가진 사람에게 프레젠테이션 관련의 작업을
의뢰할 수도 있습니다. 알아둬야 할 것은 태그명과 구조화 문서 태그 유형 뿐입니다. 이러한 구조화 문서
태그가 문서내의 어디에 위치하는지는 알 필요는 없습니다.
그림 12. WordprocessingML 로 사용할 수 있는 문서 태그
구조화 태그의 대부분은 단순한 문서 컨텐츠를 제공합니다. 특별한 태그는 "그룹 태그"와
"파트 태그"
입니다. 그룹 태그는 다른 문서 태그등의 컨텐츠를 그룹에 정리하기 위해서
사용할 수 있습니다. 일반적으로는 문서의 특정의 부분을 잠그고, 자식 문서 태그내를 제외하고 편집할 수 없는
경우에 사용합니다. 이것에 의해, 레이아웃 및 텍스트는 편집할 수 없는 한편, 개체 틀은 편집 가능인 폼을 생성할
수 있습니다. 파트 태그를 사용하면, 그 컨텐츠를 문서 템플릿으로 이미 정의된 파트와 옮겨놓을 수 있습니다. 면책
사항이나 공통 문언 등 독자적인 문서 파트를 생성할 수 있습니다.
구조화 문서 태그를 생성 하려면, sdt 요소를 사용합니다. 구조화 문서 태그에서는 속성과 컨텐츠라는 2 개의 독립된 섹션이 사용됩니다. 속성 안에서는 문서 태그의 유형, 제목, 태그명등의 세부 사항을
정의합니다. 유형은 <date/> 등의 특정 자식 요소를 사용하여 식별됩니다. 유형을 정의하는 요소내에서는 각 유형의
문서 태그의 설정을 한층 더 사용자 지정할 수 있습니다. sdtContent 는 2 개의 용도에
사용됩니다. 구조화 문서 태그의 컨텐츠를 보관하거나, 또는 개체 틀 텍스트를
보관합니다. showingPlcHdr
속성에 근거해, 사용자는 적절한 제공 데이터를 결정할 수 있습니다.
그림 13. 구조화 문서 태그내의 폼 및 컨텐츠에 포함된 개체 틀 텍스트 예
다음은 텍스트 컨트롤을 생성 해 텍스트 컨텐츠를 설정하는 예를 보여줍니다.
<w:sdt>
<w:sdtPr>
<w:alias w:val="Last Name" />
<w:tag w:val="Last Name" />
<w:text />
</w:sdtPr>
<w:sdtContent>
<w:r>
<w:t>Predeek</w:t>
</w:r>
</w:sdtContent>
</w:sdt>
사용자 지정 XML 파일에 데이터를 바인드 한다
구조화 문서는 환자 등록 문서를 생성하기 위한 중요한 순서를 제공합니다. 게다가 사용자 지정 솔루션을
구현 하는데 큰 장점이 되는 추가 기능이 있습니다. 이 시나리오에서는 데이터가 문서에서 추출되어 의사의
웹 사이트상의 백 엔드 데이터 저장소에 XML 메시지로서 보관됩니다. 문서 데이터에 액세스하는 응용 프로그램의
작업부하를 줄이기 위해, 구조화 문서 태그를 XML 데이터 아일랜드에 바인드 할 수 있습니다. 이것에 의해,
문서 서식 설정과 데이터와의 사이에 중개를 합니다.
그림 14. 문서 태그를 XML 데이터 아일랜드에 바인드 한다
구조화 문서 태그는 XPath 식을 사용하여 XML 데이터 아일랜드에 바인드 할 수 있습니다. 이 식에는 네임
스페이스 프리픽스(Prefix)를 적용하는 일반적인 모델을 사용하여 XML 네임 스페이스를 포함할 수
있습니다. 네임 스페이스 프리픽스(Prefix)에서 XML 네임 스페이스에의 매핑은 구조화 문서 태그 속성안에
별도로 보관 유지됩니다. 속성에는 GUID 식별자(dentifiers)를 사용하여 XML 데이터 아일랜드의 ID 를
포함할 수도 있습니다. GUID 를 사용하지 않는 경우, XPath 식은 문서내에서 먼저 일치하는 데이터
아일랜드에 대해서 평가됩니다.
<w:sdt>
<w:sdtPr>
<w:alias w:val="Last Name" />
<w:tag w:val="LastName" />
<w:dataBinding w:prefixMappings="xmlns:ns0='http://www.example.org/ooxml/... ...healthcare/registrationform'"
w:xpath="/ns0:Data/ns0:Patient/ns0:Name/ns0:Last"
w:storeItemID="{A5566E5B-6220-4F8C-BB50-CB2E486681CB}"/>
<w:text />
</w:sdtPr>
<w:sdtContent>
<w:r>
<w:t>Predeek</w:t>
</w:r>
</w:sdtContent>
</w:sdt>
<dataBinding> 태그는 Office Word에서 Microsoft Visual Basic for
Applications (VBA) 환경을 사용하여 추가하거나 또는 Package Explorer 등의 도구를 사용하여 수동으로 추가할 수 있습니다.
문서내의 XML 데이터 아일랜드에 대한 구조화 문서 태그의 매핑을 한층 더 간단하게
실시하려면, Content Control Toolkit 도 사용할 수 있습니다. 이 도구 킷을 무료로 다운로드하려면, 「Word
2007 Content Control Toolkit (영어)」를 참조해 주세요.
그림 15. Word 2007 Content Control Toolkit
컨텐츠 컨트롤과 그 데이터 바인드 기능의 자세한 내용은 Ted Pattison 의 OfficeSpace 칼럼
「Office
Space: Office Open XML 파일 구축」을 참조해 주세요.
환자가 PHR 서비스에 업로딩한 진료 기록을 Contoso 내의 의사까지 거슬러 올라가 추적할 수 있도록, 각 문서는 그 의사 또는 Contoso에 대해서 발행된 디지털 증명서를 사용하여 서명됩니다. Open XML 는 디지털 서명을 사용하여 문서에 서명하기 위한 유연한 환경을 제공합니다. X509
증명서 등의 업계표준을 사용하여 서명을 생성했는지 또는 사용자 지정 구현을 사용할 수 있습니다. 서명은 문서 전체, 특정의 파트만 및 파트간의 관계에 대해서
실행 가능합니다. 또는 관계의 부분집합인
부분만 서명하여, 스타일이나 테마는 제외하는 것 등도 가능합니다.
디지털 서명의 개요
디지털 서명이란, 메시지 (이 경우는 문서)의 정규성 및 유효성 검사 보장에 관련한 기술의 총칭입니다. 이
접근 방식에서는 문서에서 취득된 암호화 해시가 ZIP 컨테이너내에 보관됩니다. 다음에 문서가 변경되어 있지
않은 것을 증명해야 할 경우, 또는 서명자를 식별해야 하는 경우에 암호화 해시가 암호 해독되어 문서에서 직접 취득된 새로운 해시와 비교 됩니다. 해시는 공개 키를 사용하여
암호 해독 되기 위해, 이러한 해시가 일치하면,
파일이 정규임을 확인할 수 있습니다. 해시값이 동일하기 때문에 문서는 분명하게 변경되지
않습니다. Office Open XML 형식은 문서에 서명하기 위한 표준화 된 접근 방식을 제공합니다.
Open Packaging Convention 에 의한 문서 서명
문서에 서명할 때의 최초의 순서는 서명하는 모든 파트의 장소 목록을 취득하는 것입니다. 이것은 O pen
Packaging Convention 의 Package 클래스를 사용하여 간단하게 구현할 수 있습니다.
PackagePartCollection parts = package.GetParts();
List<Uri> toSign = new List<Uri>();
foreach (PackagePart packagePart in package.GetParts())
{
toSign.Add(packagePart.Uri);
}
다음에 문서에 서명하기 위한 X509 증명서가 필요합니다. X509Store 클래스를 사용하여,
현재의 사용자 증명서 스토어를 열어, 증명서를 추출할 수 있습니다. 이 클래스는 다른 증명서 관련 클래스와
같이.NET Framework 의 일부입니다.
X509Store store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.OpenExistingOnly);
X509Certificate2Collection certificates = store.Certificates
.Find(X509FindType.FindByKeyUsage, X509KeyUsageFlags.DigitalSignature, false)
.Find(X509FindType.FindBySubjectName, keyName, false);
Packaging API에서는 Office Open XML 형식에서 서명을 사용하기 위한 인터페이스로서 PackageDigitalSignatureManager
클래스를 사용합니다. 이 클래스를 사용하여 문서에 서명하여 그 서명을 확인할 수 있습니다. 생성자에는 문서참조가 포함되어 있습니다.
PackageDigitalSignatureManager dsm = new PackageDigitalSignatureManager(package);
dsm.CertificateOption = CertificateEmbeddingOption.InSignaturePart;
dsm.Sign(toSign, certificates[0]);
Office Word 2007에서 서명을 확인한다
진료 기록 문서가 Open Packaging API 를 사용하여 서명된 다음은 Office Word에서 문서의 정규성을 확인할 수 있습니다. 이 응용 프로그램은 일반적으로 클라이언트측에서
문서 서명에도 사용할 수
있습니다. 문서를 열면, 서명은 자동적으로 확인됩니다.
먼저 사용자 인터페이스가 무효가 되는 것으로, 서명이 포함된 것을 알 수 있습니다. 문서를 편집하면
모든 서명이 무효가 되기 위해, 편집에 관한 컨트롤은 모두 무효가 됩니다.
그림 16. 디지털 서명 붙어 문서에 대한 사용자 인터페이스의 무효화
서명이 무효인 경우는 곧바로 피드백으로서 화면상에 경고 창이 추가 표시됩니다.
그림 17. 디지털 서명이 무효인 경우의 경고
[Signatures] 작업창을 사용하여 문서내의 모든 서명을 표시할 수 있습니다. 이 작업창을 열려면,
Microsoft Office 버튼을 클릭하여, [Prepare] 그룹을 포인트 합니다. 목록 내의 항목 메뉴를
사용하여 [Signatures] 작업창에 표시된 각 서명을 삭제할 수 있습니다.
그림 18. [Signatures] 작업창 표시
Open Packaging Convention 를 사용하여 서명을 확인한다
Packaging API 를 사용하여 문서에 서명하는 것 외에 Packaging API 를 서명의 확인에도
사용할 수 있습니다. 이것은 PackageDigitalSignatureManager 클래스에 의해서
간단하게 실행할 수 있습니다. 모든 서명이 유효한 경우,VerifySignatures 메서드는 VerifyResult.Success
를 반환합니다. 먼저 서명 관리자를 사용하여 취득한 후, 개개의 서명을 확인할 수 있습니다.
PackageDigitalSignatureManager dsm = new PackageDigitalSignatureManager(package);
VerifyResult result = dsm.VerifySignatures(false);
요약
이 문서에서는 Open XML 파일 형식이 문서 컨텐츠를 보관하기 위한 오픈으로 표준화 된 접근 방식을 제공해,
문서내에서 비즈니스 데이터를 사용 가능한 모델을 제공하여, 전세계 의료 업계에 어떠한 이점을
주는지 검토했습니다. 데이터의 이식성이 높아지는 것으로, 사용자 지정 솔루션의 생성에 새로운 가능성이
열립니다. 이것은 적절히 문서화 된 표준으로, 많은 뛰어난 리소스가 제공되고 있는 것으로, 이러한 솔루션의 구축 및 보수는
간단하게 됩니다. HL7 (Health Level Seven) CDA (Clinical Document
Architecture)등의 업계표준의 사용은 Open XML 이 업계에 가져오는 이익의 일례에 지나지 않습니다. 보험
회사나 정부 기관 등 그 밖에도 많은 조직이 Open XML 의 사용에서 동일한 이익을 얻을 수 있어 문서의 교환이 보다
간단하고, 보다 투명하게 행해지는 환경을 만들 수 있습니다.