---
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.

### 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** | `kod;` | `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