반응형

파라미터 엔티티는 문서의 DTD에서 사용하는 엔티티를 말합니다.

일반 엔티티는 DTD에서 문서의 내용에 들어가는 텍스트를 삽입하기 위해서는 사용할 수 있지만 DTD의 선언에는 사용할 수 없습니다. 그래서 파라미터 엔티티를 구성요소와 속성 선언 시에 사용합니다.

파라미터 엔티티 참조는 DTD에서만 사용할 수 있으며, DTD에 선언에 사용된 모든 파라미터 엔티티 참조는 DTD의 외부에 존재하는 DTD의 일부분인 외부 서브셋(externet subset)에서만 사용할 수 있습니다. 내부 서브셋에서는 파라미터 엔티티를 사용할 수 있지만 제한적인 방법으로만 가능합니다.

파라미터 엔티티의 참조는 %로 시작하여 ;로 끝나며
<!ENTITY % 이름 정의>
와 같은 형태로 작성합니다.

외부 파라미터 엔티티는 다음과 같이 SYSTEM과 PUBLIC 키워드를 사용하여 선언할 수 있습니다.
<!ENTITY % 이름 SYSTEM URI>
<!ENTITY % 이름 SYSTEM FPI URI>


◆ 내부 파라미터 엔티티

BR 이라는 이름으로 <!ELEMENT BR EMPTY>텍스트를 나타내는 파라미터 엔티티를 선언하는 방법입니다. 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE DOCUMENT [
<!ENTITY % BR "<!ELEMENT BR EMPTY>">
<!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)>
%BR;
]>

위와 같은 경우 파라미터 엔티티를 선언하는 것 보다 ELEMENT를 직접 추가하는 편이 편합니다. 내부 파라미터 엔티티는 다른 선언문에 사용할 수 없기 때문에 내부 파라미터 엔티티로 할 수 있는 일은 많지 않습니다. 그래서 실제로 파라미터 엔티티의 용도를 이해하는데는 외부 파라미터 엔티티를 살펴보는 것이 좋습니다.


◆ 외부 파라미터 엔티티

DTD의 외부 서브셋 파라미터 엔티티를 사용할 때, 구성요소 선언을 포함한 DTD의 모든 곳에서 그 엔티티를 참조할 수 있습니다.
<!ENTITY % record "(NAME,DATE,ORDERS)">
<!ELEMENT DOCUMENT (CUSTOMER | BUYER | DISCOUNTER)*>                
<!ELEMENT CUSTOMER %record;>         
<!ELEMENT BUYER  %record;>         
<!ELEMENT DISCOUNTER  %record;>         
<!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)>

<CUSTOMER>,<BUYER>,<DISCOUNTER>가 서로 동일한 내용 모델을 가지므로 시간 절약을 위해 record라는 파라미터 엔티티를 지정합니다.

즉, 위와 같이 자주 반복되는 텍스트들을 DTD의 구성요소 선언에서 처리하기 위해 파라미터 엔티티를 사용합니다. 이렇게 파라미터 엔티티를 사용하면 DTD 구성요소의 선언을 수정할 필요가 있을 때 각 선언을 모두 수정하지 않고 파라미터 엔티티만을 수정하면 됩니다.


◆ INCLUDE와 IGNORE 사용하기

INCLUDE와 IGNORE는 DTD의 일부 구역을 포함하거나 제외시키기 위해 사용되는 명령어 입니다..
이 두 DTD명령어를 파라미터화 시켜 놓으면 파라미터 값을 INCLUDE또는 IGNORE로 바꾸기만 하면 DTD의 여러 구역을 포함 시키거나 제외 시킬 수 있습니다.
아래 DTD에서 빨갛게 표시한 INCLUDE 부분을 IGNORE로 바꾸면 PRODUCT_ID,SHIP_DATE, SKU 요소가 DTD에서 제외 되는 것입니다.
<!ENTITY % includer "INCLUDE">
<!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)>
<![ %includer; [
<!ELEMENT PRODUCT_ID (#PCDATA)>
<!ELEMENT SHIP_DATE (#PCDATA)>
<!ELEMENT SKU (#PCDATA)>
]]>

반응형

+ Recent posts