U E D R , A S I H C RSS

XML Study_2002/Start

XML 문서 작성하는 방법을 익힌다.

1. 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. XML 문서

  • XML 문서란 어떤것인가?

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문서 형태로 유지

3. 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 "&#160;">
<!ENTITY pound "&#163;">
<!ENTITY yen "&#165;">
]>
<doc>
<title> &lt; 각&nbsp; &nbsp; &nbsp;국의&nbsp; &nbsp; &nbsp;통화(영국 &#38; 일본) &gt; </title>
<currency><country>영국</country><name>파운드</name><unit>&pound;</unit></currency>
<currency><country>일본</country><name>엔</name><unit>&yen;</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.6. NOTATION

  • NOTATION은 Unparsed Entity를 처리하기 위한 방법이나 아직은 브라우저에서 지원이 안됨

1.7. CDATA 섹션

 사용방법
<![CDATA[CDATA에 해당하는 데이터]]>
CDATA에 해당하는 데이터는 파싱하지 않음

1.8. DTD

  • 마크업 선언들을 모아둔 것이다. 마크업 선언에는 엘리먼트 선언,어트리뷰트 선언, 엔티티선언,노테이션 선언이 포함
  • 별로의 파일에 저장된 DTD 사용가능 <!DOCTYPE doc SYSTEM "doc.dtd">

1.9. 반복 지시자

  • 플러스 기호(+) : 요소가 의의 수만큼 반복해서 나타날 수 있다. 단, 적어도 한 번은 나타나야 한다.(즉, 요소가 한 번 이상 나타나야 한다.)
  • 별표(*) : 요소가 없을 수 있다. 만일 있는 경우는 의의 수만큼 반복될 수 있다(즉, 요소는 0번이상 반복해서 나타난다).
  • 물음표(?) : 요소가 없을 수 있다. 만일 있는 경우는 요소가 단 하나만 있어야 한다(즉, 요소는 없거나 하나만 있어야 한다.).



Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:27
Processing time 0.0348 sec