ENTITY(XML)

ENTITY 문을 사용하여 DTD에 연결된 XML 문서와 DTD 자체에서 사용할 DTD의 엔터티를 정의할 수 있습니다. ENTITY는 XML 문서에 삽입할 간략화된 항목을 제공합니다. 약식 이름은 이름 매개 변수에 제공한 이름입니다. ENTITY는 별도의 파일에 저장할 수 있는 정보 또는 큰 텍스트 블록을 반복할 때 매우 유용합니다. XML 문서에서 약식 이름 뒤에는 (&abbName;)과 같이 ;이 옵니다.

DTD 및 XML 파일에서 사용된 ENTITY 예제는 다음과 같습니다.

longtext.txt

longtext.txt의 내용은 다음과 같습니다.

<definition>ATTLIST(attribute list) Declares a list of XML attributes. These attributes are qualified by name, data type, implied default values, and the name of any elements that permit their use.

</definition>

dtd_chunk.dtd

<!ELEMENT list >
<!ATTLIST list list_type (ul | ol)>

sample.dtd

<?xml version="1.0" standalone="no" ?>
<!DOCTYPE dtd_sample[
<!ELEMENT file_info>
<!ATTLIST file_info name #REQUIRED>

<!ENTITY xml "eXtensible Markup Language">
<!ENTITY attlist_def SYSTEM "longtext.txt">
<!ENTITY % lists "(ol | ul)">
<!ENTITY % dtd_chunk SYSTEM "chunk.dtd">
<!ENTITY file_pic SYSTEM "file.jpg" NDATA jpg>
<!NOTATION jpg SYSTEM "image/jpeg">
%dtd_chunk;
<!ELEMENT icon EMPTY>
<!ATTLIST icon source ENTITY #REQUIRED>
<!ATTLIST icon list_type &lists;>
]>

DTD 문서를 구문 분석한 경우 결과는 다음과 같습니다. 메모리에서만 바뀌며 파일이 실제로 변경되지는 않습니다.

<?xml version="1.0" standalone="no" ?>
<!DOCTYPE dtd_sample[
<!ELEMENT file_info>
<!ATTLIST file_info name #REQUIRED>
<!ENTITY xml "eXtensible Markup Language">
<!ENTITY attlist_def SYSTEM "longtext.txt">

<!ENTITY % dtd_chunk SYSTEM "chunk.dtd">
<!ENTITY file_pic SYSTEM "file.jpg" NDATA jpg>
<!NOTATION jpg SYSTEM "image/jpeg">
<!ELEMENT list >
<!ATTLIST list list_type (ul | ol)>
<!ELEMENT icon EMPTY>
<!ATTLIST icon source ENTITY #REQUIRED>
<!ATTLIST icon list_type (ol | ul)>
]>

sample.xml

<?xml version="1.0" standalone="no" ?>
<heading>Definition list for &xml; attributes used in DTD files.</heading>
    <file_info name="topfile">
        <icon source="file_pic"/>
        <list list_type="ul"/>
        %attlist_def
    </file_info>
<footer>Conclusion of definition list for &xml; attributes.</footer>

구문 분석된 XML 문서의 결과입니다.

XML 문서를 구문 분석한 경우 결과는 다음과 같습니다.

Definition list for eXtensible Markup Language attributes used in DTD files.

top file

ATTLIST(attribute list) Declares a list of XML attributes. These attributes are qualified by name, data type, implied default values, and the name of any elements that permit their use.

Conclusion of definition list for eXtensible Markup Language attributes.

구문

<!ENTITY [%] name [SYSTEM|PUBLIC publicID] resource [NDATA notation] >

