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