Современные языки и технологии программирования

25
Современные языки и технологии программирования Введение в XML

Upload: santo

Post on 10-Jan-2016

61 views

Category:

Documents


0 download

DESCRIPTION

Современные языки и технологии программирования. Введение в XML. Предпосылки – SGML. SGML – Standard Generalized Markup Language – предназначен для обеспечения обмена информации между различными компаниями и информационными системами 1980 год , IBM, DEC, Налоговая полиция США - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Современные языки и технологии программирования

Современные языки и технологии программирования

Введение в XML

Page 2: Современные языки и технологии программирования

Предпосылки – SGML SGML – Standard Generalized Markup Language –

предназначен для обеспечения обмена информации между различными компаниями и информационными системами

1980 год, IBM, DEC, Налоговая полиция США Описание формата документа DTD (Document

Type Definition) Редкая процедура пересмотра стандарта,

сложность внесения изменений Требует высоких накладных расходов на разбор и

валидацию

Page 3: Современные языки и технологии программирования

Предспосылки - HTML Основан на SGML и предназначен для

представления информации в обозревателях WEB

Поддерживает гиперссылки Ориентирован на визуальное представление

содержимого и форматирование В общем случае HTML документы не являются

корректными (валидными) SGML документами Фиксированный набор тегов, с невозможностью

задания собственных данных

Page 4: Современные языки и технологии программирования

XML – Требования и цели1. Должен быть готов для использования в Internet2. Должен поддерживаться многими приложениями3. Должен быть совместим с SGML4. Создание программ использующих XML должно

быть простым5. Число необязательных возможностей языка

должно быть сведено к минимуму6. Документы должны быть понятны человеку7. Дизайн XML должен разрабатываться быстро8. Спецификация XML должна быть чекой и краткой9. Создание XML документов должно быть простым10. Краткость команд разметки XML не имеет

значения

Page 5: Современные языки и технологии программирования

Группа технологий XML Extensible Markup Language (XML) 1.0/1.1 XML Namespaces - пространства имен XML Schema – схемы XML XPath – XML Path Language XLink – XML Linking Language XPointer – XML Pointer Language XSL/XSLT – Extensible Stylesheet

Language/Transformation SAX – Simple API for XML – (потоки и события) DOM – Document Object Model (элементы, узлы,

дерево, редактирование и сериализация) JAXB – Java Architecture for XML Binding

Page 6: Современные языки и технологии программирования

Правильный (well-formed) документ XML У каждого элемента должен быть открывающий и

закрывающий теги В документе должен быть только один корневой

элемент Названия элементов и атрибутов чувствительны к

регистру Элементы могут быть вложены друг в друга но не

могут пересекаться Некоторые символы должны предваряться

управляющими символами или замещаться последовательностями специальных символов

Значения атрибутов должны быть взяты в кавычки (двойные либо апострофы)

Пустые элементы должны иметь особый формат

Page 7: Современные языки и технологии программирования

Структура XML документа Документ (1.0) должен содержать символы

следующих диапазонов:Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] |

