ENTITY

1) 엔티티 개념

– 사전적 의미로는 실체 또는 독립된 객체” 이다. XML 권고안에서는 XML문서를 구성하는 물리적인

저장 단위(Storage unit) 이라 정의하고 있다.

            

– ~.xml 파일의 경우 도큐먼트 엔티티라 부르고, 외부DTD서브셋 문서를 외부DTD서브셋 엔티티라

부른다.(XML 권고안)

– XML문서의 물리적인 저장단위로 기본이 되는 엔티티가 바로 도큐먼트 엔티티 이다. 모든 XML문서는

한 개의 도큐먼트 엔티티를 가져야 한다.

– 다음은 도큐먼트 엔티티를 포함해서 7가지의 엔티티를 정의하고 있다.(XML 권고안)

도큐먼트 엔티티                          외부 DTD 서브셋 엔티티                             Built_in 엔티티

내부 일반 파스드 엔티티             외부 일반 파스드 엔티티               

외부 일반 언파스드 엔티티          내부 파라미터 엔티티                                  외부 파라미터 엔티티

2) 엔티티 용도

– XML문서를 엔티티인 저장단위로 나누는 이유는 재사용성을 높이기 위해서이다.

– 여러 개의 XML문서에 특정부분에 동일한 내용을 작성할 경우를 생각해보자.

동일 내용을 매번 직접 작성시 시작적으로 오래 걸릴뿐 아니라, 오타의 위험성도 있다.

게다가 일부 내용의 수정이 있을 경우 모든 XML문서를 일일이 수정해야 할 것이다.

이 경우, 동일한 내용만을 가지는 외부 일반 파스드 엔티티를 하나 만들고, XML문서는 이를 참조사용

3) 엔티티 분류

– 다음은 물리적인 저장 단위 존재 여부에 따른 구분으로서 엔티티가 파일로 존재하는지 아닌지에 따라

다음과 같은 접두사가 붙는다.

 

구분        물리적 저장 단위

내부         없음. DTD내에서 특정 내용으로 선언될 경우

외부        파일 형태로 존재할 경우

 

– 사용되는 곳에 따른 구분

참조되는 곳             엔티티 명

일반           XML문서에서 참조하여 사용할 경우

파라미터      DTD내에서 참조하여 사용할 경우

– XML파서가 파싱할 수 있는 문자데이터로 이루어졌는지에 대한 여부

참조되는 곳            엔티티 명

파스드        XML파서가 해석할 수 있는 문자 데이터로 구성된 경우

언파스드          XML파서가 해석할 수 없는 비문자 데이터로 구성된 경우

            대표적인 언파스드 엔티티는 그림, 음악, 동영상파일 등이 있다.

4) Built-in 엔티티

– 미리 정의되어 있는 엔티티를 말하며, 별도의 엔티티 선언없이 XML에서 사용 가능한 엔티티.

XML 문서에서 참조방법

치환될 문자

의미

<

less-than

>

greater-than

&

&

ampersand

double-quote

&apos;

single-quote

5) 내부 일반 파스드 엔티티 – DTD문서 내에서 특정 문자 데이터값으로 선언되기 때문에 물리적 저장단위인 파일형태를 가지지

않는다. 선언 위치는 DTD내부 어디든지 상관없다. 일반적으로 텍스트 선언 바로 밑에 선언한다.

             <!ENTITY  엔티티명  “대치할 문자 데이터”

            

&엔티티명;

            

내부 일반 파스드 엔티티 예제)

ch3_1201.dtd

<?xml version=”1.0“ encoding="utf-8” ?>

<!– 내부 일반 엔티티 –>

<!ENTITY kr “대한민국”>

<!ENTITY fr “프랑수”>

<!ENTITY us “미국”>

<!ELEMENT booklist (book*)>

<!ELEMENT book (title, author, nation)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT author (#PCDATA)>

<!ELEMENT nation (#PCDATA)>

<!ATTLIST author nation CDATA #IMPLIED>

ch3_1201.xml

<?xml version=“1.0” encoding=“utf-8” ?>

<!DOCTYPE booklist SYSTEM “ch3_1201.dtd”>

<booklist>

           <book>

                     <title>슈퍼맨</title>

                     <author>누구</author>

                     <nation>&fr;</nation>

           </book>

           <book>

                     <title>배트맨</title>

                     <author nation=“&kr;”>나다</author>

                     <nation>&us;</nation>

           </book>         

</booklist>

6) 외부 일반 파스드 엔티티

– 파일명은 xml이 아닌 다른 이름을 사용해도 무방하다.

<!ENTITY   엔티티명  SYSTEM  “외부 일반 파스드 엔티티  URI 경로”

– 선언 위치는 어디든 상관없다. 일반적으로 텍스트 선언 바로 밑에 선언한다.

<!ENTITY  엔티티명  SYSTEM  “외부 일반 파스드 엔티티 파일명>

<!ENTITY  엔티티명  SYSTEM  “http://웹서버 주소/경로명/…/외부일반파스드엔티티명”>

– &엔티티명;

외부 파라미터 엔티티 예제)

