eXtensible Markup Language

149
eXtensible Markup Langua ge 전전전 전전전 ([email protected]) ([email protected])

description

eXtensible Markup Language. 전혜영 ([email protected]). Web Technology. 인터넷이 급속히 확산되면서 방대하고 복잡한 자료 관리 정의된 문서의 저작과 관리가 용이 좀더 질의 (Qyery) 에 근접한 검색 결과 필요 멀티 미디어의 필요성 (SGML) 전자상거래 분야 기업간의 데이터 교환이나 문서교환에 효율성. Web Application. SGML (1986). XML (1998 년 2 월 ). HTML (1992). - PowerPoint PPT Presentation

Transcript of eXtensible Markup Language

eXtensible Markup LanguageeXtensible Markup Language

전혜영전혜영 ([email protected])([email protected])

hye-young Jeon -2-

Web Technology

• 인터넷이 급속히 확산되면서 방대하고 복잡한 자료 관리

• 정의된 문서의 저작과 관리가 용이

• 좀더 질의 (Qyery) 에 근접한 검색 결과 필요

• 멀티 미디어의 필요성 (SGML)

• 전자상거래 분야

• 기업간의 데이터 교환이나 문서교환에 효율성

hye-young Jeon -3-

Web Application

SGML(1986)

SGML(1986)

HTML(1992)

HTML(1992)

XML(1998 년 2 월 )

XML(1998 년 2 월 )

hye-young Jeon -4-

ML(=Meta Language)

• 메타 언어란 ?

일반적으로 사용될 언어를 정의할때 사용하는 언어

메타언어 자체가 사용되는 것이 아니다

메타언어를 이용하여 사용자가 원하는 형식으로 정의한 언어들을 사용

hye-young Jeon -5-

ML 의 발전 과정<?> Markup?

• 문서의 내용을 조직화 , 구조화 시켜 내용을 정확히 이해• 원래의 내용에 추가적인 정보를 표시하는 모든 것

서 식원 고 출 판

원고 교정 서식 지정

마크업 언어의 기원

hye-young Jeon -6-

절차적 마크업 공통코딩 일반화마크업

• 절차적 마크업이란 ?

워드 프로세싱에서 텍스트의 외형을 지정하고 텍스트의 위치를 지정하기 위해 사용텍스트와 같이 특정 코드로 저장

• 절차적 마크업의 문제점

문서의 구조정보를 기록하지 않음 ( 문서 외형을 위해 사용 )유연성이 없다 .( 이식성 결여 )처리가 늦고 오류발생이 잦다 .

ML 의 발전 과정 -1

hye-young Jeon -7-

•공통코딩이란 ? (Text 등 )

외부 포맷팅 절차들을 프로시져 호출로 제어하는 매크로 기능 추가( 외형 변화를 위해 매크로만 수정 )

•공통코딩 장점

문서의 이식성 , 유연성을 많이 갖는다 . 마크업은 구조를 기술하는데 친숙

절차적 마크업 공통코딩 일반화마크업

ML 의 발전 과정 -2

hye-young Jeon -8-

•일반화 마크업이란 ? (SGML, XML)

문서 외형이 아닌 문서의 구조를 기술하는 데이터 베이스 스키마와 유사한 모델일반화 마크업의 예<! DOCTYPE memo SYSTEM “memo.dtd”><memo> <header> <from>Jeongwoon Kim <to>GEC <subject>Let’s get XML <body> <contents> Have you guys ever heard about ner technology, XML? It looks like promissing. It is simillar to HTML, but it is extensible. All the big names(MS, IBM, Oracle) are

ML 의 발전 과정 -3

절차적 마크업 공통코딩 일반화마크업

hye-young Jeon -9-

문서의 물리적정보 , 논리적 구조정보 혼재

웹 기반 문서 (HTML) -> CSS( 물리적 논리적 정보 분리 시도 )

설계된 문서 정보 생성 ( 논리적 , 물리적 정보 분리 )표준에 의한 문서처리 접근문서의 논리적 구조 (SGML, XML)문서의 물리적 구조 (DSSSL, XSL, CSS)문서의 링크 구조 (HyTime, Xlink, Xpointer)

내용양식

구조

내용 구조

Formatter

양식

ML 의 발전 과정 -4

hye-young Jeon -10-

•1960 년 , IBM 에서 GML(Generalized Markup Language) 발표

•1986 년 , ISO8879, SGML(Standard Generalized Markup Language) 공개

•1990 년대 초 , HTML1.0(Hypertext Markup Language) 공개

•1996 년 W3G 워킹그룹에서 XML 공개

•1998 년 2 월 , W3C, Rec. XML 1.0 발표

•2000 년 10 월 XML 두번째 권고안 발표

ML 의 발전 과정 -5

SGML HTML XML

hye-young Jeon -11-

SGML 한계성

•1980 년대 등장 .

• Meta 언어 – Markup Language 를 만들기 위한

•SGML 은 많은 선택적 특성과 복잡한 사용법

• Well-format 과 관련된 어떤 정보도 지원하지 않는다

• Hyper-link 기능 등 web 에 관련된 기능을 전혀 고려안함

• 전용 Browser 필요

hye-young Jeon -12-

HTML 한계성• 한정된 TAG

• 중첩구조 지원못함

• 단순구조로 인한 전문검색 용이하지 못함

• 기존 스타일을 제외한 다른 형식을 지원 할 수 없다

• 단일 링크구조

• 수학적 공식 , 특수문자에 대한 지원 부족

• HTML 의 정보를 재사용하기 어렵다

•순수 데이터 부분 추출 어렵다

•순수 데이터 간의 의미 및 관계 불명확

hye-young Jeon -13-

XML 을 사용한 한계 극복• 문서의 요소와 속성 , 개체를 선언할 수 있다 .

• CSS, XSL 등 스타일 시트를 사용 다양한 문서 형태 지원

• SGML 중 자주 사용되지 않는 복잡한 부분 축소

• XML 은 HTML 보다는 SGML 의 경량급이라고 볼 수 있다

• 기존 웹 환경의 데이터 시스템의 단점 해결 .

( 비효율성 , 불명확성 , 공통 표준의 부재 )

• 일관성 있는 데이터 교환 방식필요

hye-young Jeon -14-

SGML / HTML / XML

HTMLHTML XMLXML SGMLSGMLTAB 정의 X O O

재사용성 낮음 높음 높음

복잡성 단순 매우복잡

응용분야 Display 중심 Display / Content Content 중심

Style sheet

CSS CSS, XSL DSSL

DTD Browser 지원 선택 사용자정의 DTD 필수

hye-young Jeon -15-

XML is Structured & Intergrated Data

마크업 언어의 상호계층 구조도

XML

SGML

HTML 1.0HTML 4.0

Rosetta Net ebXML XML/EDI

mathMLMusicMLVoiceXMLSMIL…

hye-young Jeon -16-

HTML=> 확장성 결여 SGML=> 고비용 저효율

새로운 것에 대한 요구

XML 탄생

이동성이 뛰어나고기술습득 , 확장 용이하며개발 , 유통비용 저렴하고HTML, SGML 과 호환되는언어로의 요구

XML 시작하기 전에 ..XML 시작하기 전에 ..

hye-young Jeon -18-