[#x10000-#x10FFFF]

Объявление (заголовок) XML:<?xml version=“1.0” standalone=“yes” encoding=“UTF-8”?>

Определение типа документа (DTD)<!DOCTYPE RootElementName PUBLIC “ID” SYSTEM “URL” [ ]>

Корневой элемент<RootElementName> </RootElementName>

Комментарии<!-- Multi line text comment goes here -->

Инструкции обработки<? OrderValidation creditCheck checkCustomer ?>

Page 8: Современные языки и технологии программирования

Специальные последовательности &lt; используется для знака < &gt; используется для знака > &amp; используется для & &quot; используется для “ &apos; используется для ‘ &#x26 шестнадцатиричный код символа &#38 десятичный код символа Символьные данные не подлежащие

разбору:<![CDATA[ Don’t parse this staff >_< ]]>

Page 9: Современные языки и технологии программирования

Пример документа<?xml version="1.0" standalone="no"?> <!DOCTYPE person SYSTEM

"http://somewhere.com/dtds/person.dtd"><!-- Famous mathematician --><person born=‘1912-06-23’ died=“1954-06-07”>

<name first=“Alan” last=“Turing”/> <profession>computer scientist</profession> <profession>mathematician</profession> <profession>cryptographer</profession><biography>

<![CDATA[ <Long story> ]]> </biography>

</person>

Page 10: Современные языки и технологии программирования

Пример DTD

<!-- person.dtd --><!ELEMENT person (name, profession*, biography?)> <!ATTLIST person born CDATA #REQUIRED

died CDATA #IMPLIED><!ELEMENT name EMPTY><!ATTLIST name first CDATA #REQUIRED

last CDATA #REQUIRED> <!ELEMENT profession (#PCDATA)> <!ELEMENT biography (#PCDATA)>

Page 11: Современные языки и технологии программирования

Атрибуты или элементы? Элементы задают сущности (объекты) Атрибуты задают свойства объекта В элементе может быть не более одного

атрибута с заданным именем Атрибуты не могут иметь структуры Атрибуты эффективнее и лаконичнее Использование атрибутов упрощает доступ к

ним при использовании SAX и DOM Если вы не уверены что использовать в

конкретном случае – используйте элементы

Page 12: Современные языки и технологии программирования

Document Type Definition Определеяет:

Вложенность элементов Ограничения на количество и наличие элементов Разрешенные атрибуты элементов Типы атрибутов и значения по умолчанию Сущности (ENTITY)

Не определяет: Ограничения на содержимое атрибутов и

элементов (формат числовых значений, длины строк и т.д.)

Собственные типы данных и отношения между ними

Page 13: Современные языки и технологии программирования

DTD - декларация PUBLIC – публичный идентификатор для

загрузки внешнего DTD по известному имени или URL

SYSTEM – системный URL для загрузки DTD<!DOCTYPE spec

PUBLIC "-//W3C//DTDSpecification::19980910//EN" "http://www.w3.org/XML/1998/06/xmlspec-19980910.dtd">

<!DOCTYPE person SYSTEM “person.dtd”>

Встроенная декларация<!DOCTYPE anydata [

<!ELEMENT anydata ANY>]>

Page 14: Современные языки и технологии программирования

DTD Описание элементов<!ELEMENT Single (SingleChild)>

<!ELEMENT Composite (Child1, Child2, Child3)>

<!ELEMENT OneOrMany (RequiredMultiChild+)>

<!ELEMENT ContainAny (OptionalMultiChild*)>

<!ELEMENT OneOrZero (OptionalChild?)>

<!ELEMENT Name (FirstName, MiddleName*, LastName?)> <!ELEMENT ContainsData (#PCDATA)*>

<!ELEMENT OneOrAnother (Option | Alternative)>

<!ELEMENT Paragraph (#PCDATA | Name | Profession | Footnote | Emphasize | Date )* >

<!ELEMENT EmptyOne EMPTY>

<!ELEMENT AnyContent ANY>

Page 15: Современные языки и технологии программирования

DTD примитивы Подстановка &MC; текстом Master Card<!ENTITY MC “Master Card”>

Внешний примитив (должен быть well formed и будет подвержен разбору)

<!ENTITY footer SYSTEM “/texts/footer.xml”>

Внешний не подвергаемый разбору примитив<!ENTITY logo SYSTEM “/images/logo.jpeg” NDATA jpg>

Параметрическая сущность (только внутри DTD):

<!ENTITY % colors “(red|green|blue)”><!ELEMENT point color %colors; #REQUIRED>

Page 16: Современные языки и технологии программирования

DTD описание атрибутов<!ATTLIST ElemName AttrName Type Requirement>Requirement::= #IMPLIED | #REQUIRED | #FIXED literalType :== CDATA | NMTOKEN | NMTOKENS | ENTITY |

ENTITIES | ID | IDREF | IDREFS | NOTATION | Enum CDATA – текст NMTOKEN – токен (с буквы, без пробела) NMTOKENS – токены через пробелы ID – уникальный идентификатор (для всего

документа) IDREF – ссылка на уникальный или уникальные

(IDREFS) идентификаторы через пробелы ENTITY содержимое должно быть именем примитива,

неподвергаемого разбору ENTITIES – разделенные пробелом неразбираемые

примитивы

Page 17: Современные языки и технологии программирования

DTD описание атрибутов Enum – список фиксированных значений разделенных |

<!ATTLIST date month (January | February | March | April | May | June | July | August | September |

October | November | December) #REQUIRED> NOTATION – имя нотации определенной в документе

<!NOTATION gif SYSTEM "image/gif">

<!NOTATION tiff SYSTEM "image/tiff">

<!NOTATION jpeg SYSTEM "image/jpeg">

<!NOTATION png SYSTEM "image/png">

<!ATTLIST image type NOTATION (gif | tiff | jpeg |

png) #REQUIRED>

Page 18: Современные языки и технологии программирования

JAXP Java API for XML Processing SAX (Simple API for XML)

javax.xml.parsers.SAXParser Требует мало памяти Потоковая обработка, событийная модель

DOM (Document Object Model) javax.xml.parsers.DocumentBuilder Строит дерево «узлов» документа Позволяет редактировать документ

XSLT javax.xml.transform.Transformer

Page 19: Современные языки и технологии программирования

SAX Simple API for XML (Java)

Page 20: Современные языки и технологии программирования

Работа с SAX Реализовать свой обработчик наследуя

класс org.xml.sax.helpers.DefaultHandler, реализующий интерфейсы: ContentHandler DTDHandler EntityResolver ErrorHandler

Получить объект парсераSAXParserFactory f = SAXParserFactory.newInstance();SAXParser p = f.newSAXParser(); Запустить разбор документаp.parse(new InputSource(…), myHandler);

Page 21: Современные языки и технологии программирования

Document Object Model

Page 22: Современные языки и технологии программирования

Работа с DOM Получить разборщик документаDocumentBuilderFactory factory =

DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder(); Получить объект документаDocument doc = builder.parse(new InputSource(…)); Работать с элментами документаElement root = doc.getDocumentElement();root.getChildNodes();root.getElementsByTagName(); Основной класс дерева - Node

Page 23: Современные языки и технологии программирования

Сохранение документа DOM Создать трансформерTransformerFactory factory =

TransformerFactory.newInstance();

Transformer t = factory.newTransformer();

Создать объект для трансформацииDOMSource docSource = new DOMSource(doc);

DOMSource nodeSource = new DOMSource(node);

Осуществить сохранение документа (или узла):

StreamResult res = new StreamResult(…);

t.transform(source, res);

Page 24: Современные языки и технологии программирования

Задача

1.Выбрать задачу (магазин, записная книжка, погода, …)

2.Определить DTD3.Написать пример документа,

провалидировать его 4.Разобрать документ с помощью SAX,

подсчитать количество элементов и атрибутов5.Загрузить с помощью DOM,

изменить содержимое 6.Сохранить результат

Page 25: Современные языки и технологии программирования

Использование Java API из JRuby

include Java#доступен Java API с полными именамиimport org.xml.sax.helpers.DefaultHandler#DefaultHandler доступен без квалификации пакета#наследование от Java-классаclass MySAXHandler < DefaultHandler#перегрузка метода Java-класса def startElement(uri, localName, qName, attrs)#тело метода end#определение других методовend

#создание экземпляра класса (Ruby или Java)MySAXHandler.newDefaultHandler.newjava.lang.Thread.new {puts “Thread started”}