Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основы XML-технологий. Учебное пособие
.pdf
Е
сли по этой
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
