SGML : Standard Generalized Markup Language

정회경
대전 광역시 서구 도마 2동
배재대학교 전자계산학과
E-mail : hkjung@woonam.paichai.ac.kr
Abstract:
SGML은 텍스트, 그래픽스, 오디오 및 비디오 등을 포함하는 멀티미디어 전자문서들을 이 기종 시스템들 간에 정보의 손실없이 효율적으로 전송, 저장 및 자동 처리의 목적으로 제정된 국제 표준이다. SGML은 개념적인 문서의 논리구조와 내용구조를 기술하기 위한 메타 언어로 현재 넓은 응용분야에서 사용되고 있다. 여기서 전반적인 SGML의 개념 및 특징, SGML의 문서 구성, SGML 문법, SGML 응용분야, SGML 문서 처리 모델, SGML에 관련되는 다른 표준들에 대해 살펴본다.
Keywords:
SGML, ODA, Document architecture

1. 서론

정보화 사회에서 정보의 개방 환경에서 컴퓨터를 이용한 문서 처리와 문서를 이 기종간의 시스 템에서 상호 교환하는 정보 교환의 중요성이 날로 증대되고 있다. 이에 따라 텍스트, 그래픽스, 오디오 및 비디오 등을 포함하는 멀티미디어 문서들을 효율적으로 교환 및 저장하고, 응용, 주변 장치, 네트워크로부터 독립적으로 문서를 처리할 수 있는 환경이 요구되고 있다.

이에 국제 표준화 기구(ISO : International Organization for Standardization)에서는 서로 다른 이 기종 시스템간의 효율적인 문서 교환을 목적으로 제정된 ISO 8613의 ODA(Open Document Architecture)와 ISO 8879인 SGML(Standard Generalized Markup Language)을 제정하였다. ODA는 문서 구조를 논리 구조와 배치 구조로 정의하고 있어, 한 문서의 논리 구조와 배치 구조를 병행적으로 구성할 수 있는 장점에 비해, 작성할 수 있는 문서의 구조가 한정되어 복잡한 문서 구조의 표현에는 부적합한 면이 있으나 하이퍼미디어 문서 작성을 위해 확장 작업이 계속 진행 중이다. 한편 SGML의 개발은 처음에 공통 부호화가 1960년대 말 GCA(Graphic Communications Association)에서 연구가 시작되어 GenCode가 개발된 것이 시작이다. 1969년에 IBM의 Charles Goldfarb에 의해 GML(Generalized Markup Language)의 개발이 행해져, 문서형 정의 개념이 도입되었다. 1978년에 ANSI에서 문서 기술 언어의 표준화 활동이 시작되어 1980년에 최초의 SGML 규격 원안이 출판되었다. 1984년에는 ISO에 의한 표준화 활동이 시작되고 1985년에 출판된 규격 안은 EC 출판국에서 사용되었고, 미 출판국 등에서도 사용되었으며, 1986년에 ISO의 국제 규격이 되었다.

마크업(markup)의 개념은 전자출판의 초기단계에서 문서 중에 식자용 명령 코드를 써 넣으면 시스템이 이를 해석하여 폰트의 크기, 배치 등을 결정하여 인쇄 출력하게 되는데, 이때 명령이 사용자가 문서 작성시 본문 이외의 추가적인 정보로 첨가하여 사용하는 것으로 마크업이라 한다. 이는 한 문서의 논리 요소를 구분하거나 이들 요소들에 처리될 기능을 명시하기 위해 문서 화일에 포함된다. 마크업은 일반적으로 2가지로 분류한다.

이러한 SGML에 대한 연구 및 이용은 이미 미국 국방성의 CALS(Computer-aided Acquisition and Logistics Support) 프로젝트의 기술 표준으로 채택된 데 이어 미국 출판 협회, 유럽 공동체 출판국, 옥스포드 대학 출판부 등에서 사용하고 있으며, 또한 미국 화학회, 수학회 등 많은 학회에서 사용하고 있다. 일본에서는 이미 통산성의 주도에 의해 SGML의 일본 표준을 만들어 공표 하였으며, 1990년부터 특허 공문의 전자화에 SGML을 채용하며, 학술 논문의 전자화에 관한 SGML에 의한 논문의 데이터베이스화의 검토가 시작되는 등 SGML의 본격적인 보급에 힘쓰고 있다.

다음 2 장에는 SGML의 개념을 기술하고, 3 장에는 SGML 문서 처리 모델을, 4 장에는 결론 의 순으로 기술한다.

2. SGML의 개념

SGML은 임의 형태 문서, 임의 응용에 대해 일반화 마크업을 정의하기 위한 방법을 표준화하는 메타 언어(meta language)이다. SGML은 기술적 문서 마크업을 생성하는 기법과 문서의 지능적 내용이나 체계를 정의하기 위한 언어를 제공하며, 다양한 응용들 사이 구조화된 데이터를 상호 교환하기 위한 도구와 다양한 입력으로부터 출력의 내용, 구조, 조직을 표준화하기 위한 방법을 제공한다.

SGML 문서는 이 기종간의 시스템에서 한 문서를 전송하거나 작성하기 위해 다음의 3 부분으로 구성된다.

2.1 SGML 선언부

SGML 선언부는 문서를 기술하기 위해 필요한 문법, 사용된 임의 SGML 특성, DTD와 실제 문서에서 사용된 규칙 등을 정의한다. 이는 컴퓨터 내에서 처리 시에 참조되고 인쇄된 형태로서 문서를 수신시 시스템이 문자의 어떤 번역을 해야 할지 사람의 이해를 돕는데 사용된다. SGML 선언부는 문서에서 사용할 문자 집합을 정의하는 부분, SGML 문서의 처리 능력에 대한 범위를 정의하는 부분, 주요 구체적 문법을 정의하는 부분, 그리고 SGML 문서가 갖는 특수한 특징을 표 현하는 부분 등으로 구성된다.

SGML 선언부에 대한 문법은 "마크업 선언 개방"('<!')으로 시작하며, "마크업 선언 폐쇄"('>') 로 끝난다. 첫 번째 행은 "SGML"로 시작하고 현재의 SGML 선언부에서 적용한 표준의 번호와 그 표준의 발표시기를 문자열로 형성하여 기록한다. 그 다음에는 앞에서 말한 정의 부분들을 차 례로 작성하는데 SGML 문서 내에서 사용될 글자의 집합을 정의할 때는 첫 번째 열에 "CHARSET"를 두고 다음 열에 기본적인 문자 집합을 의미하는 것으로서 바로 우측에 표준이나 등록된 이름, 또는 숫자 등을 내용으로 하는 사람이 읽을 수 있는 문자열을 기록하여 문서를 수 신할 때 이해할 수 있게 하는 "BASESET"가 오며, 다음에 "DESCSET"를 쓰는데 다음 행에 쓰 며 그 우측으로 세개의 열로써 표현하는데, 첫 번째 열은 사용할 문자의 2진 코드를 십진수로 바 꾼 값이며, 다음 열은 첫 번째 열의 십진 코드부터 연속하여 선언하고 있는 글자의 수이고, 그 다 음 열은 문자에 대한 기술 내용이다.

다음에 CAPACITY가 선언되며, 여기서는 엔티티 정의의 한계, 엔티티내 글자의 한계, 내용 모 델내의 임의 레벨에서 가질 수 있는 토큰의 수, 속성정의 수 등의 상한 값을 정한다. 그 다음에 SCOPE 등을 선언하는데 이것은 주요 구체 문법이 문서 전체에서 사용될 것인지(DOCUMENT), 문서의 텍스트에서만(INSTANCE) 사용될 수 있는 지를 선언한다. 다음에 주요 구체 문법을 선언 하며, PUBLIC이라는 예약어를 사용하여 국제적으로 공인된 이름을 쓴다. 이렇게 하면 PUBLIC 이름으로 사용된 문법이 구체 문법이 되는 것이다. 끝으로 FEATURES를 이용하여 SGML 시스 템이 갖추어야할 기능 등을 표시한다. 설명문을 삽입하고자 할 때는 설명문의 시작부분과 끝부분 에 "--(하이픈)" 기호를 한다. 선언 예를 [그림 1]에 보인다.

<!SGML "ISO 8879:1986"
BASESET  "ISO 646-1983//CHARSET
         International Reference Version//ESC 2/5 4/0"
DESCSET  0   9   UNSED
         9   2   9
        11  2   UNUSED
        13  1   13
        14  18  UNUSED
        32  95  32
       127 1   UNUSED
BASESET  "ISO Registration Number 109//CHARSET
         ECMA-94 Right Part of Latin Alphabet Nr. 3//ESC 2/13 4/3
DESCSET  128 32  UNUSED
         160 5   32
         165 1   "SGML User's Group logo"
         166 88  38
         254 1   127
         255 1   UNUSED
CAPACITY LIC "ISO 8879-1986//CAPACITY Reference//EN"
SCOPE    CUMENT
SYNTAX   LIC "ISO 8879-1986//SYNTAX Reference//EN"

         TURES
MINIMIZE DATATAG NO  OMITTAG   YES  RANK      NO  SHORTTAG  YES
LINK     SIMPLE  NO  IMPLICIT  NO   EXPLICIT  NO
OTHER    CONCUR  NO  SUBDOC    NO   FORMAL    NO
 
             APPINFO  NONE>

                [그림 1]  SGML 선언 예

2.2 문서형 정의부

문서형 정의부는 문서의 논리구조와 여기에 관련된 속성이 선언되어, 짧은 이름으로 긴 문자열 을 참조하기 위해 키보드로 입력될 수 없는 문자열을 참조하기 위해 임의 문자열을 다른 이름으로 할당하여 엔티티 선언이 행해진다. 문서형 정의부에 선언되는 내용은 다음과 같다. SGML 구문에 의하면 문서형 정의부는 MDO(Markup Declaration Open) 기호('<!')로 시작하여 MDC(Markup Declaration Close) 기호('>')로 끝난다. MDO로 시작하여 먼저 DOCTYPE이라는 예약어와 정의중인 문서형에 대한 공통 식별자를 차례로 기술한다. 다음에 DSO(Declaration Subset Open) 기호([)를 쓰고, 엔티티, 엘리먼트, 다음에 속성들을 선언한 뒤 DSC(Declaration Subset Close) 기호(])를 기입하고 MDC 기호로 끝낸다.
2.2.1 엘리먼트 선언부
엘리먼트 선언부는 각 엘리먼트 내부에서 존재할 수 있는 부엘리먼트에 대한 공통 식별자를 순 서에 따라 선언하며, 공통 식별자나 모델 그룹 등으로 이루어지는 엘리먼트 형부분과 엘리먼트의 실제 내용 또는 다른 부요소들에 대한 공통 식별자들로 구성되는 내용부분으로 구분된다.

먼저 문서형 정의의 고유 이름인 공통 식별자를 선언하고, 이 선언의 내용부분에는 문서의 구 조상 상위 레벨에 있는 엘리먼트들의 공통 식별자들이 온다. 이 때 사용한 공통 식별자들은 차례 로 엘리먼트 선언을 하여야 하며, 임의의 엘리먼트 선언은 내용 부분에 다른 엘리먼트의 공통 식 별자를 가질 수 있는데, 이 공통 식별자를 갖는 엘리먼트는 선언중인 엘리먼트의 부요소가 된다. 이 부요소에 대한 엘리먼트 선언도 필요하다. 결과적으로 트리 형태의 구조를 갖는 문서형 정의 부에 있는 엘리먼트 선언들에 의해 문서의 구조를 파악할 수 있다.

엘리먼트 선언에 관한 구문은 MDO로 시작하고, 예약어인 ELEMENT를 쓴다. 그리고 현재 선 언중인 엘리먼트의 엘리먼트 형태를 쓰는데 이는 하나의 공통 식별자일 수도 있으며, 복수개의 공통 식별자일 수도 있다. 복수개인 경우는 grpo(group open) 기호('(')를 먼저 쓰고 공통 식별자 들을 컴머로 구분하며 열거한 후 grpc(group close) 기호(')')를 쓰며, 이러한 형태를 모델 그룹이 라 한다.

또한 SGML 문서에서 엘리먼트에 대한 시작 태그 밑 끝 태그를 생략 가능한지에 대한 정보를 갖는 두 문자를 사용하는데 앞의 문자는 시작 태그에 대한 것이고, 뒤의 문자는 끝 태그에 대한 것으로 "-"와 "O"를 사용하는데 "-"는 생략할 수 없음을 의미하고, "O"는 생략이 가능함을 의미 한다. 아래에 엘리먼트 선언 예를 보인다.

<!ELEMENT title -O cont1>
<!ELEMENT (send, receive) -- cont2>
예에서 "title"은 엘리먼트의 공통 식별자로서 "cont1"을 갖는 엘리먼트들을 지칭하는 이름이며, "- O"는 시작 태그를 생략할 수 없으며, 끝 태그는 생략 가능함을 의미한다. 아래 예의 공통 식 별자는 "send"과 "receive"의 둘이며, 이 두 식별자는 그 내용이 "cont2"로서 같음을 의미하고, 모 델 그룹의 형태로 표기되었다. 이 예에서는 시작 태그도 끝 태그도 모두 생략할 수 없음을 의미 한다.

내용 부분에 대한 구문은 부엘리먼트를 선언중인 엘리먼트내에 포함할 수 있도록 정의하는 내 용 모델로 구성된다. 내용 모델에는 여러 가지 부엘리먼트가 모델 그룹으로서 정의되어야 한다. 이 때 발생 지시자와 연결자를 사용하는데 발생 지시자는 이름 바로 뒤에 쓰며, 발생 지시자로 는 opt(?), plus(+), rep(*)가 있는데, opt는 부엘리먼트가 있을 수도 있고 없을 수도 있음을 의미 하고, plus는 부엘리먼트가 선언중인 엘리먼트 가운데 한번 있을 수 있음을 의미하고, rep는 엘리 먼트중에 0번이상 존재할 수 있음을 의미한다. 연결자는 한 부엘리먼트 이름과 다음 부엘리먼트 사이에 사용하며, seq(,)는 앞뒤의 부엘리먼트가 반드시 존재하되 이 모델 그룹에 등장한 순서에 따르는 것을 말하고, or(|)는 연결자 전후의 부엘리먼트는 둘 중 어느 하나의 부엘리먼트만 있어 도 되고, 둘다 있어도 좋음을 의미한다. and(&)는 연결자 전후의 부엘리먼트는 순서에 상관없이 반드시 존재하여야 함을 의미한다. 이와 같은 모델 그룹을 사용한 엘리먼트 요소 선언으로

<!ELEMENT (send, receive) -- (name, age, tel_num* | address)>
을 예로 할 때, 여기에서 name, age, tel_num, address는 각각 부엘리먼트의 공통 식별자이고, tel_num 다음의 * 구분자는 tel_num 요소가 0번 이상 있을 수도 있음을 의미하며, 이 내용 모델 의 연결자들은 name과 age 요소는 순서대로 발생되어야 하고, tel_num나 address중 어느 한 부 엘리먼트는 그 다음에 발생해야 함을 의미한다. 앞에서 설명했듯이 tel_num와 address 요소가 둘 다 있을 수도 있으며, 그 경우 순서는 임의로 할 수 있다.
2.2.2 엔티티 선언부
문서에서 여러 번 반복하여 입력할 필요가 있을 때 엔티티 선언은 문서에서 참조할 수 있는 엔 티티들을 정의하여 사용한다. ISO 8879에서 엔티티는 문자들의 집합이라고 정의되었는데 그 크기 와 형태가 다양하여 한두 글자를 갖는 엔티티도 있고 한 문서의 일부분이나, 하나의 완전한 SGML 문서도 엔티티로 볼 수 있다. 그 중에서 SGML 문서에 포함된 엔티티에는 두 가지의 중 요한 형태가 있는데 일반 엔티티와 매개변수 엔티티가 있다. 일반 엔티티는 그 교체될 문자로서 문서 구조상의 어떤 의미 등이 없는 단순한 문자들을 갖으며, 매개변수 엔티티는 교체될 문자가 다른 엘리먼트의 공통 식별자 즉 엘리먼트 이름이 되는 경우로서 문서형 정의부 내에서만 사용된 다. 그리고 일반 엔티티의 경우 교체될 엔티티 문자가 현재 처리중인 SGML 문서 내에 존재하지 않는 엔티티를 외부 엔티티라고 한다. 이 외부 엔티티를 다시 한 시스템 내에서만 사용가능한 시 스템 엔티티와 두개 이상의 시스템에서 사용될 수 있도록 공적으로 선언된 공중 엔티티로 구분한 다.

여러 종류의 엔티티를 SGML 문서에서 사용하기 위해서는 엔티티 선언과 엔티티 참조가 필요 한데, 그 방법이 엔티티 종류에 따라 다르다. 엔티티 선언은 엔티티의 내용을 정의하고 엔티티 참 조는 엔티티 내용이 문서내의 어디에 위치해야 할 지를 지시한다. 그리고 엔티티 선언은 문서형 정의부내에 있어야 하며, 엔티티 참조는 문서내의 어디에나 올 수 있으며, 문서형 정의에서도 가 능하다. 그러나 매개변수 엔티티는 문서형 정의에서만 참조할 수 있다.

일반 엔티티와 매개변수 엔티티는 선언과 참조에서 그 마크업 방법을 다르게 한다. 매개변수 엔티티를 선언하는 마크업은 MDO, ENTITY, pero('%'), 엔티티 이름, 교체 문자, MDC의 순으로 마크업 한다. 그 선언과 참조의 예를 들면

<!ENTITY %element4, "element1 | element2 | element3">
로 선언되고, 참조는 엘리먼트 내에서나 본문 내에서 가능한데 다음은 엘리먼트 내에서의 엔티티 참조의 예이다.
<!ELEMENT para5 (para | sample | %element4;)>
이 중 "%element4;" 부분이 엔티티 참조이며 "%element4;"이 있는 위치에 "element1 | element2 | element3"이 대신 들어간다. 여기서 element4는 엔티티 이름이며, 엔티티 내용인 element1, element2, element3들은 이 문서내의 엘리먼트 이름들로서 엘리먼트 para5의 부엘리먼 트가 되는 것이다. 결과적으로 para5 요소의 내용 부분은 (para | sample | element1 | element2 | element3)이 된다. 공적으로 선언된 외부 엔티티 중에서도 문서형 정의에서 참조될 엔티티는 매개 변수 엔티티로 선언되며
<!ENTITY %공중 엔티티명 PUBLIC "공적으로 선언된 문자열">
과 같은 형태이다. 여기서 PUBLIC은 공적으로 선언된 것임을 의미하는 예약어이다. 이는 문서 형태 정의
%공중 엔티티명;
의 형식으로 참조된다. 이러한 방법에 의해 공적으로 선언된 문서를 문서형 정의에서 이용할 수 있다. 일반 엔티티 중 SGML 텍스트를 갖는 경우의 엔티티 선언은 MDO, ENTITY, 엔티티명, 엔 티티 내용, MDC의 순서로 즉
<!ENTITY 엔티티명 "교체할 엔티티 내용">
와 같이 마크업하며, 참조 시는 ero('&'), 엔티티명, refc(';')로 하며
&엔티티명;
이 된다. 이 엔티티의 내용에는 일반 문자 및 마크업 문자도 포함시킬 수 있다.

일반 엔티티 가운데 특별한 경우로 외부 엔티티가 있는데 이는 다시 시스템 엔티티와 공중 엔 티티로 구분된다. 시스템 엔티티는 엔티티 내용이 처리중인 SGML 문서 내에는 존재하지 않지만 현재 시스템내의 다른 화일인 경우로 "SYSTEM"이라는 예약어가 사용되는데 마크업 방법은 아 래와 같이 두 가지가 있다.

<!ENTIY file.doc SYSTEM>
<!ENTITY cH2 SYSTM "/usr/text/chapter3.doc">
SGML 문서중 위와 같은 시스템 엔티티를 참조하려면,
&file.doc; 또는 &cH2;
로 마크업하며, 관계되는 화일의 내용이 SGML 문서에 삽입된다. 시스템 엔티티의 경우, 그 내용 이 다른 문서형 정의부를 사용하는 부문서이거나, 파싱될 수 없는 단순한 문자들로만 되어 있는 경우, 현 SGML에서 허용되지 않는 비 SGML 문자, 또는 현재의 시스템에서만 유효한 특정 문 자 데이터인 경우 등에 대한 별도의 마크업 표기법이 정해져 있다. 부문서를 내용으로 하는 경우 에는 SUBDOC이라는 예약어를 교체 문자와 MDC 사이에 기입하며, 이러한 엔티티를 사용하기 위해서는 SGML 선언부에서 FEATURES에 SUBDOC YES라고 입력하여야 한다. 즉,
<!ENTITY 부문서2 SYSTEM "sgfile.doc" SUBDOC>
와 같이 표기하여 이 때의 엔티티 이름은 부문서2 이다. 그리고 단순한 SGML 문자를 내용으로 하는 경우는 CDATA라는 예약어를 교체 문자 앞에 둔다. 이 때에는 엔티티 교체문자를 이름으로 하는 NOTATION을 같이 선언하여야 하는데 이는 데이터 엔티티에서 사용되는 코딩의 형을 알 려주며, 그 방법은 다음과 같다.
<!ENTITY 문자화일 SYSTEM CDATA "TEX-file">
<!NOTATION TEX-file SYSTEM "TEXT formatter">
이 NOTATION은 속성 선언에 의해 엘리먼트와 연결된다. 엔티티 내용이 일반적인 문자 데이터 이지만 현재의 시스템 내에서만 의미가 있는 데이터를 위해서는 SDATA라는 예약어를 이용하며, 역시 NOTATION 선언에 의해 그 의미를 구체적으로 설명한다. NOTATION 선언 시에 한 DTD 내에서는 서로 다른 NOTATION 명을 사용하여서 서로 구분할 수 있도록 하여야 한다.
2.2.3 속성 선언
속성 정의 선언부는 엘리먼트에 관련되어 특정될 수 있는 속성들과 그 속성들이 가질 수 있는 값들을 정의하는 것으로, 속성은 문서 혹은 엘리먼트의 상태, 문서의 텍스트가 출력되는 형식, 외 부로부터의 데이터가 문서에 추가될 경우에 그 위치 및 크기 등을 알린다. 속성 지정을 하기 위 하여 속성은 속성의 이름과 속성의 값을 갖는다. 속성 선언은 문서형 정의에서 관련되는 엘리먼 트의 선언 아래부분에서 한다. 속성 선언의 일반 형식은 MDO, ATTLIST, 관계 엘리먼트명, 속 성 선언 리스트, MDC의 순서이며 속성 선언 리스트에는 각각 다른 특성을 지정할 수 있는 속성 정의가 리스트를 이루며, 하나의 속성 정의는 속성의 이름, 선언된 값, 디폴트값의 세 성분으로 구성된다.

속성 정의중 세 번째 성분인 디폴트 값은 바로 앞의 선언된 값이 실제 속성 값의 후보로 된 경 우는 그 중의 한 값으로 정할 수 있으며, 다른 예약어들이 올 수도 있다. 이 예약어들은 속성 값 이 설정되는 상황을 말해준다. 즉 #FIXED라는 예약어는 값이 고정되어 후에 다른 값이 지정될 수 없음을 의미하고 #REQUIRED는 관련 엘리먼트가 사용될 때는 반드시 속성 값이 필요함을 의 미하며, #IMPLIED는 속성 값이 지정되지 않는 경우에 프로그램이 임의의 값을 포함할 수도 있음 을 의미하는 것이다.

위의 두 가지 예약어를 사용하는데는 다음과 같이 몇 가지 제약이 따른다. 선언된 값의 ID와 NOTATION은 어떠한 속성 선언에서도 한번만 사용할 수 있다. 그리고 NOTATION은 관련 엘 리먼트의 내용이 EMPTY로 선언되었을 때만 사용이 가능하고, #CONREF는 EMPTY 내용으로 선언된 엘리먼트와 관계될 때는 사용할 수 없다. 그리고 선언된 값이 ID로 선언되었을 때의 디폴 트 값은 #REQUIRED이거나 #IMPLIED이어야 한다. 아래에 실제 속성 선언 예를 들었다.

<!ATTLIST exam style CDATA #IMPLIED
                   keep NMTOKEN "all"
                   form (lines | runon) lines>
이들 속성 선언에서 관련 엘리먼트로 사용한 exam은 엘리먼트 선언이 되어 있어야 한다. 위의 예에서 세 개의 속성 정의가 있으며, style, keep, form이 각각의 속성이름이며, CDATA, NMTOKEN, (lines | runon)이 선언된 값인데, CDATA와 NMTOKEN은 예약어중의 하나이며 (lines | runon)은 실제 속성 값으로 lines이나 runon이 올 수 있다는 것을 지정하고 있으며, 그 경우 디폴트 값은 lines으로 정의되었다.

위에서 설명한 엘리먼트, 엔티티, 속성들의 선언 방법을 적용하여 문서형 정의부를 작성한 예를 [그림 2]에 보인다.

<!DOCTYPE report [
<!ELEMENT report      -- (prolog, body, appendix?)>
<!ELEMENT prolog      -- (title, author+, abstract)>
<!ELEMENT body        -- (intro, contents, conclusions)>
<!ELEMENT conclusions -- (experiment, result, conclusion, 	
            acknowledge>)>
<!ELEMENT (contents, experiment, result, concllusion)
            -- (section)+>
<!ELEMENT (subject, section) -- (paragraphs | subsect)*>
<!ELEMENT paragraphs  -- (heading?, paragraph+)>
<!ELEMENT paragraph   --(#PCDATA | items | list)*>
<!ELEMENT appendix    -- (reference?, annex?)>
<!ELEMENT (title, author, abstract, intro, acknowledge, heading, 
            items, list, reference, annex)  -- (#PCDATA)>
]>

                        [그림 2] 문서형 정의부의 예

2.3 SGML 문서

SGML 문서는 많은 수의 상호 연결된 엘리먼트들로 구성된다. 각 엘리먼트는 특정 목적을 갖 는 문자들을 포함하고, 그 중 특수한 문자나 단어는 여러 다른 엘리먼트의 구성 성분이 될 수도 있다. SGML을 효과적으로 이용하기 위해선 이들 엘리먼트들의 논리적 관계를 명확히 규명하여 위에서 말한 문서형 정의부를 작성하여야 하며, ISO 8879에서 정의한 SGML 문서에 대한 마크업 기술 방법과 문서형 정의부에 따라서 SGML 문서를 작성한다. 우선 한 시스템이 여러 종류의 문 서형 정의부를 갖고 있을 때, 그 중 어떤 문서형 정의부에 맞는 문서인지를 나타내기 위해 문서 형 선언을 한다. 이것은 MDO DOCTYPE 문서형 정의부 이름 PUBLIC 설명문 MDC의 문서로 된 구문을 갖는다. 한 예로
<!DOCTYPE report PUBLIC "-//paichai//DTD report //EN">
를 들 수 있는데 여기서 report는 적용한 문서형 정의부의 이름이고, DOCTYPE과 PUBLIC은 예 약어이다. 이후에는 엘리먼트들의 객체가 단위가 되어 문서형 정의부에서 정의된 구조로 구성된 다. 한 엘리먼트는 시작 태그 STAGO(<), 엘리먼트명, TAGC(>)로 마크업되고 끝 태그는 ETAGO(</), 엘리먼트명, TAGC(>)의 순서로 기술된다. 이 때 시작 태그와 끝 태그는 문서형 정 의부내에서 정의된 정보에 따라 생략하는 것도 가능하다. 그리고 시작 태그와 끝 태그 사이의 내 용은 다른 엘리먼트를 포함할 수도 있고, 그렇지 않고 일반적인 문자 데이터로 구성되기도 한다. 여기서 내용의 위치에 오는 엘리먼트를 부엘리먼트라 하고, 이것도 상위의 엘리먼트와 동일한 구 조로 마크업 된다.

3. SGML 문서 처리 모델

[그림 3]에 SGML 문서 처리 모델의 개요를 보이고 있으며, 관련 표준은 다음과 같다. 이 처리 모델 개요는 텍스트 기술과 처리 시스템의 부시스템과 이들 간의 관계를 이해하는데 도움을 준 다.

[그림 3] SGML 문서 처리 모델 개요


문서 편집 동작은 텍스트의 대화적 기록과 수정 방법을 제공하는 것으로 저자가 입력한 문서 데이터는 SGML에 의해 그 논리 구조를 형식적으로 기술한다. 즉, 제목, 저서명, 장, 절, 주 등의 문서 기술 내용의 논리 구조로 구분되고 이들 관계가 정의된다. 문서 스타일에 대해서는 이들을 기술하는 요소간의 관계를 나타내고, 논리 요소와 대응되므로 DSSSL이 사용된다. 여기에는 작성 된 문서를 검증하기 위해 문서 구문 분석 동작을 포함하는데, 문서 구문 분석 동작은 편집기로부 터 SGML 문서를 받아들인다. 또한 SGML 문서 교환 포맷(SDIF)으로 교환된 SGML 문서를 받 아들인다. DSSSL은 포맷팅에 필요한 정보를 지정하지만 포맷터와 같은 처리계를 규정하지는 않는다. 포 맷된 문서는 SPDL을 사용하여 장치에 의존하지 않는 것으로 기술되고 인쇄장치, 표시장치에 입 력된다. 문서 생성계의 몇 단계에서 필요로 하는 폰트 정보는 폰트 기술, 행렬, 형상 표현으로 구분된다. 문서 표시는 SPDL 문서를 받아들이고 이미징 출력장치 상에 최종 문서를 생성하는데 요구되는 이미지를 생성한다.

4. 결론

개방 환경에서 디지털 멀티미디어 정보를 서로 다른 시스템 간의 효율적 교환 및 처리를 위한 국제 표준인 SGML의 개념 및 특성, SGML 문서 구성과 문법, SGML 문서 처리 모델 등에 대해 살펴 보았다.

SGML의 응용분야는 자동차와 항공 산업분야, 출판, 원거리 통신, 데이터베이터 등 많은 분야 에서 요구되고 있으며, 세계 여러 나라에서 관련 프로젝트를 수행 중에 있다.

앞으로 SGML을 실용화 하기 위해 SGML DTD 및 문서 편집기, SGML 파서, SGML 시스템 적합성 시험기 등의 구현에 관한 연구가 계속되어야 하며, 하이퍼미이어 문서 표현을 위한 응용 인 HyTime(Hypermedia/Timed-based Structuring Language)과 SPDL, DSSSL 등 관련 표준에 대한 연구가 병행되어야 할 것이다.

참고문헌

[1]
ISO 8613, Information Processing - Text and Office Systems - Office Document Architecture(ODA) and Interchange Format, 1988.
[2]
ISO 8879, Information Processing - Text and Office Systems - Standard Generalized Markup Language(SGML), Includes Amendment 1, 1988.
[3]
ISO 9069, SGML Document Interchange Format(SDIF), 1988.
[4]
ISO 9070, SGML Support Facilities-Registration Procedures for Public Text Owner Identifiers, 1990.
[5]
ISO TR 10037, SGML and Text-entry Systems-Guidelines for SGML Syntax-Directed Editing Systems, 1991.
[6]
ISO DIS 10179, Information Processing - Text Communication Document Style Semantics and Specification Language(DSSSL), 1990.
[7]
ISO DIS 9541, Font Information Interchange, 1990.
[8]
ISO DIS 10180, Standard Page Description Language(SPDL), 1991.
[9]
ISO TR 9573, SGML Support Facilities-Techniques for Using SGML, 1988.
[10]
ISO 10744, Information technology - Hypermedia/Timed-based Structuring Language(HyTime), 1992.
[11]
Martin Bryan, "An Author's Guide to the Standard Generalized Markup Language", Addison-Wesley Publishing Commany, 1991.
[12]
佐勝和洋, 絹川博之, 大町一彦, "オフイス 文書の 標準化と 文書 databaseの 硏究動向", 情報 處理, vol. 28, no. 6, pp. 710 ∼ 720, June, 1987.
[13]
Seyed N. Golkar, Peater T. Kirstein and Afzal Montaser-Kohsari, "ODA Activities at university College London", Computer Networks and ISDN System, 21, pp. 187∼196, 1991.
[14]
Joshua Greenbaum, "Why SGML is so Hot in Europe", Open computing, pp. 73∼107 June 1994.