준비물XML editer notepad, EditPluse, UltraEdit … XMLSpy(http://www.xmltoxml.com)XML viewer InternetExployer5.xXML Parser MSXML JAXP apache parser IBM parser …

XML 기초 개념XML 기초 개념

hye-young Jeon -20-

XML 정의

World Wide Web Consortium (W3C) 1996 XML Spec 1.0 Recommended Structure, Semantic of Document (Not a StyleSheet) Meta Tag Language 목적 : Infrastructure for e-Business 환경에서 표준문서 규약을 이용또는 정의하여 사용함으로써 Platform 에 종속적이고 않은원활한 정보교환을 목표로 한다 .

hye-young Jeon -21-

내용 양식

구조

내용 구조

Formatter

양식

DTD

XML

XSL

XML 의 기본 구성

hye-young Jeon -22-

XML 과 관련된 표준

XML(eXtensible Markup Language)- DTD 기술방법에 대한 표준- SGML 추가 ( 선택적 사용자정의 DTD, UNICODE)

XSL(eXtensible StyleSheet Language)- DSSL 의 간소화- 포맷팅 객체로부터 생성되는 포맷팅 트리에 의해 생성

XLL(XML Linking Language)- Xlink(HyTime) 와 Xpointer(TEI) 로 구성

hye-young Jeon -23-

문서 형 정의

DTD(Document Type Definition)- 태그의 종류 , 순서 , 발생횟수 등 문서 구조 정보 정의- 같은 구조로 문서를 작성하기 원할 때- SGML 과는 달리 시작 태그와 종료태그를 생략할수

없음

DTD 가 필요한 예- 학회지에 실리는 논문 형식- 전자상거래시 기업간 주문서- 관공서에서 사용되는 공문 양식

hye-young Jeon -24-

presentation  정의XSLT(eXtensible Stylesheet Language Transformation)

- xml 문서를 다른 문서로 변환하기 위한 기본 규칙 정의

XSL-FO(XSL Formatting Object)- 문서를 원하는 형태로 출력 - 문서 전체의 Layout 정의

CSS (Casscading StyleSheet) - html 의 기본 스타일

- 페이지의 Layout 정의

hye-young Jeon -25-

문법에 맞는 문서

Well-Formed Documemt

- XML 문서에 쓰인 용서들은 시작태그와 종료태그가

존재

XML parser 의 종류

- 검증용 파서 (validating parser)

: DTD 가 있는 문서의 유효성 검증

- 비검증용 파서 (non-validating parser)

: XML 문서가 문법에 맞는지만 검사

hye-young Jeon -26-

유효한 문서

유효성 검증 (validating)- XML 문서가 DTD 의 정의대로 올바로 작성되었는지

검사

Valid Document- DTD 가 있는 XML 문서를 검증용 파서를 사용해

파싱하여 아무런 오류도 발생하지 않는 문서

hye-young Jeon -27-

XML 특성

•.

읽기 쉽고 , 배우기 쉽다 . HTML 을 XML 로 변환 , SGML 사용자가 쉽게 사용 가능 TAG 의 확정성 제공 : 문서 관리 문서 구조의 연속적인 중첩의 허용 : 자료의 구조화 Multi-Point Connection : E-commerce DTD 와 Content 의 분리 /병합

: 유지 / 보수의 편리 및 확장성

다양한 XML Process 는 표준을 따르고 있고 , 무료

hye-young Jeon -28-

XML 응용분야XML 의 응용 가능성 : 문서응용 , 데이터 응용-XML 은 HTML 문서를 간단하게 생성 ( 문서의 관리 )

- 큰 웹사이트 관리 (웹사이트 아키텍처 )

- 조직간의 정보교환 (B2B)

- 데이터베이스에 정보를 적재 , 불러오기

- 다른 웹사이트들에서 사용가능하도록 정보를 배포용 컨텐츠 제작

- 전자상거래 응용프로그램

- 수학 및 화학 공식을 위한 마크업 제공 (MathML)

- 저작권 및 소유권 표현의 마크업을 통한 e-Book 응용에 활용

- 최적화된 새로운 마크업 언어를 적용한 휴대장치

hye-young Jeon -29-

• 문서 출판 XML 은 문서구조에 대하여 중심적 , 매체에 대하여 독립적 XML 로 문서를 편집하고 유지하는 것이 가능하고 , 다른 매체로 자동 변환 가능

XML 문서

Post script

HTML

WML

XML 응용분야 -1

hye-young Jeon -30-

• 데이터응용데이터베이스와 같이 데이터 관리

< > < > < > < > < > < > < > < > . . . .

< > < > < > < > < > < > < > < > . . . .

<XML 로 표현된 문서구조 > <XML 로 표현된 데이터베이스 >

XML 응용분야 -2

hye-young Jeon -31-

•데이터응용조직사이의 데이터교환 : 웹서비스로의 응용

기존 응용 프로그램응용 프로그램 서버

클라이언트 ( 브라우저 )

인터넷

응용 프로그램 서버

기존 응용 프로그램

XML 응용분야 -3

hye-young Jeon -32-

XML 설계목표 인터넷 상에서 바로 사용가능해야 한다

다양한 응용을 지원해야 한다 .

SGML 과 호환이 있어야 한다 .

XML 문서를 처리하는 프로그램을 작성하기 쉬어야 한다 .

XML 에 있는 선택사항의 수는 최소한으로 유지해야 한다 .

문서는 사람이 읽을 수 있어야 하며 , 명확해야 한다 .

XML 설계는 빠르게 준비될 수 있어야 한다 .

XML 설계는 형식에 맞고 간결해야 한다 .

XML 문서는 만들기 쉬어야한다 .

태그 생략하는 간결성은 구조의 명확성을 해치지 않는 범위내에서 허용

XML 기본 문법XML 기본 문법

hye-young Jeon -34-

A Rule of XML Document

XML 선언으로 문서시작

데이터를 포함하는 엘리먼트는 시작 / 종료 태그를 갖고 있다 .

데이터를 포함하지 않고 하나의 태그만을 사용한는 엘리먼트는 />으로 끝난다 .

문서는 다른 모든 엘리먼트를 포함하는 하나의 엘리먼트만을 갖는다 .

엘리먼트는 다른 엘리먼트를 둘러 쌀 수는 있지만 중첩은 안된다 .

<,& 문자는 시작태그에만 사용되고 , 필요한 다른 경우에는 엔터티 레퍼런스를 사용한다 .

hye-young Jeon -35-

Prolog - XML Declaration ex.

<?xml version = “1.0” encoding=“enc-kr”?><?xml:stylesheet type=“text/xsl” href = “aaa.xsl”>

- Document Type Declaration ex.

<!DOCTYPE 책방 SYSTEM “aaa.dtd”>

Body- 한 개 이상의 엘리먼트로 구성됨- 트리 구조를 갖는다 .- 주석

Prolog

Xml version, encodingXml stylesheetXml Doctype

<root>

BODY

<root>

Document 구성요소

hye-young Jeon -36-

< 이름 lang = “KOR”> 전 혜 영 </ 이름 >

Element 구조

AttributestartTag Content endTag

Element

Markup Syntax

hye-young Jeon -37-

ML(Markup Language) 의 특징

유형적 ML

– 정보 공유 위해 ( 프리젠 테이션 ) HTML

구조적 ML

– Tree 구조 ( 사용자 구조 정의 가능 : SGML( 필수 ), XML( 선택 ))

의미적 ML

– TAG name 임의 결정 (SGML, XML)

hye-young Jeon -38-

<?xml version =“1.0” encoding=“UTF-8” ?>xml 소문자로 표시version 필수 속성으로 향후 버전 지원을 위해 사용 .

encoding 언어를 선택 ( UTF- 8 or euc-kr )

• DTD External Subset References

<!DOCTYPE root_element SYSTEM “system_id”>

Internal Subset References<!DOCTYPE root_element[

…] >

XML Declaration

hye-young Jeon -39-

Well-formed & Valid Documents

Well-formed 문서가 하나 이상의 element 들 포함하여야 함 . 전체 문서에 대한 유일한 root element 가 있어야 함 . 모든 엘리먼트는 start-tag, end-tag 로 구성 . overlap 불가 .

Valid 반드시 DTD 가 있어야 함 DTD 에 정의된 엘리먼트의 구조 순서 등에 따라 엘리먼트를 사용해야한다 .

hye-young Jeon -40-

Names

Letter, underscore(_), colon 으로 시작되어야 함 .- 시작시 첫 문자가 XML 이름 으로 시작하면 안 됨 .

대 , 소문자 구분을 함 .숫자로 시작하면 안됨 .

올바르지 못한 Names ex) XmlDate, XML_Type, -Book, 44Book

바른 Names ex) Book, _Book, B123, _XML, _42book

hye-young Jeon -41-

Empty – Element

Content 가 없는 경우에도 속성값은 갖는다 .

<제목 ></ 제목 > <제목 /><제목 lang=“eng”></ 제목 > <제목 lang=“eng” />

hye-young Jeon -42-

Attributes

Attributes value 는 XML paser 에 의하여 웹 브라워저에 인식되어짐여러 개의 attributes 는 공백을 이용하여 각각의 attributes 를 구분한다 .

<이름 사원번호 =“123” 사진=“전혜영사진 .jpg”>전혜영</이름>

hye-young Jeon -43-

Comments

