부록 B. 식별이름과 카탈로그

B.1. 카탈로그의 작성과 수정 [1]

SGML은 식별이름(identifier)을 사용합니다. 식별이름라는 것은, 필요한 정보가 담겨있는 파일의 위치를 상징적으로 가리키고 있는 문자열들입니다.

식별이름에는 공식 식별이름(public identifier)과 시스템 식별이름(system identifier)이 있습니다. 공식 식별이름은 파일에 대한 정보를 규정에 따라 추상적으로 표현합니다. 이를 사용하면 어떤 종류의 시스템에서든지 같은 파일을 가리킬 수가 있습니다. 반면에, 시스템 식별이름은 파일의 위치를 지시하기 위해 시스템 상의 경로명을 그대로 사용하는 것이 보통입니다. 시스템 식별이름은 어떤 특정한 규정에 따르지 않으며, sgml 문서를 처리하는 프로그램에 의해 인식이 가능하기만 하면 됩니다.

공식 식별이름들이 가리키고 있는 파일의 구체적인 위치들은 별개의 파일에 정의되어 있는데, 이 파일을 카탈로그(catalogue)라고 합니다. SGML 문서를 처리하는 프로그램들은 이 카탈로그 파일에 의존해 SGML 문서 상에서 공식 식별이름들을 인식해내고 이들의 의미를 번역해냅니다.

또한, 카탈로그를 이용하면 여러가지 SGML 관련 파일들을 편리한 곳에 넣어두고 일괄적으로 관리할 수 있습니다( 예를 들어, 자신의 홈 디렉토리나, /usr/local/sgml, 그 밖에 어떤 장소라도.. ). 문서를 직접 작성하지 않고 문서의 프로세싱과 "컴파일"만을 하는 주로 하는 경우라 하더라도 이런 기능은 편리한 점이 있습니다.

예 B-1. 카탈로그의 한 예

       -- Catalogue for the Conectiva Styles --            (1)

       OVERRIDE YES
 
       PUBLIC "-//Conectiva SA//DTD books V1.0//EN" "/home/ldp/styles/books.dtd" (2)


       DELEGATE "-//OASIS" "/home/ldp/SGML/dtds/catalog.dtd"

       DOCTYPE BOOK /home/ldp/SGML/dtds/docbook/db31/docbook.dtd
                                                           (3)
       -- EOF -- 
          
(1)
주석. 주석은 "--"로 시작과 끝을 맺습니다.
(2)
공식 식별이름 "-//Conectiva SA//DTD books V1.0//EN"은 시스템 식별이름 /home/ldp/styles/books.dtd 에 해당된다는 뜻입니다.
(3)
파일의 끝을 나타내는 주석입니다.

위에 나타낸 예와 같이 카탈로그 파일이 작성되어 있다면, 다음과 같은 절차를 통해 식별이름과 해당 파일을 연관시키게 됩니다.

  1. 문서 상에서 PUBLIC과 같은 지시어를 우선 인식합니다. 지시어는 뒤따르는 문자열이 식별이름임을 알려줍니다.

  2. 식별이름의 유형을 파악합니다. 위의 경우처럼 PUBLIC이란 지시자에 뒤따르는 식별이름은 공식 식별이름입니다.

  3. 공식 식별이름이 지시하고 있는 파일의 구체적인 경로명을 카탈로그에서 확인합니다.

B.1.1. 공식 식별이름 짓는 법

아래에 나타낸 식별이름을 주의깊게 보기 바랍니다.

"-//Conectiva SA//DTD books V1.0//EN"

이 식별이름은 그냥 멋대로 지어진 것이 아닙니다. 즉, 미리 정해진 규정에 따라 지어진 공식 식별이름입니다.

여기서 첫번째에 나타내어진 "-" 기호는 이 공식 식별이름이 정식으로 등록되어 있진 않다는 점을 나타냅니다. 사실, ISO나 IEEE 등에 관련된 경우를 제외하고는 정식 등록된 식별이름은 그리 많지 않습니다.

