JAXB - Java Architecutre for XML Binding
JAXB
to kolejny standard (obok DOM-a i
SAX-a) definiujący dostęp do plików
XML-owych z poziomu języka programowania. Filozofia JAXB jest trochę inna niż SAX-a
i DOM-a: nie ma tu ogólnego interfejsu do parsowania plików, zamiast tego
jest interfejs tworzony na podstawie DTD lub XML-Schemy. W praktyce wygląda to tak,
że dostajemy kompilator schematów (lub dtd), który z tych schematów generuje
klasy - dla każdego elementu XML powstaje jedna klasa. (Trochę podobnie do kompilacji
IDL -> Java). Np. gdy shemat określa, że element root ma model zawartości
(item*) to kopilator stworzy klasę Root zawierającą kolekcję Item-ów. Jeżeli item
jest (#PCDATA) to w Javie Item będzie java.lang.Stringiem, wpp. Item będzie
klasą stworzoną przez kompilator schematów.
JAXB to standard promowany przez Suna, i pewnie znajdzie się w jednym z następnych
wydań JDK. Na razie jest w wersji beta. Istnieją też inne implementacje XML
data binding (np. Castor), ale pewnie ta od Suna stanie się oficjalnym standardem...
Zalety w stosunku do SAX-a:
- łatwiejszy dostęp do pliku - cały plik jest w pamięci
- SAX jest read-only, a JAXB umożliwia modyfikację i zapisywanie do pliku
Zalety w stosunku do DOM-a:
- mniejsze wymagania pamięciowe, dzięki temu, że nie ma narzutu na generyczność DOM-a,
w pamięci jest tylko to co trzeba
- bardziej intuicyjny dostęp do dokumentu, zamiast metodami typu getFirstChild()
wołamy item.getPrice(), dzięki temu nie trzeba znać struktury dokumentu
- DTD nie jest interpretowane, tylko zaszyte w kodzie - dzięki temu większa wydajność
Cztery podstawowe operacje udostępniane przez JAXB:
- unmarshalling - zamiana pliku XML-owego na obiekty Javove
- modyfikacja dokumentu XML-owego (na kopii z pamięci)
- walidacja - sprawdzenie poprawności z DTD (także dokonywane na dokumencie w pamięci)
- marshalling - zamiana obiektów Javocych na dokument XML-owy
Uruchamianie przykładów:
- Ściągnąć archiwum ode mnie i rozpakować
- W każdym katalogu od SampleApp1 do SampleApp6 jest
aplikacja prezentująca możliwości JAXB. Należy przejść do katalogu aplikacji, wywołać
. zmienne.sh (lub ustawić zmienne środowiskowe ręcznie), potem wystarczy wpisać ant, żeby skopilować i uruchomić
- Wszystkie przykłady są z JAXB User Guide,
są też zawarte w pliku z Sunowską beta-implementacją JAXB (link niżej).
Co w przykładach:
- Proponuję zacząć od przestudiowania XML-Schemy z pliku po.xsd
- SampleApp1 -
wczytanie pliku XML-owego, przekształcenie go na klasy Javy (unmarshalling) i wypisanie wybranych danych
- SampleApp2 -
modyfikacja pliku XML (w pamięci) i zserializowanie go (marshalling)
- SampleApp3 -
dodawaie nowo-tworzonych elementów do pliku
- SampleApp4 -
walidacja przy unmarshallingu
- SampleApp5 -
walidacja w trakcie obróbki pliku
- SampleApp6 -
konfigurasja XML-Schemy dla JAXB - uwaga na komentarze w po.xsd!
Linki
Propozycje zadan
Na poprzednich zajęciach generowaliśmy tabelkę lemma-variantów i work-ów za pomocą XSLT.
Teraz można to samo zrobić wykorzystując JAXB. Jak jest prościej?
Tu można znaleźć DTD do dokumentów planningowych
©2002, Karol Bieńkowski