Inhoudsopgave:
Video: Week 7, continued 2024
De dichotomie tussen lineair denken en holistisch denken scheidt (respectievelijk) SAX van DOM.
SAX (Simple API for XML) behandelt een XML-document lineair en werkt stuk voor stuk door een document, van begin tot eind. Maar met DOM (het document-objectmodel) springt u erin en bekijkt u het hele document. Een beetje later zoom je in op het wortelelement en focus je dichter op een element in het wortelelement. In sommige situaties is springen precies wat u moet doen.
DOM-knooppunten
Bij DOM denkt u dat een XML-document meerdere knooppunten bevat. Voorbeelden van knooppunten zijn elementen, kenmerken, opmerkingen en de tekens tussen een paar begin- en eindlabels. Een volledig XML-document is zelf een knooppunt. Al met al kan een XML-document 12 verschillende soorten knooppunten hebben.
De knooppunten van een boom
Alles bij elkaar vormen alle DOM-knooppunten in een XML-document een boom. Neem bijvoorbeeld het document in listing 1. De DOM-structuur van dit document lijkt op de boom in figuur 1.
Advertentie 1: The Anchovy Lovers Club
Oprichter, president, secretaris, Publicity Manager
De boom heeft elf knooppunten. Om ze te tellen, begint u met het tellen van de takken van de boom (handig weergegeven in figuur 1). Tel daarna de Member firstname = "Herbert" branch een tweede keer. (Deze tak heeft twee DOM-knooppunten, het element met de naam Lid is een knooppunt en het kenmerk van het element firstname = "Herbert" is een knooppunt.)
Een verhandeling over bomen
Er zijn een paar dingen die je zult ontdekken door naar de boom in figuur te staren 1.
- Sommige knooppunten zijn kinderen van andere knooppunten. Het lidknooppunt is bijvoorbeeld een kind van het knooppunt AnchovyLoversClub. Dat komt omdat, in Listing 1, het element Member genest is in het element AncoverLoversClub.Op dezelfde manier is het staande knooppunt een kind van het lidknooppunt. Deze familie-analogie gaat maar door. Het lidknooppunt is het bovenliggende van het permanente knooppunt en de AncoverLoversClub is het bovenliggende lid van het lidknooppunt.
- Het volledige document is een knooppunt. Dit is een belangrijk punt en het is gemakkelijk om het te vergeten. In listing 1 is het rootelement van het document AnchovyLoversClub. Maar in figuur 1 staat de naam AnchovyLoversClub niet bovenaan. In plaats daarvan staat het woord #document bovenaan de structuur.Het bovenste knooppunt van een DOM-structuur vertegenwoordigt een volledig XML-document. Er treden fouten op wanneer programmeurs denken dat het rootelement van het document de structuur start.(Dat is het niet.)
- Opmerkingen en stukjes tekst zijn knooppunten. In figuur 1 is de opmerking een onderliggende knoop van het documentknooppunt. Dat komt omdat in listing 1 de opmerking deel uitmaakt van het document. De opmerking is niet genest in een van de elementen van het document.Opnieuw spelen we genealogie. We zeggen dat het knooppunt #document twee kinderen heeft: een reactieknooppunt en een knooppunt van AnchovyLoversClub. Deze twee knooppunten - de opmerking en de AnchovyLoversClub - worden broers en zussen genoemd.Ook in figuur 1 maakt de tekst Founder, President, Secretary, Publicity Manager deel uit van een knooppunt. In Listing 1 bevindt de tekst Founder, President, Secretary, Publicity Manager zich in het Standing-element. Dus, in figuur 1, is dit tekstknooppunt een kind van het staande knooppunt.
- Zelfs ignorable tekst is onderdeel van een knooppunt. Volgens figuur 1 heeft het knooppunt AnchovyLoversClub drie directe onderliggende knooppunten - twee knooppunten met het label #text en een ander knooppunt met het label Lid. Dat komt omdat, voor zover het DOM betreft, het knooppunt van AnchovyLoversClub drie dingen bevat.
carriage return en three blanks
Member element
carriage return
-
De situatie is geïllustreerd in figuur 2.
-
De drie kinderen van het lidknooppunt - twee stukken witruimte en één staand element - zijn allemaal broers en zussen.Let nu op de punten en de [cr] in figuren 1 en 2. In het boomstructuurdiagram vertegenwoordigt een punt een lege ruimte en vertegenwoordigt [cr] een carriage return. Met DOM begint alle ignorable witruimte tussen de AnchovyLoversClub-tag en de Member start-tag vormt een knooppunt. Beginnend met de hoeksteun die de AnchovyLoversClub-startlabel beëindigt, gaat u naar de volgende regel en hebt u drie lege ruimten vóór de hoeksteun die de startlabel voor leden opent. Al dat spul is een DOM-knooppunt.
- Eindetiketten zijn geen knooppunten. Met SAX denkt u misschien in termen van het starten van het element Member en het beëindigen van het element Member. In DOM denk je niet zo. In plaats daarvan bezoekt u het element Lid slechts eenmaal. Tijdens dat bezoek bezoek je het Standing-element en wat tekst. DOM heeft geen methode die overeenkomt met de SAX endElement-methode.