Технология XPath, XQuery

Содержание

Слайд 3

Цели и задачи

Цели и задачи

Слайд 4

Краткое знакомство с синтаксисом языка XPath

Краткое знакомство с синтаксисом языка XPath

Слайд 5


]>


]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick
catnum="id2345">
Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Модель дерева XML документа – пример XML документа

Слайд 6

Модель дерева XML документа – представление XML в виде дерева

Модель дерева XML документа – представление XML в виде дерева

Слайд 7

Модель дерева XML документа – представление XML в виде дерева


xmlns="http://www.epam.com/" catdate="2005-12-31"

catnum="id2345"
<br>Jambing on</div></h3></h3><img onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="Модель дерева XML документа – представление XML в виде дерева xmlns="http://www.epam.com/" catdate="2005-12-31"" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/860285/slide-6.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/860285/slide-6.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/860285/slide-6.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/860285/slide-6.jpg 1440w" src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/860285/slide-6.jpg" class="slides-image"><!----><div class="slides-content">the Trixles<br><!-- Are we sure … --><br><author><br>Randall, Tristan<br><book><br>catnum="id7823"<br><title><br>For Love of a Toothpick<br><author><br>Frey, Jörg<br></div><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide8" class="slides-item"><!--[--><h3 class="slides-heading"><a class="slides-headingLink" href="/_ipx/w_720/imagesDir/jpg/860285/slide-7.jpg" target="_blank" rel="noopener">Слайд 8</a><h3 class="slides-content text-center font-bold"><div><p>Синтаксис XPath<br><p>XPath выражения состоят из шагов (location step), которые отделяются символом «/»<br>Объединенные</div></h3></h3><img onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="Синтаксис XPath XPath выражения состоят из шагов (location step), которые отделяются символом" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/860285/slide-7.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/860285/slide-7.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/860285/slide-7.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/860285/slide-7.jpg 1440w" src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/860285/slide-7.jpg" class="slides-image"><!----><div class="slides-content">шаги составляют путь<br>(location path)<br><p>location_step1/location_step2<br><p>location_path<br></div><!----><!--]--><!----></div></div><div class="slides-wrapper"><div id="slide9" class="slides-item"><!--[--><h3 class="slides-heading"><a class="slides-headingLink" href="/_ipx/w_720/imagesDir/jpg/860285/slide-8.jpg" target="_blank" rel="noopener">Слайд 9</a><h3 class="slides-content text-center font-bold"><div><p><?xml version="1.0"?><br><!DOCTYPE books [ <!ENTITY oumlaut "&#246;"> ]><br><?xml-stylesheet type="text/xsl" href="catalog.xsl"?><br><books catdate="2005-12-31" xmlns="http://www.epam.com/"><br><book</div></h3></h3><img onerror="this.setAttribute('data-error', 1)" width="720" height="540" alt="]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick" loading="eager" data-nuxt-img sizes="(max-width: 1024px) 480px, 720px" srcset="/_ipx/f_webp&q_80&fit_contain&s_480x360/imagesDir/jpg/860285/slide-8.jpg 480w, /_ipx/f_webp&q_80&fit_contain&s_720x540/imagesDir/jpg/860285/slide-8.jpg 720w, /_ipx/f_webp&q_80&fit_contain&s_960x720/imagesDir/jpg/860285/slide-8.jpg 960w, /_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/860285/slide-8.jpg 1440w" src="/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/860285/slide-8.jpg" class="slides-image"><!----><div class="slides-content">catnum="id2345"><br><title>Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Пример - /books/book/author

Слайд 10

Синтаксис XPath

Каждый шаг (отсчет идет слева направо) перемещает на уровень вниз или

Синтаксис XPath Каждый шаг (отсчет идет слева направо) перемещает на уровень вниз
вверх в дереве вершин относительно предыдущего шага
Шаг может быть абсолютным и относительным
Абсолютный шаг может быть только самым первым в пути
Относительные шаги могут использоваться в любом месте пути
Пути могут быть составными из нескольких объединенных групп путей, разделенных
символом | (pipe).

path1 | path2

Слайд 11

Пример - /books/book/title | /books/book/author


]>

Пример - /books/book/title | /books/book/author ]> Jambing on the Trixles Randall, Tristan
type="text/xsl" href="catalog.xsl"?>


Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 12

Синтаксис XPath – абсолютные и относительные пути

Абсолютный путь – всегда начинается

Синтаксис XPath – абсолютные и относительные пути Абсолютный путь – всегда начинается
с корневой вершины документа, обозначаемой символом «/»

Относительный путь – начинается с ранее установленного контекста (context node), не содержит символа «/» в начале

Слайд 13

Синтаксис XPath – описание шага (location step)

child::price[price=9.90]
axis – определяет «направление просмотра» от

