
Wstęp do XML
XML - eXtensible Markup Language, czyli Rozszerzalny Język Zanczników. XML jest młodszą wersją SGML, do którego rodziny należy HTML. XML nie jest pojedynczym językiem lecz całą rodziną języków skłądajacą się z tak zwanych dialektów. Każdy programista może stworzyć własny dialekt języka XML. Często uważa się, że celem XML jest zastąpienie HTML, jest to jednak nieprwda ponieważ W3C oświadczyło, że:
- XML nie jest samodzielnym językiem lecz całą grupą języków opartych na tych samych zasadach
- Dokumenty XML nie są tekstem przeznaczonym bezpośrednio do czytania
- XML nie jest 100% nowym językiem
- XML ma podobne cechy do HTML - ale nie ma z nim nic wspólnego
Faktem jest, że do rodziny XML należy XHTML 1.0 - następca HTML ponieważ W3C ogłosiła i to już całkiem dawno, że prace nad HTML nie bedą kontynuowane.
Dokument XML i jego składnia
Dokumenty XML nie są dokumentami przeznaczonymi bespośrednio do czytania, a za ich formatowanie odpowiada zewnetrzny plik styli. XML posiada swój własny język styli XSL, czyli Rozszerzony Język Styli. Możliwe jest także formatowanie dokumentu XML za pomocą CSS, ale o tym później. Domyślnym systemem kodowania znaków w dokumencie XML jest Unicode. Składnia XML jest bardzo prosta, ogranicza się z grubsza do kilku zasad:
- Znaczniki nie mogą się krzyżować
- Każdy znacznik musi być zamknięty
- Znaczniki nie posiadające znacznika zamykającego muszą być wyszczególnione
- Wszystkie atrybuty muszą być ujęte w cudzysłowy lub apostrofy
- Cały dokument musi być ujęty w jeden znacznik; musi stanowić jeden element.
I jeszcze moja uwaga - interpretatory XML rozpoznają małe i wielki litery, a więc znacznik XML nie jest tym samym co xml.
Najprostrzy dokument XML miałby taką postać:
<eZiny>
<pisz>Reporter</pisz>
<pisz>WebReporter</pisz>
<pisz>HTMLZone</pisz>
</eZiny>
Do wyświetlania dokumentów XML potrzebna jest przeglądarka IE w wersji 4.0 lub wyższej lub inna z zainstalowanym pluginem.
A wygladałoby tak: proszę kliknąć.
Jak widać dokument isnieje i działa, jednak nie jest czytelny.
Każdy dokument XML musi obowiązkowo zawierać deklarację XML, która ma następujacą postać:
<?xml version="numer_wersji" encoding="deklaracja_strony_kodowej"
standalone="standalone_status"?>
Gdzie version określa wersję języka, w naszym wypadku 1.0, deklaracji strony kodowej, to nic innego jak określenie sposobu kodowania.
Do określania zawartości dokumentu XML służy Deklaracja Typu Dokumentu -DTD. Zawierają ją zarówno dokumenty XML jak i SGML.
Formatowanie dokumentu XML
Jak pisałem do formatowania dokumentów XML można używać zarówno styli XML jak i HTMLowych CSS. W pierwszej kolejności zajmiemy się tymi drugimi, jako, że z całą pewnością więcej osób zna style kaskadowe niż style XSL, te jednak omówimy dokładniej. Na początku dekumentu w deklaracji XML obok wersji musimy określić adres i typ pliku styli. W naszym przypadku jest to:
<?xml version="1.0":stylesheet href="nazwaarkusza.css"
type="text/css">
Następnie w dokumencie CSS deklarujemy wygląd dla każdego znacznika, np. weźmy znacznik <pisz> wygladało by to tak:
pisz {color:blue; font-face:arial;}
Spójrzmy teraz na nasz dokument: Wygląda mniej więcej tak:
<?xml:stylesheet href="styl.css" type="text/css"?>
<eZiny>
<pisz>Reporter</pisz>
<pisz>WebReporter</pisz>
<pisz>HTMLZone</pisz>
</eZiny>
A teraz zobaczmy go w przeglądarce
Tą metodą najprościej jest określić wygląd dokumentu XML, używając do tego powszechnie znanej nam technologii. Większe możliwości oferują jednak style XSL, nieco trudniejsze, ale cóż.
Odwołanie do zewnętrznego pliku *.xsl deklaruje się podobnie jak do .css z tym, że zamiast text/css należy wstawić text/xsl. Plik styli XSL mają domyślne rozszerzenie xsl. Podstawowym elementem arkusza XSL jest reguła szablonu. Opisuje ona jak węzeł elementu XML ma być przekształcony na węzeł XSL. Reguła ta składa się z dwóch części - pierwszej, określającej węzeł XML i drugiej, opisującej dokładnie zasady interpretacji węzłów. Najlepszym rozwiązaniem jest umieszczenie opisu wszystkich elementów, dla których jest to możliwe, przy opisie elementu głównego. Dokonuje się tego za pomocą ukośnika /:
<xsl:template match= "/">
Elementy można dobierać na wiele sposobów. Wybieranie według ID ma następującą postać:
<xsl:template match="id(wartość id)">
Dobieranie według nazwy odbywa się w następujący sposób:
<xsl:template match="nazwa">
Dobieranie według przodków:
<xsl:template match="element/własność">
Wybór może być bardziej złożony można np. określić kolejne elementy podrzędne. Dobieranie na podstawie atrybutów:
<xsl:template match="atrybut1 | atrybut2">
Według jego położenia:
first-of-any() - pierwszy element na danym poziomie
first-of-type() - pierwszy na danym poziomie
last-of-any() - ostatni na danym poziomie
last-of-type() - ostatni na danym poziomie
first-of-any() - jedyny element na danym poziomie
first-of-type() - jedyny element na danym poziomie
not-first-of-any() - element nie może być pierwszym elementem na tym samym poziomie
not-firs-of-type() - element nie może być pierwszym elementem na tym samym poziomie
not-last-of-any() - element nie może być ostatnim elementem na tym samym poziomie
not-last-of-type() - element nie może być ostatnim elementem na tym samym poziomie
not-only-of-any() - element musi mieć conajmniej jeden element na tym samym poziomie
not-only-od-type() - element musi mieć jeden element tego typu na tym samym poziomie
Obiekty formatujące w XML
Obiekty formatujące deklaruje się za pomocą fo:
<xsl template match="wzor">
<fo: obiektFormatujacy>
Tresc
</fo:obiektFormatujacy>
</xsl template>
Dwa najważniejsze obiekty formatujące tosingle-page-master i page-sequance. Page-sequence jest przodkiem ciągu stron drukowanych lub wyświetlanych na ekranie. Page-sequance zawiera przynajmniej jeden obiekt formatujący lub ciąg stron. Simple-page-master opisuje stronę, może być podzielona na sześć obszarów. Element musi zawierać atrybut master-name, może on mieć następujące wartości:
first - formatuje pierwszą stronę ciągu
odd - odpowiednik strony na lewo na wydruku
even - na prawo na wydruku
scrooling - typ strony używanej do wyświetlania na ekranie
Zawartość fo:
display-graphic - wstawienie samodzielnej grafiki
quene - ma atrybuty" title, header, body, footer, start-side
sequence - używa się go do grupowanie obiektów formatujących dziedziczących jeden zestaw własności
block - wstawia znak końca wiersza przed i po bloku
inline-included-container - pełni rolę obiektu włączającego typu inline, który umożliwia podświetlenie tekst lub grafiki
link-end-locator - umożliwia umieszczenie informacji o miejscu wskazaniem przez łącze
list - jest pojemnikiem dla obiektów formatujących list-item, list-item-label i list-item-body.
page-number - służy do instruowanie interpretatora aby umieścił numer strony
display-rule - odpowiednik znacznika HR
inline-grafhic - służy do wstawiania grafiki w ramach wiersza
block-group - służy do grupowanie innych obiektów blokowych
link - tworzy obszar, w którym znajdzie się obszar przepływu
character - pozwala traktować znak jako obiekt przepływu
Instrukcje makro
Instrukcje makro pozwalają wielokrotnie używać tego samego arkusz stylów. Oto przykład instrukcji makro:
<xsl:define-makro name="nazwa">
<fo:nazwaObiektu
TrescMakra>
<xsl:contens/>
<fo:/nazwaObiektu>
</xsl:define-makro>
Instrukcje makro wywołuje się mniej więcej tak:
<xsl:template match="nazwa">
<xsl:invoke makro="nazwaMarka">
<xsl:aplly-tamplates/>
</invoke>
</xsl:template>
Własności obiektów formatujących
Simple-page-master
Własność simple-page-master odowiada za układ strony. Przedstawimy poniżej własności tego obiektu formatującego i jego atrybuty.
- master-name - wartość dowolna nazwa
- bacground-attachment - wartości fixed i domyślna scroll.
- bacground-color - wartości opisu koloru, domyślna transparent
- bacground-image - wartości URI, domyślna none
- backround-position-x - wartość długość, domyślna left, center, right
- backround-position-y - wartość długość, midle, bottom, domyślna top
- bacground-repeat - wartości no-repeat, repeat-x, repeat-y, domyślna repeat
- page-height - wartość długość, domyślna auto
- page-width - wartość długość, domyślna auto
- page-writing-mode - wartość definicja sposobu pisania, el-td domyślna
- margin - bottom, left, right, top - wartość rozmiar w pt
- body-overflow - wartości visible, hiden, scroll, domyślna auto
- body-writing-mode - wartość definicji sposobu pisania, jak dla strony
- end-side-overflow - wartości visible, hiden, scrool, auto domyślna
- end-side-separation - wartość w pt
- end-side-size - wartość w pt
- end-side-writing-mode - wartość definicja sposobu pisania i jak dla strony
- footer-overlow - wartości visible, hidden, scrool i domyślna auto
- footer-precedence - wartość false, domyślna true
- footer-separation - wartość w pt
- footer-size - wartość w pt
- footer-writing-mode - wartość definicja sposobu pisania, jak dla strony
- header-overflolw - wartości visible, hidden, scroll i domyślna auto
- header-precedence - wartość true domyślna i false
- header-separation - wartość w pt
- header-size - wartość w pt
- header-writing-mode - definicja sposbu pisania, jak dla strony
- star-side-separation - wartość w pt
- star-side-size - wartość w pt
- start-size-overflow - wartości visible, hidden, scroll, domyślna auto
- star-size-writing-mode - wartości definicja sposobu pisania, jak dla strony
block
Element block używany jest do tworzenia bloków tekstu.
- language - wartości none, specifikacja-wg-xml:lang domyślna use-document
- background-atchment - wartości fixed, domyślna scroll
- backroudd-color - wartości - opis koloru, domyślna transparent
bacground-image - wartości URI, domyślna none
- backround-position-x - wartości długość, domyślna left, center, right
- backround-position-y - wartości długość, midle, bottom, domyślna top
- bacground-repeat - wartości no-repeat, repeat-x, repeat-y, domyślna repeat
- font-family - wartości nazwa czcionki
- font-style - wartości italic, oblique, normal
- font-stretch - wartości ultra-condensed, extra-condensed, semi-condensed, semi-epanded, extra-epanded, ultra-expanded, domyślna normal
- font-size - wartość w pt
- font-variant - wartości small caps, normal domyślna
- font-weight - wartości any, not-applicable, ultr-light, extra-light, light, semi-light, book, medium, semi-bold, bold, extra-bold, ultra-bold domyślna - normal
- glyph-alignment-mode - wartości base, center, top, bottom, domyślna font
- indent-end - wartości w pt
- indent-star - wartości w pt
- indent-first-line-start- wartość w pt
- breake-after - wartości page, page-odd, page-even, none domyślna
- breake-before - wartości page-odd, page-even, none domyślna
- keep-width-next - wartości true, domyślna false
- keep-widht-previous - wartości true, false domyślna
- keep - wartości none-brake, page, domyślna auto
- block-line-braking - wartości asis, asis-wrap, asis-truncate, none, dpmyślna wrap
- bloc-asis-truncate-indicator - wartości znak, none domyślna
- block-asis-wrap-indicator - wartości znak, domyślna none
- block-asia-wrap-indent - wartość w pt
- hiphenation-keep - wartości spread, page, page, column, none domyślna
- text-align - wartości end, left, right, spread-inside; outside, page-inside, page-out-side, center, start domyślna
- text-align-last = wartrości auto, end, left, rightspread-inside; outside, page-inside, page-out-side, center, start domyślna
- linespacing-strategy - wartości fixed, auto domyślna
- linespacing - watość w pt
- space-after-maximum, optimum, minimum - wartości w pt
- space-before-maximum, optimum, minimum - wartości w pt
- writing-mode - wartości definicja sposobu pisania, domyślan lr-tb
charcter
Character używany jest kiedy chcesz formatować jeden, pojedynczy znak
- background-attachment - wartości fixed i domyślna scroll.
- background-color - wartości opis koloru, domyślna transparent
- bacground-image - wartości URI, domyślna none
- backround-position-x - wartości długość, domyślna left, center, right
- backround-position-y - wartości długość, midle, bottom, domyślna top
- bacground-repeat - wartości no-repeat, repeat-x, repeat-y, domyślna repeat
- text-shadow - tak jak w CSS
- text-transform - wartości lower, upper, title, watość domyślna as-entered
- char
- char-kern
- cher-kern-mode
- char-ligature
- color
- font-specification
- glyph-alignment-mode
- hyphenate
- hyphenation-char
- inhibit-wrap
- language
- position-point-shift
- leter-space-after-maximum
- leter-space-after-minimum
- leter-space-after-optimum
- word-spacing-maximum
- word-spacing-optimum
- word-spacing-minimum
- text-shadow
- text-trasform - wartości captialize, uppercase, lawercase, none domyślna
- writing-none
list
List tworzy obszar blokowy z listą.
bacground-attachment - wartości fixed i domyślna scroll.
- bacground-color - wartości opis koloru, domyślna transparent
- bacground-image - wartości URI, domyślna none
- backround-position-x - wartości długość, domyślna left, center, right
- backround-position-y - wartości długość, midle, bottom, domyślna top
- bacground-repeat - wartości no-repeat, repeat-x, repeat-y, domyślna repeat
- break-before - wartości page, page-odd, page-even, domyślna none.
- break-after - wartości page, page-odd, page-even, domyślna none.
- indent-star, end - wartość w pt
- indent-after-minimum, maximum, optimum - wartość w pt
- indent-before-minimum, maximum, optimum - wartość w pt
list-item
List-item zawiera etykietę i treść pozycji listy.
- bacground-color - wartości opis koloru, domyślna transparent
- bacground-image - wartości URI, domyślna none
- backround-position-x - wartości długość, domyślna left, center, right
- backround-position-y - wartości długość, midle, bottom, domyślna top
- bacground-repeat - wartości no-repeat, repeat-x, repeat-y, domyślna repeat
- indent-start - wartość w pt
- indent-end - wartość w pt
- indent-after-minimum, maximum, optimum - wartość w pt
- indent-before-minimum, maximum, optimum - wartość w pt
list-item-label
List-item-label używany jest do wyliczania, ozdabiania lub identyfikacji treści każdej pozycji listy.
- bacground-color - wartości opis koloru, domyślna transparent
- bacground-image - wartości URI, domyślna none
- backround-position-x - wartości długość, domyślna left, center, right
- backround-position-y - wartości długość, midle, bottom, domyślna top
- bacground-repeat - wartości no-repeat, repeat-x, repeat-y, domyślna repeat
- label-witdh - wartość w pt
- space-end - wartość w pt
- label-separator - wartość w pt
list-item-body
Zawiera składniki opisujące pozycję listy
- bacground-color - wartości opis koloru, domyślna transparent
- bacground-image - wartości URI, domyślna none
- backround-position-x - wartości długość, domyślna left, center, right
- backround-position-y - wartości długość, midle, bottom, domyślna top
- bacground-repeat - wartości no-repeat, repeat-x, repeat-y, domyślna repeat
rule-graphic
Rule-graphic jest graficzną interpretacją odcinka, który jest używany do robienia podkreśleń i kresek.
- bacground-color - wartości opis koloru, domyślna transparent
- bacground-image - wartości URI, domyślna none
- backround-position-x - wartości długość, domyślna left, center, right
- backround-position-y - wartości długość, midle, bottom, domyślna top
- bacground-repeat - wartości no-repeat, repeat-x, repeat-y, domyślna repeat
- color
- block-level-aligment
- break-after, before
- graphic-line-thickness
- indent-end, start
- keep-with-previus, next
- rule-graphic-length, orientation
- position-point-shift
- space-after-maximum, minimum, optimum
- space-before-maximum, minimum, optimum
- writing-mode
display-graphic
Disply-graphic służy do tworzenia bloków zawierających grafikę.
- bacground-color - wartości opis koloru, domyślna transparent
- bacground-image - wartości URI, domyślna none
- backround-position-x - wartości długość, domyślna left, center, right
- backround-position-y - wartości długość, midle, bottom, domyślna top
- bacground-repeat - wartości no-repeat, repeat-x, repeat-y, domyślna repeat
- inline
- block-level-aligment
- break-after, before
- color
- external-graphic-id
- graphic-max-height, witdh
- grphic-scale
- indent-start, wrap, end
- keep-with-previous, next
- position-point-x, y
- postion-preference
- keep
- space-after-maximum, minimum, optimum
- space-before-maximum, minimum, optimum
inline-box
- writing-mode
- space-after-maximum, minimum, optimum
- space-before-maximum, minimum, optimum
- keep-with-previous, next
- keep
- inhibit-textline-breaks
- indent-start, end
- graphic-line-thickness
- color
- box-type
- box-size-befor
- box-size-after
- break-before, after
- box-open-end
- boxreserve-end
link
- bacground-color - wartości opis koloru, domyślna transparent
- bacground-image - wartości URI, domyślna none
- backround-position-x - wartości długość, domyślna left, center, right
- backround-position-y - wartości długość, midle, bottom, domyślna top
- bacground-repeat - wartości no-repeat, repeat-x, repeat-y, domyślna repeat
- marge-link-end-locators - wartości false i domyślna true
link-end-locator
- bacground-color - wartości opis koloru, domyślna transparent
- bacground-image - wartości URI, domyślna none
- backround-position-x - wartości długość, domyślna left, center, right
- backround-position-y - wartości długość, midle, bottom, domyślna top
- bacground-repeat - wartości no-repeat, repeat-x, repeat-y, domyślna repeat
- href - z XPointer
- show-content - wartości true domyślna i false

|