1 / 25

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

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

santo
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Предпосылки – SGML • SGML – Standard Generalized Markup Language – предназначен для обеспечения обмена информации между различными компаниями и информационными системами • 1980 год, IBM, DEC, Налоговая полиция США • Описание формата документа DTD (Document Type Definition) • Редкая процедура пересмотра стандарта, сложность внесения изменений • Требует высоких накладных расходов на разбор и валидацию

  3. Предспосылки - HTML • Основан на SGML и предназначен для представления информации в обозревателях WEB • Поддерживает гиперссылки • Ориентирован на визуальное представление содержимого и форматирование • В общем случае HTML документы не являются корректными (валидными) SGML документами • Фиксированный набор тегов, с невозможностью задания собственных данных

  4. XML – Требования и цели • Должен быть готов для использования в Internet • Должен поддерживаться многими приложениями • Должен быть совместим с SGML • Создание программ использующих XML должно быть простым • Число необязательных возможностей языка должно быть сведено к минимуму • Документы должны быть понятны человеку • Дизайн XML должен разрабатываться быстро • Спецификация XML должна быть чекой и краткой • Создание XML документов должно быть простым • Краткость команд разметки XML не имеет значения

  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

  6. Правильный (well-formed) документ XML • У каждого элемента должен быть открывающий и закрывающий теги • В документе должен быть только один корневой элемент • Названия элементов и атрибутов чувствительны к регистру • Элементы могут быть вложены друг в друга но не могут пересекаться • Некоторые символы должны предваряться управляющими символами или замещаться последовательностями специальных символов • Значения атрибутов должны быть взяты в кавычки (двойные либо апострофы) • Пустые элементы должны иметь особый формат

  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) <!DOCTYPERootElementName PUBLIC “ID” SYSTEM “URL” [ ]> • Корневой элемент <RootElementName> </RootElementName> • Комментарии <!-- Multi line text comment goes here --> • Инструкции обработки <? OrderValidation creditCheck checkCustomer ?>

  8. Специальные последовательности • &lt;используется для знака < • &gt; используется для знака > • &amp;используется для & • &quot;используется для “ • &apos;используется для ‘ • &#x26шестнадцатиричный код символа • &#38десятичный код символа • Символьные данные не подлежащие разбору: <![CDATA[Don’t parse this staff >_<]]>

  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>

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

  11. Атрибуты или элементы? • Элементы задают сущности (объекты) • Атрибуты задают свойства объекта • В элементе может быть не более одного атрибута с заданным именем • Атрибуты не могут иметь структуры • Атрибуты эффективнее и лаконичнее • Использование атрибутов упрощает доступ к ним при использовании SAX и DOM • Если вы не уверены что использовать в конкретном случае – используйте элементы

  12. Document Type Definition • Определеяет: • Вложенность элементов • Ограничения на количество и наличие элементов • Разрешенные атрибуты элементов • Типы атрибутов и значения по умолчанию • Сущности (ENTITY) • Не определяет: • Ограничения на содержимое атрибутов и элементов (формат числовых значений, длины строк и т.д.) • Собственные типы данных и отношения между ними

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

  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>

  15. DTD примитивы • Подстановка&MC;текстом Master Card <!ENTITYMC “Master Card”> • Внешний примитив(должен быть well formed и будет подвержен разбору) <!ENTITYfooter SYSTEM “/texts/footer.xml”> • Внешний не подвергаемый разбору примитив <!ENTITY logo SYSTEM “/images/logo.jpeg” NDATA jpg> • Параметрическая сущность (только внутри DTD): <!ENTITY % colors “(red|green|blue)”> <!ELEMENT point color %colors; #REQUIRED>

  16. DTD описание атрибутов <!ATTLIST ElemNameAttrNameTypeRequirement> Requirement::= #IMPLIED | #REQUIRED | #FIXED literal Type :== CDATA | NMTOKEN | NMTOKENS | ENTITY | ENTITIES | ID | IDREF | IDREFS | NOTATION | Enum • CDATA – текст • NMTOKEN – токен (с буквы, без пробела) • NMTOKENS – токены через пробелы • ID – уникальный идентификатор (для всего документа) • IDREF – ссылка на уникальный или уникальные (IDREFS) идентификаторы через пробелы • ENTITY содержимое должно быть именем примитива, неподвергаемого разбору • ENTITIES – разделенные пробелом неразбираемые примитивы

  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>

  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

  19. SAX Simple API for XML (Java)

  20. Работа с SAX • Реализовать свой обработчик наследуя класс org.xml.sax.helpers.DefaultHandler, реализующий интерфейсы: • ContentHandler • DTDHandler • EntityResolver • ErrorHandler • Получить объектпарсера SAXParserFactory f = SAXParserFactory.newInstance(); SAXParser p = f.newSAXParser(); • Запустить разбор документа p.parse(new InputSource(…), myHandler);

  21. Document Object Model

  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

  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);

  24. Задача • Выбрать задачу (магазин, записная книжка, погода, …) • Определить DTD • Написать пример документа, провалидировать его • Разобрать документ с помощью SAX, подсчитать количество элементов и атрибутов • Загрузить с помощью DOM, изменить содержимое • Сохранить результат

  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.new DefaultHandler.new java.lang.Thread.new {puts “Thread started”}

More Related