Bazy danych XML
Wydział Informatyki EWSIE
Wykład: Bazy danych II – DOM Document
Obiektowy model dokumentu
DOM
•
Model DOM jest wynikiem prac producentów
przeglądarek, mających na celu zamienienie
stron dokumentów WWW w zbiory obiektów.
•
Element BODY na stronie WWW jest przykładem
obiektu, obsługiwanego przez przeglądarkę.
•
Poszczególne elementy na stronie WWW mogą
być więc traktowane jako obiekty posiadające
właściwości, metody oraz zdarzenia.
•
Hierarchia obiektów na stronie WWW jest
strukturą, którą model DOM wnosi do
dokumentu.
•
Niniejsze slajdy bazują na specyfikacji Document
Object Model (DOM) Level 1 i Level 2 (patrz
http://www.w3.org
)
Przykład hierarchii obiektów
DOM
Tabela
Wiersz
Wiersz
Komórka
Komórka
Komórka
Komórka
Dane
komórki 1
Dane
komórki 2
Dane
komórki 4
Dane
komórki 3
<Tabela border=‘1’ >
<TR><TD> Komórka 1 </TD> <TD> Komórka 2 </TD></TR>
<TR><TD> Komórka 3 </TD> <TD> Komórka 4 </TD></TR>
</Tabela>
Hierarchia składników DOM
Składnik
Dopuszczalne obiekty potomne
Document
Element max 1, PI, Comment,
DocumentType max 1
Document-
Fragment
Element, PI, Comment, Text,
CDATASection, EntityRef.
DocumentType
Żaden (węzeł liściowy)
EntitReference
Element, PI, Comment, Text,
CDATASection, EntityRef.
Element
Element, PI, Comment, Text,
CDATASection, EntityRef.
Attr
Text, EntityReference
ProcessingInstr
uction
Żaden (węzeł liściowy)
Comment
Żaden (węzeł liściowy)
Text
Żaden (węzeł liściowy)
CDATASection
Żaden (węzeł liściowy)
Entity
Element, PI, Comment, Text,
CDATASection, EntityRef.
Notation
Żaden (węzeł liściowy)
Leksykon obiektów DOM
• Dalej przedstawimy szczegółowo obiekty Jądra
XML DOM Level 2.
• W kolejnych punktach omówimy: opisy, atrybuty i
metody każdego rodzju elementu w zależności od
języka specyfikacji IDL.
• Książki zwykle zawierają jeszcze przykłady
sposobów użycia poszczególnych pozycji i
dowiązania do języka Java. Ze względu na
ograniczenia czasowe niniejszego wykładu,
przykłady i dowiązania do języka Java
pomineliśmy.
Interfejs: Attr
• Opis: reprezentuje wartość przypisaną do atrybutu
elementu XML. Ponieważ dostęp do obiektów Attr w
obrębie DOM umożliwia jedynie attributes
NameNodeList interfejsu Element, atrybuty parentNode,
previousSibling oraz nextSibling zawsze zwracają null.
Chociaż interfejs Attr dziedziczy podstawowy interfejs
Node, nie znajduje tu zastosowania wiele podstawowych
metod Node. Element XML może pobierać atrybut na
kilka sposobów. Element posiada wartość atrybutu jeżeli:
– Dokument XML podaje wartość atrybutu w sposób jawny,
– Definicja DTD dokumentu określa wartość domyślną atrybutu,
– Atrybut jest dodawany programowo, za pomocą metody
setAttribute( ) lub setAttributeNode( ) interfejsu Element.
• Atrybuty: DOMString (nazwa - tylko do odczytu),
ownerElement (łącze do elementy), specified
(ustawienie jawne/niejawne), value (ułatwia odczyt
wartości tekstowej Atrr).
Metody: brak.
Interfejs: CDATASection
• Opis: interfejs CDATASection zawiera dane nie-
analizowalne, zapisane bez konwencji Escape,
która występuje w dokumencie XML, w obrębie
bloków CDATA. Chociaż interfejs ten dziedziczy
interfejs TeCDATASection, nie można scalać
sąsiednich bloków za pomocą metody normalize( )
interfejsu Element. CDATASection jest podklasą
interfejsu Text i nie posiada własnych atrybutów
ani metod.
• Atrybuty: brak.
• Metody: brak.
Interfejs: CharakterData
• Opis: interfejs CharacterData jest całkowicie
abstrakcyjny i rozszerza podstawowy interfejs Node
jedynie o obsługę operacji na danych tekstowych.
Każdy obiekt typu DOM, który ma do czynienia a
danymi tekstowymi, dziedziczy po tym interfejsie
bezpośrednio lub pośrednio.
• Atrybuty: data (umożliwia uzyskanie dostępu do
„pierwotnych” danych węzła CharacterData; length
(rozmiar DOMString zapisany w atrybucie data).
• Metody: appendData(arg) - dołącza zawartość
parametru attr do bieżącej wartości atrybutu data;
deleteData(offset, count) - likwiduje DOMString w
atrybucie data – usuwając count znaków, począwszy od
położenia offset; insertData(offset, arg) - dzieli bieżąca
zawartość atrybutu data w położeniu offset, a
następnie wstawia pomiędzy dwie części ciągu – ciąg
znaków z parametru arg; replaceData(offset, count,
arg) – zastępuje część znaków; substringData(offset,
count) – zwraca podzbiór.
Obiekt: Comment
• Opis: zawiera tekst komentarza XML, czyli
wszystko, co znajduje się pomiędzy
otwierającym <!- - a zamykającym - ->.
Dziedziczy po CharacterData.
• Atrybuty: brak.
• Metody: brak.
Object: Document
•
Opis: reprezentuje cały dokument XML o właściwej konstrukcji.
Kiedy obiekt Document zostanie utworzony za pośrednictwem
interfejsu DOMImplemantation, możemy uzyskać dostęp do
każdego aspektu podstawowego dokumentu DOM.
•
Atrybuty: doctype – zwraca instancję interfejsu DocumentType
DTD dla dokumentu; documentElement – wskazuje na
pojedyńczy węzeł Element (tylko do odczytu); implementation –
zwraca odwołanie do DOMImplementation (tylko do odczytu).
•
Metody: createAttribute(name) – tworzy atrybut o podanej
nazwie; createAttributeNS(namespaceURI, qualifiedName);
createDATASection(data); createComment(data);
createDocumentFragment() – zwraca pusty obiekt;
createElement (tagName);
createElementNS(namespaceURI,qualifiedName);
createEntityReference(name);
createProcessingInstruction(target, data); createTextNode(data);
getElementByID(name); getElementByTagName(tagName);
getElementByTagNS(namespaceURI, localName);
hasAttribute(name); hasAttributeNS(namespaceURI, localName);
importNode(localName).
Obiekt: DocumentFragment
• Opis: jest kontenerem wykorzystywanym do
tymczasowego przechowywania fragmentów
dokumentu XML. Nie posiada własnych metod ani
właściwości, może oferować taki zakres funkcji,
jakie udostępnia węzeł Node. Jako kontener, może
być wykorzystywany przez przynajmniej jedno
poddrzewo XML o odpowiedniej konstrukcji.
Najbardziej oczywistym zastosowaniem tego
obiektu jest wykorzystywanie go jako schowka
wykonawcy operacji typu przeciągniej-i-upuść (w
edytorze graficznym).
• Atrybuty: brak.
• Metody: brak.
Interfejs: DocumentType
• Opis: zawiera pojedynczy atrybut docType, który
wskazuje na opis DTD dla bieżącego dokumentu,
albo null gdy nie istnieje DTD.
• Atrybuty: entities – określa listę encji ogólnych;
internalSubset – zawiera podzbiór wewnętrzny
dokumentu; name – nazwa DTD występująca w
dokumencie źródłowym ze słowem kluczowym XML
DOCTYPE; notations – zawiera listę deklaracji
zapisów XML dla bieżącego dokumentu; publicID –
identyfikator publiczny podzbioru zewnętrznego
(tylko do odczytu); systemID – URI podzbioru
zewnętrznego bieżącego dokumentu.
• Metody: brak.
ExceptionCode:
DOMException
• Opis: w językach i obsługujących je platformach
wykonawczych, strukturalne stany wyjątków
oddzielają kod zajmujący się stanami nienormalnymi
lub niespodziewanymi od normalnego potoku
wykonawczego. W przypadku języków nie
obsługujących wyjątków, na przykład ECMAScript
albo Perl, stany te są zgłaszane programowi przez
metody, które te stany rozpoznają jako kody błędów.
ExceptionCode jest wartością całkowitą, która
pokazuje jakiego typu wyjątek został wykryty.
Wyróżniono 15 różnych wartości kodu.
• Atrybuty: brak.
• Metody: brak.
Interfejs:
DOMImplementation
• Opis: zapewnia globalną informację o aktualnie
używanej implementacji DOM. Jedyny sposób
odwołania się do interfejsu DOMImplementation
polega na użyciu metody getIplementation( ) obiektu
Document.
• Atrybuty: brak.
• Metody: createDocument( namespaceURI,
qualifiedName, doctype);
createDocumentType( quaifiedName, publicID,
systemID); hasFeature( feature, version).
Obiekt: Element
• Opis: zapewnia dostęp do struktury dokumentu XML i
zawartych w nim danych. Każdy element XML, podlega
translacji na jeden węzeł Element. Element bazowy
dokumentu jest dostępny poprzez właściwość
documentElement obiektu Document. Możliwe jest
odtworzenie pełnej struktury pierwotnego dokumentu XML,
dokonane w oparciu o ten węzeł – „przejście” przez drzewo
elementów.
• Atrybuty: tagName – nazwa znacznika XML z pierwotnego
dok.
• Metody: getAttribute( name);
getAttributeNS( namespaceURI, localName);
getAttributeNode( name);
getAttributeNodeNS( namespaceURI, localName);
getElementsByTagName( name);
getElementsByTagName( namespaceURI, localName);
hasAttribute( name); hasAttributeNS( namespaceURI,
localName); removeAttribute( name);
removeAttributeNS( namespaceURI, localName);
removeAttributeNode( oldAttr); setAttribute( name, value);
setAttributeNS( namespaceURI, localName);
setAttributeNode( newAttr); setAttributeNodeNS( newAttr).
Obiekt: Entity
• Opis: reprezentuje wartość zastępczą danej encji
ogólnej XML. W zależności od tego, czy dana
implementacja DOM kontroluje prawidłowość oraz,
czy rozwija ona podczas analizy składni odwołania do
encji w trybie liniowym, obiekty Entity mogą być
niedostępne dla użytkownika DOM.
• Atrybuty: notationName: DOMString – jeśli encja
nieanalizowana, jest nazwą zapisu tej encji; publicID:
DOMString – nadany publiczny identyfikator URL albo
null, gdy nie określono identyfikatora; systemID:
DOMString – nadany systemowy identyfikator URL
albo null, gdy nie określono identyfikatora.
• Metody: brak.
Węzeł: EntityReference
• Opis: odwołania do encji pojawiają się w hierarchii
dokumentu od razu, gdy odwołania do encji ogólnej
XML zostanie osadzone w dokumencie źródłowym.
W zależności od dokumentacji DOM, w grupie
entities atrybutu docType obiektu Document może
istnieć odpowiadający tej encji obiekt Entity. Jeśli
taka encja istnieje, wtedy węzły potomne zarówno
Entity, jak i EntityReference reprezentują skojarzony
z daną encją tekst zastępczy.
• Atrybuty: brak.
• Metody: brak.
Interfejs: NamedNodeMap
• Opis: oferuje mechanizm wykorzystywany do
pobierania obiektów z grupy Node (pobieranie odbywa
się według nazwy). Chociaż ten interfejs udostępnia
takie same atrybuty i metody jak klasa NodeList, nie są
one ze sobą powiązane.
• Atrybuty: length – ogólna liczba węzłów Node
znajdujących się na liście.
• Metody: getNameItem( name) – zwraca odwołanie do
węzła ; getNameItemNS( namespaceURI, localName) –
rozszerza poprzednią metodę o obsługę przestrzeni
nazw; item( index) – zwraca odwołanie do obiektu;
removeNamedItem( name) – usuwa obiekt Node;
removeNameItemNS( namespaceURI, localName) –
usuwa Node; setNameItem( arg) – wstawia do listy
obiekt Node; setNamedItemNS( arg) – rozszerza
poprzednią metodę uwzględniając przestrzeń nazw.
Interfejs: Node
• Opis: jest podstawowym interfejsem dla każdej części
składowej drzewa dokumentu DOM. Udostępnia on
atrybuty wspólne dla wszystkich typów obiektów
dokumentu i oferuje proste metody pobierania
informacji specyficznych dla danego typu obiektu.
• Atrybuty: attributes: NamedNodeMap; childNodes:
NodeList; firstChild: Node; lastChild: Node; localName:
DOMString; namespaceURI; DOMString; nextSibling:
Node; nodeName: DOMString; nodeType: unsigned
short; nodeValue: DOMString; ownerDocument:
Document; parentNode: Node; prefix: DOMString;
previousSibling: Node.
• Metody: appendChild( newchild); cloneNode( deep);
hasAttribute( ); hasChildNodes( );
inserdBefore( newchild, refchild); isSupported( feature,
version); removeChild( oldchild); replaceChild( newchild,
oldchild).
Interfejs: NodeList
• Opis: umożliwia udostępnienie przez klasę DOM
uporządkowanej grupy węzłów . NodeList
reprezentuje macierz obiektów Node (o
podstawie zero, tylko do odczytu). Ponieważ nie
istniej mechanizm tworzenia, dodawania ani
usuwania węzłów z NodList, nie można korzystać
z tego interfejsu jako z narzędzia ogólnego
przeznaczenia.
• Atrybuty: lengh: unsigned long - całkowita liczba
obiektów znajdujących się na liście.
• Metody: item( index) – wskaźnik na listę o
podstawie 0.
Interfejs:
ProcessingInstruction
• Opis: zapewnia dostęp do zawartości polecenia
przetwarzania XML. Polecenia przetwarzania oferują
mechanizm osadzania poleceń dla aplikacji
przetwarzającej XML, która jest wołana z poziomu
zawartości dokumentu XML.
• Atrybuty: data: DOMString – zwraca zawierającą dane
część polecenia przetwarzania. Część ta zaczyna się
od pierwszego znaku, który nie jest znakiem białym,
występującej po żetonie target – a kończy się na
zamykającej sekwencji ?>; target: DOMString – zwraca
część polecenia przetwarzania zawierającą obiekt
docelowy. Obiektem docelowym jest pierwszy żeton z
ogranicznikami w postaci białych znaków, występujący
w obrębie bloku polecenia przetwarzania.
• Metody: brak
Węzeł: Text
• Opis: zawierają występujące w obrębie dokumentu XML
dane znakowe, które nie są oznaczeniem. Po wykonaniu
analizy składni dokumentu, dla każdego ciągłego pliku
tekstowego, który nie jest oznaczeniem, istnieje
dokładnie jeden węzeł Text:
<węzeł_tekstowy> To jest tekst </ węzeł_tekstowy>
• Atrybuty: brak.
• Metody: splitText ( offset) – dzieli węzeł Text na dwa
sąsiadujące węzły Text. Zawartość pierwotnego węzła
zostaje podzielona w miejscu, wskazanym przez offset,
przy czym drugi ciąg znaków stanowi wartość nowego
węzła. Pierwszy podciąg znaków pozostaje w pierwotnym
węźle. Gdyby dany węzeł był aktualnie włączony do
drzewa DOM, nowy węzeł z oddzielną zawartością staje
się następnym siostrzanym węzłem pierwotnego węzła.
Zwracany jest nowy węzeł Text, zawierający drugą część
danych
Podstawowe typy
składników
•
Document – może posiadać pojedynczy węzeł Element,
węzły Processing Instructions PI, węzły Comment i
pojedynczy węzeł DocumentType.
•
DocumentFragment – może posiadać węzły: Element, PI,
Comment, Text, CDATA i EntityReference.
•
DocumentType – nie może posiadać węzłów dzieci.
•
EntityReference - może posiadać węzły: Element, PI,
Comment, Text, CDATA i EntityReference.
•
Element - może posiadać węzły: Element, PI, Comment, Text,
CDATA i EntityReference.
•
Attr (atrybut) - może posiadać węzły: Text i EntityReference.
•
Comment – nie może posiadać węzłów dzieci.
•
Text – nie może posiadać węzłów dzieci.
•
CDATA – nie może posiadać węzłów dzieci.
•
Entity - może posiadać węzły: Element, PI, Comment, Text,
CDATA i EntityReference.
•
Notation – nie może posiadać węzłów dzieci.