<!-- 주석 내용 -->태그 안에는 올 수 없다 .주석 내용에 -- 나올 수 없다 .

ex)< 태그 >……. 내용……… </ 태그 <!-- 주석 -->><!-- 주석 -- 내용 -->

hye-young Jeon -44-

엔티티 설명 엔티티 참조

< Less than sign &lt;

> Greater than sign &gt;

“ Quotation mark &quot;

‘ Apostrophe &apos;

& Ampersan &amp;

Entity Reference

XML 에서 entity 는 문서의 단위한글자에서 문서 전체 참조

hye-young Jeon -45-

CDATA Section

문서 내에서 파싱되지 않는 영역 문자열속에 엔티티 레퍼런스 문자를 쓸 수 있음

<?xml version="1.0" encoding="euc-kr"?>< 예제 >

이 문서는 예제 파일입니다 .i&lt;4 <![CDATA[

< 예제 _1>for(int i=0 : i<5: i++){…}</ 예제 _1>

]]></ 예제 >

DTDDTD

hye-young Jeon -47-

Table of Contents

DTD ?ElementsAttributes CDATA, ID, IDREF, ENTITY, NOTATION

Processing InstructionParameter Entity ReferenceCommentSpaceConditional Section

hye-young Jeon -48-

DTD 가 왜 필요한가 ?

프로그램 관점에서 보면 구조화되어 있지 않은 XML은 다루기가 어렵움

XML 을 명시적으로 선언해줄 문서 타입 정의가 필요

문서를 공유하기 위해서는 문서 폼을 일치 시켜야 함

정보전달 차원에서 문서의 통일화—업무의 복잡성 제거 , 업무처리 자동화 시스템 개발 시간단축

예 ) 논문 , 보고서 , 법령 , 주문서 등

hye-young Jeon -49-

DTD 의 역할문서의 구조를 사용자가 정의 - DTD자신의 문서가 갖을 Formal Structure 를 표현Valid Document DTD 가 선언된 문서에 대해서는 파서가 자동적으로 DTD 에

기술된 문서구성 규칙에 따라 문서가 구성되어있는지를 체크함 . 문서를 처리할 응용 시스템으로 넘겨주기 전에 Valid 여부를

체크함으로써 처리 효율을 향상 시킴Business Document 의 추진정형화 , data type check 등이 강화되어야 함 XML 문서의 규칙 강화DB 에서 사용되어지는 data type까지 DTD 에 정형화 하는 작업 추진

hye-young Jeon -50-

DTD 와 XML Document

External Subset References<?xml version =“1.0” encoding =“UTF-8”><!DOCTYPE aaa SYSTEM “c:\ddd.dtd”>

Internal Subset References<?xml version =“1.0” encoding =“UTF-8”>

<!DOCTYPE aaa[] ><aaa></aaa>

hye-young Jeon -51-

Elements

ELEMENT- XML Element type 선언ATTLIST - Element Type 속한 attribute 및 허용값 선언ENTITY - 재 사용할 수 있는 content 선언NOTATION- parsing 되지 않는 external content (ex. Binary data) 에 대한 data format 선언

hye-young Jeon -52-

Elements

Type of Element- element : 자식 element 의 조합으로 구성- empty : text 나 자식 element 가 없음 . 단 attribute 는 있음- mixed : data 나 다른 element 를 혼합 형태로 가짐- any : any element or text- #PCDATA : parsed character data 로 구성

<!ELEMENT element_name Type_of_Element >element_name

- only begin with a letter, underscore or colonex) <!ELEMENT chapter (title, text)>

<chapter> <title>…..</title> <text>…..</text></chapter>

hye-young Jeon -53-

Symbol Usage

, Strict ordering

| Selection

( ) Grouping

* Repetition (0 회 이상 )

? Optional

+ Repetition (1 회 이상 )

Element Content Models

element 들이 나타날 위치와 나타날 횟수를 명시하는 규칙 Order operators and Cardinality operators

hye-young Jeon -54-

실 습

<!ELEMENT ex1 (A?, B, (C | D), E?)>

<!ELEMENT ex2 ((A, B) | (C | D))>

<!ELEMENT ex3 ((A,B)+ , (C | D) ) >

<!ELEMENT ex4 (A, (B, C)*, D+)>

