태터데스크 관리자

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

태터데스크 메시지

저장하였습니다.
   情  
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
: ajax Android APM application error #401 ASP ASP.NET asp.net ajax ASP.NET Machine at ATRIX ATX ATX와BTX의차이 Auto-Negotiation back-end bash shell Bit ending Blog API BTX c#.net CentOS class id 차이 CSMACD data tier Database DB DB동작원리 DB처리과정 DTD ebnf ethereal ethernet exception firefox2 설치 font-family Framework과 자동로그인 front-end FTP get post 우선순위 hotmail
 Calendar
«   2018/09   »
            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            
 Visitor Statistics
Total : 266,621
Today : 23
Yesterday : 54
rss
 

티스토리 툴바