Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Определение элемента XML и последовательности элементов XML




XML

 

Задача, решением которой занимается XML.

Есть программа, работающая с трёхмерной графикой, в программе есть внутреннее представление, его нужно хранить в файле. Первый выбор - бинарный файл или текстовый.

Бинарный файл: занимает мало места на диске. Чтобы разобраться с форматом нужно иметь специальный документ (какой байт за что отвечает). Нужна специальная программа, чтобы его просмотреть.

Текстовый: занимают больше места, но являются самоописывающими.

 

Допустим, автор программы заботится о совместимости, т.е. чтобы другие программы потом могли работать с этим форматом => текстовый файл.

 

Как мог бы выглядеть этот файл?

1.0 2.0 3.0

2.4 3.0 1.55

0.0 0.0 0.0

1.2 1.0 1.0

0 1

2 3

Сначала точки - 4 точки.

Затем линии - используются номера точек для соединения линией.

 

Какие проблемы могут возникнуть при использовании этого текстового файла?

1. кодировка

2. символы разделителя (пробелы, табы, переводы строк)

3. формат вещественных чисел (точка, запятая, представление в экспоненциальном виде)

4. ошибки (вместо 0 поставить о, написать 4 точки, указать 3)

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

По-хорошему парсер должен говорить, что исправить.

 

Для таких задач можно использовать XML.

 

Одно из возможных (и самых популярных решений на данный момент) - XML.

eXtendable Markup Language (расширяемый язык разметки)

 

Особенности формата:

1) должен всегда начинаться с инструкции

<?xml version="1.0" encoding="UTF-8"?>

решает проблему кодировки

 

<model>

<points number="4">

<point>

<x>1.0</x>

<y>2.0</y>

<z>3.0</z>

</point>

</points>

<lines number="6">

</lines>

</model>

 

2) Инструкция в значках < > называется тегом.

Теги решают проблему разделителей. Деление элементов осуществляется по тегам.

XML-документ представляет собой дерево: одни элементы могут вкладываться в другие. Обязательно должен быть корневой тег, куда вкладываются все остальные.

3) У тегов должен быть закрывающийся тег.

4) У тегов могут быть атрибуты. Можно переписать вложенные теги в виде атрибутов.

<point x="1.0" y="2.0" x="3.0" />

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

5) Теги не могут пересекаться. Не может быть:

<b><i></b></i>

Должно быть:

<b><i></i></b>

6) есть специальные символы, которые в XML-документе должны быть заменены (для того, чтобы облегчить работу парсера)

< &lt; // less than

> &gt;

" &quot;

' &apos;

& &amp;

 

<less> a < b </less>

<less> a &lt; b </less>

 

Если документ соответствует этим правилам, документ называется well-formed.

Существует множество готовых библиотек для разбора XML-файлов, что упрощает жизнь.

Документ XML может быть:

a) well-formed

b) valid

Есть два языка, которые позволяют задать более жесткие правила

DTD document type definition

Schema

DTD: можно задать, что внутри тега <point> должны находиться теги <x>, <y> и <z>

Schema: более мощный язык

Можно задать, что если у <points number="4">, что внутри будет именно 4 тега <point>. Можно задать форматы полей (что внутри <x> будет вещественное число)

Есть утилиты, например, xml lint,

xml lint a.xml rules.xml

a.xml - сам документ

rules.xml - правила, записанные на языке dtd или schema

Утилита может проверить, соответствует ли документ правилам.

Простой парсер проверяет, является ли документ well-formed.

Valid-документ проходит проверку по правилам оформления (более усиленная версия).

 

DTD

 

Определение типа документа (document type definition - DTD) - это правила, в соответствии с которыми осуществляется проверка конкретного документа (веб-страницы) XML или (X)HTML. Т.е. это формальное описание требований к документу XML. DTD определяет, какие теги можно использовать и где они могут располагаться. Также DTD определяет, какие теги должны присутствовать, а какие могут быть опущены.

