XML » История » Версия 1
Александр Александров, 22.04.2019 00:47
1 | 1 | Александр Александров | h1. XML |
---|---|---|---|
2 | |||
3 | h2. Вопросы |
||
4 | |||
5 | # Что такое XML? |
||
6 | # Как определяется корректность XML-документа? |
||
7 | # Чем well-formed XML отличается от valid? |
||
8 | # Что такое пространство имен? |
||
9 | # Что такое простые типы в XSD? |
||
10 | # Что такое сложныетипы в XSD? |
||
11 | # Какие элементы и атрибуты XSD Вы знаете? Кратко опишите их. |
||
12 | # Какие существуют XML парсеры? |
||
13 | # Что такое XPath? |
||
14 | # Что такое XQuery? |
||
15 | # Каким парсером можно сделать изменения в XML структуре и сохранить в файл? |
||
16 | # Кратко опишите DOM, SAX, StAX анализаторы. |
||
17 | # Когда следует использовать DOM, а когда - SAX, StAX анализаторы? |
||
18 | # Недостатки XML DTD перед XML Schema |
||
19 | # XML Schema - промышленный стандарт описания XML-документов |
||
20 | # Что такое XSLT? |
||
21 | # Что такое маршаллизация и демаршализация? |
||
22 | # Что такое JAXP? |
||
23 | # Назовите основные пакеты JAXP. |
||
24 | # Что такое JAXB? |
||
25 | |||
26 | h2. Ответы |
||
27 | |||
28 | h3. Что такое XML? |
||
29 | |||
30 | XML(eXtensible Markup Language - расширяемый язык разметки) - текстовый формат, предназначенный для хранения структурированных данных (взамен существующих файлов баз данных), для обмена информацией между программами, а также для создания на его основе более специализированных языков разметки (например, XHTML). |
||
31 | |||
32 | h3. Как определяется корректность XML-документа? |
||
33 | |||
34 | Корректность XML-документа определяют следующие два компонента: |
||
35 | |||
36 | * синтаксическая корректность (well-formed) - то есть соблюдение всех синтаксических правил XML; |
||
37 | * действительность (valid) - то есть данные соответствуют некоторому набору правил, определенных пользователем; правила определяют структуру и формат данных в XML. Валидность XML-документа определяется наличием DTD или XML-схемы (XSD) и соблюдением правил, которые там приведены. |
||
38 | |||
39 | h3. Чем well-formed XML отличается от valid? |
||
40 | |||
41 | Отличие: |
||
42 | |||
43 | * well-formed XML - тот, который пропускается парсером. |
||
44 | * valid XML - тот, который пропускается парсером И валидатором. |
||
45 | |||
46 | h3. Что такое пространство имен? |
||
47 | |||
48 | Пространство имен (namespace) - введено для разделения наборов элементов с соответствующими правилами, описанными схемой. Пространство имен объявляется с помощью атрибута xmlns и префикса, который используется для элементов из данного пространства. |
||
49 | |||
50 | h3. Что такое простые типы в XSD? |
||
51 | |||
52 | Элементы, которые не имеют атрибутов и дочерних элементов, называются простыми и должны иметь простой тип данных. Существуют стандартные простые типы, например string (представляет строковое значение), boolean (логическое значение), integer (целое значение), float (значение с плавающей точкой), ID (уникальный идентификатор), gYear (год) и др. |
||
53 | |||
54 | h3. Что такое сложные типы в XSD? |
||
55 | |||
56 | Элементы, содержащие в себе атрибуты и/или дочерние элементы, называются сложными. Сложные элементы создаются с помощью элемента complexType. Так же, как и в простом типе атрибут name задает имя типа. |
||
57 | |||
58 | h3. Какие элементы и атрибуты XSD Вы знаете? Кратко опишите их. |
||
59 | |||
60 | Ниже приведён список элементов и атрибутов ХSD: |
||
61 | |||
62 | schema - корневой элемент любой схемы XML. Может содержать несколько атрибутов, например версию схемы. |
||
63 | xmlns - каждый элемент схемы имеет стандартный префикс xs: (или xsd:, может быть использован любой префикс), который связан с пространством имен схемы XML (xmlns) путем объявления: xmlns:xsd="http://www.w3.org/2001/XMLSchema". |
||
64 | * element - элементы объявляются с помощью элемента element. Например, order - это элемент, который в документе выглядит как <order id="1234" date="11/08/2013" total_amount="93.48"> |
||
65 | * type - элемент может иметь простой тип, например string, decimal, long или double (type="xs:long") или сложный (type="customer"). |
||
66 | * minOccurs, maxOccurs - определяет минимальное или максимальное количество появлений типа. Может быть положительным целым числом или иметь значение unbounded, которое говорит о том, что верхней границы нет. |
||
67 | * complexType - определяет комплексный тип, имеющий собственные элементы, подэлементы и атрибуты. Элемент типа complexType может содержать другие элементы типа complexType. Например, комплексный тип order содержит другой комплексный элемент. |
||
68 | * sequence - элемент может содержать другие элементы, которые называются элементами-потомками. Элемент такого типа указывает, что элементы-потомки должны следовать в цепочке. Каждый потомок может встречаться от 0 до неограниченного количества раз. |
||
69 | * attribute - комплексный тип может иметь один или несколько атрибутов, которые определены с помощью элементов типа attribute. Тип orderLine имеет два атрибута: item и quantity. |
||
70 | * choice - используется для указания, что может присутствовать только один набор элементов. |
||
71 | * complexContent - комплексный тип может расширять или ограничивать другой комплексный тип с помощью элемента типа complexContent. |
||
72 | * extension - элемент такого типа расширяет существующий элемент типа simpleType или complexType. |
||
73 | |||
74 | h3. Какие существуют XML парсеры? |
||
75 | |||
76 | Существуют SAX, DOM, JDOM парсеры. А STAX, TRAX, XPATH - это API для работы с ними. |
||
77 | |||
78 | h3. Что такое XPath? |
||
79 | |||
80 | Path (XML Path Language) - это язык запросов который предназначен для произвольного обращения к частям XML или XHTML документа. В документе всегда имеется корневой элемент. У элемента дерева всегда существуют предки (кроме корневого элемента, у которого предков нет) и могут существовать потомки. Каждый элемент дерева находится на определенном уровне вложенности. У элементов на одном уровне бывают предыдущие и следующие за ним элементы. |
||
81 | |||
82 | Строка XPath - это фактически путь к элементу в дереве, где каждый уровень разделяется косой чертой «/». В результате обработки выражения XPath получается объект, который может быть: |
||
83 | |||
84 | * набор узлов (node-set) - неупорядоченный набор узлов без дубликатов |
||
85 | * булево значение (boolean) - true или false |
||
86 | * число (number) - число с плавающей точкой |
||
87 | * строка (string) - последовательность UCS символов |
||
88 | |||
89 | h3. Что такое XQuery? |
||
90 | |||
91 | XQuery - это универсальный язык запросов к XML-данным, содержащий средства как для выборки, так и для трансформации XML-данных. XQuery синтаксически похож на SQL, его набор ключевых слов включает в себя FOR, LET, WHERE, ORDER BY или RETURN. С помощью XQuery можно выполнять сложные запросы, создавая сложные условия или упорядочивая результаты. |
||
92 | |||
93 | h3. Каким парсером можно сделать изменения в XML структуре и сохранить в файл? |
||
94 | |||
95 | Изменение можно сделать с помощью DOM и XPATH. |
||
96 | |||
97 | h3. Кратко опишите DOM, SAX, StAX анализаторы. |
||
98 | |||
99 | DOM (Document Object Model - объектная модель документов) - платформенно-независимый программный интерфейс, позволяющий программами скриптам управлять содержимым документов HTML и XML, а |
||
100 | также изменять их структуру и оформление. Модель DOM не накладывает ограничений на структуру документа. Любой документ известной структуры с помощью DOM может быть представлен в виде дерева узлов, каждый узел |
||
101 | которого содержит элемент, атрибут, текстовый, графический или любо другой объект. Узлы связаны между собой отношениями родитель-потомок. SAX (Simple API for XML) базируется на модели последовательной одноразовой обработки и не создает внутренних деревьев. При прохождении по XML вызывает соответствующие методы у классов, реализующих интерфейсы, предоставляемые SAX-парсером. |
||
102 | |||
103 | StAX (Streaming API for XML) не создает дерево объектов в памяти, но, в отличие от SAX-парсера, за переход от одной вершины XML к другой отвечает приложение, которое запускает разбор документа. |
||
104 | |||
105 | h3. Когда следует использовать DOM, а когда - SAX, StAX анализаторы? |
||
106 | |||
107 | DOM-анализаторы следует использовать тогда, когда нужно знать структуру документа и может понадобиться изменять эту структуру либо использовать информацию из XML-документа несколько раз. SAX/StAX-анализаторы используются тогда, когда нужно извлечь информацию о нескольких элементах из XML-файла либо когда информация из документа нужна только один раз. |
||
108 | |||
109 | h3. Недостатки XML DTD перед XML Schema |
||
110 | |||
111 | Недостатки XML DTD. |
||
112 | |||
113 | * Отличный от XML синтаксис языка. То есть, DTD не является XML. В связи с этим могут возникать разнообразные проблемы с кодировкой и верификацией XML-документов. |
||
114 | * Нет проверки типов данных. В XML DTD существует лишь один тип данных – строка. В связи с этим, например, если в числовом поле будет текст, документ все равно пройдет верификацию, так как XML DTD не может проверить тип данных. |
||
115 | * Нельзя поставить в соответствие одному XML-документу больше одного DTD описания. То есть, верифицировать документ можно лишь одним DTD описанием. Если их несколько, то придется переделывать описания и совмещать все в одном файле, что очень неудобно. |
||
116 | * Это были основные недостатки XML DTD, которые с успехом исправлены в промышленном стандарте описания XML-документов XML Schema. |
||
117 | |||
118 | h3. XML Schema - промышленный стандарт описания XML-документов |
||
119 | |||
120 | Если быть кратким, то XML Schema делает следующее: |
||
121 | |||
122 | * Описывает названия элементов и атрибутов (словарь). |
||
123 | * Описывает взаимосвязь между элементами и атрибутами, а также их структуру (модель содержания). |
||
124 | * Описывает типы данных. |
||
125 | |||
126 | Также хочу заметить, что на данный момент при помощи схем можно описывать практически все. То есть, схема - это универсальный способ описания грамматики данных, который может применяться не только для верификации XML-документов, но и описания баз данных и т.д. Таким образом, область применения схем на данный момент очень широкая. |
||
127 | |||
128 | h3. Что такое XSLT? |
||
129 | |||
130 | XSLT (eXtensible Stylesheet Language Transformations) - расширяемый язык преобразования листов стилей. Язык XSLT служит транслятором, с помощью которого можно свободно модифицировать исходный текст. XLST играет решающую роль в утверждении XML в качестве универсального языка хранения и передачи данных. Область применения XSLT широка - от электронной коммерции до беспроводного Web. |
||
131 | |||
132 | h3. Что такое маршаллизация и демаршализация? |
||
133 | |||
134 | Маршаллизация - механизм преобразования данных из java-объектов в конкретное хранилище, будь то документ XML, база данных или простой текстовый файл. |
||
135 | |||
136 | Демаршаллизация - обратный процесс преобразования данных из внешних источников в структуру хранения, поддерживаемую виртуальной машиной. |
||
137 | |||
138 | Проблемой остается организация взаимно однозначного соответствия информации в источнике, например, XML-документе, и экземпляре типа данных,принимающем эту информацию |
||
139 | |||
140 | h3. Что такое JAXP? |
||
141 | |||
142 | JAXP (Java API for XML Processing) - набор абстрактных API, упрощающих обработку XML данных с помощью программ, написанных на Java. Усиливает стандартные анализаторы SAX (Simple API for XML Parsing) и DOM (Document Object Model). JAXP также поддерживает преобразования расширяемого языка таблиц стилей (XSLT) стандарт, давая вам контроль над представлением данных и позволяя преобразовать данные в другие XML-документы или в другие форматы, такие как HTML. JAXP обеспечивает поддержку пространств имен (namespace), то есть имеется возможность работать с DTD. JAXP дает приложению возможность производить лексический разбор и модификацию документов XML независимо от конкретной реализации обработки XML. С версии 1.4, JAXP реализует API Потоковой передачи для XML (StAX) стандарт. |
||
143 | |||
144 | Архитектура JAXP: |
||
145 | |||
146 | {{dmsf_image(263)}} |
||
147 | |||
148 | h3. Назовите основные пакеты JAXP. |
||
149 | |||
150 | JAXP состоит из четырех пакетов. В них вы найдете интерфейсы и классы, предназначенные для анализа и преобразования XML-данных. |
||
151 | |||
152 | * javax.xml.parsers - общий интерфейс для анализаторов DOM и SAX. |
||
153 | * org.w3c.dom - общий API для работы с DOM в Java. |
||
154 | * org.xml.sax - определяет интерфейсы, использованные для анализаторов SAX. |
||
155 | * javax.xml.transform - API XLST для преобразования XML в другие типы документов. |
||
156 | |||
157 | h3. Что такое JAXB? |
||
158 | |||
159 | JAXB (Java Architecture for XML Binding) - это мост между XML и Java, Java API для маршалинга объекта в XML и восстановления (демаршалинг) объекта из XML файла. Часто используется в веб сервисах для представления объекта в виде XML схемы и передачи ее по сети. Также, такой способ передачи данных имеет свой плюс при обмене данных между системами, написанными на разных языках. |