반응형

DTD에는 속성(attribute)와 엔티티(entity) 를 선언할 수 있습니다.

엔티티(entity)
 엔티티란 데이터 항목을 참조하기 위한 XML의 방법으로 보통은 텍스트이지만 이진 데이터로 구성될 수도 있습니다.
 엔티티는 DTD에서 선언하며, 문서에서 참조를 통해 사용됩니다.
 XML문서의 내용에 사용되는 일반 엔티티의 참조는  &로 시작하여 ;로 끝나게 되며, DTD에서 사용하는 파라미터 엔티티의 참조는 %로 시작하여 ;로 끝나게 됩니다.


◆ 미리 정의되어 있는 일반 엔티티 참조

&  -  &
'  -  '
&gt  -  >
&lt  -  <
&quot  -  "

<?xml version="1.0" encoding="UTF-8"?>
<TEXT>
 This text about the &quot;S&amp;O Railroad&quot; is the &lt;TEXT&gt; element&apos;scontent.
</TEXT>


자신이 원하는 문자의 문자코드를 인코딩에 맞추어 지정해서 엔티티 참조를 만들 수도 있습니다.
예를 들어 UTF-8 인코딩에서 @의 문자 코드가 #64이므로 &#64; 라는 엔티티 참조는 @를 나타내게 됩니다.
<!ENTITY at "&#64;">
위와 같은 엔티티를 정의하면 &at; 이 @을 나타내게 됩니다.


◆ 내부 일반 엔티티 만들기

문서 내부에 <!ENTITY> 구성요소를 사용하여 <!ENTITY 이름 정의>형식으로 엔티티를 선언합니다.
&엔티티이름; 형태의 엔티티 참조를 통해 정의한 내용으로 바뀌게 됩니다.
<?xml version="1.0" encoding="UTF-8"?>

.
.

.



<!ENTITY TODAY "October 15, 2003">

]>
<DOCUMENT>
 <CUSTOMER>
  <NAME>
   <LAST_NAME>Smith</LAST_NAME> 
   <FIRST_NAME>Sam</FIRST_NAME>
  </NAME>
  <DATE>&TODAY;</DATE>
  <ORDERS>

.
.

.


아래와 같은 결과를 보실 수 있습니다.



일반 엔티티의 참조는 중첩해서 사용할 수 있습니다.
<!ENTITY NAME "Alfred Hitchcock">
<!ENTITY SIGNATURE "&NAME; 14 Mystery Drive">

단 아래와 같이 순환하여 참조하는 경우는 XML 처리기가 그 결과를 예측할 수 없기 때문에 참조할 수 없습니다.
<!ENTITY NAME "Alfred Hitchcock &SIGNATURE;">
<!ENTITY SIGNATURE "&NAME; 14 Mystery Drive">

그리고 일반 엔티티 참조는 아래 처럼 문서 자체가 아닌 DTD 에서만 사용되는 텍스트를 삽입하기 위한 경우도 사용할 수 없습니다.
<!ENTITY TAGS "NAME, DATE, ORDERS)">
<!ENTITY CUSTOMER &TAGS;>



◆ 외부 일반 엔티티 만들기

엔티티는 문서의 외부에 존재할 수 있는데, 이때는 XML 처리기가 엔티티를 찾을 수 있도록 URI를 제공해야 합니다.
외부 엔티티는 단순한 문자열, 문서 전체 또는 문서의 일부분이 될 수 있습니다. 그리고 XML 처리기의 관점에서 그 문서가 잘 구성되어야(well-formed) 하며 유효해야(valid)합니다.

외부의 ex_entity.xml 파일에 "July 6, 2011"이라는 텍스트가 저장되어 있으면

 

<?xml version="1.0" encoding="UTF-8"?>

.
.

.


<!ELEMENT PRICE (#PCDATA)>
<!ENTITY TODAY SYSTEM "ex_entity.txt">
]>
<DOCUMENT>
 <CUSTOMER>
  <NAME>
   <LAST_NAME>Smith</LAST_NAME> 
   <FIRST_NAME>Sam</FIRST_NAME>
  </NAME>
  <DATE>&TODAY;</DATE>
  <ORDERS>

.
.

.

</DOCUMENT>


위와 같이 엔티티 구성요소를 추가해서 TODAY라는 엔티티를 추가할 수 있습니다. 아래와 같은 결과를 볼 수 습니다.



◆ 조각들을 이용해 문서 만들기

외부 일반 엔티티를 사용하여 여러 조각을 이용해 문서를 구성할 수 있습니다. <DOCUMENT>요소 안의 내용을 &data; 로 합니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE DOCUMENT [
<!ELEMENT DOCUMENT (CUSTOMER)*>
<!ELEMENT CUSTOMER (NAME, DATE, ORDERS)>
<!ELEMENT NAME (LAST_NAME, FIRST_NAME)>
<!ELEMENT LAST_NAME (#PCDATA)>
<!ELEMENT FIRST_NAME (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT ORDERS (ITEM)*>
<!ELEMENT ITEM (PRODUCT, NUMBER, PRICE)>
<!ELEMENT PRODUCT (#PCDATA)>
<!ELEMENT NUMBER (#PCDATA)>
<!ELEMENT PRICE (#PCDATA)>
<!ENTITY data SYSTEM "ch04_06.xml">
]>
<DOCUMENT>
 &data;
</DOCUMENT>

그리고 &data;로 참조될 <DOCUMENT>요소의 하위 요소 들을 외부 파일에 작성합니다.



브라우저에서 두 문서가 합쳐진 아래와 같은 결과를 보실 수 있습니다.

반응형

'컴퓨터&IT > XML' 카테고리의 다른 글

XML - [6] DTD:속성(Attribute)  (0) 2011.08.24
XML - [5] DTD:파라미터 엔티티  (0) 2011.08.24
XML - [3] Well-formed Document 와 Valid Document  (0) 2011.08.24
XML - [2] XML의 장점  (0) 2011.08.24
XML - [1] Markup Language  (0) 2011.08.24

+ Recent posts