Создавая XML документ, разработчик сам опредяет, как назвать теги, в каком порядке они могут быть располагаться, какие данные будут записаны в том или ином элементе, будут у элемента атрибуты или нет, и многое другое. Без формального описания структуры документа этим документом может воспользоваться только разработчик. В случае если разработанный XML-документ нужно передавать во внешний мир, к тому же нужно получать ответы в таком же формате, без определения типов документов не обойтись. В DTD перечисляются возможные имена элементов, определяются имеющиеся атрибуты для каждого типа элементов и описывается вложенность элементов.

Одно из применений DTD: проверка написанного XML документа на корректность. Правильно оформленные документы, написанные в соответствии со всеми правилами, описанными в спецификации XML, не могут быть проверены на предмет ошибок. Пропущенные ошибки могут вызвать повреждение программы, обрабатывающей данные документы, либо ввод в систему неверных данных. Но если документ ссылается на определение DTD, то, используя проверяющий на допустимость анализатор можно проверить, есть ли в данном документе ошибки или нет. Анализатор обнаруживает структурные ошибки и ошибки содержания, что намного уменьшает объем проверок, выполняемых логикой приложения.

Для связывания декларации DTD с экземпляром документа в версии XML 1.0 предлагается специальная декларация DOCTYPE. Она должна следовать после декларации XML и предшествовать любым элементам документа.

Чтобы связать документ с определённым DTD, необходимо в начале текста документа указать элемент Объявление Типа Документа.

 

В зависимости от места расположения DTD, Объявление Типа Документа может быть двух видов:

•Внутреннее подмножество DTD

Набор объявлений DTD содержится в самом тексте документа. Например:

<!DOCTYPE foo [ <!ENTITY greeting "helloworld"> ]>

•Внешнее подмножество DTD

Набор объявлений DTD располагается в отдельном текстовом файле с расширением .dtd В этом случае ссылку на файл можно сделать через публичный идентификатор и (или) через системный идентификатор. Например:

<!-- Валидация простого HTML 4.01 -->

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"

"http://www.w3.org/TR/html4/strict.dtd">

 

Пример очень простого XML DTD, описывающего список людей:

<!ELEMENT people_list (person*)>

<!ELEMENT person (name, birthdate?, gender?)>

<!ELEMENT name (#PCDATA) >

<!ELEMENT birthdate (#PCDATA) >

<!ELEMENT gender (#PCDATA) >

Начиная с первой строки:

1.Элемент <people_list> содержит любое число элементов <person> . Знак <*> означает что возможно 0, 1 или более элементов <person> внутри элемента <people_list>.

2.Элемент <person> содержит элементы <name>, <birthdate>, <gender>. Знак <?> означает что элемент необязателен. Элемент <name> не содержит <?>, что означает что элемент <person> обязательно должен содержать элемент <name>.

3.Элемент <name> содержит данные.

4.Элемент <birthdate> содержит данные.

5.Элемент <gender> содержит данные.

 

Пример XML-документа, использующего этот DTD:

<?xml version="1.0" encoding="UTF-8"?>

 

<!DOCTYPE people_list SYSTEM "example.dtd">

<people_list>

<person>

<name>Fred Bloggs</name>

<birthdate>27/11/2008</birthdate>

<gender>Male</gender>

</person>

</people_list>

 

 

Список атрибутов

<!ATTLIST element-name attribute-name type>

Обычно в качестве типа используется CDATA (character-string data)

После типа должно быть ключевое слово #REQUIRED (обязательный) или #IMPLIED (необязательный).

 

Также возможны ссылки.

ID значением атрибута должен быть уникальный идентификатор элемента

IDREF значением элемента является ссылка на элемент по ID

 

 

Объявление элементов, атрибутов и сущностей в DTD. Модификаторы «*», «?», «+»

Для объявления элементов, атрибутов и сущностей в DTD используются специальные декларации и модификаторы. Чтобы подробно во всем разобраться, давайте для начала рассмотрим теоритическую информацию, а затем во второй части статьи перейдем к практическим примерам.

Определение элемента XML и последовательности элементов XML

<!ELEMENT название элемента (что может содержать)>

Пример

<!ELEMENT book (title, author, price, description)>

Элемент book содержит по одному элементу title, author, price и description.


Поделиться:

Дата добавления: 2015-04-05; просмотров: 71; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты