Документы нарушающие правила форматирования xml
Документы нарушающие приведённые ниже правила:
Правило №1 — Все элементы должны корректно открываться, закрываться и быть вложенными.
Например.
Это корректно: <name> Jane <address> Main Street </address> </name>
Это не корректно: <name>Jane<address>123 Main </name></addess>
XML не позволяет иметь незакрытые элементы. Так, если элементу не нужен закрывающий тэг (как в случае при отсутствии содержимого), это следует отражать при определении открывающего тэга элемента. Это можно сделать, завершая тэг символом "/". <image url="my_face.jpg" />
Правило №2 — Все значения атрибутов должны заключаться в кавычки.
Это верно:<product version="5">
Это неверно:<product version=5>
Правило №3 — XML чувствителен к регистру. Можно пользоваться любым регистром, но следует быть последовательным.
<product> в нашем примере допустимо, в то время как <Product> или <PRODUCT> — нет.
Правило №4 — Свободное место не игнорируется. Следующие два примера будут интерпретироваться по-разному.
Пример 1:
<title>
<name>The mysterious mathematician</name>
</title>
Пример 2:
<title>
<name>
The mysterious mathematician
</name>
</title>
- Дать характеристику действительным XML документам. Привести примеры.
Действительный (англ. valid). Действительный документ дополнительно соответствует некоторым семантическим правилам. Это более строгая дополнительная проверка корректности документа на соответствие заранее определённым, но уже внешним правилам, в целях минимизации количества ошибок, например, структуры и состава данного, конкретного документа или семейства документов. Эти правила могут быть разработаны как самим пользователем, так и сторонними разработчиками, например, разработчиками словарей или стандартов обмена данными. Обычно такие правила хранятся в специальных файлах — схемах, где самым подробным образом описана структура документа, все допустимые названия элементов, атрибутов и многое другое. И если документ, например, содержит не определённое заранее в схемах название элемента, то XML-документ считается недействительным; проверяющий XML-процессор (валидатор) при проверке на соответствие правилам и схемам обязан (по выбору пользователя) сообщить об ошибке.
Правильный документ не является действительным до тех пор, пока в нем нет объявления типа документа (DTD). Причем, данный документ должен отвечать ограничениям, налагаемым данным объявлением.
Каждый действительный документ должен начинаться с информации заголовка содержащей следующее:
Описание правил структурирования (structural rules), которым должен отвечать данный документ.
Список любых внешних ресурсов или внешних сущностей, составляющих какую-либо часть данного документа.
Любые объявления внутренних ресурсов или внутренних сущностей.
Любые условные обозначения или же ресурсы, представленные в форматах, отличных от XML. Эти обозначения и ресурсы должны определять требуемые вспомогательные приложения (helper applications),
Списки ресурсов, представленных в форматах, отличных от XML (например, двоичных сущностей), имеющихся в документе.
Пример.
<?xml version="1.0"?>
<!-- Comment -->
<!DOCTYPE PRODUCTS
[
<!ELEMENT PRODUCTS (PRODUCT)*>
<!ELEMENT PRODUCT (TITLE, PRICE)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT PRICE (#PCDATA)>
]
>
<PRODUCTS>
<PRODUCT>
<TITLE> Product #1 </TITLE>
<PRICE> 10.00 </PRICE>
</PRODUCT>
<PRODUCT>
<TITLE> Product #2 </TITLE>
<PRICE> 20.00 </PRICE>
</PRODUCT>
</PRODUCTS>
- Охарактеризовать технологию XSL. Назначение и основные возможности. Привести примеры.
Спецификация XSL (eXtensible Stylesheet Language) – еще один набор рекомендаций от W3C, который представляет собой язык описания трансформации или набора преобразований данных XML документов в другие форматы. Трансформация осуществляется из одного XML формата в другой, например из документа XML, соответствующего вашей прикладной схеме в формат XML документа Microsoft Office или просто в XHTML. Возможно, также, преобразование не в расширение XML, а в любой другой структурированный формат, к примеру, в HTML (стандарты HTML и XHTML сильно похожи, но только внешне) или же просто в произвольное текстовое представление.
Стандарт XSL, в контексте преобразований XML в HTML, ближе по своему назначению к PHP (Hypertext Preprocessor) – скриптовому языку веб-программирования, применяемому на стороне сервера. И PHP и XSL могут существенно сократить объемы страниц интернет ресурсов, позволяя хранить только их содержимое (в базе данных или в XML файлах): без параметров стилей форматирования, самой HTML разметки, ссылок и метатегов. Более того, они могут использоваться совместно: на первом этапе средствами PHP формируется XML документ, соответствующий структуре запрашиваемой пользователем интернет страницы, а на втором этапе XSL преобразует этот XML в HTML. На завершающем этапе все это дело форматирует браузер уже на стороне клиента по правилам, указанным в CSS. Таким образом, экономится не только место на сервере, но и объем трафика, поскольку передаются данные в оптимальном для каждого конкретного случая XML формате.
Применением XSL весьма широкое. К примеру, XSL трансформация используется для преобразования результатов запросов в контексте работы информационных систем в удобный для восприятия, печати и дальнейшей обработки вид.
Шаблон XSL используется для применения группы преобразований к определенному фрагменту XML документа:
<xsl:template match="DataSet">
<H1>
<xsl:value-of select="@Caption" />
</H1>
<TABLE BORDER="1">
<xsl:apply-templates select="Columns" />
<xsl:apply-templates select="Records" />
</TABLE>
</xsl:template>
- Охарактеризовать технологию XSD. Назначение и основные возможности. Привести примеры.
XSD (XML Schema) — язык описания структуры XML-документа. Спецификация XML Schema является рекомендацией W3C.
Как большинство языков описания XML, XML Schema была задумана для определения правил, которым должен подчиняться документ. Но, в отличие от других языков, XML Schema была разработана так, чтобы её можно было использовать в создании программного обеспечения для обработки документов XML.
После проверки документа на соответствие XML Schema читающая программа может создать модель данных документа, которая включает:
· словарь (названия элементов и атрибутов);
· модель содержания (отношения между элементами и атрибутами и их структура);
· типы данных.
Каждый элемент в этой модели ассоциируется с определённым типом данных, позволяя строить в памяти объект, соответствующий структуре XML-документа. Языкам объектно-ориентированного программирования гораздо легче иметь дело с таким объектом, чем с текстовым файлом.
Другим удобством XML Schema является то, что один словарь может ссылаться на другой, и, таким образом, разработчик может использовать уже существующие словари и легче устанавливать и распространять стандарты XML структуры для определённых задач (например, словарь протокола SOAP).
Файл, содержащий XML Schema, обычно имеет расширение «.xsd» (XML Schema definition).
Простой пример схемы на XML Schema, расположенной в файле "country.xsd" и описывающей данные о населении страны:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="страна" type="страна"/>
<xs:complexType name="страна">
<xs:sequence>
<xs:element name="название" type="xs:string"/>
<xs:element name="население" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
- Охарактеризовать основные методы анализа XML документов. Их сравнительная характеристика и области применения.
На первом этапе разбора проводится лексический анализ (lexical parsing) документа XML. Документ разбивается на отдельные неделимые элементы (tokens), которыми являются теги, служебные слова, разделители, текстовые константы. Проводится проверка полученных элементов и их связей между собой. Лексический анализ выполняют специальные программы — сканеры (scanners). Простейшие сканеры — это классы
и java.io.streamTokenizer из стандартной поставки Java 2 SDK Standard Edition.
Затем выполняется грамматический анализ (grammar parsing). При этом анализируется логическая структура документа, составляются выражения, выражения объединяются в блоки, блоки — в модули, которыми могут являться абзацы, параграфы, пункты, главы. Грамматический анализ проводят программы-анализаторы, так называемые парсеры (parsers).
Создание сканеров и парсеров — любимое развлечение программистов. За недолгую историю XML написаны десятки, если не сотни XML-парсеров. Многие из них написаны на языке Java. Все парсеры можно разделить на две группы.
В первую группу входят парсеры, проводящие анализ, основываясь на структуре дерева, отражающего вложенность элементов документа (tree- based parsing). Такие парсеры проще реализовать, но создание дерева требует большого объема оперативной памяти, ведь размер документов XML не ограничен. Необходимость частого просмотра дерева замедляет работу парсера.
Во вторую группу входят парсеры, проводящие анализ, основываясь на событиях (event-based parsing). Событием считается появление какого-либо элемента XML: открывающего или закрывающего тега, текста, содержащегося в теле элемента. При возникновении события вызывается какой- нибудь метод его обработки:
Такие парсеры сложнее в реализации, зато они не строят дерево в оперативной памяти и могут анализировать не весь документ, а его отдельные элементы вместе с вложенными в них элементами. Фактическим стандартом здесь стал свободно распространяемый набор классов и интерфейсов SAX (Simple API for XML Parsing, простой API для анализа XML), созданный Давидом Меггинсоном (David Megginson). Основной сайт этого проекта http://www.saxproject.org/. Сейчас применяется второе поколение этого набора, называемое SAX2. Набор SAX2 входит во многие парсеры, например, Xerces2.
В стандартную поставку Java 2 Standard Edition и Enterprise Edition входит JAXP — набор интерфейсов и классов для создания парсеров и преобразования документов XML. С помощью одной из частей этого набора, называемой DOM API (Document Object Model API, API объектной модели документов), можно создавать парсеры первого типа, создающие дерево объектов, а с помощью второй части набора JAXP, называемой SAX API, можно создавать SAX-парсеры. Интерфейсы и классы SAX2 собраны В пакеты org.xml.sax, org.xml.sax.ext, org.xml.sax.helpers, javax. xml. parsers. Рассмотрим их подробнее.
Анализ документов XML с помощью SAX2API
Основу SAX2 составляет интерфейс org.xml.sax.ContentHandler, СПИЫ- вающий методы обработки событий: начало документа, появление открывающего тега, появление тела элемента, появление закрывающего тега, окончание документа. При возникновении такого события SAX2 обращается к методу-обработчику события, передавая ему аргументы, содержащие информацию о событии. Дело разработчика — реализовать эти методы, обеспечив правильный анализ документа.
В начале обработки документа вызывается метод
public void startDocument () ;
В нем можно задать начальные действия по обработке документа.
При появлении символа начинающего открывающий тег, вызывается метод
public void startElement (String uri, String name, String qname, Attributes attrs) ;
В метод передается три имени, два из которых связаны с пространством имен: идентификатор пространства имен uri, имя тега без префикса name и расширенное имя с префиксом qname, а также атрибуты открывающего тега элемента attrs, если они есть. Если пространство имен не определено, то значения первого и второго аргумента null. Если нет атрибутов, то передается ссылка на пустой объект attrs.
- Объектная модель документа (DOM). Основные характеристики и назначение. Привести примеры.
Объектная модель документа (Document Object Model – DOM) является стандартом, предложенным веб-консорциумом, и регламентирует способ представления содержимого документа в виде набора объектов. Под содержимым понимается все, что может находиться на веб-странице: рисунки, ссылки, абзацы, текст и т. д.
Объектная модель документа является стандартом и должна поддерживаться всеми браузерами. DOM может применяться не только в веб-страницах, но и к любым других документам. В частности, она может использоваться с любыми словарями XML, причем одним из таких словарей является HTML, а точнее, XHTML.
DOM является развивающимся стандартом и разбит на три уровня. Первый уровень является первой версией стандарта и пока что единственной законченной. Он состоит из двух разделов: первый является ядром и определяет принципы манипуляции со структурой документа (генерация и навигация), а второй посвящен представлению в DOM элементов HTML, определяемых одноименными тегами.
Второй и третий уровни описывают модель событий, дополняют таблицы стилей, проходы по структуре.
В модели DOM к элементу можно обратиться непосредственно по его идентификатору id, воспользовавшись методом getElementById объекта Document:
<html>
<head>
<title>Основы DOM</title>
</head>
<body>
<h1 id = "head">Основы DOM</h1>
<p>A Text</p>
<script language = "JavaScript">
var a = document.getElementById("head");
alert(a);
</script>
</body>
</html>
- Дать сравнительную характеристику технологиям JAVA, которые используются для разработки клиентской и серверной частей веб приложений.
JSP (JavaServer Pages) — технология, позволяющая веб-разработчикам легко создавать содержимое, которое имеет как статические, так и динамические компоненты. По сути, страница JSP является текстовым документом, который содержит текст двух типов: статические исходные данные, которые могут быть оформлены в одном из текстовых форматов HTML, SVG, WML, или XML, и JSP элементы, которые конструируют динамическое содержимое. Кроме этого могут использоваться библиотеки JSP тегов, а также EL (Expression Language), для внедрения Java-кода в статичное содержимое JSP-страниц.
JSP — одна из высокопроизводительных технологий, так как весь код страницы транслируется в java-код сервлета с помощью компилятора JSP страниц Jasper, и затем компилируется в байт-код виртуальной машины java (JVM). Контейнеры сервлетов, способные исполнять JSP страницы, написаны на языке Java, который может работать на различных платформах. JSP страницы загружаются на сервере и управляются из структуры специального Java server packet, который называется Java EE Web Application, в большинстве своём упакованные в файловые архивы .war и .ear.
Выгода, которую дает технология JSP в сравнении с другими веб-технологиями заключается в том, что JSP является платформонезависимой, переносимой и легко расширяемой технологией для разработки веб-приложений.
- Контейнеры сервлетов и их назначение. Требования к контейнерам.
Контейнер сервлетов это ни что иное, как скопилированная программа. Основные функции контейнера это загрузка, инициализация и выполнение сервлетов.
Контейнер обрабатывает большое количество запросов, так как он может содержать много активных сервлеты, слушателей и т. д. Контейнер и объекты в контейнере являются многопоточными. Таким образом, каждый объект должен быть потокобезопасным, т.к. несколько запросов, принятых контейнер одновременно, могут использовать объект в нескольких потоках.
Примечание: контейнер сервлетов может работать самостоятельно т.е. без веб-сервера или даже на другом хосте.
Мы можем классифицировать контейнеры сервлетов, как:
1. простой контейнер сервлетов не полнофункционален и поэтому он может работать только с очень простыми сервлетами. Он выполняет следующие действия:
· ожидание HTTP запроса.
· создание объекта ServletRequest и объекта ServletResponse.
· если запрашивается статический ресурс, выполнить метод process экземпляра класса StaticResourceProcessor, передав ему объекты ServletRequest и ServletResponse.
· если запрашивается сервлет, загрузить класс сервлета и вызвать его метод service, передав ServletRequest и ServletResponse. Обратите внимание, что в этом контейнере сервлетов, класс сервлета загружается каждый раз, когда запрашивается сервлет.
2. Полнофункциональный контейнер сервлетов дополнительно выполняет следующие действия для каждого HTTP запроса:
· когда сервлет вызывается в первый раз, загружает класс сервлета и вызвать его метод init (только один раз).
· для каждого запроса создаёт экземпляр javax.servlet.ServletRequest и экземпляр javax.servlet.ServletResponse.
· вызывает метода service сервлета, передавая ServletRequest и ServletResponse.
· когда класс сервлета заканчивает работу, вызывает метод destroy сервлета и выгружает класс сервлета.
Теперь давайте посмотрим, что контейнер сервлетов делает при каждом HTTP запросе для сервлета, в целом:
· контейнер сервлета загружает класс сервлета и вызывает его метод init, как только сервлет вызывается в первый раз.
· затем контейнер создаёт экземпляр javax.servlet.ServletRequest и javax.servlet.ServletResponse для каждого запроса.
· затем он передаёт объекты ServletRequest и ServletResponse методу service сервлета.
· наконец, он вызывает метод destroy и выгружает класс сервлета.
Требования к контейнерам - ???
- Java сервлеты. Их назначение. Способы создания. Виды сервлетов. Способы доступа к параметрам и возврата данным веб серверу.
Сервлет является Java-интерфейсом, реализация которого расширяет функциональные возможности сервера. Сервлет взаимодействует с клиентами посредством принципа запрос-ответ.
Хотя сервлеты могут обслуживать любые запросы, они обычно используются для расширения веб-серверов. Для таких приложений технология Java Servlet определяет HTTP-специфичные сервлет классы.
Пакеты javax.servlet и javax.servlet.http обеспечивают интерфейсы и классы для создания сервлетов.
Сервлеты расширяют функциональность Web‑серверов и являются мощным средством программирования. Сервлеты – это модули, расширяющие возможности серверов типа запрос-ответ, таких как Java‑совместимые web‑сервера. Сервлеты для серверов то же самое, что и апплеты для браузеров, но в отличие от апплетов, у сервлетов нет графического интерфейса пользователя. Сервлеты могут быть встроены в различные серверы, так как API сервлетов, который используется для их написания, не предполагает никакого знания ни об окружении сервера, ни о его протоколе. Сервлеты наиболее широко используются с HTTP‑серверами; многие web‑сервера поддерживают API сервлетов. Они обеспечивают такой способ генерирования динамических документов, который позволяет облегчить их написание и ускорить выполнение. Сервлеты также решают проблему программирования на стороне сервера с платформо-зависимыми API, которые разрабатываются с использованием Java Servlet API, стандартного расширения Java. Характерной особенностью сервлетов является то, что они не требуют создания новых процессов при каждом новом запросе. Множество сервлетов выполняются параллельно в рамках одного процесса на сервере.
Сервлет с точки зрения Java - это класс, расширяющий абстрактный класс javax.servlet.GenericServlet, который в свою очередь реализует интерфейс javax.servlet.Servlet. Расмотрим основные методы, которые присутствуют в каждом сервлете и служат для организации его жизненого цикла.
Метод void init(ServletConfig config) вызывается один раз в момент загрузки
сервлета контейнером. Создавая Java класс для нового сервлета, разработчик может переопределить метод init() с тем, чтобы тот выполнил определенные подготовительные работы.
Метод service() вызывается при каждом обращении клиента к сервлету. Метод service() получает из web-контейнера запрос клиента в виде объекта ServletRequest и строит соответствующий ответ в объекте класса ServletResponse. Этот метод вызывает один из методов doXxx(), в зависимости от типа запроса:
doGet(HttpServletRequest req, HttpServletResponse resp) - предназначен для обработки GET-запросов;
doPost(HttpServletRequest req, HttpServletResponse resp) - предназначен для обработки POST-запросов.
Метод destroy() вызывается контейнером в момент уничтожения экземпляра сервлета. Разработчик может, переопределив этот метод, произвести некоторые операции, такие как освобождение выделенных ресурсов и т.п.
Виды сервлетов.-???