В. А. Капустин Содержание Формальные структуры текстовых документов 1 Курс лекций
Вид материала | Курс лекций |
- Курс лекций по дисциплине " основы компьютерных технологий" Часть I. Microsoft Word, 432.92kb.
- Сферы использования текстовых документов, 52.06kb.
- Курс, 1-й семестр лекции (51 час), экзамен практикум на ЭВМ (68 часов), зачет (с оценкой), 24.4kb.
- Календарный план курса учебных занятий по спецкурсу «Формальные языки моделирования, 61.45kb.
- Тема: Создание документов в текстовых редакторах, 13.54kb.
- Н. Э. Баумана Кафедра Компьютерные системы и сети Г. С. Иванова, Т. Н. Ничушкина Оформление, 109.65kb.
- Формальные и неформальные структуры, их роль в организации содержание, 304.91kb.
- Текстовые редакторы это программы для создания и редактирования текстовых документов, 263.8kb.
- Курс лекций Преподаватель Михайлов Н. Л. Рыбинск 2001, 562.19kb.
- Курс лекций Барнаул 2001 удк 621. 385 Хмелев В. Н., Обложкина А. Д. Материаловедение, 1417.04kb.
Лекция 5.TEI
Основное назначение TEI, в отличие от DocBook, заключается не в передаче логической структуры документа, а в выделении в документе тех его составляющих, которые необходимы для конкретных целей (исследования, поиска и пр.). При этом могут оставаться без внимания (и, следовательно, без разметки) многие другие элементы структуры текста. Как и DocBook, TEI позволяет размечать документы различного уровня: от корпуса (собрания документов, не имеющего аналога в DocBook) до фрагмента технической документации.
TEI, в отличие от DocBook, не представляет собой единственное объявление типа документа. TEI имеет модульную структуру, позволяющую собирать DTD для конкретного применения из нескольких десятков модулей. Для управления такой сборкой в TEI использован механизм условных разделов DTD. Поэтому сначала рассмотрим этот механизм.
Ещё несколько слов про XML
Общая структура DTD содержит внешнее и внутреннее ограничения (7, разд. 2.8):
' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>'
ExternalID указывает на внешний по отношению к DTD ресурс (URL или файл), содержащий часть объявлений (сущностей, элементов и атрибутов); текст этого ресурса называется внешним ограничением (для того XML-документа, который будет связан с рассматриваемым DTD);
intSubset содержит объявления, обладающие приоритетом по отношению к объявлениям, содержащимся во внешнем ограничении; эта совокупность объявлений называется внутренним ограничением.
В принципе, структура текста внутреннего и внешнего ограничений имеет единственное отличие (7, разд. 2.8): в части DTD, вынесенной во внешнее ограничение (или во внешние параметрические сущности) допускается использование так называемых условных разделов (conditional sections):
intSubset ::= ( markupdecl | DeclSep)*
extSubsetDecl ::= ( markupdecl | conditionalSect | DeclSep)*
markupdecl представляет объявления (сущностей, элементов и атрибутов);
DeclSep – разделители (пробельный материал, инструкции обработки и комментарии);
conditionalSect – те самые условные разделы, которые мы сейчас и рассмотрим.
Условные разделы объявления типа документа
Условный раздел имеет следующую структуру (следующие 5 правил приведены в 7, разд. 3.4; я сохранил нумерацию правил):
[61] conditionalSect ::= includeSect | ignoreSect
[62] includeSect ::= ' S? 'INCLUDE' S? '[' extSubsetDecl ']]>'
[63] ignoreSect ::= ' S? 'IGNORE' S? '[' ignoreSectContents* ']]>'
[64] ignoreSectContents ::= Ignore (' ignoreSectContents ']]>' Ignore)*
[65] Ignore ::= Char* - (Char* (' | ']]>') Char*)
Интерпретация этих правил проста:
[61] – условный раздел может представлять включаемый или исключаемый раздел.
[62] – включаемый раздел оформляется как начало DTD (), за которым (через необязательные пробелы) следует слово INCLUDE, написанное заглавными буквами, за которым через необязательные пробелы следует открывающая угловая скобка. За ней находится содержимое включаемого раздела, представляющее собой всё то, что допустимо во внешнем ограничении, – т.е. объявления, разделители и снова условные разделы. Заканчивается включаемый раздел так же, как и DTD – ']]>'.
[63] – исключаемый раздел начинается так же, как и включаемый, но вместо INCLUDE используется слово IGNORE, также написанное заглавными буквами. И заканчивается исключаемый раздел так же, как и включаемый. Однако тело исключаемого раздела определено двумя последующими правилами. Эти правила удобнее прокомментировать в обратном порядке.
[65] – игнорировать любой текст (в том числе и пустой), в котором нет характерных для DTD сочетаний символов: ' и ']]>'. Такой текст будем называть игнорируемым.
[64] – тело исключаемого раздела – это игнорируемый текст, за которым, возможно, идут пары, состоящие из заключенного в ' и ']]>' тела исключаемого раздела и игнорируемого текста. Это правило необходимо для подсчета «открывающих» (') и «закрывающих» (']]>') DTD-скобок – в теле исключаемого раздела они должны быть строго вложены (когда встречается невложенная закрывающая DTD-скобка, исключаемый раздел считается законченным).
Семантика включаемого раздела проста: его текст включается в DTD, используемое XML-процессором при анализе документа. При этом выполняются обычные действия, например, подстановка значений параметрических сущностей.
Семантика исключаемого раздела сложнее. Тело исключаемого раздела полностью игнорируется XML-процессором: игнорируется наличие включаемых разделов, вложенных в исключаемый раздел; подстановка значений сущностей не выполняется, инструкции обработки игнорируются и т.д.
Применение условных разделов объявления типа документа
Пример условных разделов объявления типа документа
% draft 'INCLUDE' >
% final 'IGNORE' >
book (comments*, title, body, supplements?)>
]]>
book (title, body, supplements?)>
]]>
Приведённый пример иллюстрирует использование условных разделов объявления типа документа: в DTD включается весь текст, который может/должен быть использован в различных ситуациях применения DTD, сами ситуации обозначаются параметрическими сущностями, имеющими значения INCLUDE или IGNORE; части текста DTD, которые должны быть использованы в соответствующей ситуации, включаются в раздел, в котором вместо ключевых слов INCLUDE или IGNORE использована ссылка на параметрическую сущность. Замена значений сущностей изменит DTD:
% draft 'IGNORE' >
% final 'INCLUDE' >
TEI использует сотни параметрических сущностей со значениями INCLUDE или IGNORE, что, с одной стороны, позволяет производить тонкую настройку DTD, но, с другой стороны, требует тщательного изучения DTD TEI.