Синтаксис XPath – описание шага (location step) child::price[price=9.90] axis – определяет «направление
текущей вершины (context node), в направлении вершин,
указанных в nodetest. Отделяются знаком ::
nodetest – определяет начальный набор вершин, которые должны быть выбраны в результате шага. Единственная обязательная часть
predicate – дополнительные условия для axis и
nodetest. Соответствие этому условию определяет
попадет ли вершина в результирующий набор вершин шага

axis::nodetest[predicate]

Слайд 14

Описание node-test части шага (location step)

Указывает тип вершин, или определенные вершины, над

Описание node-test части шага (location step) Указывает тип вершин, или определенные вершины,
полученным набором которых возможен дополнительный выбор.
Может быть 3-х видов:
Указание имени вершины (Name tests)
Указание типа вершины (Node Type tests)
Указание processing-instruction ("target") с указанием цели.

Слайд 15

Описание node-test части шага – Name tests

Здесь чаще всего используется имя нужной

Описание node-test части шага – Name tests Здесь чаще всего используется имя
вершины
Ось (axis) может указывать на тип вершины:
Не attribute:: и не namespace:: -> элемент
attribute:: -> атрибут
namespace:: -> пространство имен
Указываемое имя может быть трех видов:
QName
– *
NCName:*

Слайд 16


]>


]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick
catnum="id2345">
Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Пример - /books/*/author

Слайд 17


]>


]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick
catnum="id2345">
Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Пример - /books/book/*

Слайд 18

Описание node-test части шага – Node Type tests

Можно отбирать вершины по их

Описание node-test части шага – Node Type tests Можно отбирать вершины по
типу
comment() – комментарии
node() – любые вершины, кроме атрибутов
processing-instruction() – инструкции по обработке
text() – текстовые вершины
В XPath 2.0 также поддерживаются
attribute() – атрибуты
document-node() – любые вершины
element() – элементы
item() – вершины-«листья»

Слайд 19

Пример - /comment()


]>

Пример - /comment() ]> Jambing on the Trixles Randall, Tristan For Love
catdate="2005-12-31" xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 20

Пример - //text()


]>

Пример - //text() ]> Jambing on the Trixles Randall, Tristan For Love
catdate="2005-12-31" xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 21

Модель дерева XML документа, используемая XPath

XPath рассматривает XML документ как дерево взаимосвязанных

Модель дерева XML документа, используемая XPath XPath рассматривает XML документ как дерево
ветвей и вершин, следующих типов:
Элемент
Атрибут
Инструкция обработки
Комментарий
Текстовое содержимое
Пространство имен
Сам документ рассматривается как вершина
Модель рассматривает помимо вершин, их взаимное отношение друг к другу

Слайд 22

Знакомство с XPath осями (axes) и взаимоотношением вершин

Отношение между вершинами в терминологии

Знакомство с XPath осями (axes) и взаимоотношением вершин Отношение между вершинами в
языка Xpath называется axis (ось). Оси бывают следующие:

parent
child
ancestor
descendant
ancestor-or-self
descendant-or-self
preceding
following
preceding-sibling
following-sibling
self
attribute
namespace

Применимы только к элементам

Слайд 23

Примеры применения осей


]>

Примеры применения осей ]> Jambing on the Trixles Randall, Tristan For Love
catdate="2005-12-31" xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Сюда будем применять оси

Слайд 24

Типы XPath осей (axes) - parent

Элемент, непосредственно содержащий данную вершину
(элемент, атрибут, инструкцию

Типы XPath осей (axes) - parent Элемент, непосредственно содержащий данную вершину (элемент,
по обработке, комментарий или текстовую вершину)
У пространства имен – элемент, где пространство имен объявляется
У корневого элемента – корневая вершина
У корневой вершины отсутствует
Аббревиатура: ..
– ../cd вместо parent::node()/cd

Слайд 25


]>


]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick Frey, J&oumlaut;rg Пример parent
catnum="id2345">
Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Пример parent

Слайд 26

Любые вершины (кроме атрибутов и пространств имен), находящиеся непосредственно ниже в
иерархии
Обычно имеет

Любые вершины (кроме атрибутов и пространств имен), находящиеся непосредственно ниже в иерархии
смысл только для элементов и корневой вершины
Ось по умолчанию
Обычно не используется явно
– cd вместо child::cd

Типы XPath осей (axes) - child

Слайд 27

Пример child


]>

Пример child ]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick Frey, J&oumlaut;rg
xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 28

Любые вершины, находящиеся выше в иерархии (прародители)
Включают также parent вершину
У корневой вершины

Любые вершины, находящиеся выше в иерархии (прародители) Включают также parent вершину У
отсутствуют
Корневая вершина – прародитель всех остальных вершин

Типы XPath осей (axes) – ancestor

Слайд 29

Пример ancestor


]>

Пример ancestor ]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick Frey, J&oumlaut;rg
xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 30

Любые вершины, находящиеся ниже в иерархии (потомки)
Включают также child вершины
Для корневой вершины

Любые вершины, находящиеся ниже в иерархии (потомки) Включают также child вершины Для
потомками являются все остальные вершины за исключением
самой корневой вершины
атрибутов
пространства имен

Типы XPath осей (axes) – descendant

Слайд 31

Пример descendant


]>

Пример descendant ]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick Frey, J&oumlaut;rg
xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 32

Типы XPath осей (axes) - ancestor-or-self

Все ancestor вершины (предки) и сама вершина
Для

Типы XPath осей (axes) - ancestor-or-self Все ancestor вершины (предки) и сама
корневой вершины результатом будет только корневая вершина

Слайд 33

Пример ancestor-or-self


]>

Пример ancestor-or-self ]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick Frey, J&oumlaut;rg
xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 34

Все descendant вершины (потомки) и сама вершина
Аббревиатура: //
– //cd
вместо
/descendant-or-self::node()/cd

Типы XPath осей

Все descendant вершины (потомки) и сама вершина Аббревиатура: // – //cd вместо
(axes) – descendant-or-self

Слайд 35

Пример descendant-or-self


]>

Пример descendant-or-self ]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick Frey, J&oumlaut;rg
xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 36

Любые узлы, предшествующие в XML документе текущему, за исключением предков, атрибутов и

Любые узлы, предшествующие в XML документе текущему, за исключением предков, атрибутов и
пространств имен
Фактически, это весь документ от начала и до текущего узла

Типы XPath осей (axes) – preceding

Слайд 37

Пример preceding


]>

Пример preceding ]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick Frey, J&oumlaut;rg
xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 38

Любые узлы, следующие в XML документе за текущим , за исключением предков,

Любые узлы, следующие в XML документе за текущим , за исключением предков,
атрибутов и пространств имен
Фактически, это весь документ от текущего узла до конца

Типы XPath осей (axes) – following

Слайд 39

Пример following


]>

Пример following ]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick Frey, J&oumlaut;rg
xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 40

Узлы, предшествующие в XML документе текущему и имеющие с ним общего родителя

Узлы, предшествующие в XML документе текущему и имеющие с ним общего родителя
(parent вершину)
Атрибуты и пространства имен не входят в список таких узлов

Типы XPath осей (axes) – preceding-sibling

Слайд 41

Пример preceding-sibling


]>

Пример preceding-sibling ]> Jambing on the Trixles Randall, Tristan title>For Love of a Toothpick Frey, J&oumlaut;rg
xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


title>For Love of a Toothpick
Frey, Jöaut;rg



Слайд 42

Узлы, следующие в XML документе за
текущим и имеющие с ним общего родителя
(parent

Узлы, следующие в XML документе за текущим и имеющие с ним общего
вершину)
Атрибуты и пространства имен не входят в список таких узлов

Типы XPath осей (axes) – following-sibling

Слайд 43


]>


]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick Frey, J&oumlaut;rg Пример following-sibling
catnum="id2345">
Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Пример following-sibling

Слайд 44

Типы XPath осей (axes) – self

Текущая вершина
Аббревиатура: .
– ./cd вместо self::node()/cd

Типы XPath осей (axes) – self Текущая вершина Аббревиатура: . – ./cd вместо self::node()/cd

Слайд 45

Пример self


]>

Пример self ]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick Frey, J&oumlaut;rg
xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 46

Типы XPath осей (axes) – attribute

Атрибуты текущей вершины
Ось применима только к элементам
Аббревиатура:

Типы XPath осей (axes) – attribute Атрибуты текущей вершины Ось применима только
@
– @type вместо attribute::type

Слайд 47

Пример attribute


]>

Пример attribute ]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick Frey, J&oumlaut;rg
xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 48

Пространства имен для данного узла
Ось применима только к элементам
В результирующий набор попадут

Пространства имен для данного узла Ось применима только к элементам В результирующий
пространства имен, объявленные
непосредственно в элементе и объявленные во всех ancestor элементах

Типы XPath осей (axes) – namespace

Слайд 49

Пример namespace


]>

Пример namespace ]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick Frey, J&oumlaut;rg
xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 50

Описание predicate части шага (location step)

Представляет собой фильтр для отбора из вершин,

Описание predicate части шага (location step) Представляет собой фильтр для отбора из
полученных после node test и прохождению по оси
[something operator somevalue]
[ ] – квадратные скобки обязательны
something – может быть шагом (location step) относительно вершин, полученных после node test и прохождению по оси; или встроенной функцией
operator – один из булевских операторов
somevalue – значение с которым сравнивается something

Слайд 51


]>


]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick
catnum="id2345">
Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Пример - /books/book[author]/title

Слайд 52


]>


]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick
catnum="id2345">
Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Пример - /books/book[author='Randall, Tristan']

Слайд 53


]>


]> Jambing on the Trixles Randall, Tristan For Love of a Toothpick
catnum="id2345">
Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Пример - /books/book[@catnum='id2345']/author

Слайд 54

Пример - /books/book[1]/author


]>

Пример - /books/book[1]/author ]> Jambing on the Trixles Randall, Tristan For Love
catdate="2005-12-31" xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 55

Пример - /books/book/author[1]


]>

Пример - /books/book/author[1] ]> Jambing on the Trixles Randall, Tristan For Love
catdate="2005-12-31" xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 56

Пример - /books/book[last()]


]>

Пример - /books/book[last()] ]> Jambing on the Trixles Randall, Tristan For Love
catdate="2005-12-31" xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 57

Пример - /books/book[@catnum='id7823'][1]


]>

Пример - /books/book[@catnum='id7823'][1] ]> Jambing on the Trixles Randall, Tristan For Love
catdate="2005-12-31" xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 58

Пример - /books/book[1][@catnum='id7823']


]>

Пример - /books/book[1][@catnum='id7823'] ]> Jambing on the Trixles Randall, Tristan For Love
catdate="2005-12-31" xmlns="http://www.epam.com/">

Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 59

Пример - /books/book[title and author]


]>

Пример - /books/book[title and author] ]> Jambing on the Trixles Randall, Tristan
type="text/xsl" href="catalog.xsl"?>


Jambing on the Trixles

Randall, Tristan


For Love of a Toothpick
Frey, Jöaut;rg



Слайд 60

Некоторые полезные функции XPath

number position() – позиция текущего элемента в коллекции вершин
number

Некоторые полезные функции XPath number position() – позиция текущего элемента в коллекции
last() – позиция последнего элемента в коллекции
вершин (размер текущего контекста)
node-set id(value) – выбирает элемент по уникальному ID
string name(node-set?) – полное квалифицированное имя
string local-name(node-set?) – локальное имя
string namespace-uri(node-set?) – URI пространства имен
number count(node-set) - количество узлов аргумента

Слайд 61

Некоторые полезные функции XPath

string concat(string, string, string*) – объединяет аргументы в одну

Некоторые полезные функции XPath string concat(string, string, string*) – объединяет аргументы в
строку
boolean contains(string, string) –
проверяет вхождение второго аргумента в первый
string normalize-space(string) - нормализует строковое значение
boolean starts-with(string, string) -
проверяет, является ли второй аргумент началом первого
string string(object?) - преобразует объект в строку

Слайд 62

Некоторые полезные функции XPath

number string-length(string) - длина строки
string substring(string, number, number?) -
возвращает

Некоторые полезные функции XPath number string-length(string) - длина строки string substring(string, number,
подстроку (символы от второго аргумента до
третьего)
string substring-after(string, string) - возвращает
часть первого аргумента, непосредственно следующую за первым вхождением второго аргумента
string substring-before(string, string) - возвращает
часть первого аргумента, предшествующую первому вхождению второго аргумента
string translate(string, string, string) - заменяет
символы первого аргумента, совпадающие с символами второго
аргумента, на соответствующие символы третьего аргумента

Слайд 63

Некоторые полезные функции XPath

number ceiling(number) - наименьшее целое, не меньшее аргумента
number floor(number)

Некоторые полезные функции XPath number ceiling(number) - наименьшее целое, не меньшее аргумента
- наибольшее целое, не превышающее аргумента
number round(number) - округление до ближайшего целого
number number(object?) - преобразование объекта к числу
number sum(node-set) - сумма значений узлов аргумента

Слайд 66

Основные характеристики XQuery

Декларативный язык программирования, предназначенный для работы с XML-данными
Представляет собой механизм

Основные характеристики XQuery Декларативный язык программирования, предназначенный для работы с XML-данными Представляет
обработки древовидных данных, основанных на следующих понятиях: инструкции, узлы, элементы, атрибуты, пространства имен, текст, комментарии
Поддерживает выражения XPath
Оптимален для выборки информации, в том числе больших массивов данных и создания отчетов, для сложных трансформаций предпочтительнее использовать XSLT

Слайд 67

FLWOR

F – For – получение коллекции узлов
L – Let – присвоение результата

FLWOR F – For – получение коллекции узлов L – Let –
выборки переменной
W – Where – фильтрация выборки по условию
O – Order – упорядочивание выборки по условию
R – Return – возвращение результата
Имя файла: Технология-XPath,-XQuery.pptx
Количество просмотров: 41
Количество скачиваний: 0