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

Post on 10-Jan-2016

85 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

Введение в XML

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

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

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

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

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

валидацию

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

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

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

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

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

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

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

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

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

значения

Группа технологий 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

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

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

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

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

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

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

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

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

Структура 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 ?>

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

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

Пример документа<?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>

Пример 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)>

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

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

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

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

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

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

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

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

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

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>]>

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>

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>

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 – разделенные пробелом неразбираемые

примитивы

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>

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

SAX Simple API for XML (Java)

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

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

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

Document Object Model

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

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

Сохранение документа 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);

Задача

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

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

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

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

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

Использование 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”}

top related