태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
   情  
Front Page
Tag | Location | Media | Guestbook | Admin   
 
'DTD'에 해당하는 글(4)
2008.09.12   DTD문서 작성법3 (Entity, 컨티셔널 섹션)
2008.09.12   DTD문서 작성법 2 (속성작성, 노테이션)
2008.09.10   DTD문서 작성법 1 (엘리먼트가 가지는 데이터 유형 정의)
2008.09.10   DTD 종류와 설명


DTD문서 작성법3 (Entity, 컨티셔널 섹션)

Entity

Entity는 보통 엔티티가 사용되는 위치나 엔티티내용이 외부파일로 존재하는가에 등에 의해 여러가지로 분류되어진다.

  • 내부 엔티티 : 내부 엔티티란 DTD문서 내에서 텍스트형태로 정의된 엔티티를 말한다. 내부 엔티티는 내부 일반 엔티티와 내부 파라미터 엔티티로 구분되는데, 그 차이는 엔티티의 사용영역에 따른다.
    - 내부 일반 엔티티 : 내부 일반 엔티티는 일반적으로 xml문서에서 사용되는 엔티티를 말하며, '&'로 시작하고 ';'으로 종료되는, 예를 들어 &엔티티명;과 같은 형태를 띤다. 엔티티의 정의는 DTD문서내에서 정의되며, 사용은 xml문서에서 사용하게 된다.
        DTD문서
        <!ENTITY 엔티티명 "엔티티내용">
        XML문서
        <!-- 아래와 같은 선언은 DTD문서의 엔티티내용으로 대체된다. -->
        &엔티티명;
    - 내부 파라미터 엔티티 : 내부 일반 엔티티와 차이점은 내부 파라미터 엔티티는 DTD문서 내에서 사용된다는 점이다. 중복되는 문장을 내부 파라미터 엔티티를 이용하여 보다 간편하고 간결하게 표현될 수 있다.
        DTD문서
        <!--엔티티선언-->
        <!ENTITY % 엔티티명 "엔티티내용">
        <!-- 엔티티사용-->
        %엔티티명;
  • 외부 엔티티 : 외부 엔티티란 엔티티의 내용 부분만 외부의 파일 형태로 저장된 것을 말한다.(파일 확장자 상관없음) 내부 엔티티와 마찬가지로 일반과 파라미터로 분류된다. 한가지를 제외하고 내부 엔티티와 모두 같다. 그 차이점은 엔티티를 선언할 때 다음과 같이 선언한다는 점이다.
        <!ENTITY 엔티티명 SYSTEM "엔티티경로">
        <!ENTITY % 엔티티명 SYSTEM "엔티티경로">
    즉 엔티티내용 부분을 엔티티 내용이 저장된 파일의 경로로 대체하면 된다.
  • 내장(Built-in) 엔티티 : 내장 엔티티란 XML에서 미리 정의되어 제공하는 엔티티들을 말한다. 이 엔티티들은 미리 예약되어 있으며, 사용자는 내장 엔티티를 사용만하면 된다. 대표적으로 자주 사용되는 내장 엔티티는 다음과 같다.

    엔티티

    대체될 문자

    &amp; 또는 &#x0026; &
    &lt; 또는 &#x003C; <
    &gt; 또는 &$x003E; >
    &apos; 또는 &#0027; '
    &quot; 또는 &#0022; "
    &#x20; 공백
    &#xd; 캐리지 리턴
    &#xa; 라인피드
    &#x9;
    &#92; \
  • 외부 일반 언파스드 엔티티 : Unparsed, 말그대로 XML파서나 응용프로그램이 해석할 수 없는 비문자 데이터에 대한 엔티티를 지정할 수 있다. 이 엔티티를 이용하기 위해서는 해당 비문자 데이터 타입에 대한 Notation이 먼저 정의되어있어야한다. Entitiy 정의할 때, 해당 비문자 데이터의 경로를 지정하고, 그 타입을 Notation으로 지정하면 된다.
        DTD파일
        <!-- 사용될 비문자 데이터의 타입을 Notation으로 지정-->
        <!NOTATION jpg SYSTEM "painter.exe">
        <!-- ENTITY에서 해당 비문자 데이터 지정 및, 해당 파일의 형식을 Notation으로 지정-->
        <!ENTITY myPicture SYSTEM "myface.jpg" NDATA jpg>
        <!-- 엔티티를 사용할 엘리먼트의 속성 정의-->
        <!ELEMENT person EMPTY>
        <!ATTLIST person image ENTITY #IMPLIED>
        XML파일
        <!-- 지정한 엔티티의 사용-->
        <person image="myPicture" />

