XML 문서 작성하는 방법을 익힌다.
1.1. XML 문서의 종류 ¶
- XML 문서의 종류를 나누어 보면 다음 세 가지로 나눌 수있다
1 Invalid Documents : XML의 태그 규칙을 따르지 않거나,DTD를 사용한 경우에 DTD에 정의된 규칙을 제대로 따르지 않는 문서 2 Well-Formed Documents : DTD를 사용하지는 않지만,XML의 태그 규칙을 따르는 문서 3 Valid Documents : XML의 태그 규칙을 지키며 DTD에 정의된 방식으로 바르게 작성된 문서
- 위에 3개중 Invalid Documents는 실제 XML 문서로서의 역할을 할수 없다. XML 파서로 파싱 했을 때 바르게 파싱되지 않기 때문이다.
- 2번은 XML 문서에 DTD를 사용하지않았지만 XML 문서 태그 규칙에 맞게 작성되었으므로 Well-Formed 문서로 사용된다.
- 3번은 DTD도 사용하였고 태그 규칙도 맞게 작성된것이다.
1.2. XML 문서의 태그 규칙 ¶
1 시작 태그가 있으면 반드시 닫는 태그가 사용되어져야 한다. 2 시작 태그에 대응하는 닫는 태그가 오기전에 시작 태그의 바깥에 위치한 태그의 닫는 태그가 위치하지 않아야 한다.(태그들이 겹쳐서(orverlapped) 사용될수 없다.) 3 어트리뷰트의 값들은 끈따옴표로 둘러쌓여야한다.
1.3. XML을 사용하여 문서 작성하는 방법 ¶
step1. DTD 사용 여부 선택 step2. DTD를 사용하는 경우 사용할 DTD 선정 또는 새로 설계하여 작성 step3. Well-formed 또는 Valid한 문서가 되도록 XML 문서 작성 step4. 파싱 step5. 디스플레이
2.1. XML 문서란 무엇인가? ¶
- XML 문서는 XML로 기술된 구조적인 정보로 구성되는 문서이며 XML1.0스펙에 맞게 작성하며 XML을 지원하는 프로세서(또는 프로그램)에서 사용하기 위해서 Well-formed나 Valid한 형태로 작성된 문서를 말한다. ---> 정의
- XML문서는 택스트 파일이라는 형태로 저장되므로, XML파일 자체는 OS나 특정 프로그램에 의존적이지 않는 특성을 지닌다.
- XML문서는 문서로서의 역할을 하기도 하지만, 데이터들을 담을 수도 있다. 즉 XML 문서는 택스트 형태의 데이터로서의 역할을 할 수도 있다.
- XML 응용프로그램이란 이러한 택스트 객체(textual object)를 처리하여 사용할수 있는 프로그램이다.
2.2. XML 문서의 용도 ¶
- 전통적인 문서로서의 기능
- 구조적인 형태로 문서를 유지
- 구조적 문서 검색이나 문서의 구조 정보가 필요한 응용에 이용 ,EDI DTP등에 이용,전자상거래 플랫폼으로 이용
- 구조적인 형태로 문서를 유지
- 데이터로서의 역할
- XML은 SGML을 좀더 손쉽게 사용할수 있는 대안으로서 취급 하지만 XML의 응용분야가 확대되면서 데이터로서의 역할이 점점 커지고 있음
- SVG(Scalable Vector Graphics)포맷과 같은 그래픽 분야 전자상거래의 트랜잭션 처리, MathML과 같은 수학식 표현 등이 사용 예
- Kawa4.0에서는 Project나 Workspace에 대한 정보 및 기타 몇 가지 프로그램에 대한 정보를 XML문서 형태로 유지
- XML은 SGML을 좀더 손쉽게 사용할수 있는 대안으로서 취급 하지만 XML의 응용분야가 확대되면서 데이터로서의 역할이 점점 커지고 있음
3.1. 예제 mail.xml ¶
<?xml version="1.0" encoding="KSC5601"?> <!DOCTYPE MAIL [<!ELEMENT MAIL (SUBJECT,SENDER,RECEIVER,BODY,SIGNATURE)> <!ELEMENT SUBJECT (#PCDATA)> <!ELEMENT SENDER (NAME,ADDRESS)> <!ELEMENT RECEIVER (NAME,ADDRESS)> <!ELEMENT BODY (P)*> <!ELEMENT P (#PCDATA)*> <!ELEMENT SIGNATURE (#PCDATA)> <!ELEMENT NAME (#PCDATA)> <!ELEMENT ADDRESS (#PCDATA)> <!ATTLIST MAIL STATUS (official|informal) 'official'> <!ATTLIST ADDRESS TYPE (office|home|e-mail) 'e-mail'> ]> <MAIL STATUS="informal"> <SUBJECT>XML 예제입니다.</SUBJECT> <SENDER> <NAME>이호동</NAME> <ADDRESS TYPE="home">서울 강남구 서초동 000번지</ADDRESS> </SENDER> <RECEIVER> <NAME>김낙랑</NAME> <ADDRESS TYPE="office">대전 유성구 만년동 111번지</ADDRESS> </RECEIVER> <BODY> <P>이 부분이 본문의 내용이 들어가는 부분입니다.</P> <P>그냥 패러그래프별로 내용을 적으면 됩니다.</P> <P>지정된 DTD에 따라 작성하는 아주 간단한 XML 문서 작성 예제입니다.</P> </BODY> <SIGNATURE> 이호동 보냄 </SIGNATURE> </MAIL>
3.2. XML 문서구성 ¶
1. Processing Instructions(Optional) : XML문서를 어떻게 처리해야 할지를 기술해 주는 부분 2. DTD(Optional) : DTD를 사용하는 경우에는 어떤 DTD를 사용할지를 선언한 내용또는 DTD가 포함 3. Comments(Optional) 4. Element...
3.3. Processing Instructions(PI) ¶
- XML문서가 어떤 방식으로 처리되어야 할지를 기술해주는 부분
<?xml version="1.0" standalone="yes" encoding="KSC5601"?> <?xml-stylesheet type="text/xsl" href="price7.xsl"?>
- 생략하면 XML의 디폴트 셋팅으로 처리
- version : XML문서가 준수하는 XML 스펙의 버전 번호
- standalone : 외부 마크업 선언의 사용 여부를 표시 외부 마크업 선언으 한개이상 선언했을떄 no
- encoding : 문서 작성시에 사용된 인코딩 방식을 기술
- type : 사용할 스타일 시트의 타입을 기술 XSL(text/xsl)과 CSS(text/css)가 있음
- href : 사용할 스타일 시트 파일의 위치를 기술
3.4. 엘리먼트 ¶
- XML문서를 구성하는 기본 요소 시작태그와 닫는 태그가 있고 태그안의 내용이 엘리먼트의 값이된다.
<엘리먼트 이름 어트리뷰트1="어트리뷰트1의값"...>내용</엘리먼트 이름>
- empty element : 내용에 아무 것도 위치하지 않는 엘리먼트
<엘리먼트 이름 어트리뷰트1=="어트리뷰트1의 값".../>
- 엘리먼트 타입선언 : 엘리먼트의 타입을 DTD에 선언함
<!ELEMENT 엘리먼트 이름 컨텐츠_스펙>
- 컨텐츠 스펙에 올수 있는 것은 EMPTY와 ANY이다. 다른 엘리먼트의 이름을 구성하는 EBNF가 올수 있다. 문자테이터를 포함하면 #PCDATA로 표시
- EMPTY : 컨텐츠 스펙이 EMPTY인 경우라면 이 엘리먼트는 내용으로 아무 것도 갖을 수 없다는 것을 의미하고 empty element로 사용
- ANY : 내용 부분에 어떠한 엘리먼트가 몇 개 든지 순서에 관계없이 횟수에 관계없이 위치해도 괜찮다는 의미이다.
- 엘리먼트 타입 선언 예
1. MAIL 엘리먼트에는 SUBJECT,SENDER,RECEIVER,BODY,SIGNATUER 엘리먼트가 순서대로 위치하는데 ,다른 엘리먼트들은 단 한번 위치하지만 RECEIVER 엘리먼트는 1개 이상 올수 있으며, SIGNATURE 엘리먼트는 한 번 나오거나 또는 사용하지 않아도 되는 예 <!ELEMENT MAIL (SUBJECT,SENDER,(RECEIVER)+,BODY,(SIGNATURE)?)> 2. BODY 엘리먼트에 P엘리먼트가 한번도 오지 않거나 여러번 반복해서 위치할 수 있는 예 <!ELEMENT BODY (P)*> 3. P 엘리먼트에 어떤 엘리먼트든지 또는 PCDATA가 위치하는 예 <!ELEMENT P ANY> 4. SIGNATURE 엘리먼트에 PCDATA가 위치하는 예 <!ELEMENT SIGNATURE (#PCDATA)> 5. PHONENUMBER 엘리먼트에 OFFICE 또는 HOME 또는 MOBILE 엘리먼트 중에서 하나가 위치하거나 또는 오지 않는 예 <!ELEMENT PHONENUMBER (OFFICE|HOME|MOBILE)?> 6. Empty Element의 예 <!ELEMENT BR EMPTY>
1.1. PCDATA와 CDATA ¶
- PCDATA(Parsed Character Data) : XML프로세서에 의해 파싱되는 부분 예를 들어 태그 기호인 "<" 기호를 쓰면 에러가남
- CDATA(Character Data) : XML프로세서에 의해 파싱되지않음 어떠한 문자형도 위치할수 있음
1.2. 엔티티(Entity) ¶
- 엔티티는 일종의 가상 저장 단위이다. 매크로랑 유사
- XML 문서에서 엔티티를 사용하는 방식(Entity Reference)
1. 외부 엔티티와 내부 엔티티의 사용 방법 &엔티티 명칭; 2. 파라미터 엔티티의 사용 방법 %엔티티 명칭;
- DTD 또는 문서 선언부에서 선언하는 방식(Entity Declaration)
1. 외부 엔티티 선언 방법 <!ENTITY 엔티티 명칭 SYSTEM "외부 XML 문서의 URI"> <!ENTITY 엔티티 명칭 PUBLIC Public_indentifier "외부 XML문서의 URI"> 2. 내부 엔티티 선언 방법 <!ENTITY 엔티티 명칭 "엔티티 내용"> 3. 파라미터 엔티티의 선언 방법 <!ENTITY %엔티티 명칭 "엔티티 내용"> 4. 엔티티를 선언해서 사용한 예를 들어서 아래와같이 <!ENTITY chulsu "이철수(타율 0.321 홈런 32 타점 60)">
- 외부 엔티티 : XML문서의 분량이 상당히 커서 하나의 파일로 처리하기가 곤란하거나 할떄 적용하거나 모듈화하여야 할떄 사용
book.xml <?xml version="1.0" encoding="KSC5601"?> <!DOCTYPE BOOK [ <!ENTITY chapter1 SYSTEM "chapter1.xml"> <!ENTITY chapter2 SYSTEM "chapter2.xml"> ]> <BOOK> <TITLE>XML BOOK</TITLE> <CHAPTER>&chapter1;</CHAPTER> <CHAPTER>&chapter2;</CHAPTER> </BOOK> chapter1.xml <CHAPTER_TITLE>Chapter1.Instruction</CHAPTER_TITLE> chapter2.xml <CHAPTER_TITLE>Chapter2.Overview</CHAPTER_TITLE>
- 내부 엔티티 : 주로 반복적으로 사용해야 할 문장을 내부 엔티티 선언하고 사용하면 편리
drangon.xml <?xml version="1.0" encoding="KSC5601"?> <!DOCTYPE doc [ <!ENTITY ttl "누가 용의 발톱때를 보았는가"> ]> <doc> 용에 대해서는 이런 저런 말들이 있고 관련된 책도 있다. "&ttl;"와 "드래곤 라자"등은 모두 용에 대한 책이다. "&ttl;"는 영화로도 만들어 졌다. </doc>
- 파라미터 엔티티 : DTD 문서 내에서 이거나 XML문서 내에서 XML문서의 선언부인 <!DOCTYPE> 부분과 같은 엔티티 선언부나 엘리먼트 선언부에서만 사용
파리미터 엔티티 선언 중 일부 <!-- Parameter Entities--> <!ENTITY % head.misc "SCRIPT|STYLE|META|LINK|OBJECT" -- repeatable head elements --> <!ENTITY % heading "H1|H2|H3|H4|H5|H6"> <!ENTITY % list "UL|OL"> <!ENTITY % preformatted "PRE"> ...중략... <!ENTITY % head.content "TITLE & BASE?"> 다른 엔티티나 엘리먼트를 선언할 때 파라미터 엔티티를 참조 <!ENTITY %block "P %heading; |%list; |%preformatted; |DL |DIV |NOSCRIPT | BOCKQUOTE "> <!ELEMENT HEAD O O (%head.content;) + (%(head.misc;) --document head--> ....
1.3. Public Identifier ¶
"-//Textuality//Text Standard open-hatch boilerplate//EN" Formal public Idenifer의 구성 1. -로 시작하는것은 등록되지 않은 조직을 말함 ISO에서 제공하는 공용 엔티티는 ISO 사용 2. 그다음 슬래시 두개 다음에 나오는것이 기관명 Textuality가 기관명 3. 그다음 슬래쉬 두개 다음에 나오는것이 오브젝트 타임 여기서는 TEXT 4. 그다음 공백뒤에 나오는 것이 이 오브젝트에대한 description 5. 그다음 슬래쉬 두개 다음에 나오는것은 어떤 언어를 사용했는지 나오는것 EN은 영어 KO는 한글
- Public Identifier는 어디에서 사용되는가? : 공용 엔티티나 공용 DTD를 사용하는 경우에 PI가 사용됨
1.4. 문자 참조(Charater Reference) ¶
- 문자를 XML 문서에서 표시할 때 사용할수 있는 방법이 문자 엔티티다.
- 문자 엔티티 선언 방법
10진수의 경우 코드 값이 n일 때<!ENTITY name "&#n;"> 16진수의 경우 코드 값이 n일 때<!ENTITY name "&@xn;">*문자 엔티티로 선언된 엔티티를 참조 하는 방법
&name;*사용예
<?xml version="1.0" encoding="KSC5601"?> <!DOCTYPE doc [ <!ENTITY nbsp " "> <!ENTITY pound "£"> <!ENTITY yen "¥"> ]> <doc> <title> < 각 국의 통화(영국 & 일본) > </title> <currency><country>영국</country><name>파운드</name><unit>£</unit></currency> <currency><country>일본</country><name>엔</name><unit>¥</unit></currency> </doc>
1.5. 어트리뷰트 ¶
- 엘리먼트의 특성을 표현하는 수단으로 이용
<!ATTLIST element_name attribute_name attribute_type default_type "default_value"> 또는 <!ATTLIST element_name>
- 디폴트 타입
#REQUIRED 엘리멑르르 사용할 때 반드시 어트리뷰트를 사용해야 하고 값도 지정해 주어야 함을 의미함 #IMPLIED 엘리먼트를 사용할 때 이 어트리뷰트가 빠져 있다면,이를 반드시 XML 프로세서가 응용 프로그램에 이를 알려주어야 함을 의미함 #FIXED 엘리먼트를 사용할 때 FIXED로 타입이 지정된 경우에 선언된 디폴트 값과 다른 값을 어트리 뷰트의 값으로 사용할수 없을을 의미함
- 사용예
mail이라는 엘리먼트의 id와 reply_required라는 어트리뷰트를 한번에 선언 id 어트리뷰트의 타입은 ID이고 이 어트리뷰트는 반드시 사용해 주어야 하는 것으로 선언되었다. 그리고 reply_required 라는 어트리뷰트는 이 어트리뷰트의 값으로는 "yes"와"no"만 사용될수 있으며 만약 어트리뷰트가 명시되지 않았을 경우에는 디퐅르 값으로 "yes"를 사용한다. <!ATTLIST mail id ID #REQUIRED reply_required (yes|no) "yes') form이라는 엘리먼트의 method라는 어트리뷰트 선언으로 어트리뷰트의 값은 항상 "POST"이어야함 <!ATTLIST form method CDATA #FIXED "POST"> book이라는 엘리먼트의 desc라는 어트리뷰트에 대한 선언 이경우에는 desc라는 어트르뷰트를 사용하지 않아도 되고,만약 사용하는 경우에 이 어트리뷰트의 값에는 White space 처리를 하지 않겠다는 예이다. <!ATTLIST book desc CDATA #IMPLIED>
1.8. DTD ¶
- 마크업 선언들을 모아둔 것이다. 마크업 선언에는 엘리먼트 선언,어트리뷰트 선언, 엔티티선언,노테이션 선언이 포함
- 별로의 파일에 저장된 DTD 사용가능 <!DOCTYPE doc SYSTEM "doc.dtd">