Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы XML-технологий. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Е
сли по этой
X
с
хеме составить
ML-
X
-д
окумент, то он может
ML
иметь следующий вид:
<
!-- Файл XSD_NameSpace\NameSpace_all_qualified.xml--> <?xml version="1.0" encoding="UTF-8"?> <ntb:notebook ntb:send="yes" xsi:schemaLocation="http://some.com Prim_NS.xsd" xmlns:ntb="http://some.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ntb:name>Петров</ntb:name> <ntb:address>г. Москва, ул. Мира, д. 2, кв. 15</ntb:address> </ntb:notebook>
.2.7.5 Оп ре де ле н и е э ле ме нт ов и а т р и б уто в
3 со ст ав но го э лем е н та к ак г ло ба ль н ы х
Вы также можете определить элементы/атрибуты составного
типа в качестве глобальных, объявив их непосредственно в корне­вом элементе
s
chema
типа, используя атрибут
С
оздадим
<
!-- Файл ComplexElm_qualified_ref.xsd --> <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:x="http://example.org/publishing" targetNamespace="http://example.org/publishing" elementFormDefault="unqualified" attributeFormDefault="qualified">
<!-- определение глобальных элементов --> <xs:attribute name="id" type="xs:integer"/> <xs:element name="name" type="xs:string"/> <xs:complexType name="AuthorType">
<!-- здесь размещается составитель --> <xs:sequence>
<!-- ссылка на глобальный элемент -->
X
ML
и обращаться к их описаниям из составного
,
.
ref
хему с неквалифицированнми элементами:
-с
<xs:element ref="x:name"/> <!-- это по-прежнему локальный элемент -->
<xs:element name="phone" type="xs:string"/> </xs:sequence>
91
<!-- ссылка на глобальный атрибут --> <xs:attribute ref="x:id"/> </xs:complexType> <xs:element name="author" type="x:AuthorType"/> </xs:schema>
оскольку
П
id
и
ame
n
лобальные элементы, они всегда должны
– г содержать пространство имен в экземплярах документа. Использо­вание
"re
использоваться в контексте
станавливает, что глобальный элемент также может
у
f"
AuthorType
, но это не меняет того факта,
что он должен содержать пространство имен.
В рассмотренной схеме элемент
p
hone
глобальный, но элемент чает, что префикс элемента
в
се еще определен локально. Это озна-
phone
можно указывать, а можно и не
был определен как
name
указывать в экземпляре, в зависимости от используемой формы.
Поэтому если мы хотим отличить локальный элемент от глобального, т. е. отображать его без префикса, мы должны устано­вить для атрибута
a
ttributeFormDefault
и
меет значение
el
ementFormDefault
"
qualified"
начение
з
),
рибут
"
unqualified"
(ат
как показано в предыду-
щем листинге.
В этом случае корректный экземпляр этой схемы может выгля­деть следующим образом:
!-- Файл ComplexElm_unqualified_ref.xml-->
<
<x:author xmlns:x="http://example.org/publishing" x:id="123456">
<x:name>Петров</x:name>
<phone>(495)390-45-78</phone>
</x:author>
С
В
3.2.8
ы неоднократно говорили, что
М
ЯЗЫВАНИЕ
контроля достоверности образом при обработке схемы? С этой целью
X
указателя на местоположение
x
с помощью атрибута
<
x:author xmlns:x="http://example.org/publishing"
si:schemaLocation
ML-
X
окумента. Возникает вопрос, каким
-д
ML
X
XML
-д
окумента определяется описание его
ML Schema
Д
ОКУМ ЕНТА С
XML-
ределяет способ предоставления
оп
ML-
X
схемы в экземпляре документа
ак показано ниже:
, к
с
хема используется для
X
ML-
С
ХЕ МОЙ
92
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://example.org/publishing pubs.xsd"/>
А
трибут
имен и
URI
x
si:schemaLocation
схемы, разделенных пробелами. По этим данным опреде-
ляется местонахождение файла схемы для данного
С
3.3
ОЗДАНИЕ XML-СХЕМЫ
В данном разделе рассмотрим процесс создания При этом будем иметь в виду, что
оп
ределяет пары названия пространства
XM
XML
L
-ф
ормат как средство интегри-
окумента.
-д
XML-
с
хемы.
рования систем предназначен для временного хранения структури­рованных данных в качестве универсального формата для обмена информацией как между компонентами одной системы, так и между компонентами систем, реализованных на произвольных платформах.
В связи с этим при определении структуры
-документа мы
X
ML
должны исходить из того, что она должна соответствовать структуре базы данных, служащей источником и/или приемником данных, передаваемых по каналам связи.
ML
X
-
д
окумента, предварительно
составленной из двух таблиц
оп
ределим схему базы данных
O
tdel
и
otrudnik
S
, которую будем исполь-
F
irma
,
зовать для хранения данных. Для передачи по каналам связи инфор­мация базы данных
F
irma
должна быть преобразована в
X
ML
-формат, а затем обратно в формат базы данных на приемной стороне. Для выполнения описанных манипуляций с данными базы необходимо определить своей структуре со схемой базы данных
3.3.1
В
О
ИСАНИЕ БА ЗЫ ДАНН ЫХ
П
таблице
базы данных
Otdel
лениях организации, включая его идентификатор
ame
n
ние
подчиненность
и
XML-
lozh
v
хему, в точности совпадающую по
с
Firma
.
F
хранятся сведения о подразде-
Firma
В таблице
.
RM A
I
otrudnik
S
td
id_o
хр
наименова-
,
анятся сведения
F
irma
сотрудниках, работающих в этих подразделениях, включая табель­ный номер
t
ab_nom
,
фамилию
f
amily
,
имя
в котором работает данный сотрудник.
93
na
me
и
код отдела
id_o
td
,
алее
оп
O
tdel
S
otrudnik
ределим пер-
d_otd
для
для
i
t
ab_ nom
и
Связи типа
.
Д вичные ключи: таблицы таблицы «предок-потомок» между записями таблиц
S
otrudnik
определим с помо-
щью вторичного ключа
(FK)
созданного на основе
,
поля
и
id_otd
писанная схема базы данных
О
Д
алее
t
ab_ nom
записями таблиц ключа
d_otd (FK)
i
блицы
та
оп
ределим первичные ключи:
ля таблицы
д
Sotrudnik
tdel
O
,
созданного на основе поля
Otdel
S
и
и
td
id_o
.
otrudnik
trudnik
So
Описанная схема базы данных
следующем листинге приведены скрипты для создания таблиц
В
ис. 3.1 Схема базы данных Firma
Р
п
Firma
Связи типа «предок-потомок» между
.
ределим с помощью вторичного
оп
Firma
п
риведена на Рис. 3.1.
i
d_otd
d_otd
i
дл
я таблицы
т
аблицы
риведена на Рис. 3.1.
O
tdel
trudnik
So
.
схемы базы данных
F
irma
.
Скрипты для создания таблиц схемы базы данных Firma
C
REATE TABLE "Firma"."Otdel" ( id_otd integer NOT NULL, "name" character varying(10), vlozh integer, CONSTRAINT "Otdel_pkey" PRIMARY KEY (id_otd) )
CREATE TABLE "Firma"."Sotrudnik" ( tab_nom integer NOT NULL, "family" character varying(15), name character varying(10), id_otd integer, CONSTRAINT "Sotrudnik_pkey" PRIMARY KEY (tab_nom) )
ALTER TABLE "Firma"."Sotrudnik" ADD CONSTRAINT "$1" FOREIGN KEY (id_otd) REFERENCES "Firma"."Otdel" (id_otd) MATCH SIMPLE
Н
аша задача заключается в реализации структуры данных пред-
метной области
F
irma
средствами
X
ML-
ленные атрибуты и ключи сущностей санную связь между ними.
Это позволяет:
94
схемы, содержащей перечис-
O
tdel
и
S
otrudnik
а также опи-
,
– з
аписать информацию из базы данных
F
irma
в
виде
X
ML
­документа, удовлетворяющего созданной схеме на передающей стороне;
– записать данные
схеме, в базу данных
Средствами
X
ML-
X
irma
F
хемы можно создавать композиционные
с
окумента, соответствующего этой
-д
ML
на приемной стороне.
X
ML-
и агрегированные схемы. Рассмотрим механизмы создания этих ва­риантов схем данных и оценим их достоинства и недостатки с точки зрения решения поставленной задачи.
3.3.2
И
С
ОЗДА НИЕ КОМ ПОЗИЦИО ННОЙ
значально композиционные схемы были единственным вари-
антом определения структур данных по спецификации
X
ML-
СХЕМ Ы
ML Schema
X
. Поэтому рассмотрение возможностей построения схем данных как средства определения правил построения
XML
кументов с помо-
-до
щью
3 и
Первое, что нужно сделать при определении
-с
хемы начнем именно с этого варианта.
ML
X
.3.2.1 Об ъя вл ен и е XM L - сх ем ы и пр о с тр а н с тв а
ме н
схемы, – это
ML-
X
объявить схему. Для этого определяется пролог и корневой элемент
ML
X
chema
S
?xml version="1.0" encoding="UTF-8"?>
< <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
. . . . . . . . . . . . .
</xs:schema>
братите внимание на то, что в открывающем теге корневого
О
элемента определяются атрибуты механизма
elementFormDefault
:
.
,
ttributeFormDefault
a
namespace
исанные нами в подразделе 3.2.7.
, оп
:
xmlns,
С учетом изложенного объявление корневого элемента объекта
F
irma
определяется следующим образом:
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
95
<xs:element name="Firma"> <xs:annotation> <xs:documentation> Отделы и сотрудники КНИО-2 </xs:documentation> </xs:annotation> <xs:complexType>
. . .
</xs:complexType> </xs:element>
</xs:schema>.
3
.3.2.2 Оп ре де ле н и е с о с та ва с ло жн о г о э л е м е н т а
Далее в корневом элементе сложного типа определим последо-
вательность вложенных элементов, которые могут быть как простыми, так и сложными. В нашем случае в элемент быть вложено два сложных типа
?xml version="1.0" encoding="UTF-8"?>
< <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" attributeFormDefault="unqualified"> <xs:element name="Firma"> <xs:annotation> <xs:documentation> Отделы и сотрудники КНИО-2 </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="Otdel"/> <xs:element name="Sotrudnik"/> </xs:sequence>
O
tdel
и
otrudnik
S
,
как показано ниже.
irma
F
олжно
д
</xs:complexType> </xs:element> </xs:schema>
Н
а приведенном листинге вложенные элементы приведены без определения составов. Однако каждый из сложных элементов в свою очередь содержит собственную последовательность объявле-
96
н
ий элементов. Для элемента
элемента
Sotrudnik
–
tab_nom
,
– э
O
tdel
family, name
то
i
d_otd
и
,
n
ame_otd
id_otd
и
.
Перечисленные
v
lozh
,
а для
элементы на нижеследующем листинге определены как простые элементы с указанием имен и базовых типов.
Описываемая схема имеет следующие особенности.
1. Для элемента
v
необходимо определить фасет
указывающего на подчиненность отдела,
,
lozh
minOccurs="0"
, т. е. как необязательный,
т. к. элемент верхнего уровня не имеет вложений и в нем элемент
vlozh
ожет отсутствовать.
м
2. Для элемента
otrudnik
S
ведем еще и атрибут
в
_rabote
na
отра-
,
жающий факт присутствия сотрудника подразделения на работе.
,
Определим перечень допустимых значений этого атрибута
"y
es"
,
"n
o"
означающих присутствие или отсутствие сотрудника на работе, соответственно.
?xml version="1.0" encoding="UTF-8"?>
< <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="Firma"> <xs:annotation> <xs:documentation>Отделы и сотрудники КНИО-2</xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="Otdel" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="id_otd" type="xs:integer"/> <xs:element name="name_otd" type="xs:string"/> <xs:element name="vlozh" type="xs:integer" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Sotrudnik" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="tab_nom" type="xs:integer"/> <xs:element name="family" type="xs:string"/> <xs:element name="name" type="xs:string"/>
97
<xs:element name="id_otd" type="xs:integer"/>
</xs:sequence> <xs:attribute name="na_rabote"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="yes"/> <xs:enumeration value="no"/> </xs:restriction> </xs:simpleType> </xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
братите внимание на то, что атрибут
О
m
axOccurs
я обоих
дл элементов имеет значение unbounded. Это означает, что каждый из этих элементов в экземплярах
X
раниченное число вхождений. Атрибуты
окумента может иметь неог-
-д
ML
mi
nOccurs
для обоих элемен­тов не указаны, а это означает, что в данной схеме используются их значения по умолчанию (
3
.3.2.3 XM L- до ку м е н т сх ем ы и ег о п р о в е р к а
m
inOccurs=1
).
на с сы ло чн ую це ло ст но ст ь По созданной
схеме может быть построен
XML-
-файл с дан-
XML
ными, фрагмент которого приведен в следующем листинге:
otd:Firma xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
< xsi:schemaLocation=http://npomars.com/xml Firma_NS.xsd elementFormDefault="qualified" attributeFormDefault="unqualified"> <otd:Otdel> <otd:id_otd>1</otd:id_otd> <otd:name_otd>КНИО-2</otd:name_otd> <otd:vlozh>0</otd:vlozh> </otd:Otdel>
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
<otd:Sotrudnik na_rabote="no"> <otd:tab_nom>8</otd:tab_nom>
98
<otd:Family>Нилов</otd:Family> <otd:name>Алексей</otd:name> <otd:god_rozhd>1985</otd:god_rozhd> <otd:id_otd>5</otd:id_otd> </otd:Sotrudnik> </otd:Firma>
В приведенном
ляющие пространство имен и связи с элементе
-документа определен префикс
ML
X
путем ввода строки например, вместо имени
-документе содержатся конструкции, опреде-
ML
X
ML-
X
mlns:otd="http://npomars.com/xml"
x
Otdel>
<
пишется
хемой. В корневом
с
пространства имен
td
o
осле этого,
П
.
td:Otdel>
<o
, что явно
указывает на принадлежность этого имени пространству имен
ttp://npomars.com/xml
h
Способ связи
.
XML
-д
окумента с его схемой был описан в подраз­деле 3.2.8 настоящего учебного пособия. В соответствии с этим опи­санием в элементе
окумента текст
д
x
si:noNamespaceSchemaLocation="Firma_NS.xsd"
аменяем текстом
з
si:schemaLocation="http://npomars.com/xml Firma_NS.xsd"
x
XML
X
ML
-д
окументе ссылка на схему содержится в корневом
окумента. При этом в корневом элементе
-д
.
F
irma
-
X
ML
десь обратите внимание на пару значений в кавычках. Первый
З
компонент – это
U
ние файла схемы, который в общем случае представляется
ространства имен, а второй – месторасположе-
п
RI
URL
. В нашем случае документ и его схема размещены в одном каталоге, поэтому
URL
хемы в рамках относительной адресации представлен
с
просто именем ее файла.
Если данные, содержащиеся в этом
ется записать в базу данных
F
irma
XML
,
то они должны соответствовать
окументе, предполага-
-д
ограничениям ссылочной целостности. Эти ограничения связаны с определениями первичных и вторичных ключей базы данных и описываются следующим образом.
1. Значения поля
S
otrudnik
д
олжны быть уникальными.
d_otd
i
та
блицы
O
tdel
и
поля
b_nom
ta
т
аблицы
99
2. Значения поля
id
_otd
множества значений поля
сли мы в соответствующие элементы
Е
та
блицы
id
_otd
S
otrudnik
аблицы
т
д
олжны быть выбраны из .
O
tdel
ML
X
-д
окумента введем значения, не удовлетворяющие этим требованиям, то проверка на корректность этого документа пройдет успешно. Это говорит о том, что
X
окументы, созданные на базе композиционных схем,
-д
ML
не соответствуют требованиям ограничений ссылочной целостности и не могут быть использованы для обмена данными, содержащимися в реляционных базах.
3.3.3
XML-
С
ОЗДА НИЕ АГР ЕГИРОВА ННОЙ СХ ЕМЫ
хема, описанная выше, называемая композиционной,
с характеризуется тем, что составные части и целевая схема создаются одним разработчиком и предназначены исключительно для исполь­зования в данной схеме. Поэтому на способы соединения частей схемы при этом никакие ограничения не накладываются.
На значения элементов связанных частей также не накладывается
ограничений. Например, данная схема допускает ввод в поле
Sotrudnik/id_otd
му значению
д
окумента
O
tdel/id_otd
ется работающим в несуществующем отделе, а в данные
XML
з
начения, не соответствующего ни одно-
.
Это приводит к тому, что сотрудник оказыва-
XML
-
документа введена смысловая ошибка.
Отсутствие ограничений на значения не позволяет строить с помощью композиционных схем структур, адекватных реляцион­ным структурам, используемым в подавляющем большинстве современных СУБД. Поэтому быстро выяснилось, что используе­мый (в первоначальной версии спецификации к построению
XML-
схем ну
ждается в совершенствовании путем
X
SD
) под
ход
добавления в нее возможностей формирования агрегированных схем. Агрегированная схема позволяет составлять структуры из частей, которые могут быть описаны и/или использованы в других схемах, а также налагает ограничения на значения элементов свя­занных частей.
На сегодняшний день такие схемы создаются с помощью СУБД в виде таблиц, каждая строка которой должна иметь уникальный
10
0
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]