매개 변수

  • name
    엔터티의 이름입니다. 모든 엔터티 정의를 위해 필요합니다.

  • publicID
    엔터티에 대한 공용 식별자입니다. 선언에 PUBLIC 키워드를 사용할 경우에만 필요합니다.

  • 리소스(resource)
    엔터티의 값입니다. 모든 엔터티 정의를 위해 필요합니다. 내부 엔터티의 경우 구문 분석되고 확장된 텍스트 문자열입니다. 외부 엔터티의 경우 파일 이름이나 파일 형식과 같은 외부 엔터티를 식별하는 URI(Uniform Resource Identifier)입니다.

  • 표시
    DTD에서 NOTATION 문을 사용하여 선언한 노테이션의 이름입니다. XML이 아닌 데이터(NDATA) 키워드를 사용하여 구문 분석되지 않은 엔터티를 선언할 경우에만 필요합니다.

예제

ms256483.collapse_all(ko-kr,VS.120).gif일반 엔터티(구문 분석된 내부 엔터티)

다음은 DTD를 사용하는 XML 문서에서 &oumlaut; 및 &xml;로 참조할 수 있는 내부 일반 엔터티를 선언합니다.

<!ENTITY oumlaut "&#38;#246;">

또는 단순 텍스트 대체의 예는 다음과 같습니다.

<!ENTITY xml "eXtensible Markup Language">

XML 파서는 원시 엔터티 값(&#38;#246;)을 확장하여 내부 XML 문서의 일부로 만듭니다. 구문 분석된 최종 문서 출력에서 "&#38;" 값은 "&" 문자를 만드는 데 사용되며 이 값은 XML 문서에서 "&#246;"으로 나타납니다.

ms256483.collapse_all(ko-kr,VS.120).gif매개 변수 엔터티(구문 분석된 내부 엔터티)

다음은 DTD 내의 다른 위치에서 %lists;로 참조할 수 있는 내부 매개 변수 엔터티를 선언합니다. 그러면 XHTML 목록 요소 <ul> 및 <ol>에 대한 참조를 반복할 수 있습니다.

<!ENTITY % lists "ul | ol">

ms256483.collapse_all(ko-kr,VS.120).gif구문 분석되지 않은 외부 엔터티

다음은 구문 분석되지 않은 외부 엔터티를 선언합니다. 이 엔터티를 사용하여 XML이 아닌 데이터(이 경우 GIF 형식의 이미지 파일)에 대한 링크를 인코딩하여 XML 문서에 포함할 수 있습니다.

<!ENTITY file_pic SYSTEM "file.jpg" NDATA jpg>

이러한 경우 NDATA 키워드를 사용하려면 "jpg"라는 노테이션의 NOTATION 선언을 이 선언과 함께 사용해야 합니다. 자세한 내용은 NOTATION을 참조하십시오.

ms256483.collapse_all(ko-kr,VS.120).gif설명

다양한 방법으로 ENTITY를 사용할 수 있습니다. 사용할 엔터티를 정의하는 방법을 잘 모를 경우 다음 질문을 고려하면 DTD에서 선언할 엔터티를 사용하기 위한 조건들의 차이점을 이해하는 데 도움이 됩니다.

  • 문서의 사용 기간 중에 변경할 수도 있는 더 큰 텍스트 문자열을 간략화하는 데만 엔터티 값을 사용할 것입니까? 그렇다면 일반 엔터티를 사용하십시오.

  • 파일 이름이나 MIME 형식과 같이 DTD 또는 XML 문서 외부에 있는 엔터티 즉, 외부 엔터티의 포인터로 사용하시겠습니까? 그렇다면 구문 분석되지 않은 외부 엔터티를 사용하십시오.

  • 엔터티의 URI 값을 구문 분석해야 합니까? 다시 말해 DTD 또는 DTD를 사용하는 XML 문서의 일부로 확장해야 합니까? 아니면 구문 분석되지 않은 상태로 유지하여 XML 파서가 구문 분석된 최종 문서에서 해당 내용을 생략하도록 할 것입니까?

  • 구문 분석할 경우 확장된 엔터티 내용이 일반 엔터티로서 DTD를 사용하는 XML 문서의 일부가 됩니까? 아니면 매개 변수 엔터티로서 DTD 자체의 일부가 됩니까?

참고 항목

개념

ATTLIST(특성 목록)

ELEMENT

NOTATION