--- 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 5 ## XML Schema — podstawy **Systemy Zarządzania Treścią** Politechnika Poznańska --- # Część 1 ## Wprowadzenie do XML Schema --- ## Czym jest XML Schema? > **XML Schema (XSD — XML Schema Definition)** to rekomendacja W3C do definiowania struktury i typów danych dokumentów XML. Jest nowoczesnym następcą DTD. ### Geneza i status | Data | Wydarzenie | |---|---| | **15 lutego 1999** | Dokument W3C opisujący wymagania: mechanizmy struktury, typy proste, reguły przetwarzania | | **2 maja 2001** | XML Schema oficjalną rekomendacją W3C | | **później** | Prace nad wersją 1.1 | ### Trzy części standardu | Część | Zawartość | |---|---| | **Part 0: Primer** | Wprowadzenie i przykłady | | **Part 1: Structures** | Struktury (elementy, atrybuty, typy) | | **Part 2: Datatypes** | Typy danych | ### Przestrzeń nazw XML Schema korzysta z przestrzeni nazw: `http://www.w3.org/2001/XMLSchema` (zwykle z prefiksem `xsd:` lub `xs:`). --- ## Przewaga XML Schema nad DTD | Przewaga | Wyjaśnienie | |---|---| | **Składnia XML** | Schemat jest sam dokumentem XML — przetwarzany tymi samymi narzędziami | | **44 wbudowane typy** | string, integer, decimal, date, time, boolean, ... | | **Własne typy** | Możliwość definiowania typów przez ograniczanie i rozszerzanie | | **Kontrola wartości** | Zakresy, wzorce (pattern), wyliczenia (enumeration) | | **Przestrzenie nazw** | Pełne wsparcie namespace'ów | | **Rozszerzalność** | Dziedziczenie typów, grupy, modularyzacja | > XML Schema pozwala precyzyjnie wyrazić np. "element `wiek` musi być liczbą całkowitą z zakresu 0–120" — co w DTD jest niemożliwe. --- ## Struktura dokumentu schematu Dokument XSD to dokument XML z elementem głównym ``: ```xml ``` ### Podstawowe konstrukcje XSD | Konstrukcja | Rola | |---|---| | `` | Element główny dokumentu schematu | | `` | Deklaracja elementu | | `` | Deklaracja atrybutu | | `` | Definicja typu złożonego | | `` | Definicja typu prostego | --- # Część 2 ## Deklarowanie elementów i atrybutów --- ## Deklarowanie elementów i atrybutów ```xml ``` ### Struktura deklaracji | Konstrukcja | Opis | |---|---| | `` | Deklaracja elementu o danej nazwie | | `` | Typ złożony (zawiera elementy/atrybuty) | | `` | Uporządkowana sekwencja elementów | | `` | Deklaracja atrybutu | | `type="xsd:string"` | Typ prosty elementu lub atrybutu | ### Dokument zgodny z tym schematem ```xml Jan Kowalski M 35 ``` --- ## Kontrola użycia elementów XML Schema pozwala precyzyjnie kontrolować **liczebność** elementów przez atrybuty `minOccurs` i `maxOccurs`: ```xml ``` ### Atrybuty kontroli liczebności | Atrybut | Domyślnie | Znaczenie | |---|---|---| | `minOccurs` | 1 | Minimalna liczba wystąpień | | `maxOccurs` | 1 | Maksymalna liczba wystąpień (`unbounded` = bez ograniczenia) | ### Przykłady | Deklaracja | Znaczenie | |---|---| | `minOccurs="0"` | element opcjonalny | | `maxOccurs="unbounded"` | element może wystąpić dowolną liczbę razy | | `minOccurs="1" maxOccurs="2"` | element wystąpi 1 lub 2 razy | --- ## Kontrola użycia atrybutów Atrybuty kontroluje się przez `use`: ```xml ``` ### Wartości atrybutu `use` | Wartość | Znaczenie | |---|---| | `required` | atrybut **wymagany** | | `optional` | atrybut **opcjonalny** (domyślnie) | | `prohibited` | atrybut **zabroniony** (używane przy ograniczaniu typów) | ### Wartości domyślne i ustalone ```xml ``` | Atrybut | Znaczenie | |---|---| | `default="PLN"` | domyślna wartość, gdy atrybut pominięty | | `fixed="22%"` | ustalona wartość — nie można jej zmienić | --- # Część 3 ## Typy w XML Schema --- ## Typy — klasyfikacja Typy w XML Schema klasyfikuje się według trzech kryteriów: ```mermaid flowchart TD A["Typy w XML Schema"] --> B["wg zasięgu definicji"] A --> C["wg zawartości"] A --> D["wg pochodzenia"] B --> B1["nazwane"] B --> B2["anonimowe"] C --> C1["proste"] C --> C2["złożone"] D --> D1["wbudowane (44)"] D --> D2["zdefiniowane w schemacie"] ``` ### Trzy perspektywy | Kryterium | Kategorie | |---|---| | **Zasięg definicji** | nazwane, anonimowe | | **Zawartość** | proste, złożone (prosta/elementowa/mieszana/pusta) | | **Pochodzenie** | wbudowane, zdefiniowane (rozszerzenia, ograniczenia, listy, unie) | --- ## Hierarchia typów Wszystkie typy XML Schema wywodzą się z jednego korzenia — `anyType`: ![width:75%](../img/xsd-typy-hierarchia.svg) ### Struktura hierarchii - **anyType** — typ uniwersalny, korzeń hierarchii, - **anySimpleType** — nadtyp wszystkich typów prostych (44 wbudowane), - **complexType** — typy złożone (definiowane przez użytkownika). > Każdy element i atrybut w XML Schema ma jakiś typ — domyślnie `anyType` dla elementów. --- ## Typy nazwane i anonimowe ### Typ nazwany ```xml ``` Typ nazwany (`OsobaTyp`) ma **nazwę** i może być **wielokrotnie używany** w różnych miejscach schematu. ### Typ anonimowy ```xml ``` Typ anonimowy jest **związany z jednym elementem** — nie ma nazwy, nie może być użyty ponownie. > Zasada: typ nazwany, gdy ma być użyty wielokrotnie; anonimowy, gdy występuje tylko raz. --- ## Typy proste i złożone ### Typ prosty ```xml ``` Typ prosty zawiera **tylko tekst** (nie ma elementów potomnych ani atrybutów). ### Typ złożony ```xml ``` Typ złożony zawiera **elementy potomne i/lub atrybuty**. ### Zasada - **Element** może mieć typ prosty lub złożony, - **Atrybut** może mieć **wyłącznie typ prosty**. --- # Część 4 ## Typy złożone i model zawartości --- ## Typy złożone — cztery rodzaje zawartości Typ złożony może mieć jeden z czterech rodzajów zawartości: | Rodzaj | Przykład | Opis | |---|---|---| | **Elementowa** | `Jan` | tylko elementy potomne | | **Prosta** | `10.55` | tekst + atrybuty | | **Mieszana** | `Wypadek ...` | tekst przeplatany elementami | | **Pusta** | `` | tylko atrybuty, bez treści | ### Zawartość elementowa ```xml Jan Kowalski ``` ### Zawartość prosta ```xml 10.55 ``` ### Zawartość mieszana ```xml Wypadek dnia 13.10.2001 r. o godzinie 13:13 (piątek) miał miejsce nie z mojej winy. ``` ### Zawartość pusta ```xml ``` --- ## Definiowanie zawartości elementowej Zawartość elementową definiuje się za pomocą **grup deklaracji**: ```xml ``` ### Grupy deklaracji | Grupa | Znaczenie | Odpowiednik w DTD | |---|---|---| | `` | elementy w ustalonej kolejności | `,` (sekwencja) | | `` | wybór dokładnie jednego elementu | `\|` (alternatywa) | | `` | wszystkie elementy w dowolnej kolejności | *(brak odpowiednika)* | > Grupy mogą być **zagnieżdżane** — np. `choice` wewnątrz `sequence`. --- ## Grupa all — ograniczenia Grupa `all` pozwala elementom występować w **dowolnej kolejności**, ale ma istotne ograniczenia: ```xml ``` ### Ograniczenia grupy all | Ograniczenie | Opis | |---|---| | **Brak grup wewnątrz** | Nie może zawierać innych grup — tylko deklaracje elementów i odwołania | | **Maks. jedno wystąpienie** | Każdy element może wystąpić co najwyżej raz | | **Brak zagnieżdżania** | Grupa `all` nie może być zagnieżdżona w innej grupie | > Grupa `all` jest użyteczna, gdy kolejność elementów nie ma znaczenia (np. dane adresowe). --- ## Definiowanie zawartości prostej Zawartość prosta to **tekst + atrybuty** (element ma treść tekstową i jednocześnie atrybuty): ```xml ``` ### Struktura | Konstrukcja | Opis | |---|---| | `` | Oznaczenie zawartości prostej | | `` | Rozszerzenie typu bazowego o atrybuty | | `base="xsd:decimal"` | Typ bazowy treści tekstowej | ### Przykład użycia ```xml 10.55 ``` > Treść `10.55` jest typu `decimal`, a atrybut `jm` (jednostka miary) typu `string`. --- ## Definiowanie zawartości mieszanej Zawartość mieszana pozwala elementom zawierać **zarówno tekst, jak i elementy potomne**: ```xml ``` ### Kluczowy atrybut Atrybut `mixed="true"` w deklaracji `complexType` oznacza, że element może **przeplatać tekst z elementami potomnymi**. > Zawartość mieszana jest typowa dla dokumentów "narracyjnych" (zeznania, artykuły, opisy), gdzie w naturalnym tekście występują elementy strukturalne. --- ## Definiowanie zawartości pustej Zawartość pusta to element **bez treści** — posiada wyłącznie atrybuty: ```xml ``` ### Charakterystyka - Brak deklaracji elementów potomnych, - Brak deklaracji `simpleContent`, - Tylko atrybuty. ### Przykład użycia ```xml ``` > Element z zawartością pustą służy wyłącznie jako "nośnik" atrybutów — cała informacja zawarta jest w wartościach atrybutów. --- ## Podsumowanie | Temat | Kluczowe wnioski | |---|---| | **XML Schema** | Rekomendacja W3C (2001), następca DTD, składnia XML | | **Przewaga** | 44 typy wbudowane, własne typy, kontrola wartości, namespace'y | | **Deklaracje** | `element`, `attribute`, `complexType`, `simpleType` | | **Kontrola** | `minOccurs`/`maxOccurs` (elementy), `use` (atrybuty) | | **Typy** | Nazwane/anonimowe; proste/złożone; wbudowane/zdefiniowane | | **Zawartość** | Elementowa, prosta, mieszana, pusta | | **Grupy** | `sequence` (kolejność), `choice` (wybór), `all` (dowolność) | --- # Dziękuję za uwagę **Systemy Zarządzania Treścią** Politechnika Poznańska