XML(Extensible Markup Language) xml programming
Agenda Markup 이란? XML 일반 XML 기본 사항 XML vs HTML 관련된 기술들 xml programming
What is Markup? 원래의 내용에 추가적인 정보를 표현 몇가지 마크업 언어들 양식적 마크업 구조적 마크업 의미적 마크업 몇가지 마크업 언어들 SGML (Standard Generalized Markup Language) HTML (HyperText Markup Language) XML (eXtensible Markup Language) xml programming
Mark Up이란? 마크업이 모야? mark up(사전적 의미) ① …에 비싼 값을 매기다, 값을 올리다. ② [술집의 계산서 따위에] …을 덧붙여 써 넣다 마크업은 그 화일이 프린터로 출력되거나 화면에서 어떻게 보여야할 것인지를 나타내기 위해, 또는 그 문서의 논리적인 구조를 묘사하기 위해서, 텍스트나 워드프로세싱 파일의 특정위치에 삽입되는 일련의 문자들이나 기호들을 말한다 xml programming
… 이름, 성, 전자메일주소 길동, 홍, hong@daum.net Comma를 이용한 MarkUp으로 자료를 분리 문제점 : 자료사이의 관계나 자료자체에 대한 의미가 존재하지 않는다. 컴퓨터는 정보의 추리가 어렵다. xml programming
… 컴퓨터가 처리할 수 있는 MarkUp은? HTML과 XML 살짝 비교!!! 신문기사에서 제목 작성자 작성자의 메일주소 작성날짜 내용 을 WebRobot Agent가 분리하게 하려면… xml programming
MarkUp의 종류 구두점(Punctuational) MarkUp 표현(Presentational) MarkUp 절차(Procedual) MarkUp 서술(Descriptive) MarkUp 참조(Referential) MarkUp 메타(Meta) MarkUp XML : 서술 MarkUp, 메타 MarkUp xml programming
구두점 마크업 구두점 마크업은 구문 정보를 제공하기 위해 약속된 일련의 문자집합. Ex) , or . or 공백 문제점 자료사이의 관계나 자료자체에 대한 의미가 존재하지 않는다. (모호성) 컴퓨터는 정보의 추리가 어렵다 xml programming
표현 마크업 표현 마크업은 표현 마크업은 수직, 수평 공백주기, 페이지 분리, 리스트등을 포함하고 있다. 구두점을 사용한 가장 기본적인 마크업에 다양한 방법으로 표현을 명확하게 만드는 보다 수준 높은 구성 요소를 제공한다. 표현 마크업은 수직, 수평 공백주기, 페이지 분리, 리스트등을 포함하고 있다. xml programming
절차 마크업 절차 마크업은 문제점 표현 마크업이 갖는 모호성을 제거하여 텍스트 처리 프로그램에서 사용 가능하도록 포맷을 지정할 수 있는 명령어를 포함하고 있다. 문제점 물리적 페이지 표현은 가능하지만 논리적 구조나 의미는 나타낼 수 없다. xml programming
서술 마크업 서술 마크업은 절차 마크업에서 처리가 불가능했던 문서에 대한 논리적인 구조를 다룰 수 있는 태그 집합을 제공한다. 텍스트 엘리먼트가 어떻게 표현되는지를 지정하는 대신, 텍스트 엘리먼트가 무엇인지를 지정한다. xml programming
참조 마크업 참조 마크업은 Ex) 문서 외부에 존재하는 엔티티를 참조하여 프로세싱 도중에 치환하는 기능을 제공한다.   : 공백을 의미 © : 저작권 표시 xml programming
메타 마크업 메타 마크업은 SGML or XML = 메타 마크업 언어 마크업 해석을 변경하거나 서술 마크업 언어의 태그등을 새로 만드는(확장) 경우에 사용된다. SGML or XML = 메타 마크업 언어 DTD를 사용하여 마크업에 필요한 태그를 유연하게 변경할 수 있다. xml programming
XML은? XML은 서술 MarkUp, 메타 MarkUp 이다!!! xml programming
XML이란? XML이란 무엇인가? Why Should I Use It? How Do I Use It? xml programming
XML의 탄생 SGML HTML XML (Hypertext Markup Language; W3C:1992) (Standard Generalized Markup Language; ISO 8879:1986) HTML (Hypertext Markup Language; W3C:1992) XML (Extensible Markup Language; W3C:1998. 2) xml programming
SGML SGML이란 SGML문서의 구성 문서에서 논리구조와 내용 구조를 기술하기 위한 메타언어(meta language) SGML Declaration Document Type Definition(DTD) Document Instance(DI) xml programming
SGML특징 SGML의 제한 SGML의 장점 S/W를 프로그래밍하기 어렵다.(SGML의 복잡성) Web에서 S/W제한과 Instance의 이식성 결여 논리구조 작성의 어려움(DTD작성 어려움) 산업계의 지원 문제 SGML의 장점 유연성 개방표준 시스템이나 플랫폼에 독립적 재사용성 xml programming
HTML Hyper Text Markup Language W3C SGML의 한 응용 HTML = SGML선언 + 하나의 DTD xml programming
HTML 특징 HTML의 한계 HTML의 장점 고정된 태그 집합 구조화 능력부족 효과적인 검색, 재사용, 검증이 불편 100여개의 태그가 존재하지만… 구조화 능력부족 효과적인 검색, 재사용, 검증이 불편 HTML의 장점 이식성과 사용이 편리 쉬운 사용방법 xml programming
XML Extensible Markup Language XML의 특징 (W3C 에서 1996년 초안발표) 간단성 지금까지 경험에 기본(SGML, HTML) 확장성(태그에 제한 없음) 링크의 자동 생성이 가능 차세대 하이퍼텍스트 기능을 제공 문서의 재사용 용이 플랫홈, 응용 App에 독립적 Primary character set으로 8-bit ASCII와 Unicode를 사용 xml programming
XML의 특징 XML과 SGML의 차이점 XML과 SGML의 유사점 XML과 HTML의 차이점 다양한 응용에 사용 XML이 SGML과 호환성을 갖는다 문서 내용을 포맷하기 위해 스타일 시트를 사용 XML과 HTML의 차이점 구조를 표현할 수 있다. 태그의 확장성 xml programming
SGML & XML & HTML SGML XML HTML XHTML, WML… SGML의 SUBSET SGML의 응용 xml programming
Sample : HTML <HTML> <BODY> <H1> XML 연구실 <li> 홍길동 <li> 이몽룡 <li> 석사2학기 <li> 성춘향 <li> 석사1학기 <li> 변학도 </BODY> </HTML> xml programming
Sample : XML <?xml version="1.0" encoding="euc-kr"?> <연구실 이름 = “XMLAB"> <담당교수> <이름>홍길동</이름> </담당교수> <학생> <이름>이몽룡</이름> <과정>석사2학기</과정> </학생> <이름>성춘향</이름> <과정>석사1학기</과정> <이름>변학도</이름> </연구실> xml programming
… xml programming
DTD 또다른 XML문서 <?xml version="1.0" encoding="euc-kr"?> <연구실> <연구실이름>XMLLAB</연구실이름> <담당교수>홍길동</담당교수> <학생 과정="석사2학기"> <이름>이몽룡</이름> </학생> <학생 과정 ="석사1학기"> <이름>성춘향</이름> <이름>변학도</이름> </연구실> xml programming
… xml programming
… XML <?xml version="1.0" encoding="euc-kr"?> <book-table > <book> <id>001</id> <title>xml programming</title> <author>jaelee</author> <book-type>컴퓨터</book-type> </book> <id>002</id> <title>java 와 xml</title> <author>홍길동</author> </book-table> xml programming
… DTD <!ELEMENT book-table (book)+> <!ELEMENT book (id,title,author+,book-type)> <!ELEMENT id (#PCDATA)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT book-type (#PCDATA)> xml programming
다시 정리!!! SGML HTML Hypertext Markup Language Standard Generalized Markup Language 대표적인 메타 마크업 언어 ISO 제정 (1986) 표준을 위한 표준 HTML Hypertext Markup Language SGML의 응용으로 WWW에서 사용하는 표준마크업 언어 메타 마크업 언어를 사용해서 만들어진 서술마크업 언어 xml programming
… XML XHTML ??? Extensible Markup Language SGML을 능가하는 간판급 메타 마크업 언어 HTML이 SGML응용이라면 XHTML은 XML의 응용 XHTML과 HTML은 100% 호환되지 않음 ??? HTML과 XML을 비교한다면??? xml programming
상식! W3C의 표준안 상태 Note Working Draft Proposed Recommandation 어떤 표준안이 회사나 단체로부터 제출되어 진 경우 Working Draft 본격적인 논의가 들어간 경우 Proposed Recommandation 충분한 논의후에 표준으로 정하기 별 문제 없는 경우 Recommandation 특별한 문제점이 드러나지 않는 경우 xml programming
XML관련표준 XLink XPointer XPath XSL(eXtensible Stylesheet Language) XSLT(XSL Transformation) XML Schema CSS(Cascading Style Sheets) xml programming
… XML 관련 표준이 많은 이유는? XML 스펙은 간결하게 XML자체에 대해서만 정의하고 있다. xml programming
어디에 이용할 것인가? XML은 기반기술로 분류되고 있으므로 특별히 XML을 사용하는 분야를 한정 지을 수 없다. 호환성(enable e-commerce transaction) 독립성(Independence) 다양한 포맷으로 변환 가능 (One data source, multiple views) 검색능력의 향상(Improved data searches) 풍부한 XML지원 소프트웨어 편리한 기반기술 xml programming
호환성 표준 규약을 따름으로 인해 호환성이 있다. HTML 스트리밍 표준규약이기 때문에 웹브라우져간 호환가능 서로 다른 규약으로 응용프로그램간에 호환성이 없다. xml programming
독립성 하드웨어나 운영체제, 프로그래밍 언어에 독립적인 특징이 있다. XML 파일은 유니코드를 적용한 텍스트 형식으로 표현할 수 있다. xml programming
다양한 포맷으로 변환 가능 Present 부분과 Process부분의 분리 XML은 직접 Present 형태를 가지지 않는다. 표현 마크업이나 절차 마크업이 아님 서술 마크업 XSL을 적용하므로써 다양한 포맷을 가질 수 있다. xml programming
검색 능력의 향상 XML의 태그가 논리적인 구조나 내용을 표현할 수 있다. 그러므로 단순한 서술 마크업(HTML)의 경우보다 정확한 검색을 할 수 있다. xml programming
풍부한 XML지원 소프트웨어 XML지원 소프트웨어 파서 변환도구(XSLT Processor) XML지원 웹브라우져 Etc… xml programming
편리한 기반 기술 응용프로그램에 대한 설계와 구현과정에 있어 이미 개발된 응용 프로그램 패턴을 그대로 적용할 수 있다. Ex: SAX or DOM Parser 응용프로그램 개발자는 어떻게 XML문서를 해석할지 고민하는 대신 해석한 XML내용을 어디에 사용할 지 집중적으로 고민할 수 있다. xml programming
XML의 적용 사례 IBM의 사이트 구현 WebServer XML Client Server XSL Processor HTTP Request WebServer HTTP Request XML 문서 Style Sheets XSL XML, XSL XSL Processor HTML 문서 HTML 문서 xml programming
… Data 통합 관리 기존 System Application Application Application 고객자료 A 고객자료 B 고객자료 C xml programming
… XML로 통합 XML Application Application Application 고객자료 A 고객자료 B 고객자료 C xml programming
… 다양한 형태의 서비스 제공 XSLT Processor a.XSL XML b.XSL c.XSL xml programming
어떻게 이용할 것인가? XML Processor XML프로세서는 XML문서를 읽어 내용과 구조에 접근하는 기능을 갖고 있다. XML프로세서는 다른 응용프로그램을 위해 존재하며, 이 응용프로그램은 XML프로세서로 부터 XML문서처리에 필요한 정보를 얻는다. XML규약은 XML프로세서 행동 양식을 기술하는데, 구체적으로 XML자료를 읽는 방식과 XML자료를 처리한 결과로 얻어지는 정보를 응용 프로그램에 제공하는 방식을 정의한다. xml programming
… XML Processor의 Parsing XML은 텍스트이기 때문에 프로그램이 XML을 읽기 위해서는 반드시 파싱과정을 거쳐야 한다. XML문서는 파싱과정을 통해 각각의 필요한 데이터로 구분된다. 응용프로그램은 구분된 데이터를 처리, 가공해 원하는 결과물을 만들어 내게 된다. xml programming
XML Processor Parsing.. DATA DATA XML 문서 결과 DATA DATA xml programming Application DATA DATA xml programming
… XML Processor의 API XML Processor = XML Parser ??? XML Processor는 Parsing된 각각의 DATA를 응용프로그램이 사용할 수 있도록 API를 제공한다. XML Processor = XML Parser ??? 일반적으로 XML Processor를 XML Parser라고 한다. xml programming
XML Parser의 종류 SAX (The Simple API for XML) DOM (Document Object Model) xml programming
XML 기본문법 kjaelee@orgio.net 이 길 재 xml programming
.. xml programming
Table of Contents 1. Introduction 2. Documents : well-formed XML 조건 3. Logical Structures : Element 와 Attribute 선언 방법 4. Physical Structures : Entity 와 Notation 선언 방법 5. Conformance : Valid 와 Non-Valid Processor 차이 6. Notation : 표기법 xml programming
1. Introduction xml programming
1.1 발단과 목적 xml programming
… 1.1 목표 XML은 인터넷상에서 수월하게 사용될 수 있어야 한다. XML은 다양한 적용(응용)이 가능해야 한다. XML은 SGML과 호환될 수 있다. XML문서를 처리하는 프로그램 작성이 쉬워야 한다. XML에서 추가적인 또는 생략 가능한 기능은 최소화해야 하며, 생략 가능한 기능은 아예 없는 것이 이상적이다. xml programming
… XML문서는 사람이 읽고 명확하게 이해할 수 있어야 한다. XML의 설계를 빠르게 하는 것이 가능해야 한다. XML의 설계는 정규적이며, 간결해야 한다. XML문서는 쉽게 작성 가능해야 한다. XML 마크업의 간결함은 필요에 따라 무시될 수도 있다. 이 스펙은 XML 버전 1.0을 이해하는 데 필요한, 그리고 XML문서를 처리하는 컴퓨터 프로그램을 만드는데 필요한 모든 정보를 제공한다. xml programming
2. 문서(Documents) Well-formed XML 과 Valid XML Well-formed XML 문서가 특정한 추가적인 제한 조건을 만족한다면 Vaild 문서가 될 수 있다. xml programming
Notation 이 스펙의 문법은 EBNF(Entended Backus-Naur Form) 이다. Symbol ::= expression [a-zA-Z], [#xN-#xN] - 지정된 범위의 모든 문자들 중 하나 [^a-z], [^#xN-#xN] - 지정된 범위 밖의 모든 문자들 중 하나 [^abc], [^#xN#xN#xN] - 주어진 문자 이외의 모든 문자들 중 하나 xml programming
… (expression) 표현식은 하나의 단위로 취급, 다음의 방식으로 결합가능 A? - A가 하나 나오거나 나오지 않을 수 있다.(0 or 1) A+ - A가 하나나 그 이상 나올 수 있다. (1 or more) A* - A가 나오지 않거나 여러 개 나올 수 있다. (0 or more) A B - A 다음에 B가 나와야 한다. A | B - A나 B중 하나만 나올 수 있다. A - B - A에는 일치하지만 B에는 일치하지 않는 문자열에 해당한다. xml programming
… 물리적 구조와 논리적 구조 물리적 관점 논리적 관점 하나의 문서는 Entity라는 단위로 구성된다. Declarations (선언) Elements (요소) Comments (주석) Character references (문자참조) Processing Instruction (처리지시) 로 구성된다. xml programming
물리적 관점 : Entity Entity 인사말.XML 편지.XML 원문 <?xml version=“1.0” …?> <편지 > <본문> <주제>문안인사</주제> <내용>건강하세요</내용> </본문> </편지> <인사말> 안녕하세요!!! </인사말> Entity 인사말.XML 편지.XML <?xml version=“1.0” …?> <편지 > <인사말> 안녕하세요!!! </인사말> <본문> <주제>문안인사</주제> <내용>건강하세요</내용> </본문> </편지> 원문 xml programming
시작하기 앞서… 2.3 Common Syntactic Constructs 문법에서 널리 쓰이는 몇 가지 기호를 정의한다. 공백문자 캐리지 리턴 라인피드 탭 [3] S ::= (#x20 | #x9 | #xD | #xA) + xml programming
… 이름과 토큰 [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender [5] Name ::= (Letter | ' _ ' | ':') (NameChar)* [6] Names ::= Name (S Name)* [7] Nmtoken ::= (NameChar)+ [8] Nmtokens ::= Nmtoken (S Nmtoken)* xml programming
2.1 well-Formed XML 문서 A textual object가 well-formed XML 문서이기 위해서는 문서 전체 객체가 document라는 생성 규칙과 일치해야 한다. 문서의 모든 부분들은 이 스펙에 명시되어 있는 well-formedness 제한조건을 만족해야 한다. 문서 안에서 직, 간접 참조되는 각각의 (파싱되는)Entity도 모두 well-formed이어야 한다. xml programming
… [1] document ::= prolog element Misc* 2. Root라고 불리는 element는 단 한 개 이어야 한다. 또 element는 서로 내포 관계가 꼬여서는 안된다. [1] document ::= prolog element Misc* xml programming
XML 문서의 구성요소 xml programming Prolog XML Declaration DocType <root> BODY </root> xml programming
2.8 Prolog and Document Type Declaration [22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)? <?xml version=“1.0” ?> <!DOCTYPE greeting[ <!ELEMENT greeting (#PCDATA)> ]> <greeting> Hello, world! </greeting> XML 선언 (XML Declaration) DocType 선언 (Doc Type Declaration) XML 문서 xml programming
… XML선언 선언을 빼도 well-formed이다. [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' [24] VersionInfo ::= S 'version' Eq (' VersionNum ' | " VersionNum ") [25] Eq ::= S? '=' S? [26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')+ [27] Misc ::= Comment | PI | S <?xml version=“1.0” ?> xml programming
… 4.3.3 Character Encording in Entities [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' [80] EncodingDecl ::= S'encoding' Eq ('"' EncName '"' | "'" EncName "'" ) [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')* <?xml version=“1.0” encoding=‘euc-kr’?> - Unicode / ISO/IEC 10646("UTF-8", "UTF-16", "ISO-10646-UCS-2", "ISO-10646-UCS-4“) - ISO 8859("ISO-8859-1", "ISO-8859-2“, "ISO-8859-9“) - 한글 코딩 형식(“EUC-KR”) xml programming
… DocType선언(DTD = 외부DTD + 내부DTD) [28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' (markupdecl | PEReference | S)*']' S?)? '>' <?xml version=“1.0” ?> <!DOCTYPE greeting SYSTEM “greet.dtd” [ <!ELEMENT greeting (#PCDATA)> ]> <greeting> Hello, world! </greeting> XML 문서 xml programming
3. Logical Structures Element [39] element ::= STag content Etag | EmptyElemTag [40] STag ::= '<' Name (S Attribute)* S? '>' [42] ETag ::= '</' Name S? '>' content <?xml version=“1.0” ?> <greeting> Hello, world! </greeting> XML 문서 xml programming
… Content [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)* [14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*) [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)* <?xml version=“1.0” ?> <greeting> <To> ysjung</To> </greeting> XML 문서 xml programming
… Empty Element <?xml version=“1.0” ?> <greeting / > [39] element ::= STag content ETag | EmptyElemTag [44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>' <?xml version=“1.0” ?> <greeting / > XML 문서 xml programming
… Attribute <?xml version=“1.0” ?> [41] Attribute ::= Name Eq AttValue [10] AttValue ::= '"' ([^<&"] | Reference)* '"' |? "'" ([^<&'] | Reference)* "'" <?xml version=“1.0” ?> <greeting To = “ysjung” > Hi! </greeting> xml programming
… 2.5 Comments <?xml version=“1.0” ?> <!- - 여기는 주석 - -> [15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->' <?xml version=“1.0” ?> <!- - 여기는 주석 - -> <greeting / > XML 문서 xml programming
… 2.6 Processing Instruction 보통 시스템에서 알아서 처리하는 데 사용되는 정보를 기술하기 위해 사용한다. [16] PI::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>‘ [17] PITarget::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l')) <?xml version=“1.0” ?> <?xml-stylesheet type=“text/xsl” href=“sss.xsl”?> <greeting / > XML 문서 xml programming
Cont. 예제 <?cursor-blinking?> <?xml-stylesheet type=“text/xsl” href=“aa.xsl”?> <?sql string=“select * from UserTabel”?> xml programming
… 2.7 CDATA섹션 CDATA섹션은 마크업으로 인식되지 않아야 할 텍스트를 담는 이스케이프 블록으로 쓰인다. [18] CDSect::= CDStart CData CDEnd [19] CDStart::= '<![CDATA[‘ [20] CData::= (Char* - (Char* ']]>' Char*)) [21] CDEnd::= ']]>' xml programming
… Ex) <?xml version = '1.0' encoding="euc-kr"?> <html> <!--first example: hi~~--> <body> <![CDATA[ <body> > Hi 예제 ©</body> </html> ]]> </body> ©> XML 문서 xml programming
… Entity Reference 4장. Physical Structures에서 자세히 살펴보자. [67] Reference::= EntityRef | CharRef [68] EntityRef::= '&' Name ';' [69] PEReference::= '%' Name ';' xml programming
Well-formed XML 문서 만들기(실습) 팩스 문서에 대한 논리구조 팩스 (요망사항 <-긴급 or 답신요망) 수신 발신 날짜 제목 내용 발신처 인사말 수신처 수신자(직위) 발신자(직위) 본문 연락처 연락처 ? ? 전화번호 전화번호 ? 팩스번호 ? 팩스번호 xml programming
xml programming
DTD문법과 물리적 구조 kjaelee@orgio.net 이 길 재 xml programming
Valid XML Well-formed XML 문서가 특정한 추가적인 제한 조건을 만족한다면 Vaild XML 문서가 될 수 있다. DocumentTypeDeclaration = XML 문서가 따르는 문서 형을 지정 xml programming
DTD (Document Type Declaration) [28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' (markupdecl | PEReference | S)*']' S?)? '>' <?xml version=“1.0” ?> <!DOCTYPE greeting SYSTEM “greet.dtd” [ <!ELEMENT greeting (#PCDATA)> ]> <greeting> Hello, world! </greeting> XML 문서 xml programming
… DTD = 내부DTD + 외부DTD DTD Internal DTD Subset External DTD Subset xml programming
… 내부 DTD 선언 문서 개체(Document Entity = XML문서) 내부에 문서의 정의가 선언된 것을 말한다. <?xml version=“1.0” ?> <!DOCTYPE greeting SYSTEM “greet.dtd” [ <!ELEMENT greeting (#PCDATA)> ]> <greeting> Hello, world! </greeting> XML 문서 xml programming
… 마크업 선언 엘리먼트(Elements) 선언 속성(Attributes) 선언 엔티티(Entities) 선언 표기법(Notations) 선언 처리 명령(Processing Instructions) 선언 주석(Comments) 선언 [29] markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment xml programming
… 외부 DTD 선언 The SystemLiteral은 엔터티의 시스템 식별자이다. 시스템 식별자는 하나의 URI이다. XMLProcessor나 응용프로그램은 그 URI에서 Entity를 가져올 수 있다. [75] ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral xml programming
… Ex) System ID Public ID <?xml version=“1.0” ?> <!DOCTYPE greeting SYSTEM “greet.dtd” > <greeting> Hello, world! </greeting> <?xml version=“1.0” ?> <!DOCTYPE greeting PUBLIC “-//K4M // DTD Fax. Document::200000926” “인사.dtd” > <greeting> Hello, world! </greeting> System ID Public ID xml programming
… Element 선언 [45] elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>' [46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children <!ELEMENT br EMPTY > <!ELEMENT container ANY > <!ELEMENT p (#PCDATA|emph)* > <!ELEMENT book (author+, title) > (Ex) xml programming
… ANY EMPTY Element Mixed PCDATA ‘ANY’는 키워드이며 엘리먼트의 내용으로 잘 구성된 XML 데이터라면 어떤 것도 포함할 수 있다. EMPTY ‘EMPTY’는 키워드이며 엘리먼트의 내용으로 텍스트나 자식 엘리먼트 모두 올 수 없는 경우로 속성만 허용한다. Element 엘리먼트의 내용으로 자식 엘리먼트만 포함될 수 있다. Mixed 자식 엘리먼트와 텍스트 데이터가 모두 포함될 수 있는 경우이다. PCDATA 엘리먼트의 내용으로 텍스트만 올 수 있는 경우이다. [46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children xml programming
… ANY EMPTY Element Mixed PCDATA <!ELEMENT 내용 ANY > <!ELEMENT 그림 EMPTY > <!ATTLIST 그림 파일 ENTITY #REQUIRED > Element <!ELEMENT 팩스 (수신, 발신, 날짜, 제목, 내용)> Mixed <!ELEMENT 본문(#PCDATA|그림)*> PCDATA <!ELEMENT 제목 (#PCDATA)> xml programming
… [51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' <!ELEMENT memo (#PCDATA) > <!ELEMENT memo (#PCDATA)* > (위와 동일) <!ELEMENT memo (#PCDATA | p)* > <!ELEMENT p (#PCDATA | p | p1 | p3)* > 틀림 <!ELEMENT memo ( #PCDATA , p) > <!ELEMENT memo ( p | #PCDATA ) > xml programming
… 발생지시자 의미 ? 발생할 수 도 안 할 수 도 있음 (0 or 1) + 한번 이상 발생 (1 or more) * [47] children ::= (choice | seq) ('?' | '*' | '+')? 발생지시자 의미 ? 발생할 수 도 안 할 수 도 있음 (0 or 1) + 한번 이상 발생 (1 or more) * 0번이상 발생 (0 or more) 연결자 예 , A 다음에 B (A,B) | A 또는 B (A|B) xml programming
… Attribute 선언 <!ATTLIST elementName attrName attrType attrDefault defaultValue> ※Attribute는 Element의 메타 데이터나 프로퍼티를 기술하는데 사용될 수 있다. [52] AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>' [53] AttDef ::= S Name S AttType S DefaultDecl [60] DefaultDecl ::= '#REQUIRED' | ’#IMPLIED‘ | (('#FIXED' S)? AttValue) xml programming
ATTLIST 속성의 TYPE CDATA 열거값 ID IDREF, IDREFS NMTOKEN, NMTOKENS ENTITY, ENTITIS NOTATION xml programming
… CDATA <!ATTLIST AnElement its_attr CDATA #REQUIRED > Ex: <AnElement its_attr=“some text string”>…</AnElement> xml programming
… 열거값 <!ATTLIST personName honorific (Mr|Ms|Dr|Rev) #IMPLIED > Ex : <personName honorific=“Mr” >…</personName> NOTE!!! 모든 열거 값들은 반드시 적합한 XML네임 토큰을 가져야 한다. xml programming
… ID <!ATTLIST Person perID ID #REQUIRED> Ex: <Person perID = “kj”>…<Person> 다음은 적당치 않다… <Person perID = “1번”> … </Person> xml programming
… ID 타입을 사용하는 속성들은 주어진 요소 인스턴스를 위해 고유한 식별 이름을 제공한다. ID속성값은 반드시 XML이름 규칙을 따라야 한다. 이 타입에 속하는 모든 속성들은 반드시 #IMPLIED나 #REQUIRED로 선언 되어야 한다. 각 요소에 대한 고유 식별자로 상수나 기본값을 사용하지 못하게 하기 위해서… xml programming
… IDREF IDREFS <!ATTLIST Book author IDREF #REQUIRED> Ex: <Book author = “jaelee”>…</Book> IDREFS <!ATTLIST Book author IDREFS #REQUIRED> <Book author = “jaelee park_un”>…</Book> xml programming
… NMTOKEN, NMTOKENS CDATA속성 타입은 어떤 제한도 없이 모든 문자열이 허용된다. NMTOKEN 타입 속성은 XML NameChar 문자만 올 수 있다. CDATA와의 차이는 NMTOKEN 속성이 공백과 몇 가지 구두점을 포함하는 것을 금지하는 것이다. CDATA나 열거값을 사용하는 것이 낳다. xml programming
… NOTATION <!NOTATION GIF SYSTEM “ACDSEE.exe”> <!NOTATION JPG SYSTEM “JPG_Viewer.exe”> <!ATTLIST img type NOTATION (GIF|JPG) #IMPLIED> xml programming
… ENTITY, ENTITIS photo ENTITY #IMPLIED> <!ATTLIST Person photo ENTITY #IMPLIED> <!NOTATION GIF SYSTEM “ACDSEE.exe”> <!ENTITY 얼굴 SYSTEM “face.gif” NDATA GIF> <!ENTITY 풍경 SYSTEM NDATA GIF> Ex: <Person photo=“얼굴”>…<Person> NOTE 파싱되지 않는 외부 엔티티에 대한 레퍼런스를 허용한다. xml programming
… 속성의 기본값 #REQUIRED #IMPLIED #FIXED default_Value default_Value 속성은 반드시 모든 Element 안에 있어야 한다. #IMPLIED 속성은 선택적이다.(있거나 말거나) #FIXED default_Value 속성이 있는 경우에는 반드시 이 값과 일치해야 한다. 일치하지 않으면 Valid error를 발생, 만약 속성이 없다면 기본값을 속성값으로 여김. default_Value 속성은 도큐먼트안에 있을 수도 있고 없을 수도 있다. 만약 속성이 없다면 attribute에 기본값이 있다고 가정한다. xml programming
… #REQUIRED Default value가 필요.. xml programming
… #IMPLIED <!ATTLIST AnElement lts_attr CDATA #IMPLIED> Ex: <AnElement lts_attr=“some text”>…</AnElement> <AnElement >…</AnElement> xml programming
… #FIXED default_Value <!ATTLIST DOCUMEDNT version CDATA #FIXED “1.0”> Ex: <DOCUMENT version=“1.0”>…</DOCUMENT> <DOCUMENT>…</DOCUMENT> NOTE 이 경우 모든 Element는 동일한 값을 고정적으로 가지게 된다. 이렇게 값을 고정시킬 필요가 있다면 응용프로램에서 코드를 관리하는 것이 낳지 않을까? xml programming
… default_Value <!ATTLIST DOCUMENT version CDATA “1.0”> Ex: <DOCUMENT version = “1.0”>…</DOCUMENT> <DOCUMENT>…</DOCUMENT> // 이건 위와 같다… <DOCUMENT version = “7.7”>…</DOCUMENT> // 맨 아랫줄도 유효하다. NOTE <!ATTLIST DOCUMENT version “1.0” #IMPLIED> 이렇게 선언하면 element중에서 attribute가 없는 경우도 유효하다. xml programming
… attrType CDATA : 텍스트 Choice list : 부여할 수 있는 속성값을 미리 나열 ID : 문서 인스턴스 내에서 유일한 식별자 값을 부여함 IDREF, IDREFS NMTOKEN, NMTOKENS ENTITY, ENTITIES NOTATION xml programming
… Ex) (Ex) <!ELEMENT 발신자 (#PCDATA) > <!ATTLIST 발신자 직위 CDATA #IMPLIED> <발신자 직위=“대리”>홍길동</발신자> <발신자>성춘향</발신자> (Ex) xml programming
… Ex) (Ex) <!ELEMENT 팩스 (수신, 발신) > <!ATTLIST 팩스 요망사항 (긴급|검토요망) #REQUIRED> <팩스 요망사항=“긴급”> … </팩스> (Ex) xml programming
4. Physical Structures 물리적 구조 하나의 XML문서는 하나 이상의 저장 단위로 구성될 수 있다. 저장 단위가 Entity이다. 하나의 XML문서에는 하나의 문서개체(Document entity)가 존재한다. 문서개체는 XML 처리기에서 문서의 시작을 알리며 문서 전체를 담는 컨테이너 역할을 한다. xml programming
… Entity의 종류 일반 엔티티와 파라미터 엔티티 내부 엔티티와 외부 엔티티 Parsed 엔티티와 unparsed 엔티티 & 와 % 내부 엔티티와 외부 엔티티 Parsed 엔티티와 unparsed 엔티티 xml programming
… Entity Declaration [70] EntityDecl ::= GEDecl | PEDecl [71] GEDecl::= '<!ENTITY' S Name S EntityDef S? '>‘ [72] PEDecl::= '<!ENTITY' S '%' S Name S PEDef S? '>‘ [73] EntityDef::= EntityValue | (ExternalID NDataDecl?) [74] PEDef::= EntityValue | ExternalID xml programming
… Entity Reference [67] Reference::= EntityRef | CharRef [68] EntityRef::= '&' Name ';' [69] PEReference::= '%' Name ';' xml programming
… Ex) (Ex) <!DOCTYE TEXT [ <!ELEMENT text (#PCDATA)> <!ENTITY sgml “Standard Generalized Markup Language”> ]> <TEXT>SGML is the acronym of “&sgml;” </TEXT> (Ex) xml programming
… Ex) seoul Addr.txt (Ex) <?xml version="1.0" encoding="euc-kr"?> <!DOCTYPE Man [ <!ELEMENT Man (name, addr)> <!ELEMENT name (#PCDATA)> <!ELEMENT addr (#PCDATA)> <!ENTITY addr SYSTEM "addr.txt"> ]> <Man> <name>young</name> <addr>&addr;</addr> </Man> (Ex) xml programming
… Notation과 unparsedEntity (Ex) <?xml version="1.0" encoding="euc-kr"?> <!DOCTYPE Man [ <!NOTATION GIF SYSTEM “ACDSEE.exe” > <!ENTITY 그림 SYSTEM “pic.gif” NDATA GIF> ]> <Man> <figure file = “그림”/> </Man> (Ex) xml programming
5. Conformance(적합) Processor에 대한 행동 양식을 기술한다. Validating and Non-Validating Processors 두 경우 모두 document Entity (XML본문)와 그 외 읽어 들인 Parsed Entity에서 well-formed 한가를 검사한다. Validating Processor는 DTD의 조건을 위반하는 XML문서의 경우 그 사실을 보고한다. 그러기 위해서는 전체 DTD와 모든 external parsed entities 를 읽고 처리해야 한다. Non-Validating Processor는 단지 내부 DTD SubSet을 포함한 document Entity가 Valid한가 만을 검사한다. Processor가 읽어 들인 내부 DTD Subset과 Parameter Entity의 선언을 처리해야 한다. Processor가 읽지 않은 Parameter Entity의 참조를 만나기 전까지의 얘기이다. 만약 그 후에 만난다면 Entity선언이나 Attr List 선언등을 처리하지 않는다. xml programming
… Using XML Processors Non-Validating Processor의 경우는 외부 Entity를 읽어야 알 수 있는 well-formedness를 감지하지 못할 수 있다. Processor가 응용프로그램에게 정보를 넘겨줄 때, 그 정보는parameter Entity와 외부 Entity를 읽었는지 여부에 따라 매우 달라진다. Non-Validating Processor처럼 외부 Entity와 Parameter Entity를 읽지 않은 경우에는 내부 Entity에 치환되어야 하는 부분등이나 하는 작업을 처리하지 않으므로, 정보가 달라 질 것이다. xml programming
꼭 알고 넘어가자!!! XML문서는 반드시 한 개 이상의 엘리먼트로 구성된다. 잘못 구성 This is an XML Doc 바른 구성 <text>This is an XML Doc</text> xml programming
… 반드시 한 개의 루트 엘리먼트가 존재한다. 잘못된 구성 바른 구성 <item>Item 1</item> <list> </list> xml programming
… 모든 엘리먼트는 시작태그와 마감태그로 둘러싸여야 한다. 단, EMPTY엘리먼트는 예외이다. 또한 태그 이름은 대소문자를 구분한다. 잘못된 구성 <list> <item>Item 1</ITEM> <item>Item 2</item> </list> 바른 구성 <ITEM>Item 1</ITEM> xml programming
… 모든 엘리먼트는 시작태그와 마감태그가 서로 겹쳐지는(nested)것을 허용하지 않는다. 잘못된 구성 <text> <bold> <italic> XML </bold> </italic> </text> xml programming
… Empty 엘리먼트는 내용이 없는 엘리먼트로서, 예를 들어 다음의 표현은 서로 동일하다. <AAA></AAA> <AAA/> xml programming
… 엘리먼트는 하나 이상의 어트리뷰트를 가질 수도 있고 갖지 않을 수도 있다. 어트리뷰트의 이름과 값은 ‘=‘로 구분되며, 어트리뷰트의 값은 어포스트로피 또는 큰따움표로 묶여야 한다. 단 따움표의 쌍은 일치해야 한다. 어트리뷰트 이름으로 올 수 있는 문자열의 제한사항은 Element와 같다. xml programming
… 바른 이름 <Xsl:cp-of> <A_long> <a.name.se> <a1234-df> <_12> xml programming
… 주석은 마크업 및 선언부 등 어느 곳이나 올 수 있다. 단 예외로 XML선언부 이전에는 올 수 없으며 주석내부에 -- 가 올 수 없다. 잘못된 경우 <!-- this is wnong --> <?xml version=“1.0”?> … xml programming