--- marp: true theme: default paginate: true size: 16:9 style: | section { font-size: 24px; } section h1 { color: #1a5276; } section h2 { color: #2980b9; } section table { font-size: 20px; } section small { font-size: 18px; } --- # Wykład 3 ## XML — podstawy i struktura dokumentów **Systemy Zarządzania Treścią** Politechnika Poznańska --- # Część 1 ## Czym jest XML --- ## Rola XML w zarządzaniu treścią XML (*eXtensible Markup Language*) to **fundamentalna technologia** leżąca u podstaw nowoczesnych systemów zarządzania treścią. ### Dlaczego XML jest tak ważny dla CMS? | Powód | Wyjaśnienie | |---|---| | **Oddzielenie treści od prezentacji** | Treść zapisana raz, prezentowana na wiele sposobów | | **Struktura danych** | Hierarchiczna reprezentacja dokumentów i danych | | **Wymiana danych** | Uniwersalny format przesyłania danych między systemami | | **Walidacja** | Formalna kontrola poprawności dokumentów (DTD, Schema) | | **Długoterminowe przechowywanie** | Otwarty, tekstowy, niezależny od producenta format | > XML jest "cegiełką", z której buduje się języki opisu dokumentów — od haseł encyklopedycznych po akty prawne i dokumentację techniczną. --- ## Czym jest XML? > **XML (eXtensible Markup Language)** to metajęzyk znacznikowy służący do **opisu struktury danych** w formie czytelnej zarówno dla ludzi, jak i maszyn. ### Kluczowe cechy - **Rozszerzalny** — użytkownik definiuje własne znaczniki (nie ma sztywnego zbioru jak w HTML), - **Semantyczny** — znaczniki opisują **znaczenie** treści, a nie jej wygląd, - **Tekstowy** — zapisany jako zwykły tekst, niezależny od platformy, - **Ściśle zdefiniowana składnia** — surowe reguły poprawności. ### XML a HTML — fundamentalna różnica | Cecha | HTML | XML | |---|---|---| | **Cel** | Prezentacja (jak wyświetlić) | Semantyka (co oznacza) | | **Znaczniki** | Z góry zdefiniowane (`

`, `

`, ``) | Dowolne, tworzone przez projektanta | | **Składnia** | Łagodna (domyślne zamykanie) | Ścisła (każdy tag zamknięty) | | **Walidacja** | Praktycznie brak | Formalna (DTD, Schema) | --- ## Anatomia dokumentu XML ```xml st. asp. Jan Łapówka Dołowice Górne Wypadek dnia 13.10.2001r o godzinie 13:13 (piątek) miał miejsce nie z mojej winy. Alojzy M. nie miał żadnego pomysłu w którą stronę uciekać. ``` ### Elementy składowe dokumentu | Element | Przykład | Rola | |---|---|---| | **Deklaracja XML** | `` | Prolog — wersja i kodowanie | | **Element główny** | `` | Korzeń drzewa — dokładnie jeden | | **Atrybut** | `nr="1313/2001"` | Metadane elementu | | **Znacznik początkowy** | `` | Otwarcie elementu | | **Znacznik końcowy** | `` | Zamknięcie elementu | | **Zawartość tekstowa** | `st. asp. Jan Łapówka` | Tekst wewnątrz elementu | --- # Część 2 ## Struktura logiczna dokumentu XML --- ## Drzewiasta struktura dokumentu Każdy dokument XML ma strukturę **drzewa** — elementy zagnieżdżają się w sobie, tworząc hierarchię rodzic–dziecko. ![width:80%](../img/xml-drzewo.svg) ### Właściwości struktury drzewiastej - **Jeden korzeń** — dokładnie jeden element główny zawiera wszystkie pozostałe, - **Zagnieżdżenie** — elementy mogą zawierać inne elementy, - **Brak cykli** — struktura jest ściśle hierarchiczna, - **Relacje** — każdy element (poza korzeniem) ma dokładnie jednego rodzica. ### Terminologia | Pojęcie | Znaczenie | |---|---| | **Korzeń (root)** | Element główny dokumentu | | **Element potomny (child)** | Element bezpośrednio zagnieżdżony | | **Element nadrzędny (parent)** | Element zawierający dany element | | **Potomkowie (descendants)** | Wszystkie elementy zagnieżdżone (bezpośrednio i pośrednio) | | **Liść (leaf)** | Element bez elementów potomnych | --- ## Składnia XML — elementy składowe | Konstrukcja | Składnia | Przykład | |---|---|---| | **Deklaracja XML** | `` | `` | | **Znacznik** | `...` | `Jan` | | **Element pusty** | `` lub `` | `
` | | **Komentarz** | `` | `` | | **Instrukcja przetwarzania** | `` | `` | | **Sekcja CDATA** | `` | ` & znaki]]>` | --- ## Deklaracja XML — prolog Deklaracja XML jest **opcjonalna**, ale zalecana. Znajduje się na samym początku dokumentu. ```xml ``` ### Atrybuty deklaracji | Atrybut | Wartość | Znaczenie | |---|---|---| | `version` | `"1.0"` | Wersja standardu XML (obowiązkowy) | | `encoding` | `"UTF-8"`, `"ISO-8859-2"`, ... | Kodowanie znaków | | `standalone` | `"yes"` / `"no"` | Czy dokument zależy od zewnętrznych deklaracji (DTD) | ### Zasady - Deklaracja musi być **na samym początku** — bez poprzedzających spacji czy komentarzy, - Atrybut `version` jest wymagany, - `encoding` i `standalone` są opcjonalne. --- ## Komentarze ```xml ``` ### Zasady komentarzy - Komentarz zaczyna się od ``, - Nie może zawierać **podwójnego myślnika** (`--`) w środku, - Nie może kończyć się na `--->`, - Komentarz **nie jest częścią** danych dokumentu — parser go ignoruje, - Nie może wystąpić **przed deklaracją XML**. ### Instrukcje przetwarzania ```xml ``` Instrukcja przetwarzania przekazuje **instrukcje dla aplikacji** przetwarzającej dokument (np. dołączenie arkusza stylów XSL). --- ## Sekcja CDATA Sekcja CDATA (*Character Data*) pozwala umieszczać tekst zawierający **znaki specjalne** bez ich escapowania: ```xml , & symbole "bez" ucieczki: if (a < b && c > d) { ... } ]]> ``` ### Zasady - Wewnątrz CDATA **wszystko** (poza `]]>`) traktowane jest jako zwykły tekst, - Znaki `<`, `>`, `&` nie wymagają escapowania, - CDATA **nie może** zawierać ciągu `]]>` (oznacza koniec sekcji). > CDATA jest przydatna np. przy osadzaniu fragmentów kodu w dokumentach XML. --- # Część 3 ## Encje i kodowanie znaków --- ## Encje predefiniowane Niektóre znaki mają w XML znaczenie specjalne i muszą być zapisywane jako **encje**: | Encja | Znak | Nazwa | |---|---|---| | `&` | `&` | ampersand | | `<` | `<` | less than | | `>` | `>` | greater than | | `'` | `'` | apostrophe | | `"` | `"` | quotation mark | ### Dlaczego? Znaki `<` i `&` są używane przez parser do rozpoznawania znaczników i encji. Ich bezpośrednie użycie w treści (a nie jako składnia) spowodowałoby **błąd składniowy**. ### Przykład ```xml Warunek: a < b && c > d ``` > Pięć encji predefiniowanych to jedyne encje, które parser XML rozpoznaje **bez deklaracji** w DTD. --- ## Odwołania numeryczne do znaków Każdy znak Unicode można zapisać przez jego **kod numeryczny**: ```xml Znak A: A (kod dziesiętny) Znak Ą: Ą (kod dziesiętny) Znak €: € (kod szesnastkowy) ``` ### Dwie formy | Forma | Składnia | Przykład | |---|---|---| | **Dziesiętna** | `&#kod;` | `A` → A | | **Szesnastkowa** | `&#xkod;` | `A` → A | > Odwołania numeryczne są użyteczne dla znaków spoza klawiatury lub trudnych do wpisania. --- ## Unicode — standard kodowania **Unicode** to światowy standard kodowania znaków — obowiązkowy dla dokumentów XML. ### Odmiany Unicode | Odmiana | Opis | |---|---| | **UTF-7** | Korzysta tylko z 7-bitowego zestawu znaków ASCII | | **UTF-8** | Pierwsze 128 znaków to ASCII; znak zajmuje 1–6 bajtów; **najczęściej używana** | | **UTF-16** | Każdy znak to jedno lub dwa słowa 16-bitowe | | **UTF-32** | Każdy znak to jedno słowo 32-bitowe | | **UCS-4** | Znak zajmuje zawsze 4 bajty | ### Zasady użycia w XML - Każde narzędzie XML musi wspierać **przynajmniej UTF-8**, - UTF-8 jest **domyślnym** kodowaniem dokumentów XML, - Kodowanie deklaruje się w prologu: `encoding="UTF-8"`. > UTF-8 jest kompatybilny wstecz z ASCII — pierwsze 128 znaków kodowane jest identycznie. --- # Część 4 ## Poprawność dokumentów XML --- ## Dwa poziomy poprawności W XML wyróżnia się **dwa niezależne poziomy poprawności**: ```mermaid flowchart LR A["📄 Dokument XML"] --> B{"Poprawny składniowo?\n(well-formed)"} B -->|"Nie"| C["❌ Odrzucony przez parser"] B -->|"Tak"| D{"Poprawny strukturalnie?\n(valid)"} D -->|"Nie"| E["⚠️ Składniowo OK,\nale niezgodny ze schematem"] D -->|"Tak"| F["✅ Pełna poprawność"] ``` ### Poprawność składniowa (well-formed) Dokument jest **well-formed**, gdy spełnia reguły składni XML: - każdy element jest zamknięty, - brak nakładających się elementów, - wartości atrybutów w apostrofach lub cudzysłowach, - dokładnie jeden element główny, - encje poprawnie zapisane. ### Poprawność strukturalna (valid) Dokument jest **valid**, gdy dodatkowo: - jego struktura jest zgodna ze schematem (DTD, XML Schema), - obecne są wszystkie wymagane atrybuty i elementy. > **Valid implikuje well-formed, ale nie odwrotnie.** Dokument może być poprawny składniowo, ale niezgodny ze schematem. --- ## Poprawność składniowa — reguły szczegółowe ### Przykłady dokumentów poprawnych składniowo ```xml Prosty tekst Ważne Treść notatki Tekst z pogrubieniem w środku ``` ### Przykłady dokumentów niepoprawnych | Błąd | Przykład | Problem | |---|---|---| | **Niezamknięty tag** | `tekst` | brak `` | | **Nakładające się tagi** | `tekst` | zła kolejność zamknięcia | | **Niespójne nazwy** | `...` | XML rozróżnia wielkość liter | | **Brak cudzysłowu** | `` | atrybut bez cudzysłowu | | **Dwa korzenie** | `` | więcej niż jeden element główny | --- ## Poprawność strukturalna — rola schematu Dokument **valid** wymaga istnienia definicji struktury (schematu): ```xml ``` ```xml Ważne Treść notatki ``` ```xml Ważne ``` > Walidacja strukturalna przenosi **ciężar sprawdzania poprawności** z aplikacji na narzędzie walidujące. --- # Część 5 ## Definiowanie języków XML --- ## XML jako metajęzyk **XML i SGML to metajęzyki** — same w sobie nie definiują żadnego konkretnego języka, lecz pozwalają **tworzyć** języki (zastosowania, struktury dokumentów). ### Definiowanie języka obejmuje - określanie zestawu dopuszczalnych **elementów i atrybutów**, - definiowanie dopuszczalnej **zawartości** elementów (tekst, inne elementy), - przypisywanie **atrybutów** do elementów. ### Metody definiowania struktury | Metoda | Charakterystyka | |---|---| | **Bez formalnej definicji** | XML bez schematu — tylko poprawność składniowa | | **DTD** | *Document Type Definition* — klasyczny mechanizm ze SGML | | **XML Schema (XSD)** | Rekomendacja W3C z 2 maja 2001 — nowoczesny standard | | **Relax NG** | Alternatywny, prostszy język schematów | > Każda z tych metod jest szczegółowo omówiona w kolejnych wykładach: **DTD** w wykładzie 4, **XML Schema** w wykładach 5–7, **Relax NG** w wykładzie 8. --- ## Modelowanie typów dokumentów Definiowanie typu dokumentu to **wieloetapowy proces analityczno-projektowy**: ```mermaid flowchart TD A["1. Analiza struktury bytów"] --> B["2. Analiza przykładowych dokumentów"] B --> C["3. Analiza zastosowań i przypadków użycia"] C --> D["4. Abstrakcyjny projekt struktury"] D --> E["5. Kodowanie projektu (DTD / XML Schema)"] E --> F["6. Testowanie"] F --> G["7. Pielęgnacja i zarządzanie zmianami"] ``` ### Opis etapów | Etap | Opis | |---|---| | **1. Analiza struktury** | Analiza struktury modelowanych bytów (obiektów dziedziny) | | **2. Analiza dokumentów** | Analiza przykładowych, istniejących dokumentów | | **3. Analiza zastosowań** | Analiza potencjalnych zastosowań i przypadków użycia | | **4. Projekt abstrakcyjny** | Abstrakcyjny projekt struktury (niezależny od składni) | | **5. Kodowanie** | Zapis struktury przy pomocy DTD lub XML Schema | | **6. Testowanie** | Weryfikacja poprawności schematu na przykładach | | **7. Pielęgnacja** | Zarządzanie zmianami schematu w czasie | --- ## Projektowanie struktury — przykład Projektując strukturę dokumentu, tworzy się najpierw **model abstrakcyjny**, potem koduje w wybranym języku schematów. ### Model struktury wiersza ```mermaid flowchart TD A["wiersz"] --> B["autor (1)"] A --> C["tytuł (opcjonalny)"] A --> D["zwrotka (0 lub więcej)"] D --> E["wers (0 lub więcej)"] ``` ### Notacja modelowania (wyrażenia regularne) | Symbol | Znaczenie | Przykład | |---|---|---| | *(brak)* | dokładnie raz | `autor` | | `?` | zero lub raz (opcjonalny) | `tytul?` | | `*` | zero lub więcej | `zwrotka*` | | `+` | jeden lub więcej | `wers+` | | `,` | sekwencja | `(autor, tytul?)` | | `\|` | alternatywa | `(a\|b)` | > Ta notacja jest **podstawą** definiowania modeli zawartości — omówiona szczegółowo w wykładzie 4 (DTD) i wykładach 5–7 (XML Schema). --- ## Podsumowanie | Temat | Kluczowe wnioski | |---|---| | **Rola XML** | Fundament CMS — oddzielenie treści od prezentacji, wymiana danych | | **Struktura** | Drzewiasta, z jednym elementem głównym (korzeniem) | | **Składnia** | Znaczniki, atrybuty, komentarze, CDATA, instrukcje przetwarzania | | **Encje** | 5 encji predefiniowanych + odwołania numeryczne | | **Unicode** | UTF-8 jako standard kodowania | | **Poprawność** | Well-formed (składniowa) → valid (strukturalna) | | **Metajęzyki** | XML definiuje języki przez DTD, XML Schema, Relax NG | | **Modelowanie** | 7-etapowy proces od analizy po pielęgnację | --- # Dziękuję za uwagę **Systemy Zarządzania Treścią** Politechnika Poznańska