Strona 5 |
Procesor XSL przegląda źródło pliku XML próbując dopasować któryś z szablonów. Gdy to się uda wykonywane są instrukcje wewnątrz
tego szablonu.
|
Strona 6 |
Część dokumentu do których odwołuje się szablon określany jest przez ścieżkę lokalizacji. Jej składnię określa specyfikacja
XPath. Najprostsze przykłady przypominają adresowanie plików w strukturze katalogów. ( arkusz stylów )
|
Strona 7 |
Przetwarzanie zawsze zaczyna się od szablonu określonego przez atrybut match="/" . Taki szablon pasuje do głównego węzła (jedynego
dziecka elementu dokumentu, w rozpatrywanym przypadku "source"). Wiele szablonów stylów nie zawiera tego szablonu wprost.
W takim przypadku używany jest szablon domyślny, zawierający tylko jedną instrukcję: . Instrukcja ta nakazuje: przetwarzaj wszystkie dzieci dla tego węzła, włączając w to węzły tekstowe. Dla porównania: arkusz stylów i arkusz stylów . Gdy szablon dla węzła istnieje, domyślny nie zostanie użyty ( arkusz stylów ). Chcąc dołączyć potomków węzła, należy wprost zażądać ich szablonów ( arkusz stylów ).
|
Strona 8 |
Wiele ścieżek może być połączonych razem przez "|". Szablon stosowany jest wtedy do elementów wybranych przez dowolną z tych
ścieżek ( arkusz stylów ). Maska "*" wybiera wszystkie elementy. Różnicę obrazuje porównanie arkusz stylów i arkusz stylów .
|
Strona 9 |
Bardzo częstym elementem występującym w ścieżce jest "//". Użyte na początku ścieżki znaczy: wybierz wszystkie węzły w dokumencie
o podanym typie ( arkusz stylów ). Występując w środku ścieżki, ma znaczenie: wybierz wszystkie węzły w dokumencie pojawiąjące się wewnątrz węzła wybranego
przez początek ścieżki ( arkusz stylów ).
|
Strona 10 |
Używając atrybutu mode można określić kilka równoległych trybów przetwarzania, z których każdy produkuje inny rezultat. arkusz stylów pokazuje przypadek gdy jeden z trybów nie istnieje.
|
Strona 11 |
Często zdarza się, że kilka szablonów pasuje do jednego elementu w źródłowym dokumencie. Konflikt, który z nich powinien być
użyty, musi być wtedy rozwiązany.
Atrybut priority może wskazywać wprost kolejność wyboru szablonów, lecz gdy nie jest podany, kolejność ustalana jest niejawnie
przy użyciu kilku reguł. arkusz stylów oraz arkusz stylów różnią się priorytetem swoich szablonów. arkusz stylów pokazuje domyślną akcję w przypadku braku atrybutów priority. Szablon CCC ma niższy priorytet niż CCC/CCC, gdyż ma szerszy
zakres (jest mniej specyficzny). Dla porównania: arkusz stylów oraz arkusz stylów . W ich przypadku szablon CCC ma niższy priorytet zarówno od CCC/CCC jak i AAA/CCC/CCC, lecz dwa ostatnie mają równy priorytet.
W takim przypadku procesor XSLT może sygnalizować błąd lub też może wybrać wśród szablonów o tym samym priorytecie - ostatni.
arkusz stylów : szablon mniej specyficzny "*" ma niższy priorytet niż CCC. Obliczone priorytety zmieniają się od -0.5 do 0.5. Specyfikacja
XSLT podaje w tym temacie więcej szczegółów.
|
Strona 32 |
arkusz stylów oraz arkusz stylów pokazują różne sposoby przypisania wartości do xsl:variable, a arkusz stylów i arkusz stylów - przypisania do xsl:param.
|
Strona 33 |
Arkusz stylów może zawierać zmienne o tej samej nazwie. arkusz stylów pokazuje sposób na uzyskanie wartości zmiennej globalnej o nazwie identycznej jak lokalna. arkusz stylów pokazuje błędny sposób. Wartość lokalnej zmiennej jest przypisana do elementu xsl:when. Poza nim, obowiązuje zatem globalna
zmienna.
|
Strona 34 |
Parametry dla szablonu mogą być przekazywane przy użyciu elementu xsl:with-param. Jeśli szablon zawiera element xsl:param
z tą samą nazwą jak nazwa atrybutu xsl:with-param, to jego wartość jest użyta. arkusz stylów pokazuje typowy przykład. Jeśli istnieje konieczność przekazania zmiennej, należy zdefiniować ją przy użyciu elementu xsl:param.
arkusz stylów pokazuje błędną próbę rozwiązania tego problemu.
|
Strona 35 |
Zmienna może przechowywać jako swoją wartość fragment drzewa wynikowego. Operacje dozwolone na fragmencie drzewa wynikowego
są podzbiorem tych, których użyć można na zbiorze węzłów. Dana operacja jest dozwolona na fragmencie drzewa wtedy gdy operacja
tej można byłoby użyć na łańcuchu znaków (z ewentualną, wstępną konwersją łańcucha znaków do liczby lub wartości logicznej).
W szczególności, na fragmencie drzewa wynikowego, nie jest dozwolone użycie operatorów: /, // i []. Gdy operacja wykonywana
jest na danym framencie drzewa wynikowego, jest wykonywana dokładnie tak jak byłaby wykonywna na odpowiadającym jej zbiorze
węzłów. Dla porównania: arkusz stylów oraz arkusz stylów .
|
Strona 36 |
Przykład ilustruje ważną różnicę w określaniu wartości zmiennej.
|
Strona 37 |
Funkcja number() przekształca swój argument do postaci typu numerycznego. arkusz stylów demonstruje konwersję łańcucha znaków, arkusz stylów - konwersję wartości logicznych: true i false (prawda i fałsz).
|
Strona 38 |
Dodawanie, odejmowanie i mnożenie używają zwyczajowej składni ( arkusz stylów ). Natomiast składnia dzielenia różni się nieco od powszechnie przyjętej. Ukośnik "/" ma już przypisaną funkcję we wzorcach,
dlatego też operatorem dzielenia jest słowo kluczowe div ( arkusz stylów ). Dopełniającym operatorem jest mod , który zwraca resztę z dzielenia całkowitoliczbowego ( arkusz stylów ).
|
Strona 39 |
Funkcja sum() sumuje wszystkie numery w wybranych węzłach. arkusz stylów sumuje wszystkie numery, a arkusz stylów tylko nieparzyste.
|
Strona 40 |
Funkcje ceiling(), floor() i round() konwertują liczbę zmiennoprzecinkową do całkowitej.
|
Strona 41 |
Funkcja string() przekształca swój argument do łańcucha znaków. W większości przypadków nie ma potrzeby używać jej wprost,
gdyż wywoływana jest w sposób niejawny. arkusz stylów pokazuje przykład konwersji wartości numerycznej do łańcucha znaków. Szczególną uwagę należy zwrócić na rezultat dzielenia
przez zero.
|
Strona 42 |
Test sprawdzający, czy wartość elementu reprezentuje liczbę.
|
Strona 43 |
arkusz stylów pokazuje przykład, w którym łańcuchy znaków są argumentami funkcji boolean(). Łańcuch taki ma wartość logiczną true (prawda)
wtedy i tylko wtedy gdy jego długość jest różna od zera. arkusz stylów demonstruje tekst przekształcony do typu liczbowego, wtedy użyty jako argument funkcji boolean(). arkusz stylów porównuje "0" jako łańcuch znaków oraz jako typ liczbowy. arkusz stylów używa zbiorów węzłów jako argumentów funkcji boolean().
|
Strona 44 |
Funkcja not zwraca wartość logiczną true (prawda) jeżeli jej argument ma wartość logiczną false (fałsz), lub false - w przeciwnym
przypadku.
|
Strona 45 |
funkcje true() oraz false() są użyteczne gdy w trakcie programowania zachodzi potrzeba przetestowania pewnych warunków.
|
Strona 46 |
Funkcja lang() zwraca wartość true lub false zależnie czy język węzła kontekstowego określonego przez atrybut xml:lang
jest taki sam bądź też jest podjęzykiem języka określonego w argumencie. Język w kontekście danego węzła jest określony przez
bezpośrednie użycie atrybutu xml:lang, a w przypadku jego braku - przez najbliższego przodka tego węzła, który taki atrybut
posiada. W przypadku gdy żaden z przodków nie posiada atrybutu xsl:lang, funkcja lang() zwraca wartość false. Gdy atrybut
zostanie odnaleziony, porównywana jest jego wartość z argumentem funkcji, przy czym ignorowana jest wielkość liter oraz pomijany
jest ewentualny (dowolny) przyrostek w wartości atrybutu.
|
Strona 47 |
Funkcja string() przekształca swój argument do łańcucha znaków. W większości przypadków nie ma potrzeby używać jej wprost,
gdyż wywoływana jest w sposób niejawny. arkusz stylów pokazuje przykład konwersji wartości numerycznej do łańcucha znaków. Szczególną uwagę należy zwrócić na rezultat dzielenia
przez zero.
|
Strona 48 |
Funkcja concat() zwraca konkatenację (złączenie) swoich argumentów.
|
Strona 49 |
Funkcja starts-with() zwraca wartość logiczną true (prawda) wtedy gdy łańcuch znaków z pierwszego argumentu zaczyna się
tak jak łańcuch znaków jej drugiego argumentu. Funkcja contains() zwraca wartość true jeśli łańcuch znaków z pierwszego argumentu
zawiera łańcuch znaków z argumentu drugiego. W każdym innym przypadku od wymienionych, obie funkcje zwracają wartość logiczną
false (fałsz).
|
Strona 50 |
Funkcja substring-before() zwraca fragment łańcucha znaków danego w pierwszym argumencie, takiego że poprzedza on pierwsze
wystąpienie łańcucha znaków danego w drugim argumencie. Działanie funkcji substring-after() jest analogiczne, lecz w tym przypadku
wybierany jest fragment łańcucha znaków występujący po pierwszym wystąpieniu. Funkcja substring() zwraca fragment łańcucha
znaków pierwszego argumentu, zaczynając od pozycji określonej w drugim argumencie i długości danej w trzecim. Jeśli trzeci
argument nie jest podany, zwracany jest fragment łańcuch do końca łańcucha źródłowego. Znaki w łańcuchu numerowane są od 1.
( arkusz stylów ). arkusz stylów demonstruje przypadek, kiedy wartości argumentów wykraczają poza zakres łańcucha lub gdy nie są liczbami całkowitymi. Zwracany
fragment łańcucha znaków zawiera te znaki, dla których pozycja znaków jest większa lub równa drugiemu argumentowi oraz gdy
trzeci argument jest podany - pozycja ta musi być mniejsza niż suma drugiego i trzeciego argumentu.
|
Strona 51 |
Funkcja string-length() zwraca liczbę znaków w łańcuchu. Funkcja normalize-space() zwraca swój argument po znormalizowaniu
białych znaków, czyli - usunięciu wszystkich początkowych i końcowych białych znaków oraz przez zastąpienie każdej ich sekwencji
wewnątrz jedną spacją.
|
Strona 52 |
Rezultatem działania funkcji translate() jest łańuch znaków uzyskany następująco: w łańcuchu znaków z pierwszego argumentu
zamieniane są wszystkie wystąpienia znaków z drugiego argumentu na odpowiadające im (według pozycji) znaki trzeciego argumentu.
Jeżeli znak występuje więcej niż raz w drugim argumencie, wtedy brane pod uwagę jest pierwsze wystąpienie. Jeżeli trzeci argument
jest dłuższy niż drugi, to nadmiarowe znaki są ignorowane.
|
Strona 58 |
Element xsl:output umożliwia arkuszowi stylów na określenie ostatecznego formatu generowanego dokumentu. Procesor XSLT powinien
stosować się do wskazówek umieszczonych w xsl:output, nie jest jednak do tego obligowany. Element xsl:output może wystąpić
tylko jako element najwyższego poziomu. arkusz stylów używa html jako formatu wyjściowego, a arkusz stylów - xml. Szczególną uwagę zwrócić należy na różnice w sposobie zapisu pustych znaczników.
|
Strona 59 |
W przypadku braku elementu xml:output domyślną metodą zapisu jest xml ( arkusz stylów ). Gdy element główny dokumentu wyjściowego ma wartość html (wielkość liter dowolna) oraz nie posiada atrybutu 'xmlns', to
wtedy do sapizu użyta zostaje metoda html ( arkusz stylów ).
|
Strona 60 |
Metoda zapisu html nie powinna zapisywać znaczników końca dla pustych elementów (wg specyfikacji HTML). Nie powinna też zmieniać
treści wewnątrz elementów script oraz style (jak demonstruje to źródło najniższego okna pośrodku, oglądane w przeglądarce).
Można porównać: arkusz stylów ; natomiast po więcej szczegółów sięgnąć należy do specyfikacji XSLT.
|
Strona 61 |
Przy użyciu atrybutu encoding można określić preferencję dla używanego kodowania. Metoda zapisu html powinna dodać element
META określający użyte kodowanie znaków, zaraz za początkowym znacznikiem elementu HEAD. arkusz stylów używa kodowania UTF-8 dla danych wyjściowych, arkusz stylów - UTF-16, a arkusz stylów - Cp1250. arkusz stylów - należy obejrzeć źródło najniższego, środkowego okna w przeglądarce. Źródło xml zawiera znaki, które nie są dostępne w danym
kodowaniu, dlatego też muszą zostać eskejpowane.
|
Strona 62 |
Metoda wyjściowa text buduje drzewo wynikowe przez przepisanie wprost wartości łańcuchów tekstowych dla każdego węzła tekstowego
w źródłowym dokumencie, według kolejności ich występowania. Aby obejrzeć przykład, należy odwołać się do źródła dokumentu
w przeglądarce.
|