Современные языки и технологии программирования
DESCRIPTION
Современные языки и технологии программирования. Введение в XML. Предпосылки – SGML. SGML – Standard Generalized Markup Language – предназначен для обеспечения обмена информации между различными компаниями и информационными системами 1980 год , IBM, DEC, Налоговая полиция США - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/1.jpg)
Современные языки и технологии программирования
Введение в XML
![Page 2: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/2.jpg)
Предпосылки – SGML SGML – Standard Generalized Markup Language –
предназначен для обеспечения обмена информации между различными компаниями и информационными системами
1980 год, IBM, DEC, Налоговая полиция США Описание формата документа DTD (Document
Type Definition) Редкая процедура пересмотра стандарта,
сложность внесения изменений Требует высоких накладных расходов на разбор и
валидацию
![Page 3: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/3.jpg)
Предспосылки - HTML Основан на SGML и предназначен для
представления информации в обозревателях WEB
Поддерживает гиперссылки Ориентирован на визуальное представление
содержимого и форматирование В общем случае HTML документы не являются
корректными (валидными) SGML документами Фиксированный набор тегов, с невозможностью
задания собственных данных
![Page 4: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/4.jpg)
XML – Требования и цели1. Должен быть готов для использования в Internet2. Должен поддерживаться многими приложениями3. Должен быть совместим с SGML4. Создание программ использующих XML должно
быть простым5. Число необязательных возможностей языка
должно быть сведено к минимуму6. Документы должны быть понятны человеку7. Дизайн XML должен разрабатываться быстро8. Спецификация XML должна быть чекой и краткой9. Создание XML документов должно быть простым10. Краткость команд разметки XML не имеет
значения
![Page 5: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/5.jpg)
Группа технологий 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: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/6.jpg)
Правильный (well-formed) документ XML У каждого элемента должен быть открывающий и
закрывающий теги В документе должен быть только один корневой
элемент Названия элементов и атрибутов чувствительны к
регистру Элементы могут быть вложены друг в друга но не
могут пересекаться Некоторые символы должны предваряться
управляющими символами или замещаться последовательностями специальных символов
Значения атрибутов должны быть взяты в кавычки (двойные либо апострофы)
Пустые элементы должны иметь особый формат
![Page 7: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/7.jpg)
Структура 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: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/8.jpg)
Специальные последовательности < используется для знака < > используется для знака > & используется для & " используется для “ ' используется для ‘ & шестнадцатиричный код символа & десятичный код символа Символьные данные не подлежащие
разбору:<![CDATA[ Don’t parse this staff >_< ]]>
![Page 9: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/9.jpg)
Пример документа<?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: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/10.jpg)
Пример 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: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/11.jpg)
Атрибуты или элементы? Элементы задают сущности (объекты) Атрибуты задают свойства объекта В элементе может быть не более одного
атрибута с заданным именем Атрибуты не могут иметь структуры Атрибуты эффективнее и лаконичнее Использование атрибутов упрощает доступ к
ним при использовании SAX и DOM Если вы не уверены что использовать в
конкретном случае – используйте элементы
![Page 12: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/12.jpg)
Document Type Definition Определеяет:
Вложенность элементов Ограничения на количество и наличие элементов Разрешенные атрибуты элементов Типы атрибутов и значения по умолчанию Сущности (ENTITY)
Не определяет: Ограничения на содержимое атрибутов и
элементов (формат числовых значений, длины строк и т.д.)
Собственные типы данных и отношения между ними
![Page 13: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/13.jpg)
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: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/14.jpg)
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: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/15.jpg)
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: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/16.jpg)
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: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/17.jpg)
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: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/18.jpg)
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: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/19.jpg)
SAX Simple API for XML (Java)
![Page 20: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/20.jpg)
Работа с 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: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/21.jpg)
Document Object Model
![Page 22: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/22.jpg)
Работа с 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: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/23.jpg)
Сохранение документа 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: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/24.jpg)
Задача
1.Выбрать задачу (магазин, записная книжка, погода, …)
2.Определить DTD3.Написать пример документа,
провалидировать его 4.Разобрать документ с помощью SAX,
подсчитать количество элементов и атрибутов5.Загрузить с помощью DOM,
изменить содержимое 6.Сохранить результат
![Page 25: Современные языки и технологии программирования](https://reader035.vdocuments.mx/reader035/viewer/2022062309/568142bf550346895daf0aa5/html5/thumbnails/25.jpg)
Использование 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”}