Язык XLink (XML Linking Language) http://www.w3.org/TR/xlink/ Язык XLink • XML Linking Language (XLink) – это основанный на атрибутах синтаксис для включения в XML документы элементов, описывающих ссылки между ресурсами. • XLink ссылки могут быть: – простыми связями «Из точки А в точку В», подобно ссылкам, с которыми вы хорошо знакомы по элементу A в HTML. – двунаправленными связями между двумя документами в обоих направлениях, так что есть возможность перейти от А к В или от В к А. – много-направленными связями, задающими много различных путей между любым количеством документов. • Целью XLink ссылки не обязательно являются XMLдокументы. • Такие ссылки могут быть включены в XML-документ, содержащим связи между другими документами, которые в свою очередь могут быть, а могут и не быть XML-документами. • Можно даже добавлять такие внешние ссылки к страницам, которыми не управляются, например к домашней страничке «Нью-Йорк Таймс». • В своей основе XLink это XML-синтаксис для описания направленных графов, в которых вершинами являются документы по определенным URI, а ребрами – ссылки между документами. • Что понимается под таким графом, зависит от разработчика. Атрибуты языка XLink • XLink Attribute Reference Attribute Value xlink:actuate onLoad onRequest other none xlink:href URL Description Defines when the linked resource is read and shown xlink:show Where to open the link. Replace is default xlink:type embed new replace other none simple extended locator arc resource title none The URL to link to The type of link • Современные web-браузеры в лучшем случае поддерживают простейшие XLink, которые не более чем дублируют функциональность HTML-тега <A>. • Многие браузеры вообще не поддерживают XLink синтаксис. • Специальные приложения могут использовать ссылки для различных целей. • Так как XLink чрезвычайно мощный, то с их помощью можно сделать нечто большее, чем просто подчеркивать ссылки на webстраницах. – XLink ссылки способны описывать оглавления и указатели. – XLink ссылки могут присоединять исправления к тексту. – XLink ссылки могут указывать возможные пути в онлайновых курсах или виртуальных мирах. • Различные приложения по-разному интерпретируют разные наборы XLink. • Такжк, как ни один браузер фактически не понимает семантики всех различных приложений XLink, так ни одна программа не может обрабатывать всю совокупность XLink ссылок. Пространства имен XLink • Атрибуты XLink определены в пространстве имен http://www.w3.org/1999/xlink и обычно для этого URI используется префикс xlink. • Такое соответствие может быть задано в корневом элементе документа, либо в самом элементе, использующем XLink. • Каждый элемент XLink должен иметь атрибут xlink:type, указывающий, каким типом ссылки (или ее частью) он является. Пространства имен XLink • Атрибут xlink:type может принимать одно из шести значений: – simple (простые ссылки) ; – extended (расширенные ссылки) ; – locator (локаторы) ; – arc (ребра, дуги); – title (заголовок ссылки); – resource (ресурс) ; Простые ссылки • Простые (simple) ссылки XLink – единственные элементы, аналогичные ссылкам в HTML. • Атрибут xlink:href определяет ресурс, на который задается ссылка. Он всегда содержит URI. • Как и в HTML, могут использоваться как относительные, так и абсолютные URL. • Однако URI не обязательно является URL. Пример простой ссылки • Например, если нужно поставить ссылку на печатное издание «Удивительный Волшебник Страны Оз» (The Wonderful Wizard of Oz) с номером ISBN 0688069444, нам следует записать элемент novel следующим образом: <novel xmlns:xlink= "http://www.w3.org/1999/xlink" xlink:type = "simple" xlink:href = "urn:isbn:0688069444"> <title>Удивительный Волшебник Страны Оз</title> <author>Л. Фрэнк Баум</author> <year>1900</year> </novel> Пример • Задание простой ссылки в элементе novel <novel xmlns:xlink= "http://www.w3.org/1999/xlink" xlink:type = "simple" xlink:href = "ftp://archive.org/pub/etext/etext93/wizoz10.txt"> <title>Удивительный Волшебник Страны Оз</title> <author>Л. Фрэнк Баум</author> <year>1900</year> </novel> • Браузеры могут интерпретировать эту ссылку как им угодно. • Наиболее естественной интерпретацией является – подчеркнутая гипертекстовая ссылка, – при щелчке мыши заменяющая текущую страницу файлом, указанным в ссылке. • Возможны и другие схемы. Поведение ссылок • XLink описывает связь между двумя ресурсами, но не задает, как эта связь представляется конечному пользователю и какие действия приходится выполнять программному обеспечению при чтении документа. • Пример действий: – при щелчке по ссылке загружается текст романа с указанного URL в текущее окно, заменив таким образом содержащий ссылку документ. – открывается новое окно и в нем показать пользователю новый документ. – заказать книгу с указанным ISBN в местной библиотеке, так чтобы пользователь мог сходить туда и получить книгу. – заказать книгу в онлайновом книжном магазине. – и т.п. • Содержимое некоторых ссылок может непосредственно встраивается в ссылающийся документ, как например в этом элементе «image»: <image width="152" height="345" xlink:type="simple" xlink:href="http://www.turing.org.uk/turing/pi1/bus.jpg" /> • Браузер может найти ссылку, и сразу же загрузить и показать изображение. • Не нужно заменять изображением текущий документ или открывать новое окно, следует просто вставить изображение в текущий документ. • XLink указывает на связь между двумя документами, но за приложением остается задача прочитать XLink и решить, что означает данная связь. Рекомендации использования ссылок • Создатели страниц могут предложить браузерам, как обходиться со ссылками, с помощью атрибутов xlink:show и xlink:actuate. – атрибут xlink:show сообщает браузеру или другому приложению, что делать, когда активизируется эта связь; например, следует ли показывать содержимое ссылки в том же окне или открыть ее в новом. – атрибут xlink:actuate сообщает браузеру, когда показывать содержимое: например, следовать по ссылке сразу, как только браузер ее встретит, или дождаться непосредственного запроса от пользователя. Атрибут xlink:show • Необязательный атрибут xlink:show имеет пять возможных значений, которые предлагают, каким образом загружающее целевой ресурс приложение должно его отобразить: – new - Открывает новое окно и в нем показывает содержимое URI ссылки (конечного ресурса). – replace - Показывает конечный ресурс в текущем окне, заменяя текущий до кумент. – embed - Вставляет конечный ресурс в текущий документ на место элемента ссылки. – other - Делает нечто отличное от открытия нового окна, замены документа в существующем окне или вставки ресурса в текущий документ. В точности поведение задается другой, нестандартной разметкой, которую понимает конкретное приложение. – none - Указывает на отсутствие какого-либо поведения. Атрибут xlink:show (2) • Все эти пять значений представляют собой только рекомендации для броузеров или других приложений, использующих XLink, и могут игнорироваться. • Например, web-робот не должен открывать окна для ссылок, он может проигнорировать встраиваемые ссылки, а другие четыре типа ссылок обработать одинаково. • Некоторые браузеры с необычным графическим интерфейсом могут открывать для xlink:show="new" новую панель в существующем окне вместо создания совершенно нового окна. • Особое поведение допускается, если оно имеет смысл в контексте приложения. Атрибут xlink:actuate • Атрибут xlink:actuate имеет четыре возможных значения, которые предлагают, когда приложению, обрабатывающему документ со ссылками XLink, следовать по этим ссылкам: – onLoad - Следовать по ссылке сразу же, как только приложение ее увидит. – onRequest - Следовать по ссылке, когда этого пожелает пользователь. – other - Другая разметка в документе, не относящаяся к XLink, определяет, когда следовать по ссылке. – none - Никаких указаний на то, когда следовать по ссылке и делать ли это вообще. • Следование по ссылке может не иметь никакого разумного смысла, как в ранее приведенном примере, в котором ссылка указывает на номер ISBN, а не на URL, по которому находится книга. Атрибут xlink:actuate (2) • Все четыре значения являются только рекомендациями, и браузеры или другие приложения, использующие XLink, могут их игнорировать. – Например, «web-паук» воспользуется собственными алгоритмами, определяющими, когда следовать и когда не следовать по ссылке. • Для одинаковых атрибутов допускается различное поведение, если это имеет смысл для читающего документ приложения. Семантика ссылок • Ссылка описывает связь между двумя ресурсами. • Такие ресурсы могут не быть XML-документами, но даже если они являются таковыми, их взаимоотношения могут быть разными. – Например, ссылки могут указывать на отношения родитель/ребенок, предыдущий/следующий, работодатель/работник или покупатель/поставщик. • Элементы XLink могут иметь атрибуты, указывающие на смысл связи между ресурсами. – атрибут xlink:title - содержит небольшой объем обычного текста, описывающий удаленный ресурс, например, подсказку, возникающую при наведении указателя мыши на ссылку. – атрибут xlink:role - содержит URI, указывающий на более полное описание удаленного ресурса. Пример указания на смысл ссылки • Например, элемент novel использует атрибут xlink:title для указания того, что текст взят из проекта «Гутенберг», а xlink:role указывает на домашнюю страницу проекта «Гутенберг»: <novel xlink:type="simple" xlink:href="ftp://archive.org/pub/etext/etext93/wizoz10.txt" xlink:title= "Полный текст романа из проекта 'Гутенберг'" xlink:role="http://promo.net/pg/" > <title>Удивительный Волшебник Страны Оз</title> <author>Л. Фрэнк Баум</author> <year>1900</year> </novel> Расширенные ссылки • Расширенная ссылка описывает набор ресурсов и пути перехода между ними. • Каждый путь соединяет в точности два ресурса. • Любой отдельный ресурс может быть соединен – – – – – – с другим ресурсом, двумя другими ресурсами, ни с одним из ресурсов, со всеми ресурсами или с любым подмножеством других ресурсов набора. он даже может соединяться сам с собой. Расширенные ссылки (2) • В терминах информатики расширенная ссылка – это направленный, помеченный граф, в котором пути являются ребрами, документы – вершинами, а метками являются URI. • Для расширенных ссылок нет простых визуальные метафоры, наподобие «щелкните мышью на синем подчеркнутом тексте для перехода на новую страницу», и ни один из браузеров не поддерживает такие метафоры. • В XML расширенная ссылка обозначается элементом произвольного типа, имеющим атрибут xlink:type = “extended”. • Например: <novel xlink:type = "extended"> <title>Удивительный Волшебник Страны Оз</title> <author>Л. Фрэнк Баум</author> <year>1900</year> <edition xlink:type="locator" xlink:href="urn:isbn:0688069444" /> <edition xlink:type="locator" xlink:href="urn:isbn:0192839306" /> <edition xlink:type="locator" xlink:href="urn:isbn:0700609857" /> </novel> Виды расширенных ссылок • Большинство расширенных ссылок содержат – удаленные ресурсы, представленные элементами-локаторами, которые могут элементами быть любого типа, имеющими атрибут xlink:type = “locator”; – локальные ресурсы, представленные элементами ресурсами, которые могут элементами любого типа, имеющими атрибут xlink:type = “resource”; – ребра между ресурсами, представленные элементами любого типа, у которого имеют атрибут xlink:type = “arc” и задают связь между двумя ресурсами. Элементы-локаторы • Элемент-локатор задает удаленный ресурс, имеющий URI. • Элемент-локатор должен иметь следующие атрибуты: – атрибут xlink:type = “locator”, и – атрибут xlink:href = URI ресурса, на который он указывает. Элементы-локаторы • Например, этот элемент «novel» для романа «Удивительный Волшебник Страны Оз» содержит три элемента-локатора, идентифицирующие конкретные издания книги: <novel xlink:type = "extended"> <title>Удивительный Волшебник Страны Оз</title> <author>Л. Фрэнк Баум</author> <year>1900</year> <edition xlink:type="locator" xlink:href="urn:isbn:0688069444" /> <edition xlink:type="locator" xlink:href="urn:isbn:0192839306" /> </novel> • Локаторы могут также иметь необязательные семантические атрибуты, имеющие такое же значение, как и для простых Xlink ссылок: – атрибут xlink:title - содержит небольшой объем текста, описывающий удаленный ресурс, а – атрибут xlink:role - содержит URI, указывающий на более полное описание удаленного ресурса. Пример элементов-локаторов • В элементах «edition» с помощью этих атрибутов можно указать имя и URL издателя: <novel xlink:type = "extended"> <title>Удивительный Волшебник Страны Оз</title> <author>Л. Фрэнк Баум</author> <year>1900</year> <edition xlink:type="locator" xlink:href="urn:isbn:0688069444" xlink:title="William Morrow" xlink:role="http://www.williammorrow.com/" xlink:label="ISBN0688069444"/> <edition xlink:type="locator" xlink:href="urn:isbn:0192839306" xlink:title="Oxford University Press" xlink:role="http://www.oup-usa.org/" xlink:label="ISBN0192839306"/> </novel> Локальные ресурсы • Элементы -локаторы определяют удаленные ресурсы, не являющиеся частью документа, содержащего расширенную ссылку. • Расширенные ссылки могут также содержать локальные ресурсы, в которых хранятся данные, относящиеся к элементу расширенной ссылки. • Элементы-ресурсы определяют локальные ресурсы. • Элемент-ресурс это любой элемент, имеющий атрибут xlink:type = “resource”. • Например, расширенная ссылка «series» содержит дочерний элемент «author». • Задав для этого элемента атрибут xlink:type="resource", можно сделать его локальным ресурсом: <author xlink:type="resource">Л. Фрэнк Баум</author> • Элемент-ресурсы обычно имеет те же атрибуты, что и элемент-локатор, то есть атрибуты xlink:label, xlink:role и xlink:title. • Эти атрибуты имеют ту же семантику, что и для элементов-локаторов. – Например, метка может использоваться для соединения ребра с исходным и целевым ресурсом. Пример расширенной ссылки <book xlink:type="extended" xmlns:xlink="http://www.w3.org/1999/xlink"> <author>Л. Фрэнк Баум</author> <title>Удивительный Волшебник Страны Оз</title> <!-- элементы-локаторы --> <edition xlink:type="locator" xlink:href="urn:isbn:0192839306" xlink:title="Oxford University Press" xlink:role="http://www.oup-usa.org/" xlink:label="ISBN0192839306"/> <store xlink:type="locator" xlink:href="http://www.amazon.com/exec/obidos/ASIN/0192839306" xlink:label="buy">Amazon</store> <store xlink:type="locator" xlink:href= "http://www1.fatbrain.com/asp/bookinfo/bookinfo.asp?theisbn=0192839306" xlink:label="buy">Fatbrain</store> <store xlink:type="locator" xlink:href="http://shop.bn.com/booksearch/isbninquiry.asp?isbn=0192839306" xlink:label="buy">Barnes &amp; Noble</store> <!-- ребра --> <purchase xlink:type="arc" xlink:from="ISBN0192839306" xlink:to="buy" /> </book> Структура графа расширенной ссылки • Структура графа расширенной ссылки из примера содержащего элементы-локаторы для трех различных книжных онлайн-магазинов и одного издания книги. • Все элементы bookstore имеют метку buy, и одно ребро purchase объединяет все элементы. Ребра • Ребра (реберные элементы) это элементы произвольного типа, имеющими атрибут xlink:type = “arc”. • Ребра задают пути между ресурсами. • Каждый реберный элемент должен иметь следующие атрибуты: – атрибут xlink:from идентифицирует источник ссылки, – атрибут xlink:to – цель ссылки. • Эти атрибуты используют не URI, а имена, соответствующее значению атрибута xlink:label одного из элементов-локаторов в расширенной ссылке. • Ребро может соединять ресурс с ресурсом, ресурс с локатором, локатор с ресурсом или локатор с локатором. Для ребер не имеет значения, является ли ресурс локальным или удаленным. • Для установления связи с данным ресурсом необходим атрибут xlink:label: <author xlink:type="resource" xlink:label="baum"> Л. Фрэнк Баум </author> • Чтобы установить связи между этим ресурсом и всеми книгами, просто добавьте следующие реберные элементы: <book xlink:type="arc" xlink:from="baum" xlink:to="oz1" /> <book xlink:type="arc" xlink:from="baum" xlink:to="oz2" /> <book xlink:type="arc" xlink:from="baum" xlink:to="oz3" /> • Чтобы установить связь в противоположном направлении, просто поменяйте местами значения атрибутов xlink:from и xlink:to. Пример использования ребер <series xlink:type="extended" xmlns:xlink="http://www.w3.org/1999/xlink"> <author>Л. Фрэнк Баум</author> <!-- элементы-локаторы --> <novel xlink:type="locator" xlink:label="oz1" xlink:href="ftp://archive.org/pub/etext/etext93/wizoz10.txt"> <title>Удивительный Волшебник Страны Оз</title> <year>1900</year> </novel> <novel xlink:type="locator" xlink:label="oz2” xlink:href="ftp://archive.org/pub/etext/etext93/ozland10.txt"> <title>Волшебная Страна Оз</title> <year>1904</year> </novel> <novel xlink:type="locator" xlink:label="oz3" xlink:href="ftp://archive.org/pub/etext/etext93/wizoz10.txt"> <title>Изумрудный город Страны Оз</title> <year>1907</year> </novel> <!-- ребра --> <next xlink:type="arc" xlink:from="oz1" xlink:to="oz2" /> <next xlink:type="arc" xlink:from="oz2" xlink:to="oz3" /> <previous xlink:type="arc" xlink:from="oz2" xlink:to="oz1" /> <previous xlink:type="arc" xlink:from="oz3" xlink:to="oz2" /> </series> Графическое представление расширенных ссылок • Ресурсы показаны в виде книг, а ребра – в виде стрелок. • Эту расширенную ссылку можно интерпретировать как порядок, в котором следует печатать эти документы, не более. Все детали интерпретации остаются за приложением. Использование несколько ребер в одном реберном элементе • В одном реберном элементе можно определить несколько ребер. • Если несколько элементов имеют одну и ту же метку, тогда реберный элемент, использующий эту метку в атрибуте xlink:to или xlink:from, определяет ребра между всеми ресурсами, имеющими эту метку. – Если реберный элемент не имеет атрибута xlink:to, он рассматривает в качестве источников все ресурсы расширенной ссылки. – Если реберный элемент не имеет атрибута xlink:from, все ресурсы расширенной ссылки рассматриваются как цели. • Однако явное или неявное определение ребра между двумя одинаковыми ресурсами в более чем одном реберном элементе является ошибкой. • Если расширенная ссылка содержит N ресурсов и реберный элемент, такой как <edition xlink:type="arc"/>, в котором нет ни атрибута xlink:to, ни xlink:from, она не может содержать других реберных элементов, так как этот единственный элемент объявляет все N2 возможных ребер между ресурсами расширенной ссылки. Заголовки ребер • Все реберные элементы, как и другие элементы XLink, могут иметь атрибут xlink:title, содержащий небольшой текст, описывающий ребро и предназначенный непосредственно для чтения. • Можно задать следующие заголовки для реберных элементов из предыдущего примера: <next xlink:type="arc" xlink:from="oz1" xlink:to="oz2" xlink:title="Next" /> <next xlink:type="arc" xlink:from="oz2" xlink:to="oz3” xlink:title="Next" /> <previous xlink:type="arc" xlink:from="oz2" xlink:to="oz1” xlink:title="Previous" /> <previous xlink:type="arc" xlink:from="oz3" xlink:to="oz2” xlink:title="Previous" /> • При обработке расширенной ссылки браузер может – показать пользователям заголовки как оглавление ссылки, чтобы они могли выбрать, по какому ребру они хотят перейти с текущей позиции. – или вывести оглавление во всплывающем меню, когда пользователь заходит на одну из указанных страниц. • XLink не требует и не предлагает какого-либо конкретного интерфейса для ребер или их заголовков. Роли ребер • Реберные элементы не могут иметь атрибуты xlink:role. Однако существует атрибут xlink:arcrole, который должен содержать URI, указывающий на описание ребра. • Более точно, такой URI должен указывать на ресурс, в котором определяется, какое отношение описывает данное ребро: например, родитель-ребенок или работодатель-работник. • Однако фактически не существует способа проверить эту информацию, кроме того как убедиться, что xlink:arcrole содержит корректный URI, и даже этот URI не является обязательным. Пример задания роли ребер • Например к ребру purchase можно добавить атрибут xlink:arcrole, указывающий на относительный URL «purchase_details.txt»: <purchase xlink:type="arc" xlink:from="ISBN0192839306" xlink:to="buy" xlink:arcrole="purchase_details.txt" /> • Файл purchase_details.txt может в этом случае содержать текст, на пример «продается в». Этот текст говорит о том, что источник ссылки можно купить в магазине, указанном в цели ссылки. • Однако хотя предлагается именно такое применение этого атрибута, процессоры XLink не навязывают его, и от них нельзя этого требовать, так как для этого XLink процессоры должны были бы понимать то, что они читают. • Атрибут xlink:arcrole не является обязательным. Не обязательно включать его в реберные элементы, а XLink процессоры не обязаны производить с ним какие-либо операции, даже если он используется. Элементы-заголовки • Элементы расширенных ссылок, элементы-локаторы, реберные элементы и элементы ресурсов все могут иметь атрибуты xlink:title, предоставляющие короткие текстовые аннотации для идентификации ссылки. • Однако этих атрибутов не всегда бывает достаточно. В документе, являющемся большой расширенной ссылкой, нужно отметить заголовки средствами XHTML или другого словаря. • То есть вместо атрибута (или в дополнение к нему) заголовок может присутствовать в виде дочернего элемента-заголовка, элемента, у которого атрибут xlink:type = “title”. • Внутри элемента-заголовка можно использовать любую выбранную разметку, если она является корректным XML. • Приложение может по разному интерпретировать эту разметку. Пример использования элемента типа title • • Предположим, что вы хотите задать полное описание всех изданий «Удивительного Волшебника Страны Оз», а не просто перечислить издателей. В этом случае добавьте к элементу «edition» элемент-заголовок, содержащий любую подходящую разметку, например: <edition xlink:type="locator" xlink:href="urn:isbn:0700609857" xlink:title="University Press of Kansas" xlink:role="http://www.kansaspress.ku.edu/" xlink:label="ISBN0700609857"> <publisher_info xlink:type="title"> <ul> <li>Юбилейное издание</li> <li>Иллюстрации Майкла МакКерди</li> <li>Предисловие Рэя Бредбери</li> <li>1999</li> <li>216 страниц</li> <li>Цена: $24.95</li> </ul> </publisher_info> </edition> Входящие и исходящие ссылки • Одной из наиболее революционных возможностей XLink является его способность определять связи между внешними документами. • В частности, вышеприведенный пример использования ребер это расширенная ссылка, описывающая и связывающая три документа, к которым ни один из авторов этой книги не имеет отношения. • Ссылки между полностью удаленными ресурсами называются внешними ссылками. • Внешняя ссылка создается, когда атрибуты xlink:from и xlink:to реберного элемента оба содержат метки элементов-локаторов. • Ссылки из удаленного ресурса на локальный ресурс называются входящими ссылками, когда атрибут xlink:from реберного элемента содержит метку элемента-локатора, а атрибут xlink:to – метку элементаресурса. • Ссылки из локального ресурса на удаленный называются исходящими ссылками, когда атрибут xlink:from реберного элемента содержит метку элемента-ресурса, а атрибут xlink:to – метку элемента-локатора. • Простые ссылки также являются исходящими. Базы ссылок • XML-документ, содержащий входящие или внешние ссылки, называется базой ссылок. • База ссылок устанавливает связи с документами, отличными от самой базы, включая документы, которые не принадлежат автору базы ссылок и которые он не может контролировать. • Как браузер (или другое приложение) будет загружать базу ссылок и как он будет обрабатывать ссылки в ней – все еще открытый вопрос. • Этот процесс, видимо, будет включать посещение web-сайта, предоставляющего базу ссылок. • Когда браузер видит расширенную ссылку, пытающуюся установить связь с внешним web-сайтом, он должен спросить пользователей, желают ли они принять предлагаемые ссылки. • Он может даже использовать атрибуты xlink:role и xlink:title для того, чтобы помочь пользователям принять это решение. • Как только браузер загрузит базу ссылок и перейдет к странице, обозначенной как начальный ресурс хотя бы в одной из ссылок, он должен сообщить пользователям о существующей ссылке и дать возможность ею воспользоваться. • Пользовательский интерфейс для такой операции еще предстоит разработать. Возможно, это будет всплывающее окно, показывающее внешние ссылки, связанные с этой страницей. Или ссылки будут просто вставлены на страницу, но подчеркнуты другим цветом. Пользователи смогут работать с этими ссылками точно так же, как с обычными ссылками HTML. • Если будет принята эта схема, она будет полезна для тех случаев, когда начальный ресурс ссылки не является полноценным документом, а лишь частью документа, скажем, отдельным абзацем, именем человека или заголовком книги. • Можно присоединить к начальному ресурсу ссылки, задающему URI, указатель XPointer, который будет служить для выбора определенной части или местоположения в начальном документе. DTD для XLink • Для того чтобы документ, содержащий Xlink, был действительным, все атрибуты XLink, как и любые другие атрибуты, должны быть объявлены в DTD. • Некоторые атрибуты обычно объявляются как #FIXED, и потому не должны явно указываться в самом документе. Например, следующий фрагмент DTD описывает элемент novel, приведенный выше: <!ELEMENT novel (title, author, year)> <!ATTLIST novel xmlns:xlink CDATA #FIXED 'http://www.w3.org/1999/xlink' xlink:type (simple) #FIXED 'simple' xlink:href CDATA #REQUIRED> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT year (#PCDATA)> • Т.к. значения фиксированных атрибутов xmlns:xlink и xlink:type заданы этим DTD, для того чтобы элемент novel стал полно ценной простой ссылкой XLink, он должен иметь только атрибут xlink:href: <novel xlink:href = "urn:isbn:0688069444"> <title>Удивительный Волшебник Страны Оз</title> <author>Л. Фрэнк Баум</author> <year>1900</year> </novel> • • • В документах, содержащих много элементов XLink, общие атрибуты часто задаются с помощью параметрических сущностей. Предположим, что элементы novel, anthology и manual являются простыми элементами XLink. Их XLink атрибуты могут объявляться в DTD следующим образом: <!ENTITY % simplelink "xlink:type (simple) #FIXED 'simple' xlink:href CDATA #REQUIRED xmlns:xlink CDATA #FIXED 'http://www.w3.org/1999/xlink' xlink:role NMTOKEN #IMPLIED xlink:title CDATA #IMPLIED xlink:actuate (onRequest | onLoad | other | none) 'onRequest' xlink:show (new | replace | embed | other | none) 'new'" > <!ATTLIST anthology %simplelink;> <!ATTLIST novel %simplelink;> <!ATTLIST nonfiction %simplelink;> Аналогичные приемы можно применять и к объявлениям атрибутов расширенных ссылок XLink.