Теория и практика построения баз данных (1088289), страница 115
Текст из файла (страница 115)
Далее идет описание содержимого документа сцз(ошег. В нем есть две группы: паве и аббгезв Группа паше состоит нз двух злементов— 1!гзтпап~е и (аз(пампе. Эти элементы определены как ФРСОАТА, то есть строки 532 Глава 14. Сети, многоуровневые архитектуры и ХМС ХМŠ— расширяемый язык разметки 533 символьных данных.
Ниже описывается элемент аддгеи, состоящий из четырех элементов: Игеет, сну, агате и з!р, Каждый из этих элементов также определен как символьные данные. Знак + после имени элемента зтгее1 указывает на то, что этот элемент обязан иметь минимум одно значение, но может иметь несколько значений. Экземпляр данных типа свяошег, показанный в листинге 14.1, соответствует РТР, поэтому данный документ называет ХМЕ-докумеатоль доиусгиимыл~ по тики (Еуре-иа)!й ХМ 1. досвшепт). Если бы он не соответствовал РТР, он назывался бы недопустимым ио типу документом (пос-суре га)!г) ХМ1. оосцтепг). Недопустимые по типу документы могут, тем не менее, быть абсолютно правильными с точки зрения ХМЕе они просто не являются допустимыми экземплярами своего типа.
Например, если бы документ в листинге 14.1 содержал два элемента сйу, он был бы по-прежнему правильным с точки зрения ХМЕ, но недопустимым по типу. Хотя РТР почти всегда желательны, они не являются обязательными в ХМ1.- документах. Документ, не имеющий РТР, по определению является недопустимым по типу, поскольку не существует типа, относительно которого можно было бы проверить его допустимость. Раздел РТР не обязательно должен содержаться в сал1ом документе. В листинге 14.2 показан документ типа свз1ошег, в котором РТР загружается с ПВЛ в(тр://УУУУУУ.зошеавеге.сею/омэ/свзтоюег.втв.
преимущество внешнего хранения РТР в том, что можно проверять допустимость множества документов относительно одного и того же РТР. Листинг 14.2. ХМЕ-документ с внешним 17ТО «00СТТРЕ сизгошег 5У5ТЕМ 'Ъттр://>п<н, зошенвеге, сош/о(йз/сизссеег отй> <свзтошег> <паше> <Т!гз1паше>М!сПе11е</Г!гзспаше> <1азтпзше>Согге111<лазтпаше> </ваше> <эоогезз> <зсгеет 1824 Еазс 7(В Ауепве</зсгеес> <зтгеет>5щ те 700</э(геет> <с!Гу>Мешрмэ</с!ту> <5(асе>ТМ</зтаГе> <г! р>32123- 7788</ ю р> </дооге55> </свзтошег> Создатель РТР может определять любые элементы по своему желанию. Следовательно, ХМЕ-документы могут расширяться, но расширяться стандартизированным и контролируемым способом.
Как вы увидите позже, РТР являет собой довольно удобный способ описания представлений баз данных. Материализация ХМ~ -документов В ХМЕ-документе в листинге 14.1 определены структура и содержимое. Однако ничто в документе не указывает на то, как его следует материализовать.
Разработчики ХМ Е обеспечили четкое разделение структуры, содержимого и формата. Для материализации ХМЕ-документа существует два средства: каскадные таблицы стилей и ХЗЕТ, Расслютрим эти средства. Материализация ХМ1 посредством каскадных таблиц стилей Каскадные таблицы стилей, или С55, рассматривались нами в разделе, посвященном РНТМЕ. В ХМЕ-документах они используются аналогичным образом. То есть для тегов определяются стили и применяются к ним в каскадном порядке.
Рассмотрим следу!ощее определение стиля для документа в листинге 14.1: <5ТУЕЕ ТУРЕ- пехг/с1азз "> <! сизтошег ((опт-Таш!1у:Евс!оа: (опт-зту1е.погша1; со1ог:01асП) паше ( Тога-Таш! 1у: Еас1 за, Гонт-зту1е: погша1; со1ог: 0гееп) 1азтваше (топе-таш!1у.сис!са; Тост-зьу1е погша1; со1ог гео) — > </5ТУЕЕ> Согласно этому определению, цветом по умолчанию для отображения документа типа сцзтошег является черный.
Но для элементов типа паве цвет изменен с черного на зеленый, а для элементов типа 1аппаше — с зеленого на красный. Таким образом, стили располагаются друг над другом каскадом. На сегодняшний день не суп!ествует стандартного соглашения относительно того, где должны находиться такие определения стилей. Их можно поместить в документ, а можно вьшести во внешний файл, оставив в документе ссылку на этот файл.
В различных продуктах они реализуются по-разному. Материализация ХМ) посредством Х81 Т Второй способ материализации ХМЕ предполагает использование ХЯ.Т (еХтепз!Ые Зту!е Еапйцайе Еог Тгапз(огшаг)опз, расширяемый язык стилей для преобразований). ХЗЕТ вЂ” это мощный и надежный язык преобразований. Его можно использовать для материализации ХМ1.-документов в РНТМЕ. или НТМ1., а также для множества других целей, Одно из популярных применений для ХАЕТ вЂ” трансформация ХМ!--документа в одном формате в ХМРдокумент в другом формате.
Например, с помощью ХВЕТ компания может преобразовать накладную, представля!ошую собой ХМЕ-документ в некотором внутреннем формате, в эквявалентный ХМЕ-документ в формате клиента. Есть много возможностей и функций ХЗЕТ, которые мы не будем здесь описывать. Информацию о них вы можете найти на сайте уууууулиЗ.ога. Язык ХЯ.Т является, во-первых, декларативным, а во-вторых, преобразовательным, Декларативным он является потому, что вместо указания процедуры <!ЕЕЕМЕИТ ю р (ФРСОАТА)> ]> Рис.
14.7. Материализация в браузере </01У> 534 Глава 14. Сети, многоуровневые архитектуры и ХМ1. материализации элементов докуаяента вы создаете набор правил, которые определяют, как будет материализоваться документ. Преобразовательным же он является потому, что с его помощью документ, задаваемый на входе, преобразуется в другой документ. В листинге 14.3 показан документ типа спзтопаег1!5С с данными о двух клиентах.
Он имеет Е)ТЕ) и является допустимым по типу. Ойератор. следующий за Е)ТТ), вызывает таблицу стилей ХБЕТ под названием Ецзтолае/Е!5С.х51, которая показана в листинге 14А. Результат обработки этого ХМЕ-документа показан в листинге 14.5 и иа рпс. 14.7. Листинг 14.3. ХМЕ-документ сцзСопае/1!51 <?ХВ1 ЧЕГзаепер1.0'?> <!ООСТТРЕ сцзсовег!а5С Е <)ЕЕЕМЕИТ сцзтовег1!5С (спзтовег+)> <!ЕСЕМЕЙТ сц5Совег /лаве. аббге55) > <!ЕЕЕМЕИТ лаве (ТтгзСпаве 1а5Славе)> <! ЕЕЕМЕИТ П гзСлаве (ФРЕОАТА)> <! ЕЕЕМЕЙТ 1азспаве (УРСОАТА)> <!ЕЕЕМЕИТ аббге55 (5СгееС+.
с!Су, 5СаСе, т!р)> <!ЕЕЕМЕИТ 5СгееС (//РСОАТА)> <!ЕЕЕМЕИТ с)Су 14РСОАТА)> <!ЕЕЕМЕИТ 5Сасе ())РСОАТЯ)> ХМŠ— расширяемый язык разметки 535 <?ХВ1:5СУ1Е5ЬЕЕС СУРЕ-"СЕХС/Х51" ЬГЕЕ="ОВ5СОВЕГЕ!5С.Х51"?> <спзтовег1!5С> <со5СОлег> <паве> <Т!гзспаве>М!сйе11е</Т!гзтпагпе> <1азспаве>Согге11!</!азтпаве> </паве> <аебге55> <5СгееС>1824 Еазс 7СЬ Ачепое</5СгееС> <5СгееС>5щ Се 700</5СгееС> <стСу>МеврМ5</с!Су> <5Сате>ТЙ</5Сасе> <г!р>32123-7788</г!р> </аббге55> </сцзсовег> <созсовег> <паве> <т!гзспаве>еупда</гагзспаве> <!аэспаве>3аупез</Та5Спаве> </паве> <аббге55> <5СгееС>2 Е1в БСгееС</5СгееС> <с)Су>Иеи Чогк Е!Су</с!Су> <5Сасе>ЙТ</5Сате> <т!р>02123-7445</г!р> </аббге55> </спзтовег> </сцэСовег1!5С> Листинг 14.4.
Пример ХЗЕ-документа <?хв1 чег51ол="1.0"?> «НТМЕ хв1лз:х51='ЬССр://ьчм.я3.ого/ТИ/ИО-х51"> <800! БТУЕЕе"топС-Тав!!У:Аг!а!. Ье1чеС!са. 5ап5-зег!Т Торт-5!ге: 14РС: ЬасЕОгоцпб-со!Ьг:Сеа!"> <Х51:Тог-еася зе1есС="сцзтовег1)5С/сцзтовег"> <О!у БТТЕЕ="ЬасЕОгоилб-со!ос:растр!е; со!оггиЬ!Се: рабб!п0:4рх"> <5РАИ БТЧЕЕ="Толс-иеаОЬС:Ьо14; со!Ьг гип!Се"> <х51;ча1ие-ог зе1есС="лаве/!азславе"/></5РАИ> - <х51: ча!це-оТ зе1есС="паве/Г! гзтпаве"/> <х51:Тог-еасп зе1есС-"аббге55/5СгееС"> <О!Ч БТУЕЕ "ваг0!и-!еТС.20Рх; ваг0!и-ЬЬССов:1ев: ТопС-5!ге: 10РС; лродозжеоиеоо 536 Глава 14. Сети, многоуровневые архитектуры и ХМ ХМŠ— расширяемый язык разметки 537 Листинг 14.4 (продолжение) [опт-э(у1е:Ьо)Ь: со1ог:Ыие"> <хз1:ча)ие-оТ зе1есг="попе()"/> <0[Ч> <хэ) гйог-еасп> <01Ч 5ТУСЕ="вагд1 и- 1еТ(: 20рх; вагд|п-Ьоссов: 1ев; Топ(-эоле: 12рс; Гопс-эсу1е:Ьо)сп> хз):ча 1ие-о/ эе1есг="аг[8гезз/с1!у"/>, <ха 1:ча1ие-ог эе1есс="аесгеээ/г1р"/> </0[У> <01Ч 5ТУ(.Е="шагд1п-)е/1:20рх: ва<д1п-Ьогтов:)ев; Топе-а(ге:14рс; со1ог: ген "> <хз):ча1ие-оТ эе1есс="аоогеэз/х1р"/> </01Ч> <хз):Тог-еэсп> </босу </НТМЕ> Листинг 14.5.
Материализация посредством ХЯЕТ <НТМС хв)пз;хэ)="Ьггр://мм.и3.огд/Тн/кО-хз)"> <800у 5ТЧСЕ='Топс-Таш!)у;Аг1а), Ье1чег(са, запз-зег1/; Топ[-э)де, 14рс; Ьасвдгоипи-со)ог: (еа)"> <0!У 5ТЧСЕ="ЬасЧдгоип[[-со)ог:Ьгоип, со1ог гип11е; раег[1пд:4рх"> <5РАМ 5ТУСЕ="Топе-ие!дП1:Ьо!О; со1ог: мм Ге">Согге111</5РАМ> - М1спе11е </01Ч> <01Ч 5ТЧЕЕ-"вагд1п-!ей!:20рх; шагало-Ьоссов:)ев; (оп(-э!ее: 1Орг; /опт-згу1е; Ьо)О: со1ог:уе)1ои"> 1824 Еаэс 7(п Ачепие </О!Ч> <О!Ч 5ТУЕЕ="вагд!и-)е[1:20рх; шагд1п-Ьотсов; 1ев: Топ[-юге: 10рс; Гопс-эсу!е Ьо)О; со!ог:уе)1ои" 5ЫГе 700 </01Ч> <0[Ч 5ТЧСЕ="пвгд1п-)еТГ:20рх; вагд1п-Ьоссов: 1ев; Топ(-этде: 12рс Топ[-эсу)е: Ьо)г["> мавр(м5.
[Й </О!У <О!Ч 5ТЧСЕ="вагд1п-1е(1:20рх шагд1п-Ьо1(ов: 1ев; Топс-а~ее: 14рс: со)ог;Ыие"> 32123-7788 </01Ч> <0[Ч 5ТУСЕ="Ьасудгоипо-со1ог: Ьгоип- со)остин|се: раОО1пд:4рх"> <5РАЙ 5ТУЕЕ="Топй-ие1дЬГ:Ьо)о со)ог:иП1(е" 3аупеэ</5РАМ> - Супса </0[Ч> ИУ 5ТУСЕчви гд(п-)е/1;20рх. шагд и-ЬоСЬов: )е : Топт- (хе: рйрс: То 1-э1у)е: Ьо)г[; со1ог:уе1)ои"> 2 Е1в 51геес </01У> <0[Ч 5ТУЕЕ-"вагд1п-1ег(:20рх; ва 01П-Ьо1[ов:1ев; Топг-юге: 12рс /опт-зсу1е: Ьо)сГ > Меи Уогх Сму. Ну </0[Ч> <01Ч 5ТЧ!Е-"вагд(п-1е[1:20рх.