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

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

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
идентификатор или первичный ключ, а связи между ними опреде­ляются с помощью вторичных ключей, имеющих значения первич­ных ключей другой таблицы. Этот способ моделирования данных существует уже более 40 лет и доминирует в современной техноло­гии баз данных.
Потребности обмена данными информационных систем разных производителей требуют обеспечения преобразования данных
X
из бинарного представления (в виде баз данных) в текстовый (в
ормат), и наоборот. При этих преобразованиях важно
ф г
арантировать отсутствие искажения передаваемой информации,
ML
X
а для этого структуры
-д
окументов должны быть адекватны
ML
-
структурам баз данных информационных систем. Это вынудило раз­работчиков спецификации
XSD
с
оздать такие средства для
XML-
с
хем, с помощью которых составные части схем создаются как самостоя­тельные структурные единицы, а их соединения между собой осу­ществляются в соответствии с ограничениями по ключу. Созданные с помощью этих средств
XM
Идентичность схем баз данных и
возможность взаимного преобразования
хемы называются агрегированными.
с
L-
X
ML-
хем обеспечивает
с
да
X
ML-
нных и данных, пред­ставленных в базах, и является важным качеством при создании интегрированных автоматизированных систем, составленных из гетерогенных составляющих. При этом текстовое представление данных, «переведенное» из бинарного, является инвариантным для разнородных систем и может служить в качестве средства межсис­темного представления при обмене данными.
С учетом изложенного для обмена информацией между инфор-
мационными системами требуется использовать
-документы,
L
XM
XM
созданные на базе агрегированных
L
-с
хем.
Составим следующий план составления агрегированной
хемы для передачи данных базы
с
Прежде чем приступить к разработке намеченной
1. создадим папку, например, с именем размещаться файлы агрегированной
2. Агрегированную
X
-с
хему, как и композиционную, опреде-
ML
F
irma
XML
.
Firma_Agreg
-схемы.
,
в которой будут
лим на трех уровнях:
10
1
XML
-с
хемы,
X
ML
-
– пользовательских типов данных и простых элементов;
O
– с
оставных частей (
tdel
– схемы верхнего уровня
В первую очередь определим уровень пользовательских типов
3.
и
F
S
otrudnik
irma
)
;
.
данных и простых элементов и сохраним его описание в отдельном
serType.xsd
файле, скажем,
U
, в папке
4. На уровне составных частей определим элементов
S
otrudnik.xsd
и
На верхнем уровне определим целевую
5.
O
tdel
в
и
otrudnik
S
папке
и
F
irma_Agreg
сохраним их в файлах с именами
.
а также опишем ключи для элементов
irma_Agreg
F
tdel
O
и
.
otrudnik
S
X
ML
хемы для
-с
tdel.xsd
O
-с
хему
ML
X
,
задавая, таким
F
irma
образом, связи между ними, а также ограничения, вытекающие из этих связей или зависимостей.
3
.3.3.1 Оп ре де ле н и е п о л ьз ов ат ел ьс к и х т и п ов
да
нн ых
,
Так как элементы создаваемой схемы нам уже известны, то в качестве пользовательских типов определяем уже известные нам ограничения на наименования отделов и форму представления года рождения. Добавим к этому перечню тип данных, принимающий два альтернативных значения « атрибута «
n
a_rabote
принимающего одно из двух альтернативных
»,
а
д
»
, «
ет
н
»
для определения типа данных
значений.
1. Для создания
данных открываем
хемы.
с
X
2. Для
ML
хемы введем префикс и наименование целевого про-
-с
XML
XML
хемы определений пользовательских типов
-с дактор и переходим в режим создания
-ре
XML
-
странства и определяем параметры квалификации элементов и атри­бутов. Например, это может быть сделано с помощью следующей конструкции:
mlns:typ="http://www.type.ru" targetNamespace=http://www.type.ru
x elementFormDefault="qualified" attributeFormDefault="unqualified"
С
тандартное пространство
водится по умолчанию.
в
xmlns:xs="http://www.w3.org/2001/XMLSchema"
10
2
.
3. Определяемые пользовательские типы элементов и атрибутов
будем хранить в отдельном файле, поэтому в создаваемой
s:simpleType
введем необходимое количество конструкций тами
n
с помощью которых указываются имена создаваемых
,
ame
x
пользовательских типов (см. нижеследующий листинг).
<
?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:simpleType name="otdNameType">
. . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .
</xs:simpleType> <xs:simpleType name="godRozhdType">
. . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .
</xs:simpleType> <xs:simpleType name="yesNoType">
. . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .
</xs:simpleType>
-с
X
ML
с
атрибу-
хеме
Пользовательские типы элементов и атрибутов определяются
4.
путем ограничения выбранного базового типа. Для объявления базо­вого типа данных и дальнейшего его ограничения введем внутри тега
s:simpleType
x
<
xs:restriction base="xs:string">
. . . . . . . . . . . . . . . . . . . .
</xs:restriction>
В
этой конструкции с помощью атрибута
к
онструкцию
.
b
у
казывается огра-
ase
ничиваемый базовый тип.
5. Внутри конструкции
s:restriction
оп
ределяются ограничения
x
базового типа, описанные в подразделе 3.2.4. Порядок определения простых пользовательских типов данных с помощью ограничений базовых типов описан в подразделе 3.2.5.
X
ML
В соответствии с описанным порядком для агрегированной
F
с
хемы
irma
ведем три пользовательских типа:
в
-
–
otdNameType
– базовый тип
, а ограничения определяются
string
путем представления перечня наименований;
10
3
–
g
odRozhdType
путем представления шаблона
esNoType
y
–
– ба
– ба
зовый тип
\d\d\d\d
зовый тип
s
путем представления перечня значений «
В результате выполнения
описанных действий получаем
,
s
а ограничения определяются
tring
;
tring
,
а ограничения определяются
«
»,
y
es
no
».
схему, текст которой приведен в следующем листинге:
!-- Файл UserType.xsd -->
< <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:typ="http://www.type.ru" targetNamespace=http://www.type.ru elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:simpleType name="otdNameType"> <xs:restriction base="xs:string"> <xs:enumeration value="КНИО-2"/> <xs:enumeration value="НИО-21"/> <xs:enumeration value="НИО-22"/>
X
ML
-
</xs:restriction> </xs:simpleType> <xs:simpleType name="godRozhdType"> <xs:restriction base="xs:string"> <xs:pattern value="\d\d\d\d"/> </xs:restriction> </xs:simpleType>
<xs:simpleType name="yesNoType"> <xs:restriction base="xs:string"> <xs:enumeration value="yes"/> <xs:enumeration value="no"/> </xs:restriction> </xs:simpleType> </xs:schema>
охраняем полученный
С
в отдельной папке, например,
окумент под именем
-д
ML
X
F
irma_Agreg
serType.xsd
U
.
.3.3.2 Оп ре де ле н и е с о с та вн ых ч ас т е й X M L - с х е мы
3 Композиционная схема определяется как монолитная структура,
части которой определяются в составе общей схемы и не имеют
10
4
отдельного описания. Поэтому описания составных частей компози­ционной схемы не могут быть использованы в других схемах.
Объект
irma
F
с
одержит составные части
O
tdel
и
otrudnik
S
,
которые в соответствии с порядком разработки агрегированных схем будем определять как самостоятельные структурные единицы, а их опи­сания хранить в файлах, с именами
азработка схем составных частей агрегированной схемы опи-
Р
шем на примере создания
XML
-с
O
хемы
tdel.xsd
Otdel.xsd
1. Для создания структурной единицы агрегированной
открываем
X
ML
-ре
дактор и переходим в режим создания
и
S
otrudnik.xsd
следующем порядке:
в
.
ML
X
-с
ML
X
-схемы
хемы.
2. В создаваемой схеме применяется пользовательский тип ,
tdNameType
o
описание которого содержится в файле
обеспечения «видимости» этого описания со схемы
erType.xsd
Us
Otdel.xsd
не
.
Для
обхо-
димо включить после объявления корневого элемента схемы конст-
кцию
ру
xs:import
?xml version="1.0" encoding="UTF-8"?>
< <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
как показано в нижеследующем листинге:
,
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:import namespace="http://www.type.ru" schemaLocation="UserType.xsd"/>
. . . . . . . . . . . . . . . . . . . .
</xs:schema>.
3. Для
XML
-схемы
Otdel.xsd
определяем префикс и целевое про­странство и определяем параметры квалификации элементов и атри­бутов. Например, это может быть сделано с помощью следующей конструкции:
s:otd="http://www.otdel.ru" targetNamespace="http://www.otdel.ru"
xmln
ementFormDefault="qualified" attributeFormDefault="unqualified"
el
Про
ментов
странство имен
хемы определяется по умолчанию.
-с
ML
X
x
mlns:xs="http://www.w3.org/2001/XMLSchema"
.
ля эле-
д
Кроме перечисленных пространств имен в описание схемы
обавляется пространство имен
д ванного файла
UserType.xsd
.
xmlns
:typ="http://www.type.ru"
мпортиро-
и
4.
необходимо
с помощью конструкции
об
10
O
tdel
к
5
<xs:element name="Otdel">
<xs:complexType>
. . . . . . . . . . . . . . . . . . . .
</xs:complexType>
</xs:element>
в которой его наименование вводится с помощью атрибута
5. Для определения структуры элемента
цию
xs:sequence
,
.
n
ame
вве
O
tdel
дем конструк-
и определим состав его элементов с указание типов данных, которые могут быть как базовыми, так и пользовательскими (см. нижеследующий листинг).
!-- Файл Otdel.xsd -->
<
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:otd="http://www.otdel.ru" targetNamespace="http://www.otdel.ru"
elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:typ="http://www.type.ru"> <xs:impo
<xs:element name="Otdel"> <xs:complexType> <xs:sequence>
rt namespace="http://www.type.ru" schemaLocation="UserType.xsd"/>
<xs:element name="id_otd" type="xs:integer"/> <xs:element name="name_otd" type="otdNameType"/> <xs:element name="vlozh" type="xs:integer"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
О
братите внимание на то, что в данном определении мы ввели целевое пространство имен, согласно которому элементы структуры в
XML
-д
окументе будут определяться с префиксом
otd
.
В данном
случае определение целевого пространства имен необходимо, так
XML
как данная
-сх
ема предназначена для использования в других схемах с целью устранения коллизий имен тегов, определенных в разных
-схемах.
ML
X
6. В соответствии с описанным порядком создадим еще один
файл
otrudnik.xsd
S
с
-схемой для составной части
ML
X
otrudnik.
S
Следует
10
6
отметить, что небольшие отличия при создании файла
S
otrudnik.xsd
в
се
же имеются.
Первое отличие связано с тем, что для элемента определяется свое пространство имен и определяется оно по аналогичной конст­рукции, но с другими префиксом и именем, например:
s:otd="http://www.otdel.ru" targetNamespace="http://www.otdel.ru"
xmln
el
ementFormDefault="qualified" attributeFormDefault="unqualified"
С
ледующее отличие касается определения атрибута «
для элемента
Sotrudnik
С целью определения атрибута добавьте в его
.
.
a_ rabote
n
определение конструкцию
<xs:attribute name="na_rabote">
<xs:simpleType>
<xs:restriction base="yesNoType"/>
</xs:simpleType>
</xs:attribute>
епосредственно после определения состава элемента
н
»
(т. е. после закрывающего тега
<
/xs:sequence>
ния описанных действий получим
XML
-с
)
. В результате выполне-
хему, текст которой приве-
ден ниже:
<!-- Файл Sotrudnik.xsd -->
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
s:otd="http://www.sotrudnik.ru" targetNamespace="http://www.sotrudnik.ru"
xmln
elementFormDefault="qualified" attributeFormDefault="unqualified"
s:typ="http://www.type.ru">
xmln
<xs:impo
<xs:element name="Sotrudnik">
<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"/>
rt namespace="http://www.type.ru" schemaLocation="UserType.xsd"/>
<xs:element name="god_rozhd" type="godRozhdType"/>
<xs:element name="id_otd" type="xs:integer"/>
</xs:sequence>
<xs:attribute name="na_rabote">
<xs:simpleType>
10
7
<xs:restriction base="yesNoType"/> </xs:simpleType> </xs:attribute> </xs:complexType>
</xs:element> </xs:schema>
F
ба созданных файла сохраняем в папке
О
irma_Agreg
.
3.3.3.3 Оп ре де ле ни е а г р е г и р о в ан но й X M L- сх е м ы и
з со ст ав ны х ч а с те й
Характерной особенностью агрегированной
X
хемы является
-с
ML
то, что она составляется из частей, определенных как самостоятель­ные структурные единицы без указания ограничений, налагаемых на них при включении в определенные структуры. Поэтому основное содержание описания схемы на верхнем уровне касается определе­ний состава целевой структуры и ограничений, налагаемых на них при создании структур более высокого порядка.
Разработка агрегированной
-сх
X
ML
емы
F
irma.xsd
вы
полняется
в следующем порядке:
1. Открываем
2. Создаваемая агрегированная
tdel
O
O
tdel.xsd
и
элементы в файлах описаний со схемы
хемы эти файлы с помощью конструкции
с
X
ML
otrudnik
S
и
-ре
дактор для создания
ML
X
,
описания
Для обеспечения «видимости» этих
S
otrudnik.xsd
irma.xsd
F
.
необ
ходимо включить в объявление
X
-с
ML
хема содержит структурные
-с
хем которых содержатся
xs:import
X
ML
-с
хемы.
.
Д
ля
X
ML
-схемы
irma.xsd
F
определяем префикс и целевое прост­ранство и определяем параметры квалификации элементов и атрибу­тов. Например, это может быть сделано с помощью следующей конструкции:
xmlns:fir="http://www.firma.ru" targetNamespace="http://www.firma.ru" el
ementFormDefault="qualified" attributeFormDefault="unqualified"
результате выполнения описанных определений получаем
В
.
следующее объявление корневого элемента схемы:
<
!-- Файл Firma.xsd -->
<?xml version="1.0" encoding="UTF-8"?>
10
8
<xs:schema
s:otd="http://www.otdel.ru"
xmln
s:sot="http://www.sotrudnik.ru"
xmln
s:fir="http://www.firma.ru" targetNamespace="http://www.firma.ru"
xmln
ementFormDefault="qualified" attributeFormDefault="unqualified">
el <xs:impo <xs:impo
. . . . . . . . . . . . . . . . . . . .
</xs:sche
xmlns:xs="http://www.w3.org/2001/XMLSchema"
rt namespace="http://www.otdel.ru" schemaLocation="Otdel.xsd"/> rt namespace="http://www.sotrudnik.ru" schemaLocation="Sotrudnik.xsd"/>
ma>
3. Аналогично определению составных частей
объявим элемент
<xs:element name="Firma"> <xs:complexType>
. . . . . . . . . . . . . . . . . . . .
</xs:complexType>
</xs:element>
,
F
irma
ка
к сложный тип с помощью конструкции
Otdel
и
Sotrudnik
,
З
десь, как и при определении составных частей, с помощью
атрибута
ML
X
цию
хемы
-с Для определения структуры элемента
4.
xs:sequence
ame
n
Fi
ности элементов
водим наименование создаваемой агрегированной
в
rma
.
irma
F
и
определим состав его элементов в виде совокуп-
O
tdel
и
otrudnik
S
.
В описании состава этих элементов
ведем конструк-
в
в данном случае нет необходимости, а достаточно указать на их
r
ef
описания с помощью ключевого слова
,
как показано в нижесле-
дующем листинге:
xs:element name="Firma">
< <xs:complexType> <xs:sequence> <xs:element ref="Otdel"/> <xs:element ref="Sotrudnik"/> </xs:sequence>
</xs:complexType>
Н
а этом определение состава элемента
.
ется описать связи между элементами его структуру.
10
9
Otdel
irma
F
Sotrudnik
и
за
вершается и оста-
,
определяющие
5. Первым структурным ограничением, определяемым для эле-
мента
F
с помощью атрибутов
является указание количества его составных элементов
,
irma
inOccurs
m
и
axOccurs
m
(
описание см. в пункте
3.2.6.3):
inOccurs
– если значение
m
мый элемент является необязательным в
– при
m
атрибутов в
axOccurs ="1"
X
ML
-д
окументе по умолчанию определяется единствен-
ли при отсутствии определения этой пары
и
"0"
=
,
это говорит о том, что описывае-
ML
X
-документе;
ный экземпляр описываемого элемента;
– если значение
xOccurs="unbounded"
ma
, т
о в
X
ML
окументе опреде-
-д ляется неограниченное количество экземпляров описываемого элемента.
В нашем примере для обоих элементов определяем неограни­ченное количество их экземпляров, т. е. чего определения элементов
<xs:element ref="Otdel" maxOccurs="unbounded"/>
O
tdel
и
So
trudnik
xOccurs="unbounded"
ma
п
риобретают вид
, после
<xs:element ref="Sotrudnik" maxOccurs="unbounded"/>
Следующим шагом в части определения структуры элемента
6. вляется ввод первичных ключей, необходимых для однознач-
я
irma
F
ной идентификации элементов данных в первичных ключей в
-с
хемах описан в пункте 3.2.6.4, поэтому
ML
X
XML
.
окументах. Синтаксис
-д
подробности их определения здесь опустим и ограничимся приведе­нием текста их определения в создаваемой
<xs:key name <xs:selector xpath="Otdel"/> <xs:field xpath="id_otd"/> </xs:
key>
<xs:key name
<xs:selector xpath="Sotrudnik"/> <xs:field xpath="tab_nom"/>
</xs:key>.
анные ограничения определяют, что в
Д
="PK_otd">
="PK_sotr">
-с
хеме:
ML
X
X
ML
окументах, создан-
-д
ных на основе
t
ab_ nom
и
олжны быть уникальными.
д
XML
-с
хемы
Firma.xsd
11
0
,
значения элементов
id_otd
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]