eXtensible Markup Language
-
Upload
ivan-hartman -
Category
Documents
-
view
60 -
download
1
description
Transcript of eXtensible Markup Language
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 과 호환되는언어로의 요구
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 …
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 -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 문서는 만들기 쉬어야한다 .
태그 생략하는 간결성은 구조의 명확성을 해치지 않는 범위내에서 허용
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 <
> Greater than sign >
“ Quotation mark "
‘ Apostrophe '
& Ampersan &
Entity Reference
XML 에서 entity 는 문서의 단위한글자에서 문서 전체 참조
hye-young Jeon -45-
CDATA Section
문서 내에서 파싱되지 않는 영역 문자열속에 엔티티 레퍼런스 문자를 쓸 수 있음
<?xml version="1.0" encoding="euc-kr"?>< 예제 >
이 문서는 예제 파일입니다 .i<4 <![CDATA[
< 예제 _1>for(int i=0 : i<5: i++){…}</ 예제 _1>
]]></ 예제 >
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) < > & " '
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내요]]>
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>
</학교 >
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>
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 -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 : 마지막 그외 일때 수행
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
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 -122-
DOM
Document Object Model w3c 의 표준안문서의 구조를 메모리상의 트리로 관리직접 접근 가능트리구조안의 node 삽입 , 삭제 , 변경 , 생성 , 검색 가능
hye-young Jeon -127-
Namespace and validation
DocumentBuilderFactory void setNamespaceAware(boolean) void setValidating(boolean) DocumentBuilder newDocumentBuilder()DocumentBuilder Document parse(String)
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 -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 -135-
Parent-Child Access Methods
Node getParentNode()Node getFirstChildTa()Node getLastChild()Node getProviousSibling()Node getNextSibling()boolean hasChildNodes()NodeList getElementsByTagName(String tagName)
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 -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