Глава 2.
Введение в WML
Язык разметки для беспроводных
устройств WML создан для описания пользовательского интерфейса на устройствах
с ограниченными возможностями представления данных, например, мобильных телефонах
с маленьким экраном, карманных компьютерах.
WML основан на расширяемом языке разметки XML (Extensible Markup Language), который предлагает стандартизованный подход к описанию данных. Если вы знакомы с HTML, то найдете много знакомого и в WML. Это неудивительно, так как и XML, и HTML имеют общего предка — абстрактный язык разметки SGML (Standard Generalized Markup Language). Такое обилие языков разметки удобно для наглядности представить в виде своего рода "генеалогического дерева" языков разметки (Рис. 2.1).
Рассмотрим XML более подробно, так как в дальнейшем это сильно упростит понимание WML.
XML-документ — это обычный текстовый документ, который начинается с ИНСТРУКЦИИ <?xml version="l.0"?>.
Она говорит о том, что данный текстовый файл содержит документ в формате XML версии 1.0.
Замечание
Обратите внимание, что по стандарту перед этой инструкцией не должно быть никаких дополнительных символов, в том числе пробелов и переводов строки. Их наличие может затруднить работу программы, которая обрабатывает XML-документы (ее называют XML-процессором).
Так как XML-документ — это обычный текстовый документ, создавать его можно, используя любой текстовый редактор, например, Microsoft Notepad.
XML-документ состоит из текста, окруженного специальными метками — тегами (tags), размещаемыми в угловых скобках. Основной структурной единицей языка XML является элемент (element). Элементы могут содержать внутри себя текст, а также другие элементы. В тексте элементы записываются с помощью открывающего и закрывающего тегов:
<tag> текст и другие элементы </tag>
Если элемент ничего не содержит, он называется пустым и записывается так: </tag> .
Элемент, который включает в себя другие элементы, называют родителем, а элементы, которые в него входят — дочерними элементами. Элемент может одновременно быть родителем для одних элементов и дочерним для других.
Стандарт XML дает определение правильно сформированного (well-formed)
документа. В таком документе все открывающие теги должны быть закрыты, и элементы
не должны пересекаться. Также должен существовать корневой элемент, содержащий
все остальные элементы. Так, следующий фрагмент является ошибочным из-за пересечения
элементов, хотя все теги и закрыты:
<parent> <child> </parent> </child>
Его можно исправить, если разместить элемент <child>
целиком внутри элемента <parent>:
<parent> <child> </child> </parent>
Следующий документ не имеет корневого элемента и потому также не подпадает
под определение правильно сформированного:
<?xml version="1.0"?>
<father>
<child/>
</father>
<mother>
<child/>
</mother>
Исправить ситуацию можно так:
<?xml version="1.0"?>
<family>
<father>
<child/>
</father>
<mother>
<child/>
</mother>
</family>
Элемент может иметь свойства, которые описываются с помощью атрибутов.
Атрибуты находятся внутри открывающего тега и представляют собой набор пар "имя=значение".
Значение атрибутов заключается в кавычки (") или апострофы (').
Вот пример записи атрибутов:
<button width="50" height="20" caption="Press Me!"> текст </button>
В случае, когда открывающий тег одновременно является и закрывающим, альтернативы
размещению атрибутов внутри тэга нет:
<agent first-name='James' last-name='Bond' code='007'/>
Язык XML чувствителен к регистру букв, поэтому тег
<tag attrib="value"/>
отличается от тега
<Tag Attrib="value"/>
В XML все элементы имеют два предопределенных атрибута: id
и class. Первый из них содержит уникальный идентификатор
элемента в данном документе. Атрибут class позволяет
отнести элемент к тому или иному классу элементов.
Предупреждение
Многие Web-браузеры, интерпретируя HTML, снисходительно относятся к незакрытым
тегам, отсутствию кавычек у значений атрибутов и тому подобным вещам. В XML
вообще и в WML в частности, вам придется забыть об этих "вольностях" и быть
предельно дисциплинированным, поскольку XML-процессоры относятся к синтаксису
документа очень строго. Один незакрытый тег может вызвать ошибку при обработке
всего документа. К сожалению, большинство ошибок связано именно с несоблюдением
следующих простых правил:
• закрывайте теги;
• заключайте значения атрибутов в кавычки или апострофы;
• следите за тем, чтобы элементы не пересекались.
В тексте документа могут встречаться комментарии. Они начинаются с символов
<!-- и заканчиваются символами -->.
Комментарии бывают однострочными и многострочными:
<!-- Это однострочный комментарий -->
<!-- А здесь
комментарий занимает
несколько строк
-->
Комментарии помогают читателю лучше понять структуру документа.
Замечание
Хорошо написанные комментарии вместе с выравниванием тегов сэкономят много
сил и времени при попытке разобраться, что же это вы написали два месяца назад.
В этой книге мы используем стиль, при котором дочерние элементы имеют больший
отступ от левого края, чем их родители:
<grandparent>
<parent>
<child/>
</parent>
</grandparent>
Для того чтобы вставить в текст документа специальные символы, которых может
и не быть в раскладке клавиатуры, используют так называемые подстановки.
Они записываются как число; где число — это код символа в Unicode.
Например, чтобы вставить в текст знак английского фунта стерлингов J, который
имеет код 163, необходимо написать £. Обратите внимание на точку с запятой
после числа, она является неотъемлемой частью подстановки. Код символа можно
записать в шестнадцатеричном виде. В этом случае перед ним ставится символ 'x':
хШестнадцатеричныйКод;
Например, русская буква "Я", имеющая десятичный Unicode-код 1071, может быть
представлена подстановкой &x42F;
Поскольку угловые скобки '<' и '>',
а также некоторые другие символы используются в служебных целях, они не могут
встречаться непосредственно в тексте документа. Для того чтобы вставить их в
текст, можно воспользоваться именованными подстановками (табл. 2.1).
Таблица 2. 1. Именованные подстановки
Имя подстановки |
Код |
Примечание |
quot |
" |
Кавычки |
amp |
&#38; |
Амперсанд |
apos |
' |
Апостроф |
lt |
< |
Знак "меньше" |
gt |
> |
Знак "больше" |
nbsp |
  |
Неразрывный пробел |
shy |
­ |
Возможный перенос |
Именованные подстановки делают текст XML-документа более понятным для человека.
Согласитесь, что строка "Smith & Co" значительно легче читается, чем
"Smith &#38; Со".
XML дает возможность описать любые данные с помощью элементов и атрибутов.
Чтобы упростить этот процесс, вам дается право придумывать любые элементы и
атрибуты и выстраивать из них любую иерархию.
Кстати, в действительности вы никогда не увидите документ, написанный на "чистом"
XML, так как его просто не может быть. XML сам по себе — метаязык, полная абстракция,
правила игры: "я не знаю, ЧТО вы хотите описывать, но могу предложить способ,
КАК это можно сделать".
Обычно, чтобы описать какие-либо данные, вам надо создать свой язык, основанный
на XML. Описав его элементы и атрибуты, а также отношения между ними в определении
документа (Document Type Definition, DTD), вы можете его потом использовать
как своего рода "грамматику" вашего языка. Если в документе есть ссылка на DTD,
то XML-процессор будет использовать DTD для проверки правильности документа.
Документ, который соответствует правилам указанного в нем DTD, называется допустимым
(valid).
Допустимость документа подразумевает, что документ является правильно сформированным.
Обратное может быть неверно, правильно сформированный документ может и не соответствовать
своему DTD (тогда это считается ошибкой).
Разумеется, вам не обязательно придется "изобретать велосипед" — возможно,
язык, который вам нужен, уже существует и DTD для него написан.