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

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

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
к
выбору). Здесь приведен пример корректного экземпляра нашего
нового
A
uthorType
<
!-- Файл ComplexElm_all_choice.xml--> <?xml version="1.0" encoding="UTF-8"?> <x:author xmlns:x="http://example.org/publishing" xsi:schemaLocation="http://example.org/publishing ComplexElm_userType.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="000-00-0000" > <x:name>Петров Петр</x:name> <x:address> <x:street>ул. Мира, д. 1, кв. 5</x:street> <x:city>Инза</x:city> <x:state>Ульяновская</x:state> <x:zip>432031</x:zip> </x:address> <x:phone>617-123-4567</x:phone> <x:phone>801-321-7654</x:phone> <x:phone>987-095-7643</x:phone>
:
<x:recentPublications> <x:book>Основы XML-технологий</x:book> <x:book>Программирование XML-данных</x:book> <x:book>Автоматизированное проектирование БД</x:book> <x:book>Основы Web-сервисов</x:book> </x:recentPublications> </x:author>
.2.6.4 Ог ра ни че ни я, и с п о л ь зу ем ые д л я
3 пр ив ед ен ия X M L -с х ем ы к ре ля ци он но й м о д е л и
В предыдущих разделах рассматривались примеры применения
фасетов для проверки допустимости данных, применяемых в доку­менте
ML
В спецификации
X
.
ML Schema
X
редусмотрены также сред-
п ства определения ограничений, копирующих конструкции реляци­онной модели. К таким ограничениям относятся ограничения уни­кальности и соответствующих ссылочных ограничений, которые должны соблюдаться в определенном диапазоне значений данных, основанных на использовании средств
XPath
.
Рассмотрим ограниче-
ния двух типов: ограничения уникальности и ограничения по ключу.
81
О
граничения уникальности. Для определения ограничения
уникальности должен быть задан элемент
u
nique
определяющий
, элементы или атрибуты, которые должны быть уникальными. Например, можно определить ограничение уникальности по иден-
d_otd
тификатору отдела (элемент
и табельному номеру сотрудника (элемент
)
O
tdel
otrudnik
в комплексный тип
<
unique name="uniqueIdOtd"> <selector xpath="Otdel"/> <field xpath="id_otd"/> </unique>
<unique name="uniqueTabNom"> <selector xpath="otd:Sotrudnik"/> <field xpath="tab_nom"/> </unique>
естонахождение уникального элемента в схеме позволяет
М
S
i
, вложенный в комплексный тип
ложенный
t
ab_nom
, в
) с помощью следующей конструкции:
определить контекстный узел, на который распространяется такое ограничение. В данном случае дескриптор, задающий ограничение, следует за элементами
O
tdel
и
otrudnik
S
;
тем самым указано, что соот­ветствующие ограничения должны быть уникальными только в кон­тексте элементов
Otdel и Sotrudnik
т. е. в пределах данной
,
XML-
хемы.
с Это аналогично определению ограничения на отношении в реляци­онной СУБД.
Выражения
X
заданные в двух элементах данного определе-
,
Path
ния, являются относительными к контекстному узлу. Первое выра­жение
X
Path
с
элементом
se
lector
за
дает элемент, на который распро­страняется ограничение уникальности (в данном случае это элемен­ты
O
узлы
и
tdel
id_otd
S
otrudnik
tab_nom
и
)
, а следующие за ними элементы
которые должны проверяться на уникальность.
,
f
ield
у
казывают
Ограничения по ключу. Ограничение по ключу определяет, что проверяемое с помощью него значение не должно быть пустым. Оно также позволяет ссылаться на ключ. В следующем примерах показаны ограничения же узлах, а именно,
d_otd
i
O
tdelPK
и
ab_nom
t
и
So
trudnikPK
:
п
о ключу, заданные на тех
82
<
key name="OtdelPK"> <selector xpath="."/> <field xpath="id_otd"/> </key>
<key name="SotrudnikPK"> <selector xpath="."/> <field xpath="tab_nom"/> </key>
Еще один тип ограничения позволяет задавать ссылки значе-
ниями указанных ключей. Например, если объект
O
связать с объектом элемент, скажем,
S
ничены значениями ключа
tdel
, то для этого необходимо определить
otrudnikFK
,
значения которого должны быть огра-
tdelPK
O
Этот тип ограничения задается
.
otrudnik
S
т
ребуется
следующим образом:
s:keyref name="SotrudnikFK" refer="OtdelPK">
<x <xs:selector xpath="Sotrudnik"/> <xs:field xpath="id_otd"/> </xs:keyref>
3.2.7
П
ОСТР АНСТВА ИМЕН
Р
Достоинство использования
за
ML
X
ключается в возможности придумывания собственных тегов, названия которых наиболее полно соответствуют их предназначению. С одной стороны, это
XML
обеспечивает создание легко читаемых
-д
окументов, с другой стороны, нет никакой гарантии того, что данные вами имена элементов и атрибутов не будут использованы кем-то еще.
До тех пор пока в вашем приложении обрабатываются только
X
собственные использовании сторонних
ML
-документы, никаких проблем не возникнет. Но при
X
ML
окументов названия некоторых
-д
элементов и атрибутов могут совпасть с вашими, имеющими другой
ML
X
смысл, а это может вызвать ошибку в
-а
нализаторе.
Чтобы исправить эту ситуацию, мы должны иметь возможность гарантировать уникальность названий элементов и их атрибутов, «дописывая» к их именам некоторый уникальный префикс, опреде­ляемый в рамках пространств имен.
83
3
.2.7.1 Ме ха ни зм N a me sp ac es
Для введения пространств имен применяется механизм
N
ame-
spaces
действия» тега необходимо описать уникальный атрибут
. В соответствии с этим механизмом для определения «области
x
mlns
, задающий префикс, дописываемый к названию элемента, по кото­рому анализатор может определить, к какой группе имен он отно­сится.
В соответствии с этим соглашением:
– имя элемента без префикса пространства имен называется неквалифицированным, и это имя может быть использовано только в локальной схеме;
– имя элемента, включающее префикс пространства имен, назы­вается квалифицированным.
В качестве наименования пространства имен рекомендовано использовать
.
Но это вовсе не значит, что описание пространст-
RL
U
ва имен находится по данному адресу. Данный сайт может вообще не существовать и никаких обращений по данному адресу не будет. Использование
URL
комендовано лишь для того, чтобы обеспечить
ре уникальность именования пространства имен. Поэтому в отношении пространства имен необходимо иметь в виду, что:
– строка в определении пространства имен является только
строкой. Эти строки выглядят как
xm
жете определить
lns:addr=”mike”
и это также будет работать;
,
но ими не являются. Вы мо-
,
URL
– только одно важно относительно строки пространства имен: она должна быть уникальной. Вот почему большинство пространств имен выглядят как
X
ML
–
нализатор не обращается по
-а
U
RL
;
U
RL
дресу, чтобы найти
-а
схему, он просто использует этот текст как строку.
Операция определения пространства имен выполняется с помо­щью следующей конструкции:
mlns:[префикс]="[URI (название) пространства имен]",
x
г
де
x
mlns:
резервированный атрибут.
– за
84
П
рефикс может состоять из любых символов, разрешенных
в тегах
ml
x
»
«
(такие строки запрещены).
.2.7.2 Об ъя вл ен и е пр о с тр а н ст ва и м е н
3
если только они не начинаются с комбинации символов
,
X
ML
Любая схема использует стандартное пространство имен, объяв­ляемое с помощью следующей конструкции
xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
<
elementFormDefault="qualified" attributeFormDefault="unqualified">.
xs"
"
и
о соглашению это пространство имен использует префикс
П
ли
. Целевое пространство имен пока не введено.
"
xsd"
В этой декларации фрагмент:
mlns:xs="http://www.w3.org/2001/XMLSchema"
x
– указывает на то, что
используемые в схеме элементы и типы данных относятся к про-
ttp://www.w3.org/2001/XMLSchema"
странству имен
"h
. Также здесь указыва­ется, что элементы и типы данных, относящиеся к этому простран­ству имен, должны иметь префикс
elementFormDefault="qualified"
используемый в
XM
окументе, который был декларирован в этой
д
L-
– у
;
xs
казывает на то, что любой элемент,
схеме, должен быть уточнен по пространству имен;
attribu
бут, используемый в
teFormDefault="unqualified"
XML-до
– указыв
ает на то, что любой атри-
кументе, который был декларирован в этой схеме, является неквалифицированным и отображается без префикса.
В описанной конструкции объявлено только стандартное про­странство имен, но не содержится объявление пространства имен структуры данных, определяемой в данной схеме. При создании схем для их использования в распределенной системе такой способ объявления пространства имен может привести к конфликтам имен, когда одни и те же имена могут быть присвоены разным объектам.
ML
X
Элементы в
-д
окументах, созданных на основе схем без целевых пространств имен, определяются без префиксов. Если данный документ будет использоваться совместно с другими доку­ментами, также определенными без целевого пространства имен, то это может привести к совпадению имен. Например, имя
name
м
ожет
85
б
ыть использовано в разных
-д
X
окументах, обозначая при этом
ML
совершенно разные объекты (имена людей, отделов, устройств и т. д.).
Для исключения подобных ситуаций сделаем еще один шаг
chema>
в эволюции схемы, добавив в элемент имен (например,
h
ttp://npomars.com/xml
<s
префиксом
с
целевое пространство
. Синтаксис
)
o
td
определения целевого пространства имеет вид
xmlns:otd=”http://npomars.com/xml” targetNamespace=”http://npomars.com/xml”.
mlns
В
данном определении указываются два атрибута
– целевого пространства имен (
x
mlns:otd
)
;
x
д
ля:
– пространства имен по умолчанию (в качестве такового примем стандартное пространство имен из его атрибута
mlns
x
п
рефикс
x
s
).
h
ttp://www.w3.org/2001/XMLSchema
,
убрав
После этого декларация корневого элемента схемы имеет вид
<
?xml version="1.0"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:otd="http://npomars.com/xml" targetNamespace=http://npomars.com/xml elementFormDefault="qualified" attributeFormDefault="unqualified">
этом объявлении дополненные элементы пространства имен
В
имеют следующее назначение:
targetNamespace="http://npomars.com/xml"
–
деляемые этой схемой элементы ( ся к целевому пространству имен
x
mlns:otd="http://npomars.com/xml"
–
O
tdely
ttp://npomars.com/xml
h
– задает префикс для тех элемен-
казывает на то, что опре-
– у
O
,
tdel
S
otrudnik
,
и т. д.) относят-
;
тов, которые определяются в целевом пространстве имен
mars.com/xml.
3
.2.7.3 Пр ос тр ан ст в а им ен : ст ан да р тн о е , ц е ле во е,
о ум ол ча ни ю и д ля X ML S ch ema i ns ta nc e
п В предыдущем пункте были рассмотрены несколько видов про-
странств имен:
h
ttp://npo-
– стандартное пространство имен, определяемое со стандартным
префиксом пространства имен для
(
s
x
). Этот префикс используется в качестве псевдонима
sd
x
ML Schema
X
,
так как он также является
X
ML
-
документом. Зарезервированным наименованием этого пространства
86
и
мен является
UR
L
-а
дрес
x
mlns="http://www.w3.org/2001/XMLSchema"
. Эт
о стандартное пространство имен и в него нельзя добавлять собст­венные имена;
– каждый анализатор «знает» это пространство имен и «понима­ет» имена из этого пространства. Его можно сделать пространством по умолчанию и тогда префикс
mlns
объявить атрибут
x
без префикса. Этим определяется простран-
(
x
s
не нужен. Для этого нужно
)
x
sd
ство имен по умолчанию для текущего элемента и всех элементов­потомков, которые не имеют префикса;
– в таких случаях надо установить пространство имен для опре­деляемых в схеме типов и элементов. Для удобства такого определе­ния введено понятие целевого пространства имен ( И
дентификатор целевого пространства имен определяется атрибу-
t
том
argetNamespace
argetNamespace="http://some.com"
t
,
например:
.
arget
t
na
mespace
).
Им
ена, определяемые в этой схеме, будут относиться к новому
h
пространству имен с идентификатором
ML
X
В схемах и документах
ч
асто применяется еще одно стан-
ttp://some.com
.
дартное пространство имен. Использование этого пространства имен
SD
X
связано с тем, что в соответствии со спецификацией языка деляется несколько атрибутов (
maLocation
),
которые применяются не только в схемах, но и в
ype
t
il
chemaLocation
n
s
,
,
NamespaceSche-
no
,
оп
X
ре-
ML
- документах, построенных на базе этих схем и называемых их экзем­плярами ( имен экземпляров которому приписывают префикс
<x xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
нижеприведенном листинге приведен пример использования
В
XML schema instance
ML
X
s:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
). Эти имена относятся к пространству
хемы
-с
ttp://www.w3.org/2001/XMLSchema-instance
h
xsi
, например:
,
пространства имен по умолчанию и целевого пространства имен в одной схеме. Пространство имен по умолчанию вводится для
X
упрощения записи ключевых слов слова пишутся без префиксов, например,
c
omplexType
,
а не
x
s:complexType
).
Для определяемых в схеме типов
и элементов введено целевое пространство имен
MLSchema
(при этом ключевые
lement
e
,
а не
s:element
x
,
87
argetNamespace=”http://some.com
t xmlns:ntb= ”http://some.com
.
При этом имена, относящиеся к данному целевому простран-
ству, снабжаются префиксом
чтобы они не попали в простран-
,
tb
n
ство имен по умолчанию.
<!-- Файл XSD_NameSpace\NameSpace.xsd --> <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace=”http://some.com" xmlns:ntb=”http://some.com"> <element name="notebook"> <complexType> <sequence> <element name="name" type="string"/> <element name="address" type="string"/> </sequence> <attribute name="send" default="yes"/> </complexType> </element> </schema>
ML-
оставим по этой
С
!-- Файл XSD_NameSpace\NameSpace.XML-->
< <?xml version="1.0" encoding="UTF-8"?> <ntb:notebook send="yes" xsi:schemaLocation="http://some.com Prim_NS.xsd" xmlns:ntb="http://some.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <name>Петров</name> <address>г. Москва, ул. Мира, д. 2, кв. 15</address> </ntb:notebook>
X
хеме
с
X
ML
-д
окумент
3.2.7.4 Яв но е оп ре д е л ен ие к в а ли фи ка ци й ле ме нт ов и а т р и б у то в со ст а в н о г о э л ем ен та
э
X
ML
В приведенном в предыдущем пункте
-д
окументе можно увидеть, что в целевое пространство имен попадают только глобаль­ные имена, чьи описания непосредственно вложены в элемент
88
.
<s
chema>
Это естественно, потому что только глобальными именами
можно воспользоваться далее в этой или другой схеме.
Тут возникает интересный вопрос: а должно ли указываться про­странство имен для локальных элементов/атрибутов в экземплярах документа? Поскольку локальные элементы и атрибуты определены внутри родительского элемента (обычно глобального), для которого указано целевое пространство имен, то для локальных элементов в экземплярах документа оно необязательно.
Аналогичная ситуация имеет место в большинстве языков про­граммирования – если вы определяете класс в пространстве имен, пространством имен определяется только имя класса, а не его локальные члены. Поэтому и в
ML Schema
X
дл
я локальных элементов и атрибутов можно не указывать пространство имен, как это было сделано в предыдущем примере.
Но в
XML Schema
ефиксы можно определять и для локальных
пр имен, если в соответствии с принятым соглашением указать, что локальные элементы и атрибуты должны быть квалифицированны­ми. Квалификация локальных элементов и атрибутов определяется с помощью атрибутов
s
chema
в
. Значение каждого из этих атрибутов может быть установлено
и
u
nqualified
ли в
qu
alified
lementFormDefault
e
,
что указывает на признак квалифицируемо-
ttributeFormDefault
a
и
лемента
э
сти локально объявленных элементов и атрибутов.
В соответствии с общепринятым соглашением локальные эле-
менты объявляются квалифицированными, а локальные атрибуты –
XML-
не квалифицированными. Пример
с
хемы с описанными призна-
ками квалификации приведен в листинге
!-- Файл XSD_NameSpace\NameSpace_elm_qualified.xsd -->
< <?xml version=’1.0’?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace=”http://some.com” xmlns:ntb=http://some.com elementFormDefault="qualified" attributeFormDefault="unqualified"> <element name="notebook"> <complexType>
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
89
</complexType> </element> </schema>
Е
сли по этой
X
ML-
с
хеме составить
X
ML
-д
окумент, то он может
иметь следующий вид:
<
!-- Файл XSD_NameSpace\NameSpace_elm_qualified.xml--> <?xml version="1.0" encoding="UTF-8"?> <ntb:notebook 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>
X
В
данном
ML
-д
окументе в целевое пространство имен попадают как глобальные, так и локальные имена, чьи описания непосредст­венно вложены как в корневой элемент
<schema>
так и в составные
,
элементы.
Далее определим
XML-
хему, в которой и атрибуты определены
с с префиксами. Для этого в соответствии с уже упомянутым согла­шением атрибут Пример
схемы, согласно которой как локальные элементы, так
X
ML-
attributeFormDefault
обходимо установить в
не
qualified
и локальные атрибуты объявляются квалифицированными, приведен в следующем листинге
<!-- Файл XSD_NameSpace\NameSpace_all_qualified.xsd --> <?xml version=’1.0’?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace=”http://some.com” xmlns:ntb=http://some.com elementFormDefault="qualified" attributeFormDefault="qualified"> <element name="notebook">
. . . .. . . . . . . . . . . . .
</element> </schema>
.
90
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]