plik


ÿþRozdziaB 1 f& Pierwsze kroki (NagBówek strony) RozdziaB 10. XLinks i XPointers Ten rozdziaB po[wicimy w caBo[ci tworzeniu poBczeD midzy dokumentami i ich cz[ciami  specyfikacjom XLink i XPointer. W HTML mamy do dyspozycji hiperBcza, jednak autorzy XML poszli znacznie dalej tworzc specyfikacje XLink, XPointer, XPath i XBase. Niestety, omawiane tematy to kolejne obszary, w których W3C znacznie wyprzedza caB reszt [wiata  jeszcze nie istniej implementacje tych technologii. Microsoft, który ju| nieraz po[liznB si implementujc standardy XML, które pózniej si zmieniaBy, dopiero zaczyna w Internet Explorerze XLinks i XPointers obsBugiwa. W przyszBo[ci niewtpliwie pojawi si peBne implementacje, ale na razie omawiane tu tematy s [ci[le teoretyczne. W skrócie: powizanie XLinks i XPointers Acza XLinks opisuj sposób Bczenia jednego dokumentu z innym. XPointers to wskazniki okre[lajce poBo|enie wybranego fragmentu w dokumencie, korzystaj przy tym z rekomendacji XPath. Teraz w skrócie omówimy caBo[ Bczy XML. W chwili pisania specyfikacja XLink ma status proponowanej rekomendacji i datowana jest na 20 grudnia 2000 roku. Najnowsz wersj tej rekomendacji znajdziesz pod adresem www.w3.org/TR/xlink. XLinks u|ywa si do Bczenia jednego dokumentu z innym, oto co W3C mówi we wstpie: W tej specyfikacji opisano Jzyk Bczy XML (XML Linking Language, XLink), która umo|liwia wstawianie do dokumentów XML elementów tworzcych i opisujcych Bcza midzy zasobami. Za pomoc skBadni XML mo|na opisa zarówno proste Bcza podobne do hiperBczy HTML, jak i Bcza znacznie bardziej wyrafinowane. Oto przykBad, który ma Ci nieco przybli|y Bcza XLinks. W przeciwieDstwie do HTML, rol Bcza peBni mo|e dowolny element  jego rodzaj okre[la si podajc odpowiedni warto[ atrybutu xlink:type: <PRZEGLD_FILMOWY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="new" xlink:href="http://www.starpowdermovies.com/reviews.xml"> Pan Blandings buduje dom swoich marzeD D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 1 2 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) </PRZEGLD_FILMOWY> W tym wypadku utworzyli[my proste Bcze dziaBajce podobnie jak hiperBcze HTML  decyduje o tym atrybut xlink:type o warto[ci simple. Ustawili[my te| atrybut xlink:show na new, co powoduje otwarcie Bcza w nowym oknie. Atrybut xlink:href zawiera adres URI nowego dokumentu (adres ten mo|e by bardzo ogólny, niekoniecznie musi mie posta u|ywanych dotd adresów URL). Zaczli[my od Bcza prostego, aby na pocztek pokaza co[ znajomego. Oprócz prostych Bczy jednokierunkowych  jak to pokazane tutaj  mo|na tworzy te| Bcza dwukierunkowe, a tak|e Bcza midzy wieloma dokumentami, a nawet zbiorami dokumentów. Mo|na te| Bcza zapisywa w bazach danych Bczy nazywanych bazami Bczy. XLinks umo|liwiaj Bczenie konkretnego dokumentu, ale czsto taka dokBadno[ wyboru nie jest wystarczajca. W tym wypadku w sukurs przychodz XPointers umo|liwiajce wskazanie miejsca w dokumencie nawet bez modyfikowania tego dokumentu w celu wstawiania tam jakiegokolwiek znacznika. W celu wskazania jakiego[ miejsca w dokumencie XPointers korzystaj ze specyfikacji XPath. XPath pozwala wskaza wzeB dokumentu XML za pomoc wyra|eD takiego typu, jak pokazane ni|ej: /child::*[position()=126]/child::*[position()=first()] Obecnie XPointers maj status rekomendacji proponowanej i opublikowane zostaBy 8 stycznia 2001 roku. Najnowsz wersj specyfikacji XPointer znajdziesz pod adresem www.w3.org/TR/xptr. Oto jak W3C omawia XPointers: W specyfikacji tej zdefiniowano Jzyk wskazników XML (XML Pointer Language, XPointer) u|ywany jako podstawa identyfikatorów fragmentów zasobów dostpnych przez URI, takich jak text/xml, application/xml, text/xml-external-parsed-entity czy application/xml-external-parsed-entity. XPointer oparty jest na Jzyku [cie|ek XML (XML Path Language, XPath) i obsBuguje adresowanie poszczególnych cz[ci dokumentów XML. Umo|liwia badanie struktury dokumentów hierarchicznych i wybieranie poszczególnych cz[ci na podstawie ró|nych cech, takich jak typy elementów, warto[ci atrybutów, tre[ tekstowa czy poBo|enie wzgldne. Wprawdzie XPointers bazuj na XPath, ale rozszerzaj skBadni XPath, co zostanie w tym rozdziale omówione. Aby doda wskaznik XPointer do adresu URI, wystarczy za tym adresem umie[ci znak # (u|ywany w HTML do zakBadek) i dopisa xpointer() w nawiasach podajc wyra|enie XPath. Oto przykBad: <PRZEGLD_FILMOWY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="new" xlink:href="http://www.starpowdermovies.com/reviews.xml# xpointer(/child::*[position()=126]/child::*[position()=first()])"> Pan Blandings buduje dom swoich marzeD </PRZEGLD_FILMOWY> Tyle tytuBem wstpu do XLinks i XPointers. Obie specyfikacje omówimy dalej w tym rozdziale, omówimy te| XBase oraz krótko XPath. 2 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) Zmienno[ XML Trzeba zdawa sobie spraw z tego, |e specyfikacje XLink, XPointer i XBase, podobnie jak inne fragmenty XML nie majce jeszcze statusu rekomendacji, mog si zmienia. Opisywane specyfikacje s ju| bliskie stania si rekomendacjami, wic zmiany wzgldem opisu zamieszczonego w tej ksi|ce nie powinny by zbyt du|e. Trzeba te| pamita, |e kiedy pojawi si implementacje tych specyfikacji, to i one mog si nieco ró|ni od propozycji W3C. Wszystko o Bczach XLinks HiperBcza s bardzo wa|n cz[ci HTML, tworzy si je za pomoc elementu A: <A HREF="http://www.starpowdermovies.com/reviews.html#blandings"> Pan Blandings buduje dom swoich marzeD </A> HiperBcza w dokumencie HTML maj albo posta tekstu  zwykle podkre[lonego i w innym kolorze  albo posta obrazka. Kliknite hiperBcze otwiera nowy dokument lub wybrane jego miejsce w ramce istniejcej lub w nowym oknie, mo|e te| uruchomi program JavaScript. W tabeli 10.1 zestawiono oficjalnie obowizujce atrybuty elementu A z HTML: Tabela 10.1. Atrybuty elementu A z HTML Atrybut Opis ACCESSKEY Przypisuje klawisz skrótu do hiperBcza. CHARSET Okre[la kodowanie lokalizacji docelowej hiperBcza. Ustawia si zgodnie z zestawami RFC 2045 (warto[ domy[lna to ISO-8859-1). CLASS Okre[la klas stylu dla elementu. COORDS Okre[la wspóBrzdne (w pikselach) dotyczce atrybutu SHAPE definiujcego obszar na mapie obszarów. DIR Okre[la kierunek neutralnego kierunkowo tekstu. Ustawienie LTR oznacza tekst od lewej do prawej, RTL tekst pisany od prawej do lewej. HREF Okre[la docelowy adres URL hiperBcza. U|y mo|na albo tego atrybutu, albo atrybutu NAME. HREFLANG Okre[la jzyk bazowy miejsca docelowego Bcza. Ustawiane zgodnie z warto[ciami RFC 1766. ID Okre[la niepowtarzalny identyfikator znacznika. LANG SBu|y jako jzyk bazowy znacznika. NAME Okre[la nazw zakBadki, której mo|na u|y do odwoBywania si do fragmentów docelowego dokumentu. U|y mo|na albo tego atrybutu, albo atrybutu HREF. D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 3 4 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) REL Okre[la zwizek opisany przez hiperBcze. REV W zasadzie ma takie samo zdarzenie, jak REL, ale skBadnia dziaBa w kierunku odwrotnym. SHAPE Okre[la typ obszaru definiowanego w znaczniku AREA. STYLE Styl typu inline wskazujcy sposób prezentacji elementu. TABINDEX Ustawia kolejno[ Bczy na stronie w przypadku poruszania si klawiszem tabulatora. TARGET Okre[la nazw ramki, z któr ma by zwizany adres HREF. TITLE Informacja o tytule elementu. TYPE Typ MIME miejsca docelowego wskazanego w atrybucie HREF. Zestawione atrybuty umo|liwiaj realizacj ró|nych funkcji, ale zawsze konieczne jest u|ycie elementu A, a uzyskane Bcze ma typ najprostszy z mo|liwych: po klikniciu powoduje przej[cie do nowego dokumentu lub do innej lokalizacji dokumentu bie|cego. Zwizki midzy dokumentami mog by znacznie bardziej zBo|one. Mog na przykBad by potrzebne nastpujce funkcje: " Ustawienie Bcza wskazujcego 10 serwerów zapasowych i umo|liwienie przegldarce wybranie najbli|szego z nich. " PoBczenie caBego zestawu dokumentów z uwzgldnieniem podzbiorów, które bd przeszukiwane, kiedy potrzebny jest jaki[ zasób. " Okre[lenie zestawu [cie|ek umo|liwiajcych nawigacj tylko midzy zestawem wybranych dokumentów w ró|nych kierunkach. S jeszcze inne mo|liwo[ci, a XLinks umo|liwiaj ich realizacj. XLinks nie ograniczaj zestawu u|ywanych elementów do jednego A, a to oznacza, |e Bcza XML nie zawsze musz mie posta podkre[lonego, niebieskiego tekstu (mo|na je oczywi[cie w dowolny sposób wyró|ni). Mo|liwo[ przetworzenia na Bcze dowolnego elementu jest doskonaB wiadomo[ci, gdy| mo|na stworzy elementy zawsze Bczce si z okre[lonymi zasobami. U|ytkownik mo|e nawet oczekiwa, |e fragment sformatowany elementem CYTAT bdzie powizany ze zródBem tego cytatu. XLinks tworzy si stosujc atrybuty, a nie elementy. W szczególno[ci atrybutu xlink:type u|ywa si do utworzenia Bcza  mo|na mu nada jedn z warto[ci: simple, extended, locator, arc, resource, title lub none. Tabela 10.2. Atrybuty Bczy XLinks Atrybut Opis xlink:actuate Atrybut ten okre[la, kiedy nastpuje przej[cie przez Bcze. Mo|e mie warto[ci onLoad, onRequest lub undefined, a tak|e inne rozpoznawane przez u|ywane oprogramowanie. 4 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) xlink:from Atrybut okre[la zasób pocztkowy Bcza. xlink:href Jest to atrybut lokalizujcy, który zawiera dane umo|liwiajce aplikacji obsBugujcej Bcza odnalezienie zasobu docelowego. xlink:role Tego atrybutu u|ywa si do opisania funkcji docelowego zasobu w sposób czytelny dla komputera, a w przypadku elementów typu rozszerzonego (extended) sBu|y jako etykieta kategorii zasobu dla reguB przej[cia po elementach Bukowych. Atrybut ten mo|e by przydatny dla wyszukiwarek. xlink:show Tego atrybutu u|ywa si do wskazania, jak ma by wy[wietlany zasób docelowy. Aplikacja XLinks musi rozpoznawa nastpujce warto[ci: new (otwiera si nowy obszar wy[wietlania), replace (dane aktualnie wy[wietlane s zamieniane na doBczone), embed (nowy zasób jest wBczany do obecnie pokazywanego) oraz undefined (oprogramowanie decyduje o sposobie wy[wietlenia). xlink:title Atrybut ten opisuje funkcj zasobu Bcza w sposób zrozumiaBy dla ludzi. xlink:to Definiuje miejsce docelowe lub zasoby koDcowe. xlink:type Atrybut ten okre[la typ Bcza XLinks, mo|e mie jedn z warto[ci: simple, extended, locator, arc, resource, title, none. Ich znaczenie opiszemy dalej. Za pomoc atrybutów XLinks mo|na zasymulowa ich dziaBanie w przegldarkach takich jak Internet Explorer. Jako przykBad utworzymy proste Bcze. Internet Explorer obsBuguje atrybut onClick elementów XML. Dodamy do tego atrybutu funkcj JavaScriptu powodujc zmian bie|cego adresu URI. W tym celu zastosujemy obiekt location: <?xml version="1.0" encoding="iso-8859-2"?> <?xml-stylesheet type="text/css" href="xlink_example.css"?> <!DOCTYPE html SYSTEM "xlink_example.dtd"> <DOKUMENT> <P> Zaczynamy sprawdzanie? kliknij <LINK xml:type="simple" href="http://www.w3c.org" onClick="location.href='http://www.w3c.org'">W3C</LINK> </P> </DOKUMENT> DoBczymy jeszcze arkusz stylów xlink_example.css, aby nasze Bcze wygldaBo tak, jak zwykBe hiperBcza HTML. Mo|emy nawet spowodowa, |e kursor myszki w Internet Explorerze zmieni swój ksztaBt na dBoD, jak to ma miejsce przy zwykBych Bczach: LINK {color: #0000FF; text-decoration: underline; cursor: hand} Wyniki pokazano na rysunku 15.1: Bcze proste XLinks zachowuje si podobnie, jak zwykBe hiperBcze HTML (oczywi[cie oznacza to niewykorzystanie mo|liwo[ci XLinks). Kliknicie na to Bcze spowoduje, |e Internet Explorer przejdzie do nowego dokumentu. D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 5 6 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) Rysunek 10.1. Symulowanie Bcza prostego XLinks w Internet Explorerze Powstaje zatem pytanie, kiedy i których atrybutów jzyka XLink nale|y u|y? Wszystko zale|y od rodzaju tworzonego Bcza okre[lonego atrybutem xlink:type. W zale|no[ci od tego typu niektóre atrybuty mog by wymagane, inne pozostaj opcjonalne. Zestaw obowizujcych reguB zestawiono w tabeli 10.3, gdzie poszczególnym wierszom odpowiadaj ró|ne atrybuty XLink, natomiast kolumnom odpowiadaj typy Bcz XLinks. Tabela 10.3. Atrybuty wymagane i opcjonalne wedBug ustawienia xlink:type simple extended locator arc resource title type wymagany wymagany wymagany wymagany wymagany wymagany href opcjonalny pomijany wymagany pomijany pomijany pomijany role opcjonalny opcjonalny opcjonalny opcjonalny opcjonalny pomijany title opcjonalny opcjonalny opcjonalny opcjonalny opcjonalny pomijany show opcjonalny pomijany pomijany opcjonalny pomijany pomijany actuate opcjonalny pomijany pomijany opcjonalny pomijany pomijany from pomijany pomijany pomijany opcjonalny pomijany pomijany to pomijany pomijany pomijany opcjonalny pomijany pomijany Zwró uwag na to, |e wszystkie wymienione atrybuty u|ywaj przestrzeni nazw xlink; adresem URI tej przestrzeni zawsze jest http://www.w3.org/1999/xlink, co zreszt wynikaBo z poprzedniego przykBadu: <PRZEGLD_FILMOWY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="new" xlink:href="http://www.starpowdermovies.com/reviews.xml"> Pan Blandings buduje dom swoich marzeD </PRZEGLD_FILMOWY> Baza XML (XBase) Kolejn specyfikacj W3C zwizan z wizaniem dokumentów i tworzeniem Bcz jest specyfikacja XBase. W chwili pisania specyfikacja ta ma status rekomendacji proponowanej i wydana zostaBa 20 grudnia 2000 roku. Bie|c wersj tego dokumentu znajdziesz pod adresem www.w3.org/TR/xmlbase. Specyfikacja ta opisuje adres bazowy URI dokumentów XML, tak jak 6 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) znacznik <BASE> w HTML. Tak naprawd wBa[nie znacznik <BASE> byB powodem powstania XBase  W3C chce zapewni peBn obsBug Bczy istniejcych w HTML 4.0, a dopiero potem na tej podstawie tworzy dalsze rozszerzenia. W dokumencie XML odnajduje si atrybut xml:base, aby okre[li bazowy adres URI tego dokumentu. PozostaBe adresy w dokumencie rozwijane s wzgldem danego adresu bazowego. Zwró uwag na to, |e w opisywanym elemencie u|ywana jest przestrzeD nazw xml, a nie xlink. PrzestrzeD nazw xml jest w XML przestrzeni predefiniowan, zatem aby jej u|y, nie musisz jej deklarowa. Przestrzeni tej odpowiada adres URI http://www.w3.org/XML/1998/namespace. Oto przykBad u|ycia elementu xml:base: <PRZEGLD_FILMOWY xmlns:xlink="http://www.w3.org/1999/xlink" xml:base="http://www.starpowder.com" xlink:type="simple" xlink:show="new" xlink:href="reviews.xml"> Pan Blandings buduje dom swoich marzeD </PRZEGLD_FILMOWY> Przy u|yciu warto[ci atrybutu xml:base adres URI atrybutu xlink:href, u nas reviews.xml, rozwijany jest jako http://www.starpowder.com/reviews.xml. W ten sposób mo|na u|y atrybutu xml:base do podania bazowego adresu URI zwizanego z dokumentem (a nawet z konkretnym elementem). Deklarowanie atrybutów XLink Zwró uwag na to, |e je[li chcesz walidowa dokumenty XML, musisz zadeklarowa atrybuty XLink tak samo, jak wszystkie inne atrybuty. Do poprzedniego przykBadu mo|na u|y nastpujcej DTD: <?xml version="1.0" encoding="iso-8859-2" standalone="yes"?> <!DOCTYPE PRZEGLD_FILMOWY [ <!ELEMENT PRZEGLD_FILMOWY (#PCDATA)> <!ATTLIST PRZEGLD_FILMOWY xmlns:xlink CDATA #IMPLIED xml:base CDATA #IMPLIED xlink:type CDATA #IMPLIED xlink:href CDATA #IMPLIED xlink:show CDATA #IMPLIED xlink:actuate CDATA #IMPLIED xlink:title CDATA #IMPLIED> ]> <PRZEGLD_FILMOWY xmlns:xlink="http://www.w3.org/1999/xlink" xml:base="http://www.starpowder.com" xlink:type="simple" xlink:show="new" xlink:href="reviews.xml"> Pan Blandings buduje dom swoich marzeD </PRZEGLD_FILMOWY> Mo|na te| na staBe zakodowa warto[ci wikszo[ci atrybutów XLink  w tym wypadku konieczne byBoby tylko podanie warto[ci atrybutu xlink:href: <?xml version="1.0" encoding="iso-8859-2" standalone="yes"?> <!DOCTYPE PRZEGLD_FILMOWY [ <!ELEMENT PRZEGLD_FILMOWY (#PCDATA)> <!ATTLIST PRZEGLD_FILMOWY xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink" D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 7 8 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) xml:base CDATA #FIXED "http://www.starpowder.com" xlink:type CDATA #FIXED "simple" xlink:href CDATA #REQUIRED xlink:show CDATA #FIXED "new" xlink:actuate CDATA #FIXED "onRequest" xlink:title CDATA #IMPLIED> ]> <PRZEGLD_FILMOWY xlink:href="reviews.xml"> Pan Blandings buduje dom swoich marzeD </PRZEGLD_FILMOWY> Z uwagi na to, |e jzyk XLink jest tak ogólny, deklarowanie elementów XLink mo|e by do[ skomplikowane  elementy Bcz mog mie elementy potomne, te mog mie wBasne elementy potomne i tak dalej. Pamitaj, |e je[li chcesz swój dokument walidowa, musisz zadeklarowa wszystkie elementy XLink w DTD lub w schemacie XML. Masz ju| ogólne pojcie o u|yciu atrybutów XLinks, teraz przyjrzymy si im kolejno dokBadniej. Zaczniemy od atrybutu najwa|niejszego, czyli xlink:type. Atrybut xlink:type Atrybut xlink:type okre[la typ tworzonego Bcza XLink. Atrybut ten mo|e mie nastpujce warto[ci: Warto[ Opis simple Tworzy Bcze proste. extended Tworzy Bcze rozszerzone. locator Tworzy Bcze lokalizatora wskazujce zasób. arc Tworzy Buk Bczcy wiele zasobów i ró|ne [cie|ki przej[cia pomidzy nimi. resource Tworzy Bcze zasobu, które wskazuje konkretny zasób. title Tworzy Bcze tytuBowe. Tego typu elementy s u|yteczne na przykBad wtedy, gdy czytelna dla czBowieka informacja w postaci etykiety potrzebuje dalszego oznakowania lub gdy w celu zapewnienia obsBugi wielu jzyków konieczne jest zastosowanie wielu tytuBów. Tworzenie Bcz prostych ju| widzieli[my: <PRZEGLD_FILMOWY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="new" xlink:href="http://www.starpowder.com/reviews.xml# xpointer(/child::*[position()=126]/child::*[position()=first()])"> Pan Blandings buduje dom swoich marzeD </PRZEGLD_FILMOWY> Inne rodzaje Bczy poznamy dalej w tym rozdziale. 8 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) Wskazywanie zasobów  atrybut xlink:href Atrybut xlink:href nazywany jest tak|e atrybutem lokalizatorem. Atrybut ten podaje informacje umo|liwiajce aplikacji XLink odnalez zdalny zasób. Definicja URI Acza XLinks mog by bardzo ogólne, zwykle do lokalizowania zasobów u|ywa si adresu URI podawanego w atrybucie xlink:href. Badamy teraz sposób tworzenia Bczy w XML i by mo|e chciaBby[ niejako przy okazji przyjrze si formalnej definicji URI  znajdziesz j pod adresem www.ics.uci.edu/pub/ietf/uri/rfc2396.txt. WidziaBe[ ju|, |e w atrybucie xlink:href mo|na poda jednocze[nie adres URI oraz wskaznik XPointer: <PRZEGLD_FILMOWY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="new" xlink:href="http://www.starpowder.com/reviews.xml# xpointer(/child::*[position()=126]/child::*[position()=first()])"> Pan Blandings buduje dom swoich marzeD </PRZEGLD_FILMOWY> Dalej poka|emy, jak skomplikowane mog by warto[ci tego atrybutu. Opisywanie zasobów: xlink:role i xlink:title Wa|nymi atrybutami XLink s xlink:role oraz xlink:title; umo|liwiaj one opisanie zdalnego zasobu. Oba s opcjonalne, poni|ej pokazano przykBad ich u|ycia: <PRZEGLD_FILMOWY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="new" xlink:role="PRZEGLD_FILMOWY[PL]" xlink:title="Opis filmu 'Pan Blandigns buduje dom swoich marzeD'" xlink:href="http://www.starpowder.com/reviews.xml# xpointer(/child::*[position()=126]/child::*[position()=first()])"> Pan Blandings buduje dom swoich marzeD </PRZEGLD_FILMOWY> Atrybut xlink:title zawiera czytelny dla czBowieka opis zasobu wskazywanego przez Bcze. Chodzi o to, aby u|ytkownik mógB zawczasu sprawdzi, co znajduje si  na drugim koDcu Bcza  wystarczy, aby aplikacja wy[wietliBa t podpowiedz. Tre[ atrybutu xlink:role z kolei przeznaczona jest do przetwarzania maszynowego i okre[la rol Bcza. Atrybut ten opisuje kategori, do jakiej Bcze nale|y; w naszym wypadku u|yli[my warto[ci PRZEGLD_FILMOWY[PL]. Jak dotd nikt nie próbowaB ustandaryzowa kategorii Bczy w sposób podobny, jak RDF (opisany w pierwszym rozdziale) standaryzuje tre[ci zasobów. Po prostu istnieje tu zbyt wiele mo|liwo[ci. Wprawdzie wyszukiwarki mog u|y atrybutu xlink:role do klasyfikacji Bcza, ale ról u|ywa si zwykle do definiowania Bczy kierunkowych przy tworzeniu Bczy rozszerzonych, które omówimy dalej. D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 9 10 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) Je[li swoje dokumenty zamierzasz walidowa, atrybuty xlink:role i xlink:title musisz zadeklarowa. W poni|szym przykBadzie u|yto DTD i atrybutowi xlink:role elementu PRZEGLD_FILMOWY nadano warto[ staB PRZEGLD_FILMOWY[PL]: <!ELEMENT PRZEGLD_FILMOWY (#PCDATA)> <!ATTLIST PRZEGLD_FILMOWY xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink" xlink:type CDATA #FIXED "simple" xlink:href CDATA #REQUIRED xlink:title CDATA #IMPLIED xlink:role CDATA #FIXED "PRZEGLD_FILMOWY[PL]" > Atrybut xlink:show Atrybutu xlink:show mo|na u|y do wskazania, jak doBczony zasób ma by wy[wietlony przy aktywacji Bcza. Atrybut xlink:show mo|e mie cztery warto[ci predefiniowane: Warto[ Opis replace Zamienia nowym zasobem zasób bie|cy w aktualnym oknie, o ile takie istnieje. new Otwiera nowy obszar wy[wietlania (na przykBad nowe okno) dla nowego zasobu. embed WBcza wskazywany zasób do zasobu bie|cego. undefined Informuje, |e nie wymagane jest |adne konkretne ustawienie atrybutu xlink:show. Powy|sze warto[ci atrybutu xlink:show s warto[ciami predefiniowanymi, ale nic nie stoi na przeszkodzie, aby stosowa tak|e swoje wBasne warto[ci. Domy[lne zachowanie Bczy HTML polega na przeniesieniu si do wskazywanego dokumentu i zastpienie nim dokumentu bie|cego. Takie zachowanie mo|na zamodelowa w XLinks u|ywajc warto[ci replace atrybutu xlink:show: <PRZEGLD_FILMOWY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="replace" xlink:href="http://www.starpowder.com/reviews.xml"> Pan Blandings buduje dom swoich marzeD </PRZEGLD_FILMOWY> Sposób traktowania tego przez aplikacj zale|y od u|ytego oprogramowania. Wprawdzie masz prawo si spodziewa, |e bie|cy dokument bdzie zastpiony nowym, mo|e sta si inaczej. Na przykBad aplikacja arkusza kalkulacyjnego mo|e zastpi wskazywanym zasobem wy[wietlane dane, a nie caB zawarto[ bie|cego okienka. Atrybut xlink:show mo|e te| sprawi, |e aplikacja u|yje po uruchomieniu Bcza innego arkusza stylów  to, co si stanie, zale|y od programisty. Je[li warto[ci atrybutu xlink:show jest new, aktywacja Bcza zwykle otwiera nowe okno ze wskazywanym zasobem: <PRZEGLD_FILMOWY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="new" xlink:href="http://www.starpowder.com/reviews.xml"> 10 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) Pan Blandings buduje dom swoich marzeD </PRZEGLD_FILMOWY> Jednak tak jak poprzednio, oprogramowanie znowu mo|e si ró|nie zachowa. Warto[ new mo|e po prostu oznacza dodanie nowej kolumny do tabeli lub wy[wietlenie nowego wiersza zestawienia. Do tego ustawienia podchodzi nale|y ostro|nie  pamitaj, |e u|ytkownicy znajcy HTML nie przywykli do tego, |e Bcza automatycznie otwieraj nowe okienka. By mo|e warto byBoby doda jakie[ obja[nienie, w przeciwnym wypadku tego typu zachowanie mo|e by dla u|ytkownika niezrozumiaBe. Podobnie nale|y traktowa ustawienie embed. Chodzi o to, aby przy aktywacji Bcza nowy zasób wBczany byB do dokumentu bie|cego, ale sposób realizacji tego zale|e mo|e od aplikacji. ZaBó|my, |e mamy do czynienia z nastpujcym dokumentem planety.xml: <?xml version="1.0" encoding="iso-8859-2"?> <?xml-stylesheet type="text/xml" href="planety.xsl"?> <PLANETY> <PLANETA> <NAZWA>Merkury</NAZWA> <MASA JEDNOSTKI="(Ziemia=1)">.0553</MASA> <DZIEC JEDNOSTKI="dni">58.65</DZIEC> <PROMIEC JEDNOSTKI="mile">1516</PROMIEC> <GSTOZ JEDNOSTKI="(Ziemia=1)">.983</GSTOZ> <ODLEGAOZ JEDNOSTKI="miliony mil">43.4<ODLEGAOZ><!--w peryhelium--> </PLANETA> <PLANETA> <NAZWA>Wenus</NAZWA> <MASA JEDNOSTKI="(Ziemia=1)">.815</MASA> <DZIEC JEDNOSTKI="dni">116.75</DZIEC> <PROMIEC JEDNOSTKI="mile">3716</PROMIEC> <GSTOZ JEDNOSTKI="(Ziemia=1)">.943</GSTOZ> <ODLEGAOZ JEDNOSTKI="miliony mil">66.8<ODLEGAOZ><!--w peryhelium--> </PLANETA> <PLANETA> <NAZWA>Ziemia</NAZWA> <MASA JEDNOSTKI="(Ziemia=1)">1</MASA> <DZIEC JEDNOSTKI="dni">1</DZIEC> <PROMIEC JEDNOSTKI="mile">2107</PROMIEC> <GSTOZ JEDNOSTKI="(Ziemia=1)">1</GSTOZ> <ODLEGAOZ JEDNOSTKI="miliony mil">128.4<ODLEGAOZ><!--w peryhelium--> </PLANETA> </PLANETY> Oto jak mog wyglda Bcza do ró|nych planet; u|ywamy tu tak|e XPointers do wskazania poszczególnych planet z pliku planety.xml. Warto[ci atrybutów xlink:show jest embed: <?xml version="1.0" encoding="iso-8859-2"?> <ASTRO_NOWOZCI> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=1]"> Merkury D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 11 12 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=2]"> Wenus </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=3]"> Ziemia </DANE_PLANETY> </ASTRO_NOWOZCI> Po uruchomieniu wszystkich Bczy z powy|szego dokumentu dane z poszczególnych elementów PLANETA mog zosta do bie|cego dokumentu wBczone dajc co[ takiego (pamitaj, |e szczegóBowa interpretacja zale|y jednak od aplikacji!): <?xml version="1.0" encoding="iso-8859-2"?> <ASTRO_NOWOZCI> <DANE_PLANETY> <NAZWA>Merkury</NAZWA> <MASA JEDNOSTKI="(Ziemia=1)">.0553</MASA> <DZIEC JEDNOSTKI="dni">58.65</DZIEC> <PROMIEC JEDNOSTKI="mile">1516</PROMIEC> <GSTOZ JEDNOSTKI="(Ziemia=1)">.983</GSTOZ> <ODLEGAOZ JEDNOSTKI="miliony mil">43.4<ODLEGAOZ><!--w peryhelium--> </DANE_PLANETY> <DANE_PLANETY> <NAZWA>Wenus</NAZWA> <MASA JEDNOSTKI="(Ziemia=1)">.815</MASA> <DZIEC JEDNOSTKI="dni">116.75</DZIEC> <PROMIEC JEDNOSTKI="mile">3716</PROMIEC> <GSTOZ JEDNOSTKI="(Ziemia=1)">.943</GSTOZ> <ODLEGAOZ JEDNOSTKI="miliony mil">66.8<ODLEGAOZ><!--w peryhelium--> </DANE_PLANETY> <DANE_PLANETY> <NAZWA>Ziemia</NAZWA> <MASA JEDNOSTKI="(Ziemia=1)">1</MASA> <DZIEC JEDNOSTKI="dni">1</DZIEC> <PROMIEC JEDNOSTKI="mile">2107</PROMIEC> <GSTOZ JEDNOSTKI="(Ziemia=1)">1</GSTOZ> <ODLEGAOZ JEDNOSTKI="miliony mil">128.4<ODLEGAOZ><!--w peryhelium--> </DANE_PLANETY> <ASTRO_NOWOZCI> Atrybutowi xlink:show mo|na te| nada warto[ undefined, wtedy aplikacja mo|e zastosowa wBasny domy[lny sposób prezentacji zasobu docelowego Bcza. Zreszt zawsze trzeba mie na uwadze, |e aplikacja mo|e pracowicie poustawiane warto[ci xlink:show zignorowa i zastosowa wBasne, na przykBad je[li zastosowano warto[ci new, a przegldarka nie jest w stanie obsBu|y wielu okienek. Atrybutowi xlink:show mo|esz tak|e nadawa wBasne warto[ci. Na przykBad podanie warto[ci nowy_wiersz mo|e spowodowa wy[wietlenie danych w nowym wierszu tabeli. Omawiany 12 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) atrybut mo|e te| powiedzie nieco o formacie dokumentu, a nie o sposobie jego wy[wietlenia  sta si tak mo|e, je[li podasz jako warto[ nazw arkusza stylów. Mo|esz te| przypisa temu atrybutowi kod JavaScriptu powodujcy uruchomienie warto[ci atrybutu xlink:show w chwili aktywacji Bcza. Nie zapominaj o zadeklarowaniu atrybutu xlink:show w przypadku walidacji dokumentów. Deklaracja ta w DTD mo|e wyglda na przykBad tak: <!ELEMENT ASTRO_NOWOZCI (#PCDATA)> <!ATTLIST ASTRO_NOWOZCI xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink" xlink:type CDATA #FIXED "simple" xlink:href CDATA #REQUIRED xlink:show (new | replace | embed | undefined) #IMPLIED "replace"> Atrybut xlink:actuate Atrybut xlink:actuate pozwala wskaza, kiedy Bcze ma by uruchamiane. Atrybut ten mo|e mie nastpujce warto[ci predefiniowane: Warto[ Opis onRequest Acze ma by uruchamiane na |danie u|ytkownika. onLoad Acze ma by uruchamiane podczas Badowania dokumentu lub zasobu. undefined Nie narzuca si |adnych wymagaD wzgldem chwili uruchamiania Bcza. Atrybutowi temu mo|na te| nadawa wBasne warto[ci. Pierwsza warto[ predefiniowana, onRequest, oznacza, |e Bcze ma by uruchamiane dopiero wtedy, kiedy za|da tego u|ytkownik. Zwykle |danie takie zgBaszane jest przez kliknicie Bcza myszk, jak to zreszt ustawili[my na pocztku tego rozdziaBu symulujc dziaBanie Bcza XLinks w Internet Explorerze: <?xml version="1.0" encoding="iso-8859-2"?> <?xml-stylesheet type="text/css" href="xlink_example.css"?> <!DOCTYPE html SYSTEM "xlink_example.dtd"> <DOKUMENT> <P> Zaczynamy sprawdzanie? kliknij <LINK xml:type="simple" href="http://www.w3c.org" xlink:actuate="onRequest" onClick="location.href='http://www.w3c.org'">W3C</LINK> </P> </DOKUMENT> Je[li warto[ atrybutu xlink:actuate ustawisz na onLoad, Bcze zostanie uruchomione ju| w chwili Badowania zasobu zawierajcego to Bcze. Mo|emy na przykBad spowodowa, aby obrazek mapy byB Badowany wraz z Badowaniem dokumentu go zawierajcego  zrealizujemy to nastpujco: <MAPA_OBRAZKOWA xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://www.starpowder.com/gifs/image_map.gif" D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 13 14 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) xlink:actuate="onLoad"> </MAPA_OBRAZKOWA> W koDcu u|ycie warto[ci undefined oznacza, |e moment uruchomienia Bcza pozostawiamy aplikacji (oczywi[cie, jak zwykle, i tak ostateczna interpretacja atrybutu xlink:actuate zale|y od aplikacji). Mo|na jako warto[ci atrybutu xlink:actuate u|y wBasnych ustawieD. Mo|na na przykBad zastosowa warto[ci takie jak onLoadData, onShowImage czy onUnload. Jak zwykle walidacja dokumentów wymaga zadeklarowania tak|e atrybutu xlink:actuate; w przypadku u|ycia DTD mo|e to wyglda nastpujco: <!ATTLIST ASTRO_NOWOZCI xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink" xlink:type CDATA #FIXED "simple" xlink:href CDATA #REQUIRED xlink:show (new | replace | embed | undefined) #IMPLIED "replace" xlink:actuate (onRequest | onLoad | undefined) #IMPLIED "onRequest"> Acza rozszerzone Zapewne Bcza proste i sposób ich dziaBania s Ci ju| dobrze znane, gdy| dziaBaj one dokBadnie tak samo jak hiperBcza HTML. Teraz czas na zapowiedziane ju| wcze[niej rozszerzenia dostpne w XLinks  takie rozbudowane Bcza nosz nazw Bczy rozszerzonych. Tego typu Bcza mog wiza ze sob wiele zasobów, obsBugiwa ró|ne [cie|ki poBczenia zasobów, [cie|ki dwukierunkowe i Bcza zewntrzne. W tej chwili warto spróbowa si przestawi na znacznie ogólniejszy sposób my[lenia, spojrze na Bcza jako wszystkie mo|liwe relacje midzy zasobami. Terminologia Bczy rozszerzonych Omawiane tutaj idee mog wydawa si bardzo niejasne w porównaniu z dobrze znanym dziaBaniem tradycyjnych Bczy prostych, ale pamitaj, |e W3C usiBuje umo|liwi opisanie za pomoc XML wszelkich relacji midzy wieloma zasobami oraz opisanie dziaBania tych relacji. Jest to naprawd du|e wyzwanie. Z formalnego punktu widzenia Bcza rozszerzone s skierowanymi grafami z nazwami.1 Aczone zasoby s wzBami, a same Bcza midzy nimi s krawdziami grafu. Ogólnie rzecz biorc Bcza rozszerzone skBadaj si z poBczeD midzy zbiorem zasobów. Zasoby mog by lokalne, czyli by cz[ci elementu Bcza rozszerzonego lub zdalne, czyli by poza elementem Bcza rozszerzonego (co jednak wcale nie znaczy, |e musz nale|e do innego dokumentu). Je[li Bcze nie zawiera |adnego zasobu lokalnego, nazywane jest Bczem zewntrznym. Sposób obsBugi Bczy zewntrznych jest caBkowicie zale|ne od aplikacji. Poka| tutaj pewne zasady, ale tak naprawd wszystko to s troch zamki budowane na piasku. O ile mi wiadomo, nie istnieje obecnie |adne powszechnie dostpne oprogramowanie w peBni obsBugujce Bcza rozszerzone. 1 Je|eli krawdzie posiadaj grot wskazujcy kierunek to grafy takie nazywa si sieciami )przyp. tBum.) 14 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) Hipotetycznym przykBadem mo|e by system ekspertowy, w którym Bcza midzy wieloma ró|nymi zasobami s uruchamiane w zale|no[ci od odpowiedzi na pytania tak/nie. Chodzi o to, |e po odpowiedzi na szereg pytaD system ekspertowy mo|e zaw|a zakres mo|liwych odpowiedzi i skierowa u|ytkownika do zasobu, który najlepiej udzieli odpowiedzi na nawet bardzo zBo|one zapytania. Jak wspomniano wcze[niej, zasoby nale|ce do Bcza rozszerzonego mog by albo lokalne, albo zdalne. Zasoby lokalne same s cz[ci Bcza rozszerzonego i zawarte s w elemencie, którego atrybut xlink:type ustawiono na resource. Zasoby zdalne z kolei znajduj si poza elementem Bcza, cho nie musz wcale znajdowa si w innym dokumencie. Elementów lokalizujcych u|ywa si do wskazania zasobu zdalnego; takie elementy maj atrybut xlink:type o warto[ci locator. Podczas tworzenia elementu lokalizujcego (lokalizatora) trzeba nada tak|e atrybutowi xlink:href warto[ wskazujc zasób zdalny. Oto przykBad Bcza rozszerzonego. Acze to zawiera pi zasobów  dwa Bcza inline i trzy Bcza zewntrzne: <ASTRO_DANE xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="extended" xlink:title="Dane planet"> <NAZWA xlink:type="resource" xlink:role="NAZWA"> Dane planet </NAZWA> <DATA xlink:type="resource" xlink:role="OSTATNIA_AKTUALIZACJA"> 1 wrze[nia 2001r. </DATA> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=1]" xlink:title="Merkury" xlink:role="DANE_PLANETY"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=2]"> xlink:title="Wenus" xlink:role="DANE_PLANETY"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=3]"> xlink:title="Ziemia" xlink:role="DANE_PLANETY"> </DANE_PLANETY> </ASTRO_DANE> Acza inline to Bcza, które maj atrybut xlink:type o warto[ci resource, a zasoby tych Bcz zawarte s w elemencie Bczcym. W tym wypadku takimi Bczami s elementy NAZWA oraz DATA; oba zawieraj zasób lokalny (w tym wypadku jest to po prostu tekst, cho mo|e tu by tak|e caBy cig wzajemnie w sobie zawartych elementów). D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 15 16 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) Acza zewntrzne naszego przykBadu maj atrybut xlink:type o warto[ci locator. Acza te sBu| do lokalizowania zasobów zewntrznych, które mog by w tym samym dokumencie lub w innym. W tym przykBadzie wszystkie te zasoby znajduj si w innym dokumencie, planety.xml. Tak jak poprzednio walidacja dokumentów wymaga zadeklarowania u|ywanych elementów i atrybutów. W naszym przykBadzie mo|na doda nastpujc DTD: <?xml version="1.0" encoding="iso-8859-2"?> <!DOCTYPE ASTRO_DANE [ <!ELEMENT ASTRO_DANE (NAZWA, DATA, DANE_PLANETY*)> <!ATTLIST ASTRO_DANE xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink" xlink:type (extended) #FIXED "extended" xlink:title CDATA #IMPLIED xlink:role CDATA #IMPLIED> <!ELEMENT NAZWA (#PCDATA)> <!ATTLIST NAZWA xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink" xlink:type CDATA #FIXED "resource" xlink:title CDATA #IMPLIED xlink:role CDATA #IMPLIED> <!ELEMENT DATA (#PCDATA)> <!ATTLIST DATA xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink" xlink:type CDATA #FIXED "resource" xlink:title CDATA #IMPLIED xlink:role CDATA #IMPLIED> <!ELEMENT DANE_PLANETY (#PCDATA)> <!ATTLIST DANE_PLANETY xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink" xlink:type CDATA #FIXED "locator" xlink:href CDATA #IMPLIED xlink:role CDATA #IMPLIED xlink:title CDATA #IMPLIED xlink:show CDATA #IMPLIED> ]> <ASTRO_DANE xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="extended" xlink:title="Dane planet"> <NAZWA xlink:type="resource" xlink:role="NAZWA"> Dane planet </NAZWA> <DATA xlink:type="resource" xlink:role="OSTATNIA_AKTUALIZACJA"> 1 wrze[nia 2001r. </DATA> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=1]" xlink:title="Merkury" xlink:role="DANE_PLANETY"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=2]"> 16 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) xlink:title="Wenus" xlink:role="DANE_PLANETY"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=3]"> xlink:title="Ziemia" xlink:role="DANE_PLANETY"> </DANE_PLANETY> </ASTRO_DANE> Jak dotd jedynie wskazywali[my, jakie elementy nale|ce do Bcze rozszerzonego reprezentuj zasoby lokalne lub zdalne. Jednak u|ycie atrybutów xlink:from i xlink:to pozwala stworzenie Bczy skierowanych nazywanych Bukami. Tworzenie Buków przy pomocy atrybutów xlink:from i xlink:to W przypadku Bczy prostych nie ma wtpliwo[ci, gdzie nale|y si przenie[ po uruchomieniu Bcza  wskazuje to atrybut xlink:href. Jednak w przypadku Bczy zBo|onych sprawa si komplikuje  je[li na przykBad chcesz uruchomi Bcze pokazane w ostatnim przykBadzie, gdzie powiniene[ si znalez? Mamy tu do czynienia ze wszelkiego rodzaju [cie|kami midzy ró|nymi zasobami. Ka|da mo|liwa [cie|ka midzy ka|dymi dwoma zasobami nazywana jest Bukiem. Auki w elementach XML reprezentowane s przez dodanie atrybutu xlink:type o warto[ci arc. Aby wskaza sposób dziaBania Buku, u|ywa si atrybutów xlink:show oraz xlink:actuate. Wa|na rzecz: Buki maj tak|e atrybuty xlink:from i xlink:to wskazujce Bczone zasoby. Warto[ci tych atrybutów ustawia si tak, by odpowiadaBy atrybutom xlink:role zasobu zródBowego i docelowego. Poni|ej pokazano poprzedni przykBad, przy czym element NAZWA zamieniono na START oraz opisano trzy Buki: jeden z elementu START do wszystkich trzech elementów DANE_PLANETY (poszczególne Buki Bcz jeden element pocztkowy z jednym koDcowym). Auki zawarto w elementach PRZEGLD: <?xml version="1.0" encoding="iso-8859-2"?> <ASTRO_DANE xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="extended" xlink:title="Dane planet"> <START xlink:type="resource" xlink:role="START"> Dane planet </START> <DATA xlink:type="resource" xlink:role="OSTATNIA_AKTUALIZACJA"> 1 wrze[nia 2001r. </DATA> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=1]" xlink:title="Merkury" xlink:role="Merkury"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 17 18 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=2]"> xlink:title="Wenus" xlink:role="Wenus"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=3]"> xlink:title="Ziemia" xlink:role="Ziemia"> </DANE_PLANETY> <PRZEGLD xlink:type="arc xlink:from="START" xlink:to="Merkury" xlink:show="new" xlink:actuate="onRequest"> </PRZEGLD> <PRZEGLD xlink:type="arc xlink:from="START" xlink:to="Wenus" xlink:show="new" xlink:actuate="onRequest"> </PRZEGLD> <PRZEGLD xlink:type="arc xlink:from="START" xlink:to="Ziemia" xlink:show="new" xlink:actuate="onRequest"> </PRZEGLD> </ASTRO_DANE> Jak zwykle walidacja dokumentów wymaga zadeklarowania wszystkich elementów i atrybutów. W przypadku u|ywania DTD mo|e to wyglda tak oto: <?xml version="1.0" encoding="iso-8859-2"?> <!DOCTYPE ASTRO_DANE [ <!ELEMENT ASTRO_DANE (START, DATA, DANE_PLANETY*, PRZEGLD*)> <!ATTLIST ASTRO_DANE xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink" xlink:type (extended) #FIXED "extended" xlink:title CDATA #IMPLIED xlink:role CDATA #IMPLIED> <!ELEMENT START (#PCDATA)> <!ATTLIST START xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink" xlink:type CDATA #FIXED "resource" xlink:title CDATA #IMPLIED xlink:role CDATA #IMPLIED> <!ELEMENT DATA (#PCDATA)> <!ATTLIST DATA xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink" xlink:type CDATA #FIXED "resource" xlink:title CDATA #IMPLIED xlink:role CDATA #IMPLIED> <!ELEMENT DANE_PLANETY (#PCDATA)> <!ATTLIST DANE_PLANETY xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink" xlink:type CDATA #FIXED "locator" xlink:href CDATA #IMPLIED xlink:role CDATA #IMPLIED 18 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) xlink:title CDATA #IMPLIED xlink:show CDATA #IMPLIED> <!ELEMENT PRZEGLD (#PCDATA)> <!ATTLIST PRZEGLD xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink" xlink:type CDATA #FIXED "arc" xlink:from CDATA #IMPLIED xlink:to CDATA #IMPLIED xlink:show CDATA #IMPLIED xlink:actuate (onRequest | onLoad | undefined) #IMPLIED> ]> <ASTRO_DANE xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="extended" xlink:title="Dane planet"> <START xlink:type="resource" xlink:role="START"> Dane planet </START> <DATA xlink:type="resource" xlink:role="OSTATNIA_AKTUALIZACJA"> 1 wrze[nia 2001r. </DATA> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=1]" xlink:title="Merkury" xlink:role="Merkury"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=2]"> xlink:title="Wenus" xlink:role="Wenus"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=3]"> xlink:title="Ziemia" xlink:role="Ziemia"> </DANE_PLANETY> <PRZEGLD xlink:type="arc xlink:from="START" xlink:to="Merkury" xlink:show="new" xlink:actuate="onRequest"> </PRZEGLD> <PRZEGLD xlink:type="arc xlink:from="START" xlink:to="Wenus" xlink:show="new" xlink:actuate="onRequest"> </PRZEGLD> <PRZEGLD xlink:type="arc xlink:from="START" xlink:to="Ziemia" xlink:show="new" xlink:actuate="onRequest"> </PRZEGLD> </ASTRO_DANE> D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 19 20 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) Auki nie musz koniecznie odwoBywa si do jednego tylko zasobu, jak to byBo w poprzednim przykBadzie. Mo|emy te| wszystkim trzem elementom DANE_PLANETY przypisa t sam rol DANE_PLANETY i pózniej za pomoc jednego elementu PRZEGLD zdefiniowa trzy Buki: po jednym do ka|dego zasobu DANE_PLANETY: <?xml version="1.0" encoding="iso-8859-2"?> <ASTRO_DANE xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="extended" xlink:title="Dane planet"> <START xlink:type="resource" xlink:role="START"> Dane planet </START> <DATA xlink:type="resource" xlink:role="OSTATNIA_AKTUALIZACJA"> 1 wrze[nia 2001r. </DATA> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=1]" xlink:title="Merkury" xlink:role="DANE_PLANETY"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=2]"> xlink:title="Wenus" xlink:role="DANE_PLANETY"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=3]"> xlink:title="Ziemia" xlink:role="DANE_PLANETY"> </DANE_PLANETY> <PRZEGLD xlink:type="arc xlink:from="START" xlink:to="DANE_PLANETY" xlink:show="new" xlink:actuate="onRequest"> </PRZEGLD> </ASTRO_DANE> Tak naprawd mo|na pomija atrybuty xlink:from i xlink:to  wtedy Buki tworzone s midzy danym elementem a elementami lokalizujcymi danego Bcza rozszerzonego (mog one zawiera tak|e elementy bez atrybutów xlink:from i xlink:to). Sposób faktycznej interpretacji atrybutów xlink:from i xlink:to zale|y od aplikacji odczytujcej zawierajcy je dokument. Acza inline a Bcza zewntrzne Je[li Bcze nie zawiera |adnych Bczonych przez si zasobów, nazywamy je Bczem zewntrznym. Mo|liwo[ oddzielenia Bczy od Bczonych zasobów to naprawd du|y krok naprzód (to samo byBo motywem zasadniczej zmiany w HTML 4.0 polegajcej na stosowaniu arkuszy stylów zamiast 20 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) specjalizowanych znaczników jak <CENTER>; to samo dotyczy zewntrznych moduBów kodu w Internet Explorerze nazywanych zachowaniami). U|ycie Bczy zewntrznych ma wiele zalet. Acza zewntrzne mog znajdowa si w odrbnych dokumentach nazywanych bazami Bczy. Zbiór Bczy zewntrznych w bazie Bczy nazywany jest zbiorem Bczy. Oto przykBad  wszystkie Bcza z tego dokumentu wskazuj na zasoby do tego dokumentu nie nale|ce, zatem dokument ten jest baz Bczy: <?xml version="1.0" encoding="iso-8859-2"?> <ASTRO_DANE xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="extended" xlink:title="Dane planet"> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml" xlink:title="START" xlink:role="START"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=1]" xlink:title="Merkury" xlink:role="Merkury"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=2]"> xlink:title="Wenus" xlink:role="Wenus"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=3]"> xlink:title="Ziemia" xlink:role="Ziemia"> </DANE_PLANETY> <PRZEGLD xlink:type="arc xlink:from="START" xlink:to="Merkury" xlink:show="new" xlink:actuate="onRequest"> </PRZEGLD> <PRZEGLD xlink:type="arc xlink:from="START" xlink:to="Wenus" xlink:show="new" xlink:actuate="onRequest"> </PRZEGLD> <PRZEGLD xlink:type="arc xlink:from="START" xlink:to="Ziemia" xlink:show="new" xlink:actuate="onRequest"> D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 21 22 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) </PRZEGLD> </ASTRO_DANE> Wszystkie Bczone zasoby znajduj si poza bie|cym dokumentem. Dodali[my Bcza lokalizujce do wszystkich planet z dokumentu planety.xml oraz Buki od punktu wej[ciowego do poszczególnych planet. Zwykle w bazie Bczy u|ywa si trzech rodzajów Bczy: Bczy rozszerzonych, lokalizatorów i Buków. Nie mog wystpi |adne Bcza typu resource. Bazy Bczy podlegaj takim samym reguBom jak wszelkie inne dokumenty XML, wobec czego walidacja ich wymaga dodania DTD: <?xml version="1.0" encoding="iso-8859-2"?> <!DOCTYPE ASTRO_DANE [ <!ELEMENT ASTRO_DANE (DANE_PLANETY*, PRZEGLD*)> <!ATTLIST ASTRO_DANE xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink" xlink:type (extended) #FIXED "extended" xlink:title CDATA #IMPLIED xlink:role CDATA #IMPLIED> <!ELEMENT DANE_PLANETY (#PCDATA)> <!ATTLIST DANE_PLANETY xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink" xlink:type CDATA #FIXED "locator" xlink:href CDATA #REQUIRED xlink:role CDATA #IMPLIED xlink:title CDATA #IMPLIED xlink:show CDATA #IMPLIED> <!ELEMENT PRZEGLD (#PCDATA)> <!ATTLIST PRZEGLD xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink" xlink:type CDATA #FIXED "arc" xlink:from CDATA #IMPLIED xlink:to CDATA #IMPLIED xlink:show CDATA #IMPLIED xlink:actuate (onRequest | onLoad | undefined) #IMPLIED> ]> <ASTRO_DANE xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="extended" xlink:title="Dane planet"> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml" xlink:title="START" xlink:role="START"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=1]" xlink:title="Merkury" xlink:role="Merkury"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" 22 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=2]"> xlink:title="Wenus" xlink:role="Wenus"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=3]"> xlink:title="Ziemia" xlink:role="Ziemia"> </DANE_PLANETY> <PRZEGLD xlink:type="arc xlink:from="START" xlink:to="Merkury" xlink:show="new" xlink:actuate="onRequest"> </PRZEGLD> <PRZEGLD xlink:type="arc xlink:from="START" xlink:to="Wenus" xlink:show="new" xlink:actuate="onRequest"> </PRZEGLD> <PRZEGLD xlink:type="arc xlink:from="START" xlink:to="Ziemia" xlink:show="new" xlink:actuate="onRequest"> </PRZEGLD> </ASTRO_DANE> Zbiory Bczy zewntrznych mo|na dowolnie rozbudowywa. W poni|szym przykBadzie dodano Bcza POPRZEDNIA i NASTPNA midzy poszczególnymi planetami: <?xml version="1.0" encoding="iso-8859-2"?> <ASTRO_DANE xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="extended" xlink:title="Dane planet"> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml" xlink:title="START" xlink:role="START"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=1]" xlink:title="Merkury" xlink:role="Merkury"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=2]"> xlink:title="Wenus" D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 23 24 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) xlink:role="Wenus"> </DANE_PLANETY> <DANE_PLANETY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:show="embed" xlink:href="http://www.starpowdermovies.com/planety.xml# xpointer(/descendant::PLANETA[position()=3]"> xlink:title="Ziemia" xlink:role="Ziemia"> </DANE_PLANETY> <PRZEGLD xlink:type="arc xlink:from="START" xlink:to="Merkury" xlink:show="new" xlink:actuate="onRequest"> </PRZEGLD> <PRZEGLD xlink:type="arc xlink:from="START" xlink:to="Wenus" xlink:show="new" xlink:actuate="onRequest"> </PRZEGLD> <PRZEGLD xlink:type="arc xlink:from="START" xlink:to="Ziemia" xlink:show="new" xlink:actuate="onRequest"> </PRZEGLD> <NASTPNA xlink:type="arc" xlink:from="Merkury" xlink:to="Wenus" xlink:show="new" xlink:actuate="onRequest"> </NASTPNA> <NASTPNA xlink:type="arc" xlink:from="Wenus" xlink:to="Ziemia" xlink:show="new" xlink:actuate="onRequest"> </NASTPNA> <NASTPNA xlink:type="arc" xlink:from="Ziemia" xlink:to="Merkury" xlink:show="new" xlink:actuate="onRequest"> </NASTPNA> <POPRZEDNIA xlink:type="arc" xlink:from="Ziemia" xlink:to="Wenus" xlink:show="new" xlink:actuate="onRequest"> </POPRZEDNIA> <POPRZEDNIA xlink:type="arc" xlink:from="Wenus" xlink:to="Merkury" xlink:show="new" xlink:actuate="onRequest"> </POPRZEDNIA> <POPRZEDNIA xlink:type="arc" xlink:from="Merkury" xlink:to="Ziemia" xlink:show="new" xlink:actuate="onRequest"> </POPRZEDNIA> </ASTRO_DANE> Pojawia si tutaj kolejna wtpliwo[: skoro Bcza zewntrzne nie s zawarte w |adnym ze wskazywanych zasobów, jak oprogramowanie ma je odnalez? W tym wypadku specyfikacja 24 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) W3C jest do[ niejasna, podobnie jak w przypadku Bczenia z dokumentami XML zewntrznych arkuszy stylów. ZakBada si, |e aplikacja sama bdzie odpowiedzialna za odnalezienie odpowiednich baz Bczy. Trzeba przyzna, |e trudno sobie wyobrazi, jak aplikacja ma odnajdowa bazy Bczy, je[li znaczniki i tre[ maj by caBkowicie oddzielne, zatem nie mo|na bazy Bczy wstawi do |adnego ze wskazywanych z zasobów (to tak, jak w przypadku komentowania czyjej[ pracy, kiedy nie masz dostpu do dokumentu zródBowego). Je[li jeste[ w stanie doda w zasobie Bcze do bazy Bczy, W3C sugeruje zrobienie tego: w celu utworzenia w bazie Bczy mo|na u|y predefiniowanej roli xlink:external-linkbase: <ACZA_ZEWNTRZNE xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:role="xlink:external-linkset" xlink:href="baza_Bczy.xml"/> </ACZA_ZEWNTRZNE> Dotd w tym rozdziale mówili[my o tym, |e atrybutu xlink:href u|ywa si do wskazania zasobów. Jednak mo|liwo[ci s tutaj naprawd du|e: nie tylko mo|na poda tutaj URI, ale mo|na tak|e u|y wskazników XPointers do wybrania konkretnych miejsc w dokumencie lub jego fragmentów. Zanim jednak przejdziemy do omawiania specyfikacji XPointer, powiedzie nale|y nieco o specyfikacji XPath, która jest podstaw XPointer i bez której trudno bdzie t ostatni zrozumie. Wyra|enia XPath to silne narzdzie pozwalajce dobiera wzBy dokumentu. U|ycie XPath nie oznacza ograniczenia si do wzBa bie|cego i jego wzBów potomnych, mo|na te| wskazywa wzeB rodzica, przodków i tak dalej. Wskazywanie wzBa, wzgldem którego chcesz pracowa, nazywamy w XPath okre[leniem osi. Zrozumie XPath Do wskazania w XPath wzBa lub zbioru wzBów u|ywa si [cie|ki lokalizacji. Zcie|ka ta z kolei skBada si z jednego lub wicej kroków lokalizacji oddzielanych od siebie znakami / lub //. Je[li [cie|ka zaczyna si od /, nazywamy j [cie|k bezwzgldn, gdy| caB [cie|k podaje si wzgldem wzBa gBównego. W przeciwnym wypadku [cie|k nazywamy wzgldn, zaczyna si ona od bie|cego wzBa nazywanego wzBem kontekstowym. Wszystko jasne? To dobrze, bo to dopiero pocztek. Krok lokalizacji skBada si z osi, badania wzBa oraz zera lub wicej predykatów. Je[li na przykBad wyra|enie ma posta child::PLANETA[position()=5], nazw osi jest child, badanie wzBa to wyra|enie PLANETA, natomiast zapis [position()=5] to predykat. Zcie|ki lokalizacji skBada si mog z jednego lub wicej kroków lokalizacji, na przykBad /descendant::PLANET/child::NAZWA wybiera elementy NAZWA majce rodzica PLANETA. Najlepszym sposobem zrozumienia, jak to dziaBa, jest obejrzenie przykBadów i na nastpnych stronach takich przykBadów bdzie mnóstwo. Przyjrzymy si rodzajom obsBugiwanych w XPath osi, sposobów badania wzBów i predykatów. D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 25 26 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) Osie XPath W [cie|ce lokalizacji XPath child::NAZWA wskazujcej element NAZWA bdcym dzieckiem wzBa bie|cego, child (dziecko) nazywamy osi. W XPath obsBugiwane s te| ró|ne inne osie i konieczna jest ich znajomo[: O[ Opis ancestor Dotyczy przodków wzBa kontekstowego. Przodkami s rodzice wzBa kontekstowego, rodzice tych rodziców i tak dalej, a| po wzeB gBówny wBcznie. ancestor-or-self Dotyczy wzBa kontekstowego i jego przodków. attribute Dotyczy atrybutów wzBa kontekstowego. child Dotyczy dzieci wzBa kontekstowego. descendant Dotyczy potomków wzBa kontekstowego. Potomek to dziecko, dziecko dziecka i tak dalej. descendant-or-self Dotyczy wzBa kontekstowego i jego potomków. following Dotyczy wszystkich wzBów z dokumentu, do którego nale|y wzeB kontekstu, które znajduj si po nim. following-sibling Dotyczy wszystkich wzBów znajdujcych si na tym samym poziomie co wzeB kontekstu, za tym wzBem. namespace Dotyczy wzBów przestrzeni nazw wzBa kontekstu. parent Dotyczy wzBa rodzica wzBa kontekstowego. preceding Dotyczy wszystkich wzBów z dokumentu, do którego nale|y wzeB kontekstu, które znajduj si przed nim. preceding-sibling Dotyczy wszystkich wzBów znajdujcych si na tym samym poziomie co wzeB kontekstu, przed tym wzBem. self Zawiera wzeB kontekstowy. Osie mo|na wskazywa w ka|dym kroku lokalizacji lub [cie|ce. Poni|szy przykBad przedstawia arkusz stylów XSL, w którym atrybutowi select elementu xsl:value-of przypisano wyra|enia XPath. U|yto osi child do poinformowania, |e chodzi o wybranie wzBów dzieci wzBa kontekstu, którym jest element PLANETA (dalej poka|emy zapis skrótowy pozwalajcy pomija cz[ child::): <xsl:template match="PLANETA"> <HTML> <CENTER> <xsl:value-of select="child::NAZWA"/> </CENTER> <CENTER> <xsl:value-of select="child::MASA"/> </CENTER> <CENTER> <xsl:value-of select="child::DZIEC"/> </CENTER> 26 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) </HTML> </xsl:template> W powy|szych wyra|eniach osi jest child, nazwy elementów NAZWA, MASA i DZIEC s badaniami wzBów (lub testami wzBów). Badanie wzBów w XPath Jako testów wzBów mo|na u|y nazw wzBów, mo|na te| u|y znaku * do wybrania wszystkich elementów. Na przykBad wyra|enie child::*/child::NAZWA powoduje wybranie elementów NAZWA bdcych  wnukami wzBa kontekstu. Mo|na te| u|y innych testów: Test wzBa Opis comment() Wybiera wzBy komentarza. node() Wybiera wzBy dowolnego typu. processing- Wybiera wzBy instrukcji przetwarzania. W nawiasach instruction() mo|na poda tak|e nazw instrukcji. text() Wybiera wzBy tekstowe. Predykaty XPath Predykat nale|cy do kroku XPath jest zapewne najciekawsz cz[ci tego kroku, gdy| zapewnia najwiksz elastyczno[. W predykatach mo|na u|y wszystkiego rodzaju wyra|eD  oto dopuszczalne typy: " zbiory wzBów, " logiczne, " liczbowe, " tekstowe, " wynikowe fragmenty drzewek. Teraz kolejno wszystkim rodzajom si przyjrzymy. Zbiory wzBów XPath Zbiór wzBów  jak to wskazuje sama nazwa  to po prostu zbiór wzBów. Wyra|enie takie jak child::PLANETA zwraca zbiór wzBów elementów PLANETA. Wyra|enie child::PLANETA/child::NAZWA zwraca list wzBów elementów NAZWA bdcych dziemi elementów PLANETA. Do wybrania ze zbioru wzBa lub wzBów mo|na u|y ró|nych funkcji u|ywanych w predykatach: Funkcja Opis last() Zwraca liczb wzBów w zbiorze. position() Zwraca poBo|enie wzBa kontekstowego w zbiorze wzBa D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 27 28 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) kontekstowego (zliczanie zaczyna si od 1). count(zbiór-wzBów) Zwraca liczb wzBów w przekazanym zbiorze. Je[li argument nie zostanie podany, zliczone zostan wzBy zbioru wzBa kontekstowego. id(string ID) Zwraca zbiór wzBów zawierajcych element o identyfikatorze pasujcym do warto[ci przekazanej funkcji, a je[li elementów takich nie ma, zwraca pusty zbiór wzBów. Mo|na poda zestaw identyfikatorów rozdzielonych spacjami, a funkcja zwróci zbiór wzBów elementów z takimi identyfikatorami. local-name(zbiór- Zwraca nazw lokaln pierwszego wzBa ze zbioru wzBów) wzBów. Pominicie parametru powoduje uruchomienie funkcji na wzle kontekstu. namespace-uri(zbiór- Zwraca adres URI przestrzeni nazw pierwszego wzBa wzBów) ze zbioru. Pominicie parametru powoduje u|ycie przez funkcj wzBa kontekstu. name(zbiór-wzBów) Zwraca peBn, kwalifikowan nazw pierwszego wzBa ze zbioru. Pominicie parametru powoduje u|ycie przez funkcj wzBa kontekstu. Oto przykBad, w którym ponumerujemy elementy dokumentu wynikowego przy u|yciu funkcji position(): <?xml version="1.0" encoding="iso-8859-2"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="PLANETY"> <HTML> <HEAD> <TITLE> Planety </TITLE> </HEAD> <BODY> <xsl:apply-templates select="PLANETA"/> </BODY> </HTML> </xsl:template> <xsl:template match="PLANETA"> <P> <xsl:value-of select="position()"/> <xsl:value-of select="NAZWA"/> </P> </xsl:template> </xsl:stylesheet> Oto wyniki  planety z dokumentu XML zostaBy ponumerowane: <HTML> <HEAD> <TITLE> Planety 28 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) </TITLE> </HEAD> <BODY> <P>1. Merkury</P> <P>2. Wenus</P> <P>3. Ziemia</P> </BODY> </HTML> Funkcji dziaBajcych na zbiorach wzBów mo|na u|ywa w predykatach, na przykBad wyra|enie child::PLANETA[position()=last()] wybierze ostatnie dziecko PLANETA z wzBa kontekstowego. Wyra|enia logiczne XPath W wyra|eniach XPath mo|na u|ywa tak|e wyra|eD logicznych. Liczba uwa|ana jest za faBsz, je[li równa jest zeru i uwa|ana jest za prawd w ka|dym innym przypadku. Napis pusty ("") uwa|any jest za faBsz, wszystkie inne napisy odpowiadaj prawdzie. Operatory logiczne XPath umo|liwiaj wyliczenie warto[ci typu prawda/faBsz: Operator Opis != ró|ne < mniejsze (w dokumentach XML zapisywa nale|y jako &lt;) <= mniejsze bdz równe (w dokumentach XML zapisywa nale|y jako &lt;=) = równe (uwaga dla programistów jzyków C, C++, Java, JavaScript: nie nale|y u|ywa podwójnego znaku równo[ci) > wiksze >= wiksze bdz równe W dokumentach XML nie nale|y u|ywa znaku < bezpo[rednio, lecz nale|y u|ywa odwoBania do encji &lt;. Poszczególne elementy wyra|enia logicznego Bczy mo|na spójnikami and i or podobnie jak to robili[my w JavaScripcie i Javie. Oto przykBad u|ycia operatora logicznego >  reguBa dotyczy wszystkich elementów PLANETA o numerze wikszym od 5: <xsl:template match="PLANETA[position() > 5]"> <xsl:value-of select="."/> </xsl:template> Istniej te| funkcje true() i false() zwracajce zawsze warto[ci odpowiednio prawdy i faBszu. D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 29 30 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) Funkcji not() mo|na u|y do odwrócenia logicznej warto[ci wyra|enia; poni|ej wybieramy wszystkie elementy PLANETA oprócz ostatniego: <xsl:template match="PLANETA[not(position() = last())]"> <xsl:value-of select="."/> </xsl:template> W koDcu funkcja lang() zwraca warto[ prawdy lub faBszu w zale|no[ci od tego, czy jzyk wzBa kontekstu (okre[lony atrybutem xml:lang) jest taki sam, jak jzyk przekazany tej funkcji jako parametr. Liczby w XPath Liczby w XPath zapisywane s jako zmiennoprzecinkowe liczby podwójnej precyzji (w rozdziale 10 podano nieco wicej szczegóBów technicznych; formalnie rzecz biorc liczby XPath przechowywane s w formacie zmiennoprzecinkowym podwójnej precyzji IEEE 754). W takiej postaci przechowywane s wszystkie liczby, nawet liczby caBkowite jak 5 w poni|szym przykBadzie: <xsl:template match="PLANETA[position() > 5]"> <xsl:value-of select="."/> </xsl:template> Do przetwarzania liczb mo|na u|y kilku operatorów: Operator DziaBanie + dodawanie - odejmowanie * mno|enie div dzielenie (znak / zwykle oznaczajcy to dziaBanie jest w XML i XPath intensywnie wykorzystywany w innych celach) mod modulo (reszta z dzielenia pierwszego argumentu przez drugi) Na przykBad u|ycie zapisu <xsl:value-of select="180 + 420"/> wstawia napis 600 do dokumentu wynikowego. PrzykBad ten wybiera wszystkie planety, których dzieD (mierzony dniami ziemskimi) podzielony przez mas (podan w masach Ziemi) daje wynik wikszy od 100: <xsl:template match="PLANETA"> <HTML> <BODY> <xsl:apply-templates select="PLANETA[DZIEC div MASA > 100]"/> </BODY> </HTML> </xsl:template> XPath obsBuguje tak|e kilka funkcji dziaBajcych na liczbach: Funkcja Opis ceiling() Zwraca najmniejsz liczb caBkowit wiksz od liczby przekazanej jako parametr. floor() Zwraca najwiksz liczb caBkowit mniejsz od liczby 30 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) przekazanej jako parametr. round() Zaokrgla przekazan liczb do najbli|szej liczby caBkowitej. sum() Zwraca sum przekazanych funkcji liczb. W poni|szym przykBadzie okre[lamy [redni mas planet z dokumentu planety.xml: <xsl:template match="PLANETY"> <HTML> <BODY> Zrednia masa planet wynosi: <xsl:value-of select="sum(child::MASA) div count(descendant::MASA)"/> </BODY> </HTML> </xsl:template> Napisy w XPath Napisy XPath skBadaj si ze znaków Unicode. Istnieje wiele takich funkcji, zestawiono je w poni|szej tabeli: Funkcja Opis starts-with(string Zwraca prawd, je[li pierwszy napis zaczyna si drugim napis1, string napisem. napis2) contains(string Zwraca prawd, je[li pierwszy napis zawiera drugi. napis1, string napis2) substring(string Zwraca ilo[ znaków z przekazanego napisu od znaku napis1, number ofset poczynajc. ofset, number ilo[) substring- Zwraca cz[ napisu1 do pierwszego wystpienia before(string napisu2. napis1, string napis2) substring- Zwraca cz[ napisu1 od pierwszego wystpienia after(string napis1, napisu2 poczynajc. string napis2) string-length(string Zwraca liczb znaków w napisie1. napis1) normalize- Zwraca napis1 po usuniciu spacji wiodcych space(string napis1) i koDcowych oraz po zamianie wszystkich cigów kolejnych spacji na pojedyncze. translate(string Zwraca napis1 po zastpieniu wszystkich wystpieD napis1, string napis2 napisami napis3. napis2, string D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 31 32 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) napis3) concat(string Zwraca wszystkie przekazane napisy poBczone w caBo[. napis1, string napis2, ...) format-number(number Zwraca napis zawierajcy sformatowan liczb1, liczba1, string przy czym napis2 u|ywany jest jako cig formatujcy, napis2, string natomiast napis3 to opcjonalne ustawienie jzykowe. napis3) Cigi formatujce s takie same, jak w metodzie Javy java.text.DecimalFormat. Wynikowe fragmenty drzewa w XPath Wynikowy fragment drzewa to cz[ dokumentu XML nie bdca kompletnym wzBem ani kompletnym zestawem wzBów. Fragmenty takie mog by tworzone na ró|ne sposoby, na przykBad w przypadku u|ycia funkcji document() podczas wskazywania czego[ w innym dokumencie. W XPath niewiele mo|na zrobi z wynikowymi fragmentami drzewa XPath; tak naprawd mo|na jedynie u|y funkcji string() lub boolean() do zamiany ich odpowiednio na napis lub warto[ logiczn. PrzykBady wyra|eD XPath Ju| niezle znasz teori XPath, teraz czas na jakie[ konkretne przykBady. W poni|szej tabeli podano szereg przykBadów [cie|ek z obja[nieniem ich dziaBania. Zwró uwag na to, |e w predykatach mo|na u|y operatorów and i or do poBczenia ze sob wielu wzorców. PrzykBad Znaczenie child::PLANETA Zwraca elementy PLANETA bdce dziemi wzBa (czyli wzBa kontekstowego). child::* Zwraca wszystkie dzieci bie|cego wzBa bdce elementami. child::text() Zwraca wszystkie dzieci bie|cego wzBa bdce wzBami tekstowymi. child::node() Zwraca wszystkie dzieci bie|cego wzBa niezale|nie od ich typu. attribute::JEDNOSTKI Zwraca atrybut JEDNOSTKI bie|cego wzBa. descendant::PLANETA Zwraca wszystkie elementy PLANETA bdce dziemi wzBa kontekstu. ancestor::PLANETA Zwraca wszystkich przodków PLANETA wzBa kontekstu. ancestor-or- Zwraca wszystkich przodków PLANETA wzBa self::PLANETA kontekstowego. Je[li wzeB ten tak|e jest typu PLANETA, tak|e jest wBczany do zbioru wyników. 32 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) descendant-or- Zwraca elementy PLANETA bdce potomkami wzBa self::PLANETA kontekstowego. Je[li sam wzeB kontekstu te| jest typu PLANETA, jest doBczany do zbioru wyników. self::PLANETA Zwraca wzeB kontekstowy, o ile jest on elementem typu PLANETA. child::NAZWA/descend Zwraca elementy PLANETA bdce potomkami ant::PLANETA elementów NAZWA bdcych dziemi wzBa kontekstowego. child::*/child::PLAN Zwraca wszystkie elementy PLANETA bdce wnukami ETA bie|cego wzBa. / Zwraca wzeB gBówny dokumentu (czyli rodzica elementu gBównego). /descendant::PLANETA Zwraca wszystkie elementy PLANETA z dokumentu. /descendant::PLANETA Zwraca elementy NAZWA majce element PLANETA /child::NAZWA za rodzica. child::PLANETA[posit Zwraca trzecie dziecko typu PLANETA wzBa kontekstu. ion()=3] child::PLANETA[posit Zwraca ostatnie dziecko PLANETA wzBa kontekstowego. ion() = last()] /descendant::PLANETA Zwraca trzeci element PLANETA z dokumentu. [position() = 3] child::PLANETY/child Zwraca trzeci element NAZWA czwartego elementu ::PLANETA[position() PLANETA z elementu PLANETY. = 4]/child::NAZWA[posi tion() = 3] child::PLANETA[posit Zwraca dzieci PLANETA wzBa kontekstu znajdujce si ion() > 3] za trzecim takim elementem. preceding- Zwraca drugi wstecz element NAZWA znajdujcy si sibling::NAZWA[posit na tym samym poziomie, co bie|cy wzeB. ion() = 2] child::PLANETA[attri Zwraca dzieci PLANETA wzBa kontekstowego majce bute::KOLOR="CZERWON atrybut KOLOR o warto[ci CZERWONY. Y"] child::PLANETA[attri Zwraca trzecie dziecko PLANETA wzBa kontekstu majce ute::KOLOR="CZERWONY atrybut KOLOR o warto[ci CZERWONY. "][position() = 3] child::PLANETA[posit Zwraca trzecie dziecko PLANETA wzBa kontekstu tylko ion() = wtedy, gdy dziecko to ma atrybut KOLOR o warto[ci 3][attribute::KOLOR CZERWONY. D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 33 34 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) = "CZERWONY"] CZERWONY. child::MASA[child::N Zwraca dzieci MASA wzBa kontekstu majce dzieci AZWA = "WENUS"] NAZWA zawierajce napis WENUS. child::PLANETA[child Zwraca dzieci PLANETA wzBa kontekstu majce dzieci ::NAZWA] NAZWA. child::*[self::NAZWA Zwraca dzieci wzBa kontekstu typów NAZWA oraz MASA. or self::MASA] child::*[self::NAZWA Zwraca pierwsze dziecko typu NAZWA lub MASA wzBa or kontekstu. self::MASA][position () = first()] Jak wida w powy|szej tabeli, niektóre formy s caBkiem zBo|one, a ich zapis jest niepokojco dBugi. Istnieje jednak tak|e skrócona forma zapisu XPath. SkBadnia skrócona XPath Istnieje szereg skrótów zapisu skBadni XPath. Oto odpowiednie reguBy: Wyra|enie Skrót self::node() . parent::node() .. child::dziecko dziecko attribute::dziecko @dziecko /descendant-or- // self::node()/ Mo|na te| skraca zapis wyra|eD predykatów, na przykBad [position() = 3] mo|na zapisa jako [3], [position() = last()] jako [last()] i tak dalej. U|ycie skBadni skróconej wyra|eD XPath znacznie uBatwia ich u|ycie. Oto przykBady zapisu skróconych wyra|eD XPath: PrzykBad Znaczenie PLANETA Zwraca elementy PLANETA bdce dziemi wzBa (czyli wzBa kontekstowego). * Zwraca wszystkie dzieci bie|cego wzBa bdce elementami. text() Zwraca wszystkie dzieci bie|cego wzBa bdce wzBami tekstowymi. @JEDNOSTKI Zwraca atrybut JEDNOSTKI bie|cego wzBa. @* Zwraca wszystkie atrybuty wzBa kontekstu. PLANETA[3] Zwraca trzecie dziecko PLANETA wzBa kontekstu. 34 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) PLANETA[first()] Zwraca pierwsze dziecko PLANETA wzBa kontekstu. */PLANETA Zwraca wszystkie wnuki (dzieci dzieci) PLANETA wzBa kontekstu. /PLANETY/PLANETA[3]/ Zwraca drugi element NAZWA trzeciego elementu NAZWA[2] PLANETA elementu PLANETY. //PLANETA Zwraca wszystkich potomków PLANETA wzBa gBównego. PLANETY//PLANETA Zwraca wszystkich potomków PLANETA elementów PLANETY bdcych dziemi wzBa bie|cego. //PLANETA/NAZWA Zwraca elementy NAZWA majce rodzica PLANETA. . Zwraca wzeB kontekstu. .//PLANETA Zwraca elementy PLANETA bdce potomkami wzBa kontekstowego. .. Zwraca rodzica wzBa kontekstowego. ../@JEDNOSTKI Zwraca atrybut JEDNOSTKI rodzica wzBa kontekstowego. PLANETA[NAZWA] Zwraca dzieci PLANETA wzBa kontekstowego majce dzieci NAZWA. PLANETA[NAZWA="Wenus Zwraca dzieci PLANETA wzBa kontekstowego majce "] dzieci NAZWA z tre[ci Wenus. PLANETA[@JEDNOSTKI=" Zwraca dzieci PLANETA wzBa kontekstu majce atrybut dzieD"] JEDNOSTKI o warto[ci dzieD. PLANETA[6][@JEDNOSTK Zwraca szóste dziecko PLANETA wzBa kontekstu, je[li I="dzieD"] ma ono atrybut JEDNOSTKI o warto[ci dzieD. To samo wyra|enie mo|na zapisa te| jako PLANETA[@JEDNOSTKI="dzieD"][6]. PLANETA[@KOLOR and Zwraca wszystkie dzieci PLANETA wzBa kontekstu @JEDNOSTKI] majce atrybuty KOLOR oraz JEDNOSTKI. Oto przykBad, w którym u|yto wBa[nie zapisu skróconego opisujc wzBy ssiadujce z wzBem elementów PLANETA: <?xml version="1.0" encoding="iso-8859-2"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="PLANETY"> <xsl:apply-templates select="PLANETA"/> <xsl:template> <xsl:template match="PLANETA"> <xsl:apply-templates select="MASA"/> <xsl:template> D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 35 36 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) <xsl:template match="MASA"> <xsl:value-of select="../NAZWA"/> <xsl:value-of select="../DZIEC"/> <xsl:value-of select="."/> <xsl:template> </xsl:stylesheet> Wszystko o XPointers Na pocztku tego rozdziaBu przygldali[my si Bczu, w którym u|yto wskaznika XPointer do wybrania konkretnego elementu z dokumentu: <PRZEGLD_FILMOWY xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="new" xlink:href="http://www.starpowdermovies.com/reviews.xml# xpointer(/child::*[position()=126]/child::*[position()=first()])"> Pan Blandings buduje dom swoich marzeD </PRZEGLD_FILMOWY> Cz[ XPointer wyglda tutaj tak: xpointer(/child::*[position()=126]/child::*[position()=first()])"> Wskaznik ten jest doBczany do adresu URI za znakiem #. By mo|e zauwa|yBe[, |e powy|sze wyra|enie XPointer jest bardzo podobne do wyra|eD XPath i nie dzieje si tak bez powodu  XPointers korzystaj z nieco rozszerzonych XPath. XPointers maj wszystkie mo|liwo[ci, które maj [cie|ki XPath. Oznacza to midzy innymi, |e XPointers mog skBada si z kroków lokalizacji wskazujcych jakie[ konkretne miejsce w dokumencie mimo, |e do samego dokumentu nic nie trzeba dodawa. Mo|na te| u|y funkcji id() wskazujcej konkretne elementy, pozwala to wskazywa elementy o zadanym atrybucie typu ID. Jednak z uwagi na to, |e XPointers specyfikacj XPath rozszerzaj, istniej pewne ró|nice. Najwiksza ró|nica polega na tym, |e jako |e u|ytkownik mo|e wybiera cz[ci dokumentów za pomoc myszy, XPointers umo|liwiaj wybieranie punktów i zakresów, a nie tylko zwykBych wzBów XPath. Punkt to punkt: jakie[ miejsce w dokumencie. Zakres skBada si z caBego kodu XML znajdujcego si midzy dwoma punktami, mo|e zawiera elementy i tekst. Aby obsBu|y punkty i zakresy, w XPointers ide wzBów rozszerzono do pojcia lokalizacji. Ka|da lokalizacja jest wzBem XPath, punktem lub zakresem. Wobec tego zbiory wzBów staj si w specyfikacji XPointer zbiorami lokalizacji. Wskazniki XPointers tworzy si tak samo, jak tworzy si [cie|ki XPath. XPointers skBadaj si ze [cie|ek lokalizacji podzielonych na kroki lokalizacji porozdzielane od siebie uko[nikami /. Na krok lokalizacji skBada si o[, test wzBa oraz zero lub wicej predykatów: o[::test_wzBa[predykat] Na przykBad w wyra|eniu child::PLANETA[position() = 5] osi jest child, PLANETA to test wzBa, a [position() = 5] jest predykatem. 36 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) Zcie|ki lokalizacji mog skBada si z jednego lub wicej kroków lokalizacji, na przykBad [cie|ka descendant::PLANETA/child::NAZWA skBada si z dwóch kroków i wybiera elementy NAZWA majce rodziców PLANETA. Mo|liwo[ci XPointers s wiksze ni| mo|liwo[ci XPath, wobec tego przyjrzymy si teraz wszystkim cz[ciom skBadowym: osiom, badaniu wzBów i predykatom, ale tym razem ju| z punktu widzenia XPointers. Osie XPointers O[ Opis ancestor Dotyczy przodków wzBa kontekstowego. Przodkami s rodzice wzBa kontekstowego, rodzice tych rodziców i tak dalej, a| po wzeB gBówny wBcznie. ancestor-or-self Dotyczy wzBa kontekstowego i jego przodków. attribute Dotyczy atrybutów wzBa kontekstowego. child Dotyczy dzieci wzBa kontekstowego. descendant Dotyczy potomków wzBa kontekstowego. Potomek to dziecko, dziecko dziecka i tak dalej. descendant-or-self Dotyczy wzBa kontekstowego i jego potomków. following Dotyczy wszystkich wzBów z dokumentu, do którego nale|y wzeB kontekstu, które znajduj si po nim. following-sibling Dotyczy wszystkich wzBów znajdujcych si na tym samym poziomie co wzeB kontekstu, ale za tym wzBem. namespace Dotyczy wzBów przestrzeni nazw wzBa kontekstu. parent Dotyczy wzBa rodzica wzBa kontekstowego. preceding Dotyczy wszystkich wzBów z dokumentu, do którego nale|y wzeB kontekstu, które znajduj si przed nim. preceding-sibling Dotyczy wszystkich wzBów znajdujcych si na tym samym poziomie co wzeB kontekstu, ale przed tym wzBem. self Zawiera wzeB kontekstowy. Wprawdzie osie s takie same jak w XPath, ale inne s ju| mo|liwo[ci badania wzBów. Testowanie wzBów XPointer Oto testy wzBów, których mo|na u|ywa w XPointers: Test wzBa Opis * Wybiera dowolne elementy. D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 37 38 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) node() Wybiera wzBy dowolnego typu. text() Wybiera wzBy tekstowe. comment() Wybiera wzBy komentarza. processing- Wybiera wzBy instrukcji przetwarzania. W nawiasach instruction() mo|na poda tak|e nazw instrukcji. point() Wybiera punkt w zasobie. range() Wybiera zakres w zasobie. Szczególn uwag zwró na dwa ostatnie testy: point() i range(). Odpowiadaj one dwóm nowym konstrukcjom wprowadzonym w XPointers, czyli punktom i zakresom, omówimy je dokBadnie pod koniec tego rozdziaBu. Aby rozszerzy XPath o punkty i zakresy, w specyfikacji XPointer wprowadzono pojcie lokalizacji, która mo|e by wzBem XPath, punktem lub zakresem. Jednak testy wzBów nadal pozostaj testami wzBów, nie s zamieniane na testy lokalizacji. Kiedy mówimy o testach wzBów, to w XPointers ich definicja zostaBa tak rozszerzona, aby mogBy one obj tak|e testy punktów i zakresów. Ta pewna niekonsekwencja zapewne zostanie ostatecznie wyja[niona w ostatecznej postaci rekomendacji XPointer. Predykaty XPointer XPointers obsBuguj takie same typy wyra|eD jak XPaths: " zbiory wzBów, " logiczne, " liczbowe, " napisów, " fragmenty drzewek wynikowych. Jak to ju| obja[niano, istniej specjalne funkcje dostosowane do u|ycia z poszczególnymi rodzajami wyra|eD, poza tym w XPointers istniej dodatkowe funkcje pozwalajce rzutowa cz[ci wyra|eD na odpowiednie typy XPath: boolean(), string(), text() oraz number(). Dodano te| funkcj unique() umo|liwiajc sprawdzenie, czy XPointer wskazuje pojedyncz lokalizacj, a nie wiele lub |adn. W XPointers dodano te| funkcje zwracajce zbiory lokalizacji, funkcje te zostan teraz omówione. Funkcje zbiorów lokalizacji XPointer W XPointers zdefiniowano cztery funkcje zwracajce zbiory lokalizacji: Funkcja Opis id() Zwraca element o zadanym identyfikatorze. 38 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) root() Zwraca zbiór lokalizacji skBadajcy si jedynie z wzBa gBównego. here() Zwraca zbiór lokalizacji skBadajcy si jedynie z lokalizacji bie|cej. origin() Ma takie samo znaczenie jak here(), ale ta funkcja u|ywana jest w Bczach zewntrznych. Funkcja id() jest t sam funkcj, co zdefiniowana w XPath  zwraca wszystkie lokalizacje o zadanym identyfikatorze. Funkcja root() dziaBa dokBadnie tak jak znak /: odwoBuje si do wzBa gBównego (nie jest to wzeB elementu gBównego, ale wzeB dotyczcy caBego dokumentu). Funkcja root() nie nale|y obecnie do specyfikacji XPath, ale wystpuje w XPointer. Nie wiadomo jeszcze, czy pozostanie tam tak|e w ostatecznej rekomendacji. Funkcja here() odnosi si do elementu bie|cego. Jest u|yteczna, gdy| XPointers zwykle znajduj si w wzBach tekstowych lub warto[ciach atrybutów i konieczne mo|e by odwoBanie si do bie|cego elementu, a nie do bie|cego wzBa. ZaBó|my na przykBad, |e chcesz odwoBa si do drugiego od koDca elementu NAZWA znajdujcego si na tym samym poziomie, co element zawierajcy XPointer  zastosowa nale|y wtedy wyra|enie: here()/preceding-sibling::NAZWA[position() = 2] Funkcja origin() jest bardzo podobna do here(), ale u|ywa jej si w Bczach zewntrznych, które nale|e mog do innego dokumentu, z którego Bcze zostaBo uruchomione. Mo|e to by bardzo przydatne, je[li samo Bcze nale|y do bazy Bczy i nie nale|y odwoBywa si do elementu, do którego Bcze nale|y, ale do pierwotnego elementu, z którego zostaBo uruchomione. W XPointers mo|na u|ywa równie| skBadni skróconej. Poni|ej podano kilka przykBadów opartych na pliku planety.xml: <?xml version="1.0" encoding="iso-8859-2"?> <?xml-stylesheet type="text/xml" href="planety.xsl"?> <PLANETY> <PLANETA> <NAZWA>Merkury</NAZWA> <MASA JEDNOSTKI="(Ziemia=1)">.0553</MASA> <DZIEC JEDNOSTKI="dni">58.65</DZIEC> <PROMIEC JEDNOSTKI="mile">1516</PROMIEC> <GSTOZ JEDNOSTKI="(Ziemia=1)">.983</GSTOZ> <ODLEGAOZ JEDNOSTKI="miliony mil">43.4<ODLEGAOZ><!--w peryhelium--> </PLANETA> <PLANETA> <NAZWA>Wenus</NAZWA> <MASA JEDNOSTKI="(Ziemia=1)">.815</MASA> <DZIEC JEDNOSTKI="dni">116.75</DZIEC> <PROMIEC JEDNOSTKI="mile">3716</PROMIEC> <GSTOZ JEDNOSTKI="(Ziemia=1)">.943</GSTOZ> <ODLEGAOZ JEDNOSTKI="miliony mil">66.8<ODLEGAOZ><!--w peryhelium--> </PLANETA> <PLANETA> D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 39 40 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) <NAZWA>Ziemia</NAZWA> <MASA JEDNOSTKI="(Ziemia=1)">1</MASA> <DZIEC JEDNOSTKI="dni">1</DZIEC> <PROMIEC JEDNOSTKI="mile">2107</PROMIEC> <GSTOZ JEDNOSTKI="(Ziemia=1)">1</GSTOZ> <ODLEGAOZ JEDNOSTKI="miliony mil">128.4<ODLEGAOZ><!--w peryhelium--> </PLANETA> </PLANETY> Oto obiecane przykBady wskazników XPointers. Zwró uwag, |e mo|na u|ywa znanych z XPath nawiasów kwadratowych powodujcych wybranie konkretnej lokalizacji ze zbioru lokalizacji. PrzykBad Znaczenie PLANETA Zwraca elementy PLANETA bdce dziemi wzBa (czyli wzBa kontekstowego). * Zwraca wszystkie dzieci bie|cego wzBa bdce elementami. text() Zwraca wszystkie dzieci bie|cego wzBa bdce wzBami tekstowymi. @JEDNOSTKI Zwraca atrybut JEDNOSTKI bie|cego wzBa. @* Zwraca wszystkie atrybuty wzBa kontekstu. PLANETA[3] Zwraca trzecie dziecko PLANETA wzBa kontekstu. PLANETA[first()] Zwraca pierwsze dziecko PLANETA wzBa kontekstu. */PLANETA Zwraca wszystkie wnuki (dzieci dzieci) PLANETA wzBa kontekstu. /PLANETY/PLANETA[3]/ Zwraca drugi element NAZWA trzeciego elementu NAZWA[2] PLANETA elementu PLANETY. //PLANETA Zwraca wszystkich potomków PLANETA wzBa gBównego. PLANETY//PLANETA Zwraca wszystkich potomków PLANETA elementów PLANETY bdcych dziemi wzBa bie|cego. //PLANETA/NAZWA Zwraca elementy NAZWA majce rodzica PLANETA. . Zwraca wzeB kontekstu. .//PLANETA Zwraca elementy PLANETA bdce potomkami wzBa kontekstowego. .. Zwraca rodzica wzBa kontekstowego. ../@JEDNOSTKI Zwraca atrybut JEDNOSTKI rodzica wzBa kontekstowego. PLANETA[NAZWA] Zwraca dzieci PLANETA wzBa kontekstowego majce dzieci NAZWA. 40 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) PLANETA[NAZWA="Wenus Zwraca dzieci PLANETA wzBa kontekstowego majce "] dzieci NAZWA z tre[ci Wenus. PLANETA[@JEDNOSTKI=" Zwraca dzieci PLANETA wzBa kontekstu majce atrybut dzieD"] JEDNOSTKI o warto[ci dzieD. PLANETA[6][@JEDNOSTK Zwraca szóste dziecko PLANETA wzBa kontekstu, je[li I="dzieD"] ma ono atrybut JEDNOSTKI o warto[ci dzieD. To samo wyra|enie mo|na zapisa te| jako PLANETA[@JEDNOSTKI="dzieD"][6]. PLANETA[@KOLOR and Zwraca wszystkie dzieci PLANETA wzBa kontekstu @JEDNOSTKI] majce atrybuty KOLOR oraz JEDNOSTKI. W XPath mo|na wybiera jedynie dane na poziomie wzBa. Jest to wystarczajce, kiedy u|ywa si oprogramowania obsBugujcego XML jako zbiór wzBów, na przykBad w przypadku przeksztaBceD XSL, ale czasem to za maBo. Na przykBad u|ytkownik u|ywajcy wy[wietlonego dokumentu XML mo|e klikn myszk jaki[ punkt lub wybra zakres dokumentu (takie obszary nie musz si zaczyna ani koDczy na granicach wzBów, mog zawiera ró|ne drzewka i ich fragmenty). W celu zapewnienia dokBadniejszej kontroli nad danymi XML w XPointers udostpniono punkty i zakresy. U|ycie punktów XPointer Zgodnie ze specyfikacj XPointer do zdefiniowania punktu potrzebne s dwie rzeczy: wzeB oraz indeks  caBkowita liczba dodatnia lub zero. WzeB stanowi odniesienie dla punktu, indeks okre[la, jak daleko punkt jest od swojego odniesienia. Powstaje jednak pytanie: w czym mierzy indeks? W znakach czy w wzBach? Istniej dwa rodzaje wzBów i w obu z nich indeks wylicza si inaczej. Punkty wzBowe Kiedy wzeB odniesienia mo|e mie wzBy dzieci (czyli jest wzBem elementu lub wzBem gBównym), nazywamy go punktem wzBowym. Indeks punktu wzBowego mierzony jest wzBami potomnymi. Indeks takiego punktu nie mo|e by wikszy od liczby dzieci wzBa odniesienia. Je[li u|yje si indeksu zero, punkt znajdzie si bezpo[rednio przed wzBami dziemi. Indeks 5 oznacza umieszczenie punktu zaraz za pitym wzBem dzieckiem. W przypadku punktów wzBowych mo|na u|y osi: wzBy ssiadujce punktu to dzieci wzBa odniesienia znajdujce si przed i za punktem. Same punkty jednak nie maj dzieci. Punkty znakowe Je[li wzeB odniesienia nie mo|e zawiera wzBów potomnych, a tylko tekst, indeks wyra|any jest w znakach. Punkty tego typu nazywamy punktami znakowymi. Indeks punktów znakowych musi by nieujemn liczb caBkowit oraz musi by nie wikszy ni| dBugo[ tekstu w wzle. Je[li indeks jest zerem, punkt znajduje si tu| przed pierwszym znakiem. D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 41 42 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) Indeks 5 wskazuje punkt znajdujcy si zaraz za pitym znakiem. Punkty znakowe nie maj wzBów ssiadujcych ani dzieci. Na przykBad element DOKUMENT mo|na potraktowa jako wzeB odniesienia w dokumencie nastpujcym: <DOKUMENT> Witamy! </DOKUMENT> W tym wypadku mamy siedem punktów znakowych, po jednym przed ka|dym znakiem. Punkt znakowy o indeksie 0 znajduje si tu| przed pierwszym znakiem W, o indeksie 1 przed i i tak dalej. Warto pamita, |e w specyfikacji XPointer zestawy kolejnych spacji zbijane s w jedn spacj. Punktów nie mo|na te| umieszcza wewntrz etykiet pocztkowych i koDcowych, instrukcji przetwarzania ani komentarzy czy jakichkolwiek innych znaczników. Tworzenie punktów W celu utworzenia punktu u|y nale|y w predykacie funkcji start-point(), na przykBad tak: start-point()[position()=10] Oto przykBad: zaBó|my, |e chcemy umie[ci punkt tu| przed liter e w sBowie Merkury w elemencie NAZWA: <?xml version="1.0" encoding="iso-8859-2"?> <?xml-stylesheet type="text/xml" href="planety.xsl"?> <PLANETY> <PLANETA> <NAZWA>Merkury</NAZWA> <MASA JEDNOSTKI="(Ziemia=1)">.0553</MASA> <DZIEC JEDNOSTKI="dni">58.65</DZIEC> <PROMIEC JEDNOSTKI="mile">1516</PROMIEC> <GSTOZ JEDNOSTKI="(Ziemia=1)">.983</GSTOZ> <ODLEGAOZ JEDNOSTKI="miliony mil">43.4<ODLEGAOZ><!--w peryhelium--> </PLANETA> . . . Mo|emy u|y nastpujcego wyra|enia: xpointer(/PLANETY/PLANETA[1]/NAZWA/text()/start- point()[position()=1]) Analogicznie signicie przed cyfr 6 w tek[cie 58.65 w elemencie DZIEC wymaga bdzie wyra|enia: xpointer(/PLANETY/PLANETA[1]/DZIEC/text()/start- point()[position()=3]) U|ycie zakresów XPointer Zakresy mo|na tworzy za pomoc dwóch punktów: pocztkowego i koDcowego, byle tylko oba znajdowaBy si w jednym dokumencie i by punkt pocztkowy nie byB za punktem koDcowym (je[li 42 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) oba punkty s takie same, mówimy o zakresie zdegenerowanym). Zakres to wszystkie struktury XML midzy punktem pocztkowym a koDcowym. Zakres nie musi by zamknitym fragmentem dokumentu, mo|e na przykBad rozciga si midzy ró|nymi poddrzewkami dokumentu. Jedyne, czego si wymaga, to aby oba punkty byBy w tym samym dokumencie. Tworzenie zakresów W celu utworzenia zakresu u|ywa si dwóch [cie|ek lokalizacji rozdzielonych sBowem kluczowym to zamknite w funkcji xpointer(). Oto przykBad zakresu zawierajcego caBe sBowo Merkury z dokumentu planety.xml: xpointer(/PLANETY/PLANETA[1]/NAZWA/text()/start- point()[position()=0] to /PLANETY/PLANETA[1]/NAZWA/text()/start- point()[position()=7]) Z kolei utworzenie zakresu zawierajcego caBy tekst z warto[ci promienia Merkurego, czyli 1516, bdzie miaB posta: xpointer(/PLANETY/PLANETA[1]/PROMIEC/text()/start- point()[position()=0] to /PLANETY/PLANETA[1]/PROMIEC/text()/start- point()[position()=4]) Funkcje zakresu Specyfikacja XPointer opisuje funkcje obsBugujce zakresy: Funkcja Opis range-to(zbiór- Pobiera lokalizacje i zwraca zakres caBkowicie je lokalizacji) obejmujcy. Na przykBad lokalizacja elementu jest przeksztaBcana na zakres przez zwrócenie rodzica elementu jako wzBa odniesienia, punktu pocztkowego jako liczby ssiadów elementu poprzedzajcego oraz punktu koDcowego jako punktu o jeden wikszego od punktu pocztkowego. Innymi sBowy funkcja ta ma wiza ze sob lokalizacje i zakresy. range-inside(zbiór- Zwraca zakres lub zakresy obejmujce wszystkie lokalizacji) lokalizacje z podanego zbioru. Je[li na przykBad przekazana zostanie lokalizacja elementu, wynikowy zakres zawieraB bdzie wszystko, co jest wewntrz elementu. start-point(zbiór- Zwraca zbiór lokalizacji zawierajcy punkty pocztkowe. lokalizacji) Punkty te s punktami pocztkowymi zakresów, które zawieraByby wszystkie przekazane lokalizacje. Na przykBad start-point(//PLANETA[2]) zwróci punkt znajdujcy si zaraz za drugim elementem PLANETA, natomiast start-point(//PLANETA) zwróci zbiór lokalizacji punktów znajdujcych si przed elementami PLANETA. end-point(zbiór- DziaBa tak samo jak start-point(), ale zwraca D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 43 44 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) lokalizacji) punkty koDcowe tych samych zakresów obejmujcych przekazane lokalizacje. U|ycie zakresów napisu Specyfikacje XPointer zawiera tak|e funkcj wyszukiwania napisów string-range(). Funkcja ta zwraca zbiór lokalizacji z jednym zakresem dla ka|dego niezachodzcego na inne wyszukiwanego napisu. Podczas wyszukiwania uwzgldniana jest wielko[ liter. Mo|na te| wskaza opcjonalne argumenty indeks i dBugo[, które okre[laj ilo[ znaków po wyszukanym napisie, gdzie zakres ma si zaczyna i ile znaków ma zawiera. Oto ogólna skBadnia funkcji string-range(): string-range(zbiór-lokalizacji, napis, [indeks, [dBugo[]]) Dopasowywanie do napisu pustego Napis pusty "" znaleziony zostanie bezpo[rednio przed jakimkolwiek znakiem, zatem takiego wzorca mo|na u|y do wybrania samego pocztku napisu. I tak poni|sze wyra|enie zwraca zbiór lokalizacji zawierajcy zakresy obejmujce wszystkie wystpienia sBowa Saturn: string-range(/, "Saturn") Aby wybra konkretne wystpienie napisu ze zbioru wynikowych lokalizacji, u|y nale|y nawiasów kwadratowych. Poni|sze wyra|enie zwróci zakres obejmujcy drugie wystpienie sBowa Saturn: string-range(/, "Saturn")[2] Poni|sze wyra|enie z kolei zwróci zakres obejmujcy trzecie wystpienie sBowa Jowisz w elemencie NAZWA szóstego elementu PLANETA: string-range(//PLANETA[6]/NAZWA, "Jowisz")[3] Mo|na te| wskaza zakres przy u|yciu argumentów indeks (od 1) i dBugo[. Poni|sze wyra|enie zwraca zakres obejmujcy litery sz w trzecim wystpieniu sBowa Jowisz w elemencie NAZWA w szóstym elemencie PLANETA: string-range(//PLANETA[6]/NAZWA, "Jowisz", 5, 2)[3] Je[li nale|y wskaza pojedynczy punkt, mo|na u|y zakresu zdegenerowanego (o zerowej dBugo[ci): string-range(//PLANETA[6]/NAZWA, "Jowisz", 5, 0)[3] Innym sposobem uzyskania pojedynczego punktu jest u|ycie funkcji start-point() zwracajcej punkt pocztkowy zakresu: start-point(string-range(//PLANETA[6]/NAZWA, "Jowisz", 5, 2)[3]) Poni|sze wyra|enie wskazuje drugi znak @ w dowolnym wzle tekstowym w dokumencie wraz z picioma znakami za @: string-range(/, "@", 1, 6)[2] 44 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc RozdziaB 1 f& Pierwsze kroki (NagBówek strony) Skrócony zapis XPointer Z uwagi na to, |e tak czsto zdarza si odwoBywa do elementów wedBug lokalizacji lub identyfikatora, w specyfikacji XPointer przewidziano skrócone formy zapisu. Oto przykBad; zaBó|my, |e chcemy okre[li lokalizacj elementu DZIEC dla planety Wenus w pliku planety.xml: <?xml version="1.0" encoding="iso-8859-2"?> <?xml-stylesheet type="text/xml" href="planety.xsl"?> <PLANETY> <PLANETA> <NAZWA>Merkury</NAZWA> <MASA JEDNOSTKI="(Ziemia=1)">.0553</MASA> <DZIEC JEDNOSTKI="dni">58.65</DZIEC> <PROMIEC JEDNOSTKI="mile">1516</PROMIEC> <GSTOZ JEDNOSTKI="(Ziemia=1)">.983</GSTOZ> <ODLEGAOZ JEDNOSTKI="miliony mil">43.4<ODLEGAOZ><!--w peryhelium--> </PLANETA> <PLANETA> <NAZWA>Wenus</NAZWA> <MASA JEDNOSTKI="(Ziemia=1)">.815</MASA> <DZIEC JEDNOSTKI="dni">116.75</DZIEC> <PROMIEC JEDNOSTKI="mile">3716</PROMIEC> <GSTOZ JEDNOSTKI="(Ziemia=1)">.943</GSTOZ> <ODLEGAOZ JEDNOSTKI="miliony mil">66.8<ODLEGAOZ><!--w peryhelium--> </PLANETA> . . . OdwoBanie bdzie wygldaBo strasznie: http://www.starpowdermovies.com/planety.xml# xpointer(/child::*[position()=1]/ child::*[position()=2]/child::*[position()=3]) Jak jednak wiesz ju| z wykBadu o XPath, mo|na zastosowa wiele skrótów  na przykBad [position()=x] mo|na zapisa jako [x]. W XPointers mo|na stosowa skróty jeszcze dalej idce, mianowicie mo|na pomin nawiasy kwadratowe i wtedy nasze wyra|enie przybierze posta: http://www.starpowdermovies.com/planety.xml#1/2/3 Kiedy widzisz zestawione w ten sposób kroki lokalizacji zapisane pojedynczymi liczbami, kroki te odpowiadaj poBo|eniu elementów. Podobnie mo|na u|y jako kroków lokalizacji sBów oznaczajcych warto[ci atrybutów typu ID elementu. ZaBó|my na przykBad, |e element PLANETA opisujcy Wenus ma identyfikator Planeta_MiBo[ci (czyli atrybut ID zostaB w DTD zadeklarowany jako typu ID). <?xml version="1.0" encoding="iso-8859-2"?> <?xml-stylesheet type="text/xml" href="planety.xsl"?> <PLANETY> <PLANETA> <NAZWA>Merkury</NAZWA> <MASA JEDNOSTKI="(Ziemia=1)">.0553</MASA> <DZIEC JEDNOSTKI="dni">58.65</DZIEC> <PROMIEC JEDNOSTKI="mile">1516</PROMIEC> D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc 45 46 Cz[ I f& Podstawy obsBugi systemu WhizBang (NagBówek strony) <GSTOZ JEDNOSTKI="(Ziemia=1)">.983</GSTOZ> <ODLEGAOZ JEDNOSTKI="miliony mil">43.4<ODLEGAOZ><!--w peryhelium--> </PLANETA> <PLANETA ID="Planeta_MiBo[ci"> <NAZWA>Wenus</NAZWA> <MASA JEDNOSTKI="(Ziemia=1)">.815</MASA> <DZIEC JEDNOSTKI="dni">116.75</DZIEC> <PROMIEC JEDNOSTKI="mile">3716</PROMIEC> <GSTOZ JEDNOSTKI="(Ziemia=1)">.943</GSTOZ> <ODLEGAOZ JEDNOSTKI="miliony mil">66.8<ODLEGAOZ><!--w peryhelium--> </PLANETA> . . . Teraz do elementu DZIEC opisujcego Wenus mo|emy dosta si tak: http://www.starpowdermovies.com/planety.xml# xpointer(//child::*[id("Planeta_MiBo[ci")]/child::*[position()=3] Tak|e tym razem zapis skrótowy jest znacznie prostszy: http://www.starpowdermovies.com/planety.xml#Planeta_MiBo[ci/3 W tym przykBadzie u|yto funkcji id(); aby jej u|y, konieczne jest deklarowanie atrybutów identyfikujcych jako nale|cych do typu ID. Jednak nie wszystkie dokumenty maj przecie| DTD lub schemat XML, zatem XPointers umo|liwiaj okre[lenie wzorców alternatywnych przez podanie wielu wskazników XPointers. Oto przykBad zBo|onego zapisu: http://www.starpowdermovies.com/planety.xml# xpointer(id("Planeta_MiBo[ci"))xpointer(//*[@id="Planeta_MiBo[ci"]/ 3 Je[li zawiedzie pierwszy XPointer u|ywajcy funkcji id(), u|yty zostanie drugi, który wyszukuje element zawierajcy atrybut o nazwie ID majcy |dan warto[. Jednak dopiero przyszBo[ poka|e, jaka cz[ tej funkcjonalno[ci zostanie zaimplementowana w aplikacjach. Na tym koDczymy nasz wykBad na temat XLinks i XPointers. Jak si mogBe[ przekona, s to narzdzia o bardzo du|ych mo|liwo[ciach, znacznie wikszych od zwykBych hiperBczy HTML. Jednak oba standardy zostaBy zaproponowane ju| kilka lat temu i nadal nie ma |adnych ich implementacji. Mo|na mie nadziej, |e ju| wkrótce si to zmieni. 46 D:\Kompakt !!!\Kompakt\Ksiazki\XML Vademecum profesjonalisty\r10-01.doc

Wyszukiwarka

Podobne podstrony:
r10 01 (3)
r10 01
t informatyk12[01] 02 101
r11 01
2570 01
introligators4[02] z2 01 n
Biuletyn 01 12 2014
beetelvoiceXL?? 01
01
2007 01 Web Building the Aptana Free Developer Environment for Ajax

więcej podobnych podstron