ch3_1201_1.xml

<?xml version=“1.0” encoding=“utf-8” ?>

<kinds>

           <kind id=“k1”>소설</kind>

           <kind id=“k2”>수필</kind>

           <kind id=“k3”>컴퓨터</kind>

</kinds>

ch3_1202.dtd

<?xml version=“1.0” encoding=“utf-8” ?>

<!ENTITY kind SYSTEM “ch3_1201_1.xml”>  <!– 파일에 있는 kind를 가져다 쓰겠다. –>

<!ELEMENT booklist (kinds, book*)>

<!ELEMENT kinds (kind*)>

<!ELEMENT kind (#PCDATA)>

<!ELEMENT book (title, author)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT author (#PCDATA)>

 

<!ATTLIST kind id ID #REQUIRED>

<!ATTLIST book id ID #REQUIRED

                                          kind IDREF #REQUIRED>

                                          

ch3_1202.xml

<?xml version=“1.0” encoding=“utf-8” ?>

<!DOCTYPE book SYSTEM “ch3_1202.dtd”>

<booklist>

           &kind;

           <book id=“b1” kind=“k1”>

                     <title>하하</title>

                     <author>ㅋㅋㅋ</author>

           </book>

           <book id=“b2” kind=“k3”>

                     <title>XML</title>

                     <author>홍길동</author>

           </book>

</booklist>

7) 외부 일반 언파스드 엔티티

– 비문자 데이터로 이루어진 저장단위를 말한다.

– 음악파일, 그림파일, 동영상파일 등이 여기 속한다.

– 외부 일반 언파스드 엔티티를 XML문서에서 참조하기 위해서는 DTD내에서 NOTATION 선언이 필요.

8) 내부 파라미터 엔티티

– 한 개의 DTD문서 내에서 자주 사용되는 부분을 내부 파라미터 엔티티로 선언해 두고, DTD문서

내에서는 반복적인 코딩을 하는 대신 해당 엔티티명을 참조해서 직접 작성한 것과 같은 동일한 효과

<!ENTITY  %  엔티티명  “대치할 DTD 내용의 일부분”>

– 선언 위치는 반드시 참조되기 전에 와야한다. 일반적으로 텍스트 선언 바로 밑에 한다.

– %의 앞과 뒤에는 반드시 공백 문자열이 와야 한다.

– 다음은 DTD내에서 내부 파라미터 엔티티를 참조하는 문법이다.        %엔티티명;

내부 파라미터 엔티티 예제)

ch3_1203.dtd

<?xml version=“1.0” encoding=“utf-8” ?>

<!– 내부 파리미터 파스드 엔티티 –>

<!ENTITY % maninfo “(name, age, tel)”>

<!ELEMENT members (chief |manager|waiter)*>

<!ELEMENT chief %maninfo>

<!ELEMENT manager %maninfo>

<!ELEMENT waiter %maninfo>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT tel (#PCDATA)>

 

ch3_1203.xml

<?xml version=“1.0” encoding=“utf-8” ?>

<!DOCTYPE members SYSTEM “ch3_1203.dtd”>

<members>

           <chief>

                     <name>홍길동</name>

                     <age>20</age>

                     <tel>111-1111</tel>

           </chief>

           <manager>

                     <name>임꺽정</name>

                     <age>22</age>

                     <tel>122-1111</tel>

           </manager>

           <waiter>

                     <name>이순신</name>

                     <age>21</age>

                     <tel>221-1111</tel>

           </waiter>

</members>

 

9) 외부 파라미터 엔티티

<!ENTITY  %  엔티티명  SYSTEM  “외부 파라미터 엔티티 URI 경로”>

외부 파라미터 엔티티 예제)

ch3_1204_1.dtd

<?xml version=“1.0” encoding=“utf-8” ?>

<!ENTITY % maninfo “(name, age, tel)”>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT tel (#PCDATA)>

ch3_1204.dtd

<?xml version=“1.0” encoding=“utf-8” ?>

<!– 외부 파라미터 엔티티 선언 –>

<!ENTITY % maninfo_element SYSTEM “ch3_1204_1.dtd”>

<!– 외부 파라미터 엔티티 참조 –>

%maninfo_element;

<!ELEMENT members (chief |manager|waiter)*>

<!ELEMENT chief %maninfo>

<!ELEMENT manager %maninfo>

<!ELEMENT waiter %maninfo>

Comments are closed.

Post Navigation