Смекни!
smekni.com

SGML SGML - структури DTD (стр. 2 из 3)

Якщо тип документа відомий, спеціальна програма (парсер) може бути використана для перевірки того, що вміст документа відповідає його типу - всі його необхідні частини присутні і випливають у потрібному порядку. Більш важливо, що різні документи того самого типу можуть оброблятися однаковим способом. Можуть бути написані програми, що використовують інформацію, задану у визначеному типу документа і здатні завдяки цьому робити більш розумні і значимі дії.

Незалежність від низькорівневих представлення даних

Базовою метою, що ставилася при розробці SGML, була задача забезпечення перенесення документів між різними програмними й апаратними платформами без втрати інформації. Завдяки попереднім двом особливостям ця вимога досягається на абстрактному рівні. Розглянута тут можливість забезпечує цю вимогу на фізичному рівні, за допомогою визначення значення послідовностей байтів, з яких складається документ. SGML надає механізм загального призначення для заміни рядків, тобто простий машинно-незалежний спосіб для вказівки того, що конкретна послідовність символів у документі повинна бути замінена на іншу під час обробки документа. Одне з застосувань цієї можливості - забезпечення однаковості термінології й інших параметрів документів; інше, більш важливе - забезпечення можливості переносу тексту, що містить нестандартні і т.п. символи між різними платформами, що мають різні набори символів, можливості по їхньому відображенню і т.д. Це досягається за допомогою заміни нестандартних символів на рядки, що задають їхні коди. Послідовності символів, визначені для описаної вище заміни називаються entities ("поняття").

SGML-структури

Текстуальна структура

Текст не є недиференційованою послідовністю слів, а тим більше байт. Для різних цілей він може бути розбитий на безліч різних елементів різних типів і розмірів. Прозаїчний текст може бути розбитий на розділи, глави, абзаци і пропозиції. Віршований - на cantos, строфи і рядки. Надрукований текст, залишаючись чи прозою віршем і не залежно від цього, розбивається на томи, брошури і сторінки.

Структурні елементи подібного типу найчастіше використовуються для посилання на конкретні місця в тексті ("третя пропозиція другого параграфа глави 10", "песня 10, рядок 1234", "сторінка 412" і т.д.), хоча можуть використовуватися і по прямому призначенню - як позначення деякої структурно- і завершеною по змісту одиниці тексту, наприклад для аналітичних цілей (" чи відрізняється середня довжина пропозиції в розділі 2 у порівнянні з розділом 5?", "скільки абзаців розділяють кожне зустрінуте слово `природа' ?", "скільки сторінок у документі?"). Інші структурні елементи є чисто аналітичними, у тім змісті, що вони характеризують деяку частину тексту. У драматичному тексті мова якого-небудь персонажа може вважатися елементом одного типу, а вказівки для чи сцени опису дій - як інший тип. Подібний аналіз менш корисний для посилання на конкретне місце в тексті ("93-я мова Гораціо в акті 2"), чим для проведення порівнянь лексики одного персонажа в порівнянні з іншим і т.п.

У прозаїчним тексті подібним же чином можна виділяти пряму і непряму мову, стильові особливості тексту (оповідання, полеміка, коментар, аргументація і т.д.), цитати різних авторів і так далі. А для деяких типів аналізу (найбільше для критичного розбору), фізичного представлення друкованого чи рукописного тексту також може мати значення: парадоксально, але може виявитися необхідним використовувати дескриптивний маркап для опису процедурного.

Описані текстуальні структури перетинаються і накладаються один на одного, утворити складні і непередбачені комбінації. Таким чином, вимагаються як способи забезпечення можливості роботи з декількома ієрархіями, так і методи забезпечення надійності такого маркапа і виключення небажаного взаємного впливу. SGML забезпечує ці можливості на різних рівнях - як на найпростішому, коли обов'язок стежити за несуперечністю перетинання структур лягати на користувача, так і на самому верхньому рівні, забезпечуючи можливість застосування різних схем маркапа для того самого документа, тобто, формально, допускають що документ може включати декілька типів документів.

SGML-структури

У цьому параграфі описуються чітка і проста ідея схеми маркапа, використовувана в SGML для ідентифікації структурних елементів у тексті. Також описуються методи, що надає SGML для визначення правил, що описують, які комбінації цих елементів є припустимими для документа.

Елементи

Елемент - термін, використовуваний у SGML для позначення якої-небудь структурної одиниці тексту. Різним типам елементів даються різні імена, але SGML не надає ніякого способу визначення змісту і значення конкретного типу елемента, крім завдання його відносин з іншими елементами. Таким чином, єдине, що можна сказати про елемент (наприклад) <blort> - це те, чи можуть екземпляри цього елемента зустрічатися усередині елементів типу <farble>, і те, чи може він сам бути декомпозован на елементи типу <blortette>. Варто підкреслити, що SGML ніяким образом не визначає семантику елементів; по стандарті вона залежить від додатка.Створення SGML-сумісного набору тегів і завдання їхнього змісту саме і є тією задачею, що вирішують додаткові стандарти, такі як HTML і XML, XSL; саме вони задають конкретну схему маркапа й у частині синтаксису роблять це в термінах SGML. При визначенні елемента йому необхідно привласнити ім'я, що відбиває його призначення; таке ім'я називається generic identifier (GI).

У тексті (document instance, екземплярі документа) кожен елемент повинний бути явно позначений деяким чином. Стандарт надає безліч можливостей зробити це, найбільше часто використовуваним є вставка тега на початку елемента (start-tag) і іншого наприкінці (end-tag). Старт- і енд- теги використовуються щоб узяти в дужки текст, що входить в елемент, точно так само, як різні дужки і лапки в звичайній пунктуації. Наприклад, цитата може бути позначена в такий спосіб:

... Rosalind's remarks <quote>This is the silliest stuff

that ere I heard of!</quote> clearly indicate ...

Як видно з цього приклада, старт-тег має форму <gi>, де кутові дужки задають початок і кінець самого старт-тега, а gi - ідентифікатор тега. Енд-тег відрізняється від старт-тега тільки тим, що перед ідентифікатором ставиться коса риса: </gi>.

Моделі змісту

Елемент може бути порожній, тобто взагалі не мати вмісту, чи містити простий текст. Однак звичайно елементи одного типу будуть вкладені (будуть цілком міститися) усередині елементів іншого типу і т.д. Таким чином, текст має деревоподібну структуру, у якій елементи рекурсивно входять один в іншій:

Element::=EMPTY | Char+ | Element+

Щоб проілюструвати це, розглянемо вкрай просту структурну модель: припустимо, що в межах антології ми хочемо ідентифікувати тільки вірші, а саме, їхні назви і строфи і рядки, з яких вони складаються. У термінах SGML, тип нашого документа - антологія і вона складається з послідовності віршів. Кожен стих являє собою заголовок, за яким випливає одна чи більш строфа. Строфа складається з послідовності рядків. Цілком розмічений, текст буде виглядати в такий спосіб:

<anthology><poem><title>The SICK ROSE</title><stanza><line>O Rose thou art sick.</line><line>The invisible worm,</line><line>That flies in the night</line><line>In the howling storm:</line></stanza><stanza><line>Has found out thy bed</line><line>Of crimson joy:</line><line>And his dark secret love</line><line>Does thy life destroy.</line></stanza></poem> <!-- more poems go here --> </anthology>

Пробіли і розриви рядків додані винятково для зручності читання, вони не мають особливого значення для SGML. Рядок

<!-- more poems go here -->

є SGML-коментарем.

У цьому прикладі не робиться ніяких припущень із приводу обмежень накладаються на елементи, наприклад такі, чи може назва розташовуватися не перед першою строфою чи вірша про тім, чи можуть існувати рядка, що не входять у строфу. Саме тому маркап такий багатослівний: у ньому початок і кінець кожного елемента явно позначені, оскільки не задано правил про тім, де і коли може розташовуватися деякий елемент. Однак на практиці можна сформулювати правила, що дозволяють скоротити необхідний обсяг маркапа. Наприклад, у нашій спрощеній моделі вірша, ми можемо задати наступні обмеження:

  1. У межах антології містяться вірші і нічого більш.
  2. Вірш завжди має єдиний елемент-заголовок, що передує першій строфі і не утримуючих інших елементів.
  3. Крім заголовка, вірш містить тільки строфи.
  4. Строфи складаються тільки з рядків і будь-який рядок міститься в строфі.
  5. За строфою може випливати тільки інша чи строфа кінець вірша.
  6. За рядком випливає тільки інший чи рядок початок нової строфи

З цих обмежень можна вивести деякі наслідки:

  • З обмежень 5 і 6 випливає, що немає необхідності явно позначати кінці строф і рядків.
  • З обмеження 2 випливає, що не потрібно позначати кінець назви - він задається неявно початком першої строфи.
  • Аналогічно, з обмежень 1 і 3 випливає, що не обов'язково позначати кінець вірша: оскільки вірші не можуть міститися усередині віршів, але повинні міститися усередині антологій, кінець вірша мається на увазі початком іншого або завершенням антології.

Застосовуючи ці спрощення, ми може розмітити той же вірш у такий спосіб:

<anthology><poem><title>The SICK ROSE<stanza><line>O Rose thou art sick.<line>The invisible worm,<line>That flies in the night<line>In the howling storm:<stanza><line>Has found out thy bed<line>Of crimson joy:<line>And his dark secret love<line>Does thy life destroy. <!-- more poems go here --> </anthology>

Можливість завдання правил, що визначають, які елементи можуть бути вкладені в інші елементи - одна з найважливіших характеристик SGML. Фактично, SGML дозволяє задати граматику мови маркапа.

Перш ніж розглянути ці правила більш докладно, приведемо конкретні приклади тих можливих дій, які можна виконати з розробленим нами документом-антологією. Проста програма, що індексує, може витягати деякі текстові елементи, наприклад, назви, щоб скласти зміст антології; чи створити список усіх слів (wordlist), використовуваних у віршах. Проста форматуюча програма може вставляти порожні рядки між строфами, можливо нумеруючи останні. Різні частини віршів можуть бути представлені різним форматуванням, наприклад, заголовки - жирним шрифтом. Більш складна програма, що аналізує, може простежити використання розділових знаків стосовно розділів на строфи і метричний малюнок вірша. І звичайно ж, вищенаведений текст може бути перенесений з одного комп'ютера на іншій і оброблений будь-якою чи людиною будь-якою програмою, що розуміють, який зміст мають його теги, без необхідності в різних трансформаціях і перетвореннях, необхідних при переносі файлів різних proprietary текстових процесорів.