컨디셔널 섹션(Conditional Section)

DTD문서 내에서, 어떤 특정 영역을 DTD문서의 내용으로 포함할 것인지 무시하도록 할 것인지를 결정할 수 있는 방법이 Conditional Section이라고 한다. 기본적으로 컨디셔널 섹션에서 사용되는 문법은 다음과 같다.

<![(INCLUDE | IGNORE) [
    <!--이 곳에 컨디셔널 섹션이 적용될 DTD를 작성하면된다.-->
]>

컨디셔널 섹션의 영역이 동작하지 말지를 결정하는 것은, 결정자가 IGNORE인지, INCLUDE인지에 따른다. 말 그대로, INCLUDE는 포함, IGNORE는 무시하겠다는 의미가 된다. 위에서 (INCLUDE | IGNORE) 위치에 INCLUDE 혹은 IGNORE를 위치시켜야한다. 보통 보다 유연하게 사용하기 위해, IGNORE와 INCLUDE를 엔티티로 정의해두고, XML문서에서 내부 DTD 서브셋을 이용, 컨디셔널 섹션을 조작하게된다. 아래에 DTD와 XML문서 내용 예제가 있다.

DTD문서 - test.dtd

<?xml version="1.0" encoding="utf-8"?>
<!ENTITY % section1 "IGNORE">

<!ELEMENT member (student*)>
    <!ELEMENT student (name, tel)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT tel (#PCDATA)>

<!--컨디셔널 섹션 시작-->
<![%section1;[
    <!ATTLIST student gender (male| female) #REQUIRED>
]]>

XML문서 - test.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE test SYSTEM "test.dtd" [
    <!-- 컨디셔널 섹션을 포함하도록 한다. DTD내의 엔티티와 내부 DTD서브셋의
          엔티티가 중복될 경우 내부 DTD서브셋이 우선 적용된다.-->

    <!ENTITY % section1 "INCLUDE">
]>

<member>
    <student gender="male">
        <name>양현주</name>
        <tel>010-1111-1111</tel>
    </student>
</member>

신고
Tag : DTD, XML

name    password    homepage
 hidden


DTD문서 작성법 2 (속성작성, 노테이션)

엘리먼트에 속성 만들기

엘리먼트에 속성을 만들기 위한 문법으로는 아래와 같으며, 아래의 ATTLIST엘리먼트를 구성하는 요소 중에서 엘리먼트명, 속성명, 속성타입, 디폴트 정의 등 하나라도 생략될 수 없다.

-DTD파일 예제
<?xml version="1.0"?>

<!-- 엘리먼트 정의 -->
<!ELEMENT 엘리먼트명 유형>

<!-- 엘리먼트에 대한 속성 정의 -->
<!ATTLIST 대상엘리먼트명
        속성명 속성타입 디폴트정의
        속성명2 속성타입2 디폴트정의2
        ...
        속성명n 속성타입n 디폴트정의n>

속성명 작성

속성명은 해당 엘리먼트에 부여되는 속성의 이름이 되며, 작명규칙은 아래와 같다.

  • 숫자나 '_'를 제외한 특수문자로 시작할 수 없다.
  • 공백이 이름에 포함될 수 없으며, 둘째 문자 부터 숫자와 '_', '-', '.', ':' 등의 특수문자 사용이 가능하다.

속성타입 작성

속성타입(Attribute Type)이란 속성이 가질 수 있는 데이터의 형태를 뜻하며, 그 종류는 아래와 같다.

  • CDATA : 단순한 문자데이터를 받을 경우 사용하는 유형이다.
        <!ATTLIST 엘리먼트명 속성명 CDATA 디폴트정의>
  • ID : 엘리먼트를 유일하게 구별할 수 있는 식별자를 지정하기 위해서 사용된다. ID를 속성타입으로 사용하게 되면 그 속성의 값은 그 XML문서의 ID값들 중에서 유일한 값만이 올 수 있다. 이 ID라는 속성의 DB에서 기본값과 같은 역할을 한다고 볼 수 있다. 이 ID 속성타입의 사용에는 약간의 제약사항이 존재한다.
    - ID속성은 하나의 엘리먼트에 하나만 존재할 수 있다.
    - ID속성의 값으로 공백이 포함될 수 없다.
    - ID속성의 값은 숫자로 시작할 수 없다.
        <!ATTLIST 엘리먼트명 속성명 ID 디폴트정의>
  • IDREF 또는 IDREFS : 해당 xml파일에서 ID 속성의 값만을 속성 값으로 받을 수 있는 속성타입이다. DB에서 외래키와 같다고 볼 수 있다. 
    - 이 속성타입은 이미 정의된 다른 ID값을 받기 때문에, ID와 제약사항이 같을 수 밖에없다.(즉 ID속성유형과 같이 속성값으로 공백이 포함될 수 없고, 숫자로 시작할 수 없다)0
    -  IDREF와 IDREFS의 차이점은 IDREF는 하나의 값만이 지정될 수 있지만, IDREFS는 여러 값들이 지정될 수 있다. 즉, IDREFS는 여러 ID값을 받을 수 있는데, 구분은 공백으로 한다.
        <!ELEMENT person EMPTY>
        <!ATTLIST person
            name ID #REQUIRED
            bestfriend IDREF #IMPLIED
            friends IDREFS #IMPLIED>
    위와 같이 DTD문서에 정의되어 있을 경우, person 엘리먼트의 속성은 다음과 같이 될 수 있다.
        <!-- IDREF와 IDREF값으로는 ID로 지정된 값만을 취할 수 있다. -->
        <person name="송준수" bestfriend="송준수">
        <person name="김수미" />
        <person name="고아라" bestfriend="송은영" />
        <person name="백승환" friends="고아라" />
        <!-- IDREFS는 여러 ID값이 지정될 수 있다.-->
        <person name="송은영" bestfriend="고아라" friends="백승환 고아라 김수미 송준수 송은영" />
  • NMTOKEN 또는 NMTOKENS : 작명규칙을 따르는 문자데이터형을 속성값으로 받을 수 있도록 한다. 작명규칙은 속성작명규칙과 같다. NMTOKENS는 공백으로 구분된 여러 값들을 받을 수 있도록 해준다.
  • 열거형(ENUMERATION) : 지정한 여러 속성값 중 하나를 선택할 수 있도록 하는 것이다.
        <!ATTLIST 속성명 (속성값1 | 속성값2 | 속성값n) 디폴트정의>
        <!ATTLIST occupation (student | professor | officer) #IMPLIED>
  • ENTITY 또는 ENTITIES : ENTITY값을 속성값으로 받을 수 있다. 하지만, 모든 엔티티값을 받을 수 있는 것은 아니다. 외부 일반 언파스드 엔티티, 즉 외부 파일로서 해석되지 않는 자료를 엔티티로 선언 했을 경우, 이 ENTITY로 지정한 속성의 값으로 받을 수 있다. ENTITIES는 ENTITY와 같지만 여러 값을 받을 수 있으며, 각 값들은 공백으로 구분된다.
        -DTD문서
        <?xml version="1.0"?>
        <!-- ENTITY에서 지정될 이미지에 대한 노테이션을 선언한다. -->
        <!NOTATION gif SYSTEM "painter.exe">
        <!-- 속성으로 사용될 외부 일반 언파스드 엔티티 선언 -->
        <!ENTITY SonPic SYSTEM "son.gif" NDATA gif>
        <!ENTITY KimPic SYSTEM "kim.gif" NDATA gif>
        <!--엘리먼트 선언-->
        <!ELEMENT people (person)*>
        <!ELEMENT person EMPTY>
        <!-- 속성 선언, ENTITY의 속성 타입을 사용했다.-->
        <!ATTLIST person
                name CDATA #REQURIED
                img ENTITY #REQUIRED>
        -XML문서
        <?xml version="1.0"?>
        <people>
            <!-- ENTITY타입의 속성인 img에 ENTITY값을 할당 -->
            <person name="손담비" img="SonPic" />
            <person name="김수로" img="KimPic" />
        </people>
  • NOTATION : Notation을 속성 값으로 받도록 할 수 있다.
    <!ATTLIST 대상엘리먼트명 속성명 NOTATION (노테이션명1 | 노테이션명2 | 노테이션명n) 디폴트정의>
    <!ELEMENT person EMPTY>
    <!ATTLIST person
           img CDATA #IMPLIED
          type NOTATION (gif | jpg) #IMPLIED>
    <!-- 위 DTD에 대한 xml파일 내용-->
    <person img="mypic.gif" type="gif" />

디폴트정의

속성의 Default값을 지정해주거나, 속성값을 생략하거나 반드시 기술하도록 정의하는 부분이다. 여기서 사용할 수 있는 값들은 다음과 같다.

  • Default 값 지정 : 속성 값 생략 시 기본적으로 지정될 데이터를 지정하면 됩니다. #IMPLIED, #FIXED와 같이 속성값을 생략할 수 있는 형태이다.
    <!ATTLIST 대상엘리먼트명 속성명 속성타입 "기본적으로 지정될 속성 값">
    <!ATTLIST person name EMPTY "Unknown">

    <!-- 생략 시 name속성의 값은 'Unknown'이 된다. -->
    <person></person>
  • #IMPLIED : 말 그대로, 속성을 생략할 수 있게 된다. <!ATTLIST 대상엘리먼트명 속성명 속성타입 #IMPLIED>
    <!ATTLIST person name EMPTY #IMPLIED>

    <!-- 생략 시 name 속성 값은 공란이 된다. -->
    <person></person>
  • #FIXED : 해당 속성값으로 고정값을 주고 싶을 때 사용합니다. 지정된 값 이외의 어떠한 값도 지정이 불가능하며, 그렇기 때문에 XML문서에서 속성값 작성을 생략할 수 도 있다.
    <!ATTLIST 대상엘리먼트명 속성명 속성타입 #FIXED "고정값지정">
    <!ATTLIST person occupation EMPTY #FIXED "Professor">

    <!-- 고정값 이외의 데이터는 기술 할 수 없다. -->
    <person occupation="Professor" />
    <!-- 생략 시 name 속성 값은 'Professor'가 된다. -->
    <person></person>
  • #REQUIRED : 속성값이 반드시 기술 되어야 하는 형태. 속성값을 생략할 수 없게 된다.

노테이션(NOTATION)

Notation이란 XML파서나 해석할 수 없는 데이터형으로, 해당 XML문서를 처리하는 애플리케이션이나 파서에게 특정 해석할 수 없는 비문자 데이터를 어떻게 처리하라는 지시자로 생각하면 된다. 비문자 데이터란, 그림, 동영상, 음악 등의 형태의 자료로서 이들 자료에 대해 xml에 기술할 때, 해당 자료를 해석할 수 있는 프로그램 명도 같이 지정해주는 것이 Notation의 역할이다. 사용방법은 매우 간단한데 아래와 같다.

<!NOTATION 노테이션명 PUBLIC "PUBLIC식별자" SYSTEM "데이터를 처리할 응용프로그램 경로">

위에서 PUBLIC "PUBLIC 식별자"는 생략이 가능하다. 다음은 PUBLIC식별자의 예이다.

<!NOTATION gif PUBLIC "-//CompuServe//NOTATION Graphics Interchange Format 89a//EN" SYSTEM "painter.exe">

간단하게 다음과 같은 표현이 주로 사용된다.

<!NOTATION gif SYSTEM "painter.exe">

NOTATION이 사용되는 곳으로는 속성으로 기술되거나 외부언파스드엔티티를 위해 사용된다.

신고
Tag : DTD, XML

name    password    homepage
 hidden


DTD문서 작성법 1 (엘리먼트가 가지는 데이터 유형 정의)

A사와 B사에서 정보전달을 위한 목적으로 XML을 사용하기로 했다. 하지만 어떻게 A사와 B사 모두 같은 문법을 사용한 XML문서를 작성하도록 할 수 있을까? 그것은 문법과 유형을 정의하고있는 DTD 문서를 작성하여, 두 회사에서 해당 DTD문서를 사용해 XML문서를 작성하게 하면 된다. 특정 DTD문서에서 정의한 문법에 어긋난 XML문서는 XML Parser가 해석할 때 에러를 출력하도록 할 수 있다..

텍스트 선언

xml문서와 마찬가지로 DTD문서의 최상단에는 텍스트 선언이라고 해서 다음과 같은 문장이 위치해야한다.(생략할 수 있다.)

<?xml version="버전" encoding="인코딩방식"?>
<?xml version="1.0" encoding="euc-kr"?>

생략시 Default 값은 '1.0', 'utf-8' 이다.

주석

<!-- -->로서 xml과 동일하다.

엘리먼트

xml 문서에서 사용할 엘리먼트를 선언하기 위해서는 <!ELEMENT>를 사용한다. xml은 대소문자를 구분하기 때문에, 'ELEMENT'는 반드시 대문자로 기술하여아한다.

<!ELEMENT 엘리먼트명 유형>

엘리먼트명의 작성 규칙은 다음과 같다.

  • 'xml', 숫자, 특수문자('_'문자는 제외)로 시작할 수 없다.
  • 두번째 문자 부터 '_', '.', '-' 문자와 숫자를 사용할 수 있다.(':' 문자도 사용할 수 있지만, 네임스페이스 선언과 중복되므로 사용을 권장하지 않는다.)
  • 공백이 포함될 수 없다.

유형에 사용될 수 있는 것들은 다음과 같다.

  • #PCDATA : 문자 데이터만을 가짐.
    '<!ELEMENT person (#PCDATA)>'는 xml문서에서 다음을 허용한다.
    <!-- CDATA섹션을 데이터로 가지는 엘리먼트-->
    <person><![CDATA[hellow]]></person>
      
  • EMPTY : 데이터를 가지지 않음.
    <!ELEMENT person EMPTY>
    이 유형을 가진 엘리먼트는 xml문서에서 다음과 같은 사용만 허용한다.
    <person></person> 또는 <person />
      
  • ANY : 모든 엘리먼트와 문자데이터를 가질 수 있음.
    '<!ELEMENT person ANY>'는 모든 엘리먼트와 데이터의 사용을 허용하게 된다.
      
  • 자식 엘리먼트 : 지정한 자식엘리먼트만 가질 수 있음.
    기술한 자식엘리먼트를 가질 수 있게 한다. 자식엘리먼트 리스트의 기술에는 패턴규칙이 적용될 수 있다. 즉, '?', '*'. '+'. '|', ','  등의 패턴과 결합해 다양한 표현을 할 수 가 있다.
    1. 반드시 기술한 순서대로 자식엘리먼트가 작성되도록 하는 ',' 연산자
        -DTD문서 내용
        <!ELEMENT person (name, gender)>
            <!ELEMENT name (#PCDATA)>
            <!ELEMENT gender (#PCDATA)>
        -XML문서내용
        <person>
             <name>이하늬</name>
             <gender>Female</gender>
        </person>
    2. 자식 엘리먼트의 반복 숫자를 제어할 수 있도록 해주는 '?', '*', '+' 연산자
      - ? : Zero or One
      - * : Zero or More
      - + : One or More
      의 의미를 가지고 있다. 따라서 다음과 같이 다양하게 표현할 수 있다.
        -DTD문서 내용
        <!ELEMENT person (name, age?, nickname+, (schoolname, graduated)*)>
            <!ELEMENT name (#PCDATA)>
            <!ELEMENT age (#PCDATA)>
            <!ELEMENT nickname (#PCDATA)>
            <!ELEMENT schoolname (#PCDATA)>
            <!ELEMENT graduated (#PCDATA)>
        -XML문서내용
        <person>
            <name>이시향</name>
            <age>16</age>
            <nickname>너구리</nickname>
            <nickname>이썅</nickname>
        </person>
    3. 리스트 중 하나만 선택해서 작성할 수 있도록 해주는 '|' 연산자
        -DTD문서 내용
        <!ELEMENT person (name, (brother|sister)*)>
            <!ELEMENT name (#PCDATA)>
            <!ELEMENT brother (#PCDATA)>
            <!ELEMENT sister (#PCDATA)>
        -XML문서내용
       
    <person>
            <name>정순영</name>
            <sister>정순화</sister>
            <brother>정순철</brother>
            <sister>정순지</sister>
        </person>
        
  • 혼합형태 : 아무 데이터나 자식을 가지지 않거나, 지정한 자식엘리먼트, 문자데이터 등 모두 가질 수 있는 형태
    <!ELEMENT person (#PCDATA | child1 | child2 | childN)*>
    위와 같이 사용할 수 있지만 다음과 같은 주의사항이 있다.
      - 문자데이터를 포함할 수 있도록 하기위해 #PCDATA는 반드시 젤 첫번째 위치에 존재해야한다.
      - 괄호 마지막에 '*'은 반드시 존재해야한다.
      - 리스트 사이에는 반드시 '|'연산자를 사용해야한다.
주의사항 : ANY나 EMPTY가 아닌 #PCDATA나 자식엘리먼트를 기술 할 때는 반드시 괄호'(', ')'에 포함되어야 한다.
신고
Tag : DTD, XML

name    password    homepage
 hidden


DTD 종류와 설명

HTML 4.01 호환모드
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

가장 최근의 CSS 규격을 따름. 엘리먼트 배치가 자유로움, 스크롤링 레이어 같은건 사용불가능, position, display 속성과 구현 방법의 차이가 상이, frame 사용 불가능


HTML 4.01 엄격모드
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "
http://www.w3.org/TR/html4/strict.dtd">

1999년 12월 24일 확정 규격. 권장하지 않는 element, attribute, frame 사용불가, 엘리먼트 배치가 엄격함, 일부tag가 적용안됨, 가장 이상적인 문서작성시 사용.


XHTML 1.0 호환모드
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

1999년 12월 24일 확정된 프레임문서. frameset(프레임셋) 사용가능. 하지만 netscape.. ff쪽의 frame은 작동 안됨


XHTML 1.0 엄격모드
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

신고
Tag : DTD

name    password    homepage
 hidden


 Category
분류 전체보기 (95)
Netwrok & Security (6)
Web Development (61)
Database (5)
Framework (6)
Others (17)
About (0)
 TAGS
SourceSafe2005 ebnf 영국 인턴쉽 PHP 강좌 ASP.NET ajax 오라클 구조 Silverlight XML linux WCF mantis bug tracker smarty mantis exception UpdateProgress web tier 리눅스 DTD 영국 홈스테이 php data tier Blog API ATRIX MS SQL Server 영국 학원 ASP 자바스크립트 ie6 자바스크립트 버그 오라클 특수문자 class id 차이 application error #401 RFC 4180 SourceSafe Internet id name 차이 maxRecievedMessageSize c#.net LiveMail It's me
 Calendar
«   2017/12   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
 Visitor Statistics
Total : 251,719
Today : 48
Yesterday : 124
rss
 

티스토리 툴바