<!ELEMENT ex2 (#PCDATA | A | B | C | D)*>

hye-young Jeon -55-

Attributes

XML Element Attribute 를 포함한다 .Element 와 관련된 추가의 정보를 위한 것Syntax<!ATTLIST element_name attribute_Definition*>attribute_Definition = attribute_name, attribute_type, default_valuesEx.<!ELEMENT 자동차 EMPTY><!ATTLIST 자동차 is_blue (yes | no) “yes” brandname ID#REQURED

description CDATA #IMPLIED><자동차 is_blue=“no” brandname=“KIA” description = “차” />

hye-young Jeon -56-

타 입 설 명

#REQUIRED 필수 속성

#IMPLIED 속성 생략 가능

# FIXED 지정된 Value 만을 값으로 가짐 .

Default 생략시 Default value 로 기술 .

Default Values

hye-young Jeon -57-

타 입 설 명

CDATA 문자 테이터만 포함

ID속성값이 유일 .요소를 식별할 수 있게 한다 .

IDREF/IDREFS 선언된 ID 값을 참조한다 .

ENUMERATION 나열된 값 중 선택NMTOKEN/

NMTOKENS이름 작성 규칙을 맞는 데이터 사용

NOTATION DTD 에 선언된 NOTATION 명만 사용ENTITY DTD 에 선언된 ENTITY 명만 사용

Attributes Types

hye-young Jeon -58-

Attributes Types

타 입 설 명CDATA 속성이 문자 테이터만 포함할 수 있다 .

<!ELEMENT 자동차 EMPTY><!ATTLIST 자동차 설명 CDATA #IMPLIED><!ATTLIST 자동차 보이기 (True | False) “True”>

< 자동차 보이기 =“True” 설명 =“ 차” / >

hye-young Jeon -59-

타 입 설 명ID 속성값이 유일하여 요소를 식별할 수 있게 한다 .

IDREF 속성값이 문서 안의 다른 곳에서 선언된 ID 값을 참조한다 .

<!ELEMENT 가족 ( 구성원 )*><!ELEMENT 구성원 (#PCDATA)><!ATTLIST 구성원 가족 no ID #REQUIRED><!ATTLIST 구성원 아빠 IDREF #IMPLIED><!ATTLIST 구성원 엄마 IDRED #IMPLIED>

< 가족 >< 구성원 가족 no=“a1”>홍길동 </ 구성원 >< 구성원 가족 no=“a2”> 이영자 </ 구성원 >< 구성원 가족 no=“a3” 아빠 =“a1” 엄마 =“a2”>홍미동 </ 구성원 >< 구성원 가족 no=“a4” 아빠 =“a1” 엄마 =“a2”>홍지동 </ 구성원 ></ 가족 >

hye-young Jeon -60-

Entity

재사용성을 높다일반 Entity DTD 에서 entity 선언을 하고 XML 문서내에서 사용 Parsed Entity, Unparsed Entity파라미터 Entity DTD 에 Entity 선언을 하고 DTD 내에서 사용parsed – 문자 데이터 unparsed – 비문자 데이터 ex) 그림 , 음악 , 동영상 built-in entity- 미리 정의된 entity ex) &lt; &gt; &amp; &quot; &apos;

hye-young Jeon -61-

Parsed Entity( 내부 , 외부 )

Entity 이름이 entity 의 내용으로 치환되어 문서의 일부가 된다 . entity 내용은 파서에 의해 XML 규칙을 위배하는지

검사를 받아야 한다 . 즉 엔티티 레퍼런스가 entity 내용으로 못 온다 .

In dtd<!ENTITY ENTITY 이름 “ ENTITY 내용” >

In xml<Tag>&ENTITY 이름 ;</Tag>

hye-young Jeon -62-

Unparsed Entity

Entity 의 내용이 XML 이 아닌 text 문서나 그 외의 것들로써 entity 이름이 entity 의 내용으로 치환되지 않는다 .해석 안된 entity 는 하나의 관련된 NDATA(notation) 을 갖는다 .

In dtd<!ENTITY ENTITY_이름 시스템인식자 Entity 위치 NDATA notation 이름><!NOTATION notation 이름 시스템인식자 >

In xml<Tag>&ENTITY 이름 ;</Tag>

hye-young Jeon -63-

파라미터 Entity

DTD 에 Entity 선언을 하고 DTD 내에서 사용

1루트 엘리먼트 참조외부 dtd (root.dtd)

<!ELEMENT book %child;>내부 dtd

<?xml version="1.0"?><!DOCTYPE book SYSTEM "root.dtd"[<!ENTITY % child "(name,author)"><!ELEMENT name (#PCDATA)> <!ELEMENT author (#PCDATA)> ]>

<book> <name>xml</name> <author>dtd</author></book>

hye-young Jeon -64-

파라미터 Entity

2 하부 엘리먼트 참조외부 dtd (entity.dtd)

<!ELEMENT name (#PCDATA)><!ELEMENT address (#PCDATA)> <!ELEMENT phone (#PCDATA)>

내부 dtd<?xml version="1.0" encoding="euc-kr"?><!DOCTYPE person [

<!ELEMENT person (name,address,phone)><!ENTITY % e SYSTEM "entity.dtd">%e; ]>

<person> <name>홍길동</name> <address>서울</address> <phone>123-1234</phone></person>

hye-young Jeon -65-

NOTATION

문자가 아닌 그림 , 동영상 , 음악 파일 등의 포맷을 식별MIME 타입과 유사기능

<!NOTATION n_name (SYSTEM|PUBLIC) “…” >

<!NOTATION gif PUBLIC “image/gif” “photoshop.exe” ><!ATTLIST image src CDATA #REQUIRED type NOTATIO

N (gif|jpge|bmp) #REQUIRED>

hye-young Jeon -66-

Conditional Section

DTD 를 적용될 영역 (INCLUDE) 과 무시할 영역 (GNORE) 구분

<![(INCLUDE|IGNORE)[dtd 내용

]]>

<!ENTITY % part1 “INCLUDE|IGNORE” ><![%part1; [

DTD내요]]>

NamespaceNamespace

hye-young Jeon -68-

namespace 사용 이유 여러 dtd 에서 파생되는 xml 문서 작성 element name 의 중복접두사 사용 < 학생 : 이름> 홍길동</학생 : 이름> <제품 : 이름> 컴퓨터 </ 제품 : 이름>1999 년 1 월 14일 W3C 권고안 채택

hye-young Jeon -69-

namespace 선언<element xmlns: 접두사 =“URI” ></element>default namespace< 학교 xmlns=“http://www.school.com/School” xmlns:stu=“http://www.school.com/Student”>

<name> 즐거운 학교 </name><stu:학생 >

<stu:name> 홍길동 </stu:name></stu:학생 >

</학교 >namespace 사용 범위

hye-young Jeon -70-

namespace 선언

default namespace 는 element 에만 적용Attribute 에 namespace 적용< 학교 xmlns=“http://www.school.com/School”>

<name ymd:year=“1960” xmlns:ymd=“http://www.Date.com/Date>

즐거운 학교</name>

</학교 >

SchemaSchema

hye-young Jeon -72-

스키마 언어 설계 목표

2001 년 5 월 XML Schema1.1 권고안 채택

DTD 보다 표현력 ( 다양한 데이터타입 ) 풍부XML 문법 방식인터넷 바로 사용가능W3C 규격설계가 복잡하지 않다

hye-young Jeon -73-

Schema instance

<?xml version=“1.0” encoding=“euc-kr”><root xmlns:xsi=“http://www.w3.org/2001/X

MLSchema-instance” xsi:noNamespaceSchemaLocation=“스키마문서 or URI”></root>

hye-young Jeon -74-

Schema Definition

<?xml version=“1.0” encoding=“euc-kr”><xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSc

hema”></xsd:schema>

외부 스키마문서 참조 엘리먼트 include, import, redefine, annotation스키마 문서 정의 element, attribute simpleType, complexType group, attributeGroup notation, annotation

hye-young Jeon -75-

주석

ML 주석 <!-- ~~~ -->annotation element<annotation><appinfo [source=“외부참조문서경로” ] >응용프로그램을 위한 주석

</appinfo><documentation source=“uri” xml:lang=“사용언어” >

사용자가 읽기 위산 서술형 주석</documentation></annotation>

hye-young Jeon -76-

Element

element 참조<element ref=“elementName“ />local element 선언<element name=“이름” minOccurs=“횟수” max

Occurs=“unbounded” type=“complexType or simpleType” ></element>

hye-young Jeon -77-

Attribute

<attribute name=“ “ ref=“ 참조 글로벌 속성명” use=“required|optional” default=“value” type=“simpleType”/>

hye-young Jeon -78-

Type

complexType : element 구조 정의built-in simple type : 이미 정의된 타입 primitive : string, boolean, decimal, float, anyU

RI, QName, date, gYear … Derived : normalizedString, token, ID, IDREF, E

NTITY …사용자 정의 타입 (simpleType)

hye-young Jeon -79-

simpleType

<simpleType name=“ “>(restriction | list | union)</simpleType>범위 , 문자패턴 , 특정값 등을 설정할때 사용<restriction base=“기존타입” ></restriction>공백으로 분리된 여러 데이터를 가진 타입<list itemType=“simpleTypeName” />여러 개의 타입 결합<union memberType=“simpleT1 T2 T3 …” />

hye-young Jeon -80-

complexType

속성 , sub element 를 가진 element 선언시<complexType name=“ “ >

(sequence | choice)<attribute name=“” type=“” />

</complexType>

hye-young Jeon -81-

notation

그림 , 동영상 , 음악 파일 포맷 식별<notation name=“ “ system=“프로그램 경로 public=“MI

ME type” />

<xsd:notation name=“gif” public=“image/gif” system=“photoshop.exe”/>

…<xsd:simpleType name=“imgType”><xsd:restriction base=“xsd:NOTATION”>

<xsd:emuneration value=“gif” /></xsd:restriction>

</xsd:simpleType><xsd:attribute name=“type “ type=“imgType”>

<img src=“./a.gif” type=“gif” />

hye-young Jeon -82-

스키마 문서의 결합같은 targetnamespace<xsd:schema ~~><xsd:include schemaLocation=“XX.xsd” />

다른 targetNamespace<xsd:import namespace=“http://~~” schemaLocation=“YYY.xsd” />

외부 스키마 일부분 재정의 후 결합<xsd:redefine schemaLocation=“ZZZ.xsd” ><complexType name =“” >

…</complexType>

</xsd:redefine>

XSLXSL

hye-young Jeon -84-

XSL(eXtensible Stylesheet Language)

CSS 의 한계 극복내용과 표시 형식 지정인 분리된 언어 XML 을HTML 처럼 브라우저에 보여주는 것이다 .XML 내용 재사용 XSL 만 바꿔주면 다른 형태로 보여줄 수 있다 .XML 을 다른 형태로 출력 사용자가 원하는 정보만 보여줄 수 있다

hye-young Jeon -85-

XSLT (XSL Transformation) w3c 1999.11.16 권고안 발표 xml 문서의 구조를 다른 구조로 변환 XPath 를 이용하여 경로 확인XSL-Fo (XSL Formatting Object) xml 문서를 비 XML 문서로 변화 (PDF..)

hye-young Jeon -86-

hye-young Jeon -87-

XSLT 의 element

outputtemplateapply-Templatesvalue-of (element, attrigute)sortfor-eachifchoose / when / otherwisenumbercopy-of

variableparamincludeimport

hye-young Jeon -88-

xslt 문서 선언<xsl:stylesheet version="1.0” xmlns:xsl="http://ww

w.w3.org/1999/XSL/Transform" ></xsl:stylesheet>

xml 문서 호출<?xml-stylesheet type=“text/xsl: href=“XXX.xsl” ?>

XSL 선언

hye-young Jeon -89-

output

문서를 변환후 생성되는 문서의 종류 기술<xml:output method=“html|xml|text” version=“1.0”

encoding=“euc-kr” />

hye-young Jeon -90-

template

템플리트가 적용될 소스트리 부분과 결과트리로 삽입되어지는 출력 부분으로 나눈다 . 소스트리 : match 속성 ( 위치를 지정 ) 출력부분 : template 시작 , 종료 태그 사이에 다른 값들을 츨력

<xsl:stylesheet version="1.0“ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="whoami"></xsl:template>

</xsl:stylesheet>

<?xml version=“1.0” encoding="euc-kr"?><?xml:stylesheet type="text/xsl" href="ex2_1.xsl"?>

hye-young Jeon -91-

Apply-Templates 란 ?select 에 의해 element 나 Attribute 를 접근하는 xpath 로 노드 ( 들 ) 이 선택되고선택된 노드에 대해 template 이 적용됨select 가 생략되어 있으면 자식 노드가 적용됨

사용법<xsl:apply-tamplates select = “element 나 attribute 를 접근하는 xpath” />

Apply-Templates

hye-young Jeon -92-

Apply-Templates

select 에 의해 element 나 Attribute 를 접근하는 xpath 로 노드 ( 들 ) 이 선택되고 선택된 노드에 대해 template 이 적용됨select 가 생략되어 있으면 자식 노드가 적용됨

<xsl:apply-tamplates select = “element 나 attribute 를 접근하는 xpath” mod=“ “/>

hye-young Jeon -93-

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><xsl:template match="whoami"> abcd

<xsl:apply-templates select="lastname"/><xsl:apply-templates select="firstname"/>

</xsl:template>

<xsl:template match="firstname"> name

<xsl:apply-templates /></xsl:template><xsl:template match="lastname">1111</xsl:template></xsl:stylesheet>

hye-young Jeon -94-

value-of

select 를 이용해 원하는 Element값이나 Attribute값을 나타냄Element 값 추출 사용법<xsl:value-of select = “element 나 attribute 를

접근하는 xpath” />

Attribute 값 추출 사용법<xsl:value-of select = “element 나 attribute 를

접근하는 xpath/@Attribute 이름” />

hye-young Jeon -95-

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><xsl:template match="whoami"> abcd

<xsl:apply-templates select="lastname"/><xsl:apply-templates select="firstname"/>

</xsl:template><xsl:template match="firstname"> name

<xsl:apply-templates /><xsl:value-of select=“."/><xsl:value-of select="./@name" />

</xsl:template><xsl:template match="lastname">1111</xsl:template></xsl:stylesheet>

hye-young Jeon -96-

For-each

select 에 의해 선택된 노드에 template 을 직접 for-each 구문에 담고있음다른 프로그램에서 for 문과 같은 역할을 하고 있음

<xsl:for-each select=“Xpath">………………….</xsl:for-each>

hye-young Jeon -97-

sort 란 ?Html 자체로서는 불가능한 것으로써 노드들 특정한 순서에 의해 정렬 할 수 있음

사용법<xsl:for-each select=“Xpath"><xsl:sort order=“ascending or descending” select=“normalize-space( 정렬기준노드 )” />………………….</xsl:for-each>

여기서 normalize-space = text 의 앞 , 뒤 공백을 삭제하는 기능Sort 옵션으로 data-type 이 있음

실습each.xml 에서 xsl 위치 다시 지정 , sort.xsl

sorting

hye-young Jeon -98-

sort

Html 자체로서는 불가능한 것으로써 노드들 특정한 순서에 의해 정렬 할 수 있음

<xsl:for-each select=“Xpath"><xsl:sort order=“ascending or descending” select=“norma

lize-space( 정렬기준노드 )” />………………….</xsl:for-each>

여기서 normalize-space = text 의 앞 , 뒤 공백을 삭제하는 기능Sort 옵션으로 data-type 이 있음

hye-young Jeon -99-

if

지정한 조건을 만족할 때 지정 문장을 수행

<xsl:if test=“expression">지시문</xsl:if>

test : expression 을 검정해서 논리 (boolean)형으로 결과를 리턴지시문 : 리턴값이 참이라면 지시문 실행

hye-young Jeon -100-

Xsl:choose?프로그램 상에서 else if 와 같은 기능

사용법<xsl:choose>

<xsl:when test=“expression">지시문</xsl:when>

<xsl:when test=“expression">지시문</xsl:when>

<xsl:otherwise> 지시문</xsl:otherwise>

</xsl:choose>

Xsl:choose

When: if 의 기능과 같음 , choose 구문에서 syntax test : expression 을 검정해서 논리 (boolean) 형으로 결과를 리턴otherwise : when 의 조건에 맞지 않다면

마지막으로 실행되는 구문

실습 choose.xml , choose.xsl

hye-young Jeon -101-

choose

프로그램 상에서 else if 와 같은 기능<xsl:choose><xsl:when test=“expression">

지시문</xsl:when><xsl:otherwise>

지시문</xsl:otherwise>

</xsl:choose>

When: if 의 기능과 같음 , choose 구문에서 syntax test : expression 을 검정해서 논리 (boolean) 형으로 결과를 리턴otherwise : 마지막 그외 일때 수행

XPathXPath

hye-young Jeon -103-

XPath

트리구조를 이용해서 사용자가 원하는 위치에 접근하기 위한 경로절대경로 Root Element 에서 시작

/grandfather/father/son/grandson상대경로 특정 Element 에서 시작

./son/grandson (현재 위치가 father(1))

7Node root, element, attribute, text, namespace, pro

cessing instruction, comment

SAXSAX

hye-young Jeon -105-

SAX(Simple API for XML)

hye-young Jeon -106-

SAX

hye-young Jeon -107-

SimpleSAX.java

hye-young Jeon -108-

DefaultHandler

hye-young Jeon -109-

SAX Packages

SAX includes these packages org.xml.sax org.xml.sax.ext org.xml.sax.helpersJAXP package includes javax.xml.parsers

SAXParserFactory SAXParser

hye-young Jeon -110-

JAXP properties

package javax.xml.persers.SAXPerserFactory javax.xml.Persers.DocumentBuilderFactoryproperties 실행 cmd>java -Djavax.xml.persers.SAXPerserFactor

y = differentFactoryProgram_name

hye-young Jeon -111-

DefaultHandler class

<<interface>>ContentHandler

<<interface>>DTDHandler

<<interface>>ErrorHandler

<<interface>>EntityResolver

DefaultHandler

hye-young Jeon -112-

ContentHandler interface

startDocument() throws SAXExceptionendDocument() throws SAXExceptionstartElement(String nsURI, String localName, String qName, Attributes atts) throws SAXExceptionendElement(String nsURI, String localName, String qName) throws SAXExceptionsetDocumentLocator(Locator locator)ignorableWhitespace(char[] ch, int start, int length) throws SAX Exception characters(char[] ch, int start, int length) throws SAX Exception

hye-young Jeon -113-

ErrorHandler interface

error(SAXParseException exception) throws SQLExceptionfatalError(SAXParseException exception) throws SQLExceptionwarning(SAXParseException exception) throws SQLException

hye-young Jeon -114-

Attributes

int getLength()String getLocalName(int i)String getQName(int i)String getURI(int i)String getURI(int i)String getValue(int i)String getValue(String qName)String getValue(String uri, String localName)

AttributesImpl(Attributes atts) interface

hye-young Jeon -115-

Parse Methods

parse(File f, DefaultHandler dh)parse(InputSource is, DefaultHandler dh)parse(InputStream is, DefaultHandler dh)parse(String uri, DefaultHandler dh)

hye-young Jeon -116-

Locator interface

int getLineNumber()int getColumnNumber()String getPublicId()String getSystemId()

hye-young Jeon -117-

Mapping

hye-young Jeon -118-

예제

school.xml 에서 특정학생정보 검색하기

hye-young Jeon -119-

DTD Check

hye-young Jeon -120-

DOMDOM

hye-young Jeon -122-

DOM

Document Object Model w3c 의 표준안문서의 구조를 메모리상의 트리로 관리직접 접근 가능트리구조안의 node 삽입 , 삭제 , 변경 , 생성 , 검색 가능

hye-young Jeon -123-

hye-young Jeon -124-

hye-young Jeon -125-

Preserving Write Space

root element 에 xml:space=“preserve” 추가

기존 xml 에만 적용

hye-young Jeon -126-

DOM Programming

hye-young Jeon -127-

Namespace and validation

DocumentBuilderFactory void setNamespaceAware(boolean) void setValidating(boolean) DocumentBuilder newDocumentBuilder()DocumentBuilder Document parse(String)

hye-young Jeon -128-

Root Elements

Element getDocumentElement()

hye-young Jeon -129-

Document

Adding Nodes Comment createComment(String) Node appendChild(Node) throws DOMException

hye-young Jeon -130-

DOM Output to Standard Output

void write(Writer out, String encoding) throws IOExceptionvoid write(OutputStream out) throws IOExceptionvoid write(Writer out) throws IOException

hye-young Jeon -131-

Class Hierarchy of Nodes

hye-young Jeon -132-

Node

Node List short getNodeType() String getNodeName() String getNodeValue() NamedNodeMap getAttributes()Node List Processing NodeList getChildNodes()NodeList interface int getLength() Node item(int index)

hye-young Jeon -133-

Summary of Main Node Types

Node Modification methods Property methodsDocument Create methods Property methodsElement Property methods normalize methodAttr Property Methods

hye-young Jeon -134-

Editing Element Attribute Specifications

hye-young Jeon -135-

Parent-Child Access Methods

Node getParentNode()Node getFirstChildTa()Node getLastChild()Node getProviousSibling()Node getNextSibling()boolean hasChildNodes()NodeList getElementsByTagName(String tagName)

hye-young Jeon -136-

NodeAccess.java

hye-young Jeon -137-

hye-young Jeon -138-

hye-young Jeon -139-

orderlist.xml orderlist.dtd

hye-young Jeon -140-

Running the NodeAccess

hye-young Jeon -141-

DOM Error Handling

builder.setErrorHandler(new UserHandler());ErrorHandler interface method void error(SAXParseException exception) void fatalError(SAXParseException exception) void warning(SAXParseException exception)

hye-young Jeon -142-

예제

DOM 을 이용해서 xml 문서 만들기school.xml 에서 특정 학생 검색하여 해당 학생의 모든 정보 출력하기

XSLXSL

hye-young Jeon -144-

XSL

eXtensible Stylesheet LanguageXSL XSLTransformations XSLFormatting Object

hye-young Jeon -145-

XSL Process

hye-young Jeon -146-

javax.xml.transform.Soruce interface

hye-young Jeon -147-

javax.xml.transform.Result interface

hye-young Jeon -148-

import java.io.*;import javax.xml.transform.*;import javax.xml.transform.stream.*;public class SimpleTrAX { public static void main(String args[]) { try { File xslIn = new File(args[0]); File xmlIn = new File(args[1]); File xmlOut = new File(args[2]); xmlOut.createNewFile(); TransformerFactory transFact = TransformerFactory.newInstance(); StreamSource xslStream = new StreamSource(xslIn); StreamSource xmlStream = new StreamSource(xmlIn); FileOutputStream fileOut = new FileOutputStream(xmlOut); StreamResult xmlResult = new StreamResult(fileOut); Transformer trans = transFact.newTransformer(xslStream); trans.transform(xmlStream,xmlResult); } catch (Exception e) {System.out.println(e);} } // end main} // end class

hye-young Jeon -149-

TrAX Stream XSLT Transformation