eXtensible Markup Language 전혜영(peridot@suned.co.kr)
Web Technology 인터넷이 급속히 확산되면서 방대하고 복잡한 자료 관리 정의된 문서의 저작과 관리가 용이 좀더 질의 (Qyery)에 근접한 검색 결과 필요 멀티 미디어의 필요성 (SGML) 전자상거래 분야 기업간의 데이터 교환이나 문서교환에 효율성
Web Application SGML (1986) XML (1998년2월) HTML (1992)
ML(=Meta Language) 메타 언어란? 일반적으로 사용될 언어를 정의할때 사용하는 언어 메타언어 자체가 사용되는 것이 아니다 메타언어를 이용하여 사용자가 원하는 형식으로 정의한 언어들을 사용
ML의 발전 과정 <?> Markup? 문서의 내용을 조직화, 구조화 시켜 내용을 정확히 이해 원래의 내용에 추가적인 정보를 표시하는 모든 것 마크업 언어의 기원 원 고 출 판 서 식 원고 교정 서식 지정
ML의 발전 과정 -1 절차적 마크업 공통코딩 일반화마크업 절차적 마크업이란? 절차적 마크업의 문제점 워드 프로세싱에서 텍스트의 외형을 지정하고 텍스트의 위치를 지정하기 위해 사용 텍스트와 같이 특정 코드로 저장 절차적 마크업의 문제점 문서의 구조정보를 기록하지 않음(문서 외형을 위해 사용) 유연성이 없다.(이식성 결여) 처리가 늦고 오류발생이 잦다.
ML의 발전 과정 -2 절차적 마크업 공통코딩 일반화마크업 공통코딩이란? (Text 등) 공통코딩 장점 외부 포맷팅 절차들을 프로시져 호출로 제어하는 매크로 기능 추가 (외형 변화를 위해 매크로만 수정) 공통코딩 장점 문서의 이식성, 유연성을 많이 갖는다. 마크업은 구조를 기술하는데 친숙
ML의 발전 과정 -3 절차적 마크업 공통코딩 일반화마크업 일반화 마크업이란? (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의 발전 과정 -4 문서의 물리적정보, 논리적 구조정보 혼재 양식 내용 구조 웹 기반 문서 (HTML) -> CSS(물리적 논리적 정보 분리 시도) 설계된 문서 정보 생성(논리적, 물리적 정보 분리) 표준에 의한 문서처리 접근 문서의 논리적 구조(SGML, XML) 문서의 물리적 구조(DSSSL, XSL, CSS) 문서의 링크 구조(HyTime, Xlink, Xpointer) 내용 구조 Formatter 양식
ML의 발전 과정 -5 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 두번째 권고안 발표 SGML HTML XML
SGML 한계성 1980년대 등장. Meta언어 – Markup Language를 만들기 위한 Well-format과 관련된 어떤 정보도 지원하지 않는다 Hyper-link기능 등 web에 관련된 기능을 전혀 고려안함 전용 Browser 필요
HTML 한계성 한정된 TAG 중첩구조 지원못함 단순구조로 인한 전문검색 용이하지 못함 기존 스타일을 제외한 다른 형식을 지원 할 수 없다 단일 링크구조 수학적 공식, 특수문자에 대한 지원 부족 HTML의 정보를 재사용하기 어렵다 순수 데이터 부분 추출 어렵다 순수 데이터 간의 의미 및 관계 불명확
XML을 사용한 한계 극복 문서의 요소와 속성, 개체를 선언할 수 있다. CSS, XSL 등 스타일 시트를 사용 다양한 문서 형태 지원 SGML 중 자주 사용되지 않는 복잡한 부분 축소 XML은 HTML 보다는 SGML의 경량급이라고 볼 수 있다 기존 웹 환경의 데이터 시스템의 단점 해결. (비효율성, 불명확성, 공통 표준의 부재) 일관성 있는 데이터 교환 방식필요
SGML / HTML / XML HTML XML SGML TAB 정의 재사용성 복잡성 응용분야 Style sheet DTD X O 재사용성 낮음 높음 복잡성 단순 매우복잡 응용분야 Display 중심 Display / Content Content 중심 Style sheet CSS CSS, XSL DSSL DTD Browser 지원 선택 사용자정의 DTD 필수
XML is Structured & Intergrated Data 마크업 언어의 상호계층 구조도 SGML XML mathML MusicML VoiceXML SMIL… HTML 1.0 HTML 4.0 Rosetta Net ebXML XML/EDI
HTML=>확장성 결여 SGML=>고비용 저효율 새로운 것에 대한 요구 XML 탄생 이동성이 뛰어나고 기술습득, 확장 용이하며 개발, 유통비용 저렴하고 HTML, SGML과 호환되는 언어로의 요구 XML 탄생
XML 시작하기 전에..
준비물 XML editer XML viewer XML Parser notepad, EditPluse, UltraEdit … XMLSpy(http://www.xmltoxml.com) XML viewer InternetExployer5.x XML Parser MSXML JAXP apache parser IBM parser …
XML 기초 개념
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에 종속적이고 않은원활한 정보교환을 목표로 한다.
XML의 기본 구성 양식 DTD 내용 구조 XML 내용 구조 XSL Formatter 양식
XML과 관련된 표준 XML(eXtensible Markup Language) - DTD 기술방법에 대한 표준 - SGML 추가 (선택적 사용자정의 DTD, UNICODE) XSL(eXtensible StyleSheet Language) - DSSL의 간소화 - 포맷팅 객체로부터 생성되는 포맷팅 트리에 의해 생성 XLL(XML Linking Language) - Xlink(HyTime)와 Xpointer(TEI)로 구성
문서 형 정의 DTD(Document Type Definition) -태그의 종류, 순서, 발생횟수 등 문서 구조 정보 정의 - 같은 구조로 문서를 작성하기 원할 때 - SGML과는 달리 시작 태그와 종료태그를 생략할수 없음 DTD가 필요한 예 - 학회지에 실리는 논문 형식 - 전자상거래시 기업간 주문서 - 관공서에서 사용되는 공문 양식
presentation 정의 XSLT(eXtensible Stylesheet Language Transformation) - xml문서를 다른 문서로 변환하기 위한 기본 규칙 정의 XSL-FO(XSL Formatting Object) - 문서를 원하는 형태로 출력 - 문서 전체의 Layout 정의 CSS (Casscading StyleSheet) - html의 기본 스타일 - 페이지의 Layout 정의
문법에 맞는 문서 Well-Formed Documemt - XML 문서에 쓰인 용서들은 시작태그와 종료태그가 존재 XML parser의 종류 - 검증용 파서(validating parser) : DTD가 있는 문서의 유효성 검증 - 비검증용 파서(non-validating parser) : XML문서가 문법에 맞는지만 검사
유효한 문서 유효성 검증(validating) - XML문서가 DTD의 정의대로 올바로 작성되었는지 검사 Valid Document - DTD가 있는 XML문서를 검증용 파서를 사용해 파싱하여 아무런 오류도 발생하지 않는 문서
XML 특성 읽기 쉽고, 배우기 쉽다. HTML을 XML로 변환, SGML사용자가 쉽게 사용 가능 TAG의 확정성 제공 : 문서 관리 문서 구조의 연속적인 중첩의 허용 : 자료의 구조화 Multi-Point Connection : E-commerce DTD와 Content의 분리/병합 : 유지/보수의 편리 및 확장성 다양한 XML Process 는 표준을 따르고 있고, 무료 .
XML 응용분야 XML의 응용 가능성 : 문서응용, 데이터 응용 -XML은 HTML 문서를 간단하게 생성 (문서의 관리) - 큰 웹사이트 관리 (웹사이트 아키텍처) - 조직간의 정보교환 (B2B) - 데이터베이스에 정보를 적재, 불러오기 - 다른 웹사이트들에서 사용가능하도록 정보를 배포용 컨텐츠 제작 - 전자상거래 응용프로그램 - 수학 및 화학 공식을 위한 마크업 제공 (MathML) - 저작권 및 소유권 표현의 마크업을 통한 e-Book 응용에 활용 - 최적화된 새로운 마크업 언어를 적용한 휴대장치
XML응용분야-1 문서 출판 XML은 문서구조에 대하여 중심적, 매체에 대하여 독립적 Post script XML 문서 HTML WML
XML응용분야-2 데이터응용 데이터베이스와 같이 데이터 관리 < > < > . . < > . < > . <XML로 표현된 문서구조> <XML로 표현된 데이터베이스>
XML응용분야-3 데이터응용 조직사이의 데이터교환 : 웹서비스로의 응용 인터넷 기존 응용 프로그램 응용 프로그램 서버 클라이언트(브라우저)
XML 설계목표 인터넷 상에서 바로 사용가능해야 한다 다양한 응용을 지원해야 한다. SGML과 호환이 있어야 한다. 문서는 사람이 읽을 수 있어야 하며, 명확해야 한다. XML 설계는 빠르게 준비될 수 있어야 한다. XML 설계는 형식에 맞고 간결해야 한다. XML 문서는 만들기 쉬어야한다. 태그 생략하는 간결성은 구조의 명확성을 해치지 않는 범위내에서 허용
XML 기본 문법
A Rule of XML Document XML 선언으로 문서시작 데이터를 포함하는 엘리먼트는 시작/종료 태그를 갖고 있다. 데이터를 포함하지 않고 하나의 태그만을 사용한는 엘리먼트는 />으로 끝난다. 문서는 다른 모든 엘리먼트를 포함하는 하나의 엘리먼트만을 갖는다. 엘리먼트는 다른 엘리먼트를 둘러 쌀 수는 있지만 중첩은 안된다. <,& 문자는 시작태그에만 사용되고, 필요한 다른 경우에는 엔터티 레퍼런스를 사용한다.
Document 구성요소 Prolog - XML Declaration ex. <?xml version = “1.0” encoding=“enc-kr”?> <?xml:stylesheet type=“text/xsl” href = “aaa.xsl”> - Document Type Declaration <!DOCTYPE 책방 SYSTEM “aaa.dtd”> Body - 한 개 이상의 엘리먼트로 구성됨 - 트리 구조를 갖는다. - 주석 Prolog Xml version, encoding Xml stylesheet Xml Doctype <root> BODY
Markup Syntax Element 구조 <이름 lang = “KOR”> 전 혜 영 </이름> startTag Attribute Content endTag Element
ML(Markup Language)의 특징 – 정보 공유 위해 (프리젠 테이션) HTML 구조적 ML – Tree 구조 (사용자 구조 정의 가능 : SGML(필수), XML(선택)) 의미적 ML – TAG name 임의 결정 (SGML, XML)
XML Declaration <?xml version =“1.0” encoding=“UTF-8” ?> encoding 언어를 선택 ( UTF- 8 or euc-kr ) DTD External Subset References <!DOCTYPE root_element SYSTEM “system_id”> Internal Subset References <!DOCTYPE root_element[ … ] >
Well-formed & Valid Documents 문서가 하나 이상의 element들 포함하여야 함. 전체 문서에 대한 유일한 root element가 있어야 함. 모든 엘리먼트는 start-tag, end-tag 로 구성. overlap 불가. Valid 반드시 DTD가 있어야 함 DTD 에 정의된 엘리먼트의 구조 순서 등에 따라 엘리먼트를 사용해야한다.
Names Letter, underscore(_), colon으로 시작되어야 함. 대, 소문자 구분을 함. - 시작시 첫 문자가 XML 이름 으로 시작하면 안 됨. 대, 소문자 구분을 함. 숫자로 시작하면 안됨. 올바르지 못한 Names ex) XmlDate, XML_Type, -Book, 44Book 바른 Names ex) Book, _Book, B123, _XML, _42book
Empty – Element Content가 없는 경우에도 속성값은 갖는다. <제목></제목> <제목 /> <제목 lang=“eng”></제목> <제목 lang=“eng” />
Attributes Attributes value는 XML paser에 의하여 웹 브라워저에 인식되어짐 <이름 사원번호=“123” 사진=“전혜영사진.jpg”>전혜영</이름>
Comments <!-- 주석 내용 --> ex) 태그 안에는 올 수 없다. 주석 내용에 -- 나올 수 없다. <!-- 주석 내용 --> 태그 안에는 올 수 없다. 주석 내용에 -- 나올 수 없다. ex) <태그>…….내용………</태그<!-- 주석 -->> <!-- 주석 -- 내용 -->
Entity Reference XML에서 entity는 문서의 단위 한글자에서 문서 전체 참조 엔티티 설명 엔티티 참조 < Less than sign > Greater than sign “ Quotation mark " ‘ Apostrophe ' & Ampersan &
CDATA Section 문서 내에서 파싱되지 않는 영역 문자열속에 엔티티 레퍼런스 문자를 쓸 수 있음 <?xml version="1.0" encoding="euc-kr"?> <예제> 이 문서는 예제 파일입니다.i<4 <![CDATA[ <예제_1> for(int i=0 : i<5: i++){…} </예제_1> ]]> </예제>
DTD
Table of Contents DTD ? Elements Attributes Processing Instruction CDATA, ID, IDREF, ENTITY, NOTATION Processing Instruction Parameter Entity Reference Comment Space Conditional Section
DTD가 왜 필요한가? 프로그램 관점에서 보면 구조화되어 있지 않은 XML은 다루기가 어렵움 문서를 공유하기 위해서는 문서 폼을 일치 시켜야 함 정보전달 차원에서 문서의 통일화—업무의 복잡성 제거, 업무처리 자동화 시스템 개발 시간단축 예) 논문, 보고서, 법령, 주문서 등
DTD의 역할 문서의 구조를 사용자가 정의 - DTD 자신의 문서가 갖을 Formal Structure를 표현 Valid Document DTD가 선언된 문서에 대해서는 파서가 자동적으로 DTD에 기술된 문서구성 규칙에 따라 문서가 구성되어있는지를 체크함. 문서를 처리할 응용 시스템으로 넘겨주기 전에 Valid여부를 체크함으로써 처리 효율을 향상 시킴 Business Document의 추진 정형화, data type check등이 강화되어야 함 XML 문서의 규칙 강화 DB에서 사용되어지는 data type까지 DTD에 정형화 하는 작업 추진
DTD와 XML Document External Subset References <?xml version =“1.0” encoding =“UTF-8”> <!DOCTYPE aaa SYSTEM “c:\ddd.dtd”> Internal Subset References <!DOCTYPE aaa[ ] > <aaa> </aaa>
Elements ELEMENT - XML Element type 선언 ATTLIST - Element Type 속한 attribute 및 허용값 선언 ENTITY - 재 사용할 수 있는 content 선언 NOTATION - parsing 되지 않는 external content (ex. Binary data)에 대한 data format 선언
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 colon ex) <!ELEMENT chapter (title, text)> <chapter> <title>…..</title> <text>…..</text> </chapter>
Element Content Models Order operators and Cardinality operators Symbol Usage , Strict ordering | Selection ( ) Grouping * Repetition (0회 이상) ? Optional + Repetition (1회 이상)
실 습 <!ELEMENT ex1 (A?, B, (C | D), E?)> 실 습 <!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)*>
Attributes XML Element Attribute를 포함한다. Element와 관련된 추가의 정보를 위한 것 Syntax <!ATTLIST element_name attribute_Definition*> attribute_Definition = attribute_name, attribute_type, default_values Ex. <!ELEMENT 자동차 EMPTY> <!ATTLIST 자동차 is_blue (yes | no) “yes” brandname ID#REQURED description CDATA #IMPLIED> <자동차 is_blue=“no” brandname=“KIA” description = “차” />
Default Values 타 입 설 명 #REQUIRED 필수 속성 #IMPLIED 속성 생략 가능 # FIXED
Attributes Types 타 입 설 명 CDATA 문자 테이터만 포함 ENUMERATION 나열된 값 중 선택 ID 속성값이 유일. 요소를 식별할 수 있게 한다. IDREF/IDREFS 선언된 ID값을 참조한다. ENUMERATION 나열된 값 중 선택 NMTOKEN/NMTOKENS 이름 작성 규칙을 맞는 데이터 사용 NOTATION DTD에 선언된 NOTATION명만 사용 ENTITY DTD에 선언된 ENTITY명만 사용
Attributes Types 타 입 설 명 CDATA 속성이 문자 테이터만 포함할 수 있다. <!ELEMENT 자동차 EMPTY> <!ATTLIST 자동차 설명 CDATA #IMPLIED> <!ATTLIST 자동차 보이기 (True | False) “True”> <자동차 보이기=“True” 설명=“차” / >
타 입 설 명 ID 속성값이 유일하여 요소를 식별할 수 있게 한다. IDREF <!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”>홍지동</구성원> </가족>
Entity 재사용성을 높다 일반 Entity 파라미터 Entity parsed – 문자 데이터 DTD에서 entity 선언을 하고 XML문서내에서 사용 Parsed Entity, Unparsed Entity 파라미터 Entity DTD에 Entity 선언을 하고 DTD 내에서 사용 parsed – 문자 데이터 unparsed –비문자 데이터 ex)그림, 음악, 동영상 built-in entity-미리 정의된 entity ex) < > & " '
Parsed Entity(내부, 외부) Entity 이름이 entity의 내용으로 치환되어 문서의 일부가 된다. entity 내용은 파서에 의해 XML 규칙을 위배하는지 검사를 받아야 한다. 즉 엔티티 레퍼런스가 entity 내용으로 못 온다. In dtd <!ENTITY ENTITY 이름 “ENTITY 내용”> In xml <Tag>&ENTITY 이름;</Tag>
Unparsed Entity Entity의 내용이 XML이 아닌 text문서나 그 외의 것들로써 entity 이름이 entity의 내용으로 치환되지 않는다. 해석 안된 entity는 하나의 관련된 NDATA(notation)을 갖는다. In dtd <!ENTITY ENTITY_이름 시스템인식자 Entity위치 NDATA notation이름> <!NOTATION notation이름 시스템인식자 > In xml <Tag>&ENTITY 이름;</Tag>
파라미터 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>
파라미터 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>
NOTATION 문자가 아닌 그림, 동영상, 음악 파일 등의 포맷을 식별 MIME 타입과 유사기능 <!NOTATION n_name (SYSTEM|PUBLIC) “…” > <!NOTATION gif PUBLIC “image/gif” “photoshop.exe” > <!ATTLIST image src CDATA #REQUIRED type NOTATION (gif|jpge|bmp) #REQUIRED>
Conditional Section DTD를 적용될 영역(INCLUDE)과 무시할 영역(GNORE)구분 <![(INCLUDE|IGNORE)[ dtd 내용 ]]> <!ENTITY % part1 “INCLUDE|IGNORE” > <![%part1; [ DTD내요
Namespace
namespace 사용 이유 접두사 사용 1999년 1월 14일 W3C 권고안 채택 여러 dtd에서 파생되는 xml 문서 작성 element name의 중복 접두사 사용 <학생:이름> 홍길동</학생:이름> <제품:이름> 컴퓨터</제품:이름> 1999년 1월 14일 W3C 권고안 채택
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 사용 범위
namespace 선언 default namespace는 element에만 적용 Attribute에 namespace 적용 <학교 xmlns=“http://www.school.com/School”> <name ymd:year=“1960” xmlns:ymd=“http://www.Date.com/Date> 즐거운 학교 </name> </학교>
Schema
스키마 언어 설계 목표 2001년 5월 XML Schema1.1 권고안 채택 DTD보다 표현력(다양한 데이터타입) 풍부 인터넷 바로 사용가능 W3C 규격 설계가 복잡하지 않다
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>
Schema Definition 외부 스키마문서 참조 엘리먼트 스키마 문서 정의 <?xml version=“1.0” encoding=“euc-kr”> <xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema”> </xsd:schema> 외부 스키마문서 참조 엘리먼트 include, import, redefine, annotation 스키마 문서 정의 element, attribute simpleType, complexType group, attributeGroup notation, annotation
주석 ML 주석 <!-- ~~~ --> annotation element <annotation> <appinfo [source=“외부참조문서경로”] > 응용프로그램을 위한 주석 </appinfo> <documentation source=“uri” xml:lang=“사용언어”> 사용자가 읽기 위산 서술형 주석 </documentation> </annotation>
Element element 참조 local element 선언 <element ref=“elementName“ /> local element 선언 <element name=“이름” minOccurs=“횟수” maxOccurs=“unbounded” type=“complexType or simpleType” > </element>
Attribute <attribute name=“ “ ref=“참조 글로벌 속성명” use=“required|optional” default=“value” type=“simpleType”/>
Type complexType : element 구조 정의 built-in simple type : 이미 정의된 타입 primitive : string, boolean, decimal, float, anyURI, QName, date, gYear … Derived : normalizedString, token, ID, IDREF, ENTITY … 사용자 정의 타입(simpleType)
simpleType <simpleType name=“ “> </simpleType> (restriction | list | union) </simpleType> 범위, 문자패턴, 특정값 등을 설정할때 사용 <restriction base=“기존타입” ></restriction> 공백으로 분리된 여러 데이터를 가진 타입 <list itemType=“simpleTypeName” /> 여러 개의 타입 결합 <union memberType=“simpleT1 T2 T3 …” />
complexType 속성 , sub element를 가진 element 선언시 <complexType name=“ “ > (sequence | choice) <attribute name=“” type=“” /> </complexType>
notation 그림, 동영상, 음악 파일 포맷 식별 <notation name=“ “ system=“프로그램 경로 public=“MIME 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” />
스키마 문서의 결합 같은 targetnamespace 다른 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>
XSL
XSL(eXtensible Stylesheet Language) CSS의 한계 극복 내용과 표시 형식 지정인 분리된 언어 XML을HTML처럼 브라우저에 보여주는 것이다. XML 내용 재사용 XSL만 바꿔주면 다른 형태로 보여줄 수 있다. XML을 다른 형태로 출력 사용자가 원하는 정보만 보여줄 수 있다
XSLT (XSL Transformation) w3c 1999.11.16 권고안 발표 xml문서의 구조를 다른 구조로 변환 XPath를 이용하여 경로 확인 XSL-Fo (XSL Formatting Object) xml문서를 비 XML문서로 변화(PDF..)
XSLT의 element output template apply-Templates value-of (element, attrigute) sort for-each if choose / when / otherwise number copy-of variable param include import
XSL 선언 xslt 문서 선언 xml 문서 호출 <xsl:stylesheet version="1.0” xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > </xsl:stylesheet> xml 문서 호출 <?xml-stylesheet type=“text/xsl: href=“XXX.xsl” ?>
output 문서를 변환후 생성되는 문서의 종류 기술 <xml:output method=“html|xml|text” version=“1.0” encoding=“euc-kr” />
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"?>
Apply-Templates Apply-Templates 란? select에 의해 element 나 Attribute를 접근하는 xpath로 노드(들)이 선택되고 선택된 노드에 대해 template이 적용됨 select가 생략되어 있으면 자식 노드가 적용됨 사용법 <xsl:apply-tamplates select = “element나 attribute를 접근하는 xpath” />
Apply-Templates select에 의해 element 나 Attribute를 접근하는 xpath로 노드(들)이 선택되고 선택된 노드에 대해 template이 적용됨 select가 생략되어 있으면 자식 노드가 적용됨 <xsl:apply-tamplates select = “element나 attribute를 접근하는 xpath” mod=“ “/>
<xsl:stylesheet xmlns:xsl="http://www. w3 <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 match="lastname"> 1111 </xsl:stylesheet>
value-of select를 이용해 원하는 Element값이나 Attribute값을 나타냄 Element 값 추출 사용법 <xsl:value-of select = “element나 attribute를 접근하는 xpath” /> Attribute 값 추출 사용법 <xsl:value-of select = “element나 attribute를 접근하는 xpath/@Attribute이름” />
<xsl:stylesheet xmlns:xsl="http://www. w3 <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 match="lastname"> 1111 </xsl:stylesheet>
For-each select에 의해 선택된 노드에 template을 직접 for-each구문에 담고있음 <xsl:for-each select=“Xpath"> …………………. </xsl:for-each>
sorting 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
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 이 있음
if 지정한 조건을 만족할 때 지정 문장을 수행 <xsl:if test=“expression"> 지시문 </xsl:if> test : expression을 검정해서 논리(boolean)형으로 결과를 리턴 지시문 : 리턴값이 참이라면 지시문 실행
Xsl:choose Xsl: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 : when의 조건에 맞지 않다면 마지막으로 실행되는 구문 실습 choose.xml , choose.xsl
choose 프로그램 상에서 else if와 같은 기능 When: if의 기능과 같음, choose 구문에서 syntax <xsl:choose> <xsl:when test=“expression"> 지시문 </xsl:when> <xsl:otherwise> </xsl:otherwise> </xsl:choose> When: if의 기능과 같음, choose 구문에서 syntax test : expression을 검정해서 논리(boolean)형으로 결과를 리턴 otherwise : 마지막 그외 일때 수행
XPath
XPath 트리구조를 이용해서 사용자가 원하는 위치에 접근하기 위한 경로 절대경로 Root Element에서 시작 /grandfather/father/son/grandson 상대경로 특정 Element에서 시작 ./son/grandson (현재 위치가 father(1)) 7Node root, element, attribute, text, namespace, processing instruction, comment
SAX
SAX(Simple API for XML)
SAX
SimpleSAX.java
DefaultHandler
SAX Packages SAX includes these packages JAXP package includes org.xml.sax org.xml.sax.ext org.xml.sax.helpers JAXP package includes javax.xml.parsers SAXParserFactory SAXParser
JAXP properties package properties 실행 javax.xml.persers.SAXPerserFactory javax.xml.Persers.DocumentBuilderFactory properties 실행 cmd>java -Djavax.xml.persers.SAXPerserFactory = differentFactoryProgram_name
DefaultHandler class <<interface>> ContentHandler DTDHandler <<interface>> ErrorHandler <<interface>> EntityResolver DefaultHandler
ContentHandler interface startDocument() throws SAXException endDocument() throws SAXException startElement(String nsURI, String localName, String qName, Attributes atts) throws SAXException endElement(String nsURI, String localName, String qName) throws SAXException setDocumentLocator(Locator locator) ignorableWhitespace(char[] ch, int start, int length) throws SAX Exception characters(char[] ch, int start, int length) throws SAX Exception
ErrorHandler interface error(SAXParseException exception) throws SQLException fatalError(SAXParseException exception) throws SQLException warning(SAXParseException exception) throws SQLException
Attributes int getLength() String getLocalName(int i) String getQName(int i) String getURI(int i) String getValue(int i) String getValue(String qName) String getValue(String uri, String localName) AttributesImpl(Attributes atts) interface
Parse Methods parse(File f, DefaultHandler dh) parse(InputSource is, DefaultHandler dh) parse(InputStream is, DefaultHandler dh) parse(String uri, DefaultHandler dh)
Locator interface int getLineNumber() int getColumnNumber() String getPublicId() String getSystemId()
Mapping
예제 school.xml에서 특정학생정보 검색하기
DTD Check
DOM
DOM Document Object Model w3c의 표준안 문서의 구조를 메모리상의 트리로 관리 직접 접근 가능 트리구조안의 node 삽입, 삭제, 변경, 생성, 검색 가능
Preserving Write Space root element 에 xml:space=“preserve” 추가 기존 xml에만 적용
DOM Programming
Namespace and validation DocumentBuilderFactory void setNamespaceAware(boolean) void setValidating(boolean) DocumentBuilder newDocumentBuilder() DocumentBuilder Document parse(String)
Root Elements Element getDocumentElement()
Document Adding Nodes Comment createComment(String) Node appendChild(Node) throws DOMException
DOM Output to Standard Output void write(Writer out, String encoding) throws IOException void write(OutputStream out) throws IOException void write(Writer out) throws IOException
Class Hierarchy of Nodes
Node Node List Node List Processing NodeList interface short getNodeType() String getNodeName() String getNodeValue() NamedNodeMap getAttributes() Node List Processing NodeList getChildNodes() NodeList interface int getLength() Node item(int index)
Summary of Main Node Types Modification methods Property methods Document Create methods Element normalize method Attr Property Methods
Editing Element Attribute Specifications
Parent-Child Access Methods Node getParentNode() Node getFirstChildTa() Node getLastChild() Node getProviousSibling() Node getNextSibling() boolean hasChildNodes() NodeList getElementsByTagName(String tagName)
NodeAccess.java
orderlist.xml orderlist.dtd
Running the NodeAccess
DOM Error Handling builder.setErrorHandler(new UserHandler()); ErrorHandler interface method void error(SAXParseException exception) void fatalError(SAXParseException exception) void warning(SAXParseException exception)
예제 DOM을 이용해서 xml 문서 만들기 school.xml 에서 특정 학생 검색하여 해당 학생의 모든 정보 출력하기
XSL
XSL eXtensible Stylesheet Language XSL XSLTransformations XSLFormatting Object
XSL Process
javax.xml.transform.Soruce interface
javax.xml.transform.Result interface
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
TrAX Stream XSLT Transformation