3.7. Использование сущностей для включения файлов

Сущности (как общего назначения, так и параметризованные), в частности полезны для включение одного файла в другой.

3.7.1. Использование сущностей общего назначения для включения файлов

Предположим, что у вас есть есть некоторое содержимое для книги SGML, организованное в виде файлов, по одному на главу, под именами chapter1.sgml, chapter2.sgml и так далее, и файл book.sgml, который будет содержать эти главы.

Для использования содержимого этих файлов в качестве значений для ваших сущностей вы объявляете их при помощи ключевого слова SYSTEM. Это указывает анализатору SGML на использование содержимого указанного файла в качестве значения сущности.

Пример 3-12. Использование сущностей общего назначения для включения файлов

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" [
<!ENTITY chapter.1 SYSTEM "chapter1.sgml">
<!ENTITY chapter.2 SYSTEM "chapter2.sgml">
<!ENTITY chapter.3 SYSTEM "chapter3.sgml">
<!-- И так далее -->
]>

<html>
  <!-- Используем сущности для подгрузки глав -->

  &chapter.1;
  &chapter.2;
  &chapter.3;
</html>

Внимание: При использовании сущностей общего назначения для включения других файлов в документ, включаемые файлы (chapter1.sgml, chapter2.sgml и так далее) не должны начинаться с декларации DOCTYPE. Это синтаксическая ошибка.

3.7.2. Использование параметризированных сущностей для включения файлов

Вспомните, что параметризированные сущности могут использоваться только внутри контекста SGML. Тогда зачем вам может потребоваться включать файл внутрь контекста SGML?

Вы можете использовать это для того, чтобы иметь возможность повторно использовать ваши сущности общего назначения.

Представьте, что в вашем документе есть много глав, и вы используете эти главы в двух различных книгах, каждая из которых располагает главы различным образом.

Вы можете перечислить сущности в начале каждой книги, но этим быстро станет затруднительно управлять.

Вместо этого поместите определения сущностей общего назначения в один файл и воспользуйтесь параметризированной сущностью для включения этого файла в ваш документ.

Пример 3-13. Использование параметризированных сущностей для включения файлов

Во-первых, поместите определения ваших сущностей в отдельный файл с именем chapters.ent. Этот файл содержит следующее;

<!ENTITY chapter.1 SYSTEM "chapter1.sgml">
<!ENTITY chapter.2 SYSTEM "chapter2.sgml">
<!ENTITY chapter.3 SYSTEM "chapter3.sgml">

Теперь создайте параметризованную сущность для обращения к содержимому файла. Потом используйте параметризованную сущность для загрузки файла в документ, который сделает сущности общего назначения доступными для использования. Теперь используйте сущности общего назначения, как и раньше;

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" [
<!-- Определение параметризованной сущности для подгрузки сущностей общего
     назначения -->
<!ENTITY % chapters SYSTEM "chapters.ent">

<!-- А теперь используем параметризованную сущность для загрузки их в файл -->
%chapters;
]>

<html>
  &chapter.1;
  &chapter.2;
  &chapter.3;
</html>

3.7.3. Упражнения...

3.7.3.1. Использование сущностей общего назначения для включения файлов

  1. Создайте три файла, para1.sgml, para2.sgml и para3.sgml.

    В каждый файл поместите примерно такой текст;

    <p>Это первый параграф.</p>
    
  2. Отредактируйте example.sgml так, чтобы он выглядел примерно так;

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" [
    <!ENTITY version "1.1">
    <!ENTITY para1 SYSTEM "para1.sgml">
    <!ENTITY para2 SYSTEM "para2.sgml">
    <!ENTITY para3 SYSTEM "para3.sgml">
    ]>
    
    <html>
      <head>
        <title>Пример файла HTML</title>
      </head>
    
      <body>
        <p>Текущая версия этого документа: &version;</p>
    
        &para1;
        &para2;
        &para3;
      </body>
    </html>
    
  3. Сгенерируйте файл example.html, выполнив нормализацию example.sgml.

    % sgmlnorm -d example.sgml > example.html
    
  4. Загрузите example.html в ваш веб-браузер и проверьте, что файлы с именами paran.sgml были включены в example.html.

3.7.3.2. Использование параметризированных сущностей для включения файлов

Замечание: Сначала вы должны выполнить предыдущие шаги.

  1. Отредактируйте example.sgml так, чтобы он выглядел примерно так;

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" [
    <!ENTITY % entities SYSTEM "entities.sgml"> %entities;
    ]>
    
    <html>
      <head>
        <title>Пример файла HTML</title>
      </head>
    
      <body>
        <p>Текущая версия этого документа: &version;</p>
    
        &para1;
        &para2;
        &para3;
      </body>
    </html>
    
  2. Создайте новый файл, entities.sgml, с таким содержимым:

    <!ENTITY version "1.1">
    <!ENTITY para1 SYSTEM "para1.sgml">
    <!ENTITY para2 SYSTEM "para2.sgml">
    <!ENTITY para3 SYSTEM "para3.sgml">
    
  3. Сгенерируйте файл example.html, выполнив нормализацию файла example.sgml.

    % sgmlnorm -d example.sgml > example.html
    
  4. Загрузите файл example.html в ваш веб-браузер и проверьте, что файлы paran.sgml были включены в example.html.

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.