XML - ćwiczenia 2 - modelowanie, DTD

Modelowanie

XML jest językiem, dużo więcej daje jednak spojrzenie na XML jako metajęzyk, to znaczy zbiór języków, zastosowań XML. Definiowanie zastosowania XML nazywa się zwykle definiowaniem struktury dokumentu.

Dopiero w kontekście konkretnego zastosowania XML odpowiednie elementy, atrybuty, fragmenty tekstu nabierają właściwego znaczenia. Oprócz określenia składni definiowanego języka (np. w DTD), należy też określić jego semantykę. Jest to znacznie trudniejsze do sformalizowania i pozostaje najczęściej opisaną słownie (lub nawet nie) umową.

Zalecane sposoby definiowania struktury dokumentu:

Często sensowne jest również używanie dokmentów bez dodatkowej definicji struktury, one same "definiują" swoją strukturę.

Dwa stopnie poprawności dokumentu

Każdy dokument XML musi być poprawny składniowo (well-formed) - być zgodny z gramatyką i spełniać well-formedness constraints wymienione w rekomendacji XML.
Oznacza to między innymi:

Dodatkowo dokument XML może być poprawny strukturalnie (valid) - być zgodny z definicją struktury (jeśli nie jest powiedziane inaczej, chodzi o DTD), spełniać validity constraints wymienione w rekomendacji XML (to one definiują tę "zgodność").

DTD

Definiowanie struktury dokumentu w DTD opiera się na założeniu, że w całym dokumencie elementy o tej samej nazwie mają podobną strukturę. DTD definiuje typy elementów, elementami tego samego typu są elementy o tej samej nazwie.

DTD pozwala zdefiniować takie własności dokumentu:

Deklaracja DTD w dokumencie występuje za deklaracją XML (jeśli istnieje) a przed elementem głównym. Może w całości być zawarta w dokumencie, może być zawarta w encji zewnętrznej, lub częściowo być w encji zewnętrznej, a częściowo w dokumencie - w tym przypadku jako pierwsza przetwarzana jest część wewnętrzna. Przykłady:

<?xml version="1.0"?> <!DOCTYPE greeting SYSTEM "hello.dtd">
<greeting>Hello, world!</greeting>
<?xml version="1.0"?> <!DOCTYPE greeting PUBLIC "-//W3C//GREETEING 1.0//EN" "hello.dtd">
<greeting>Hello, world!</greeting>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE greeting [
  <!ELEMENT greeting (#PCDATA)>
]>
<greeting>Hello, world!</greeting>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE greeting SYSTEM "hello.dtd" [
  <!ATTLIST greeting words CDATA #IMPLIED>
]>
<greeting words="2">Hello, world!</greeting>

DTD zawiera deklaracje elementów i list atrybutów (a także encji i notacji).

Deklaracja elementu:
<!ELEMENT nazwa-elementu typ-zawartości-elementu >.
Dla każdej nazwy elementu może istnieć tylko jedna jego deklaracja w DTD.
Typy zawartości elementu:

Deklaracja listy atrybutów:
<!ATTLIST nazwa-elementu
 nazwa-atrybutu1 typ-zawartości-atrybutu1 opis-domyślnego1
 nazwa-atrybutu2 typ-zawartości-atrybutu2 opis-domyślnego2
 ...
>
Dla każdego elementu może być wiele list atrybutów, dla każdego atrybutu może być w sumie wiele deklaracji - liczy się pierwsza.
Typy zawartości atrybutu:


opis-domyślnego określa czy atrybut jest wymagany, jaką ma wartość domyślną...:

Technika

Pod Linuksem działa program xmllint, walidujący dokumenty XML.
Następujące wywołanie:
xmllint --valid -noout plik.xml
sprawdzi poprawność pliku nie wypisując go na ekran.

Do walidowania dokumentów XML można też wykorzystać program przykładowy wchodzący w skład Xalana.
Kompiluje się go poleceniem:
javac Validate.java.
Aby sprawdzić poprawność strukturalną (a przy okazji też składniową) pliku plik.xml należy wywołać:
java Validate plik.xml

Zadania

  1. Modelowanie struktury wiadomości e-mail i zapisanie DTD.
  2. Modelowanie struktury wizytówki i zapisanie DTD.