식별이름의 두번째 부분은, 그 해당 파일을 작성한 기구(단체)의 이름을 나타냅니다. 위의 경우에서는 Conectiva SA가 되겠습니다.

세번째 부분은 해당 파일이 어떤 종류의 문서이며(위 경우에는 DTD [2]문서) 그 이름과 버전이 어떻게 되는지를 알려줍니다.

마지막 부분은 해당 문서가 어떤 언어로 씌여졌는지를 나타냅니다. DocBook은 영어(English)로 씌여진 DTD이므로, 언어는 EN이 됩니다. 영문 두 글자로 사용 언어를 나타내는 방식은 ISO에서 권장하고 있습니다.

식별이름 짓는 규정에 대해서 좀 더 자세히 알고 싶은 분은 OASIS Technical Resolution 9401:1997 (Amendment 2 to TR 9401)에 방문해 보시기 바랍니다.

B.1.2. 카탈로그에 쓰이는 지시어

카탈로그 파일에서 많이 쓰이는 지시어는 다음과 같습니다.

PUBLIC

지시어 PUBLIC은 공식 식별이름과 시스템 식별이름을 짝지워줄 때 쓰입니다.

SYSTEM

지시어 SYSTEM은 시스템 식별이름을 또 다른 시스템 식별이름과 짝지워 줍니다.

SYSTEM "http://nexus.conectiva/utilidades/publicacoes/livros.dtd" "publicacoes/livros.dtd"

SGMLDECL

지시어 SGMLDECL은 적용될 필요가 있는 SGML 선언(declaration) 파일의 위치를 알려줍니다.

SGMLDECL "publishings/books.dcl"

DTDDECL

SGMLDECL과 비슷한 것으로서, DTDDECL도 적용될 필요가 있는 SGML 선언 파일의 위치를 알려줍니다. 다만 DTDDECL은 특별히 DTD와 관련된 선언 파일들을 다룹니다. 그러나 아쉽게도, 현재까지 이 지시어를 지원하는 자유 소프트웨어는 없습니다. 그렇지만 이 지시어를 사용함으로써 여러개의 카탈로그 파일을 쓸 수 있는 이점을 얻을 수는 있습니다.

DTDDECL "-//Conectiva SA//DTD livros V1.0//EN" "publicacoes/livros.dcl"

CATALOG

지시어 CATALOG는 카탈로그 안에 또 다른 카탈로그를 포함시킬 수 있도록 해줍니다. 이 방법을 쓰면, 카탈로그를 뜯어 고치지 않고서도 여러가지 독립적인 카탈로그를 함께 사용할 수 있습니다.

OVERRIDE

지시어 OVERRIDE는 공식 식별이름보다 시스템 식별이름이 더 우선권을 갖도록 할 것인지 아닌지를 결정합니다. 대부분의 시스템에서는 시스템 식별이름이 우선권을 갖도록 되어 있습니다.

DELEGATE

지시어 DELEGATE는 어떤 공식 식별이름의 집합을 따로 다른 카탈로그 파일에 의해서 해석될 수 있도록 해줍니다. 이 지시어는 해당 공식 식별이름을 인식하는 과정에 개입한다는 점에서 CATALOG 지시어와는 차이가 있습니다.

DELEGATE "-//OASIS" "/usr/sgml/oasis/catalog"

위의 예에서, "-//OASIS"로 시작하는 모든 공식 식별이름은 모두 "/usr/sgml/oasis/catalog"에 의해서 해석됩니다.

DOCTYPE

만일, 어떤 유형의 문서인지를 알려주는 공식 식별이름이나 시스템 식별이름이 없는 SGML 문서가 있다면, DOCTYPE 지시어에 의해 지정된 DTD가 기본값으로 사용됩니다.

주석

[1]

이 내용은 DocBook HOWTO의 Creating and modifying catalogues 부분을 번역한 것입니다.

[2]

다음과 같은 종류의 문서들이 가능합니다: DTD, DOCUMENT, ELEMENTS, ENTITIES, 그리고 NONSGML.