Lektion 8 Del 1 XML, Kapitel 20 Jag har valt att göra ett helt eget material om xml som inte följer bokens upplägg. Jag tror att detta tar upp XML lite mer grundligt än vad boken gör. XML, grunder XML stammar liksom HTML från SGML. XML är dock mycket närmare SGML i funktion. Den nu giltiga standarden för xml har versions nummer 1.0 och fastställdes i februari 1998 och har sedan dess kompletterats med tilläggsmoduler löpande Html handlar om att visa information, Xml om att beskriva information. Xml-s styrka är att det skiljer utseende och innehåll åt. Det finns en mängd färdiga applikationer för xml. Dessa sägs offta felaktigt vara egna språk ex. MathML, ChemML, CDF. Till xml kan både css och xls stilmallar användas. XML är case sensetive och en start och sluttagg måste se lika dana ut. XML tillåter inte att element överlappar varandra. Innehållet i en XML sida byggs upp i en trädstruktur EX. <?xml version= 1.0?> < Hamburgers> <Hamburger lowfat= dream on > <Name>CowBurgers</ Name> <Description>Greasy and good.</ Description> <Price>9.95</ Price> </ Hamburger> <Hamburger lowfat= may be > <Name>PigBurgers</ Name> <Description>Crispy and good.</ Description> <Price>5.95</ Price> </ Hamburger> </ Hamburgers> Detta är en väl formulerad och giltig XML fil men knappast användbar. Vi behöver ett tolkningsschema. Ett tolkningsschema (DTD) definierar vilka element som kan förekomma i ett XML dokument tillsammans med de attribut som kan associeras med ett givet element. Det definierar även dokumentets struktur ex vika element som är child element till ett annat element, den ordnings följd underelementen skall uppträda och antalet underelement. Den kan definiera huruvida ett element är tomma, innehåller text likväl som defoult värden för attribut. Document Type Definition. Dessa utvecklades ursprungligen för SGML men används även av XML. XML processorn i webbläsaren kan använda DTD-n under körning för att validera och tolka XML-koden. För att länka till dtd-n används taggen <!DOCTYPE> Ex: <!DOCTYPE Hamburgers SYSTEM hamburger.dtd >
DTD-n för ovanståemde exempel skulle se ut så här <!ELEMENT hamburgers (hamburger)*> <!ELEMENT hamburger (name, description, price)> <!ATTLIST> hambuger lowfat CDATA #IMPLEID> <!ELEMENT name (#PCDATA)> <!ELEMENT description (#PCDATA)> <!ELEMENT price (#PCDATA)> DTD-n säger att hamburgers elementet kan förekomma flera gånger. Varje hamburger kan innehålla ett lowfat attribut och tre underelement, alla av typen #PCDATA (tolkad text data). DTD-n följer inte reglerna för väl formulerad XML kod, XML processorn måste därför förutom xml även stödja syntaxen för DTD filen. Det finns andra sätt att skriva tolkningsscheman för XML. En nyligen antagen standard är XML Dataschema. Dessa scheman skrivs i XML kod och kan därför valideras av en XML validator. Man specificerar <EementType> och <AttributType> Processor teknologi (API) För att göra något användbart med XML så måste man kunna få access till datat. En programvara som kan läsa XML och ge access till innehållet i en XML fil kallas för en XML processor eller ett XML API. Utvecklare är fria att utveckla egna API er men det är säkrast att utnyttja standard API er som accepterats av industrin. Det finns två huvud API er som blivit populära. Dessa är Document Object Model (DOM) och Simpe API for XML (SAX) DOM är ett api som rekommenderas av W3C och som stöds av webbläsare. Dom bygger på att dokumentet internt i minnet representeras som en trädstruktur hamburgers hamburger name description price XSL XML processorn i IE 5 och NS 6 stödjer denna fult ut. En av DOM :s största nackdelar är det stora overhead arbetet vid laddning av sidan till minnet. Detta har man tagit fasta på i SAX. Sax är ett väldigt enkelt api. Sax behöver inte ladda in hela XML filen i minnet. Speciella event handlers hanterar ett aktuellt event med just in time processande. SAX är ännu så länge bara ett förslag men används ändå i vissa applikationer. XSL stilmallar skrivs som en XML applikation. XLS mallen skall omforma XML koden till HTML och består av en blandning av HTML och XLS
element. XSL elementen har till uppgift att plocka ut datan ur XML filen och infoga den i html flödet. För att länka en XSL stilmall till en XML sida används bearbetningsinstruktionen <?xml-stylesheet?> EX: <?xml version= 1.0 encoding= ISO-8859-1?> <? xml-stylesheet type= text/xsl href= xslmall.xsl?> Xml kan använda sig av flera textstandarder bland annat unicod, För att tala om att du använder en annan teckenstandard anges detta enligt ovan. ISO- 8859-1 anger att vi vill använda västeuropeisk teckenuppsättning, alltså densamma som i vanlig HTML. En XLS fil för exemplet med hamburgarna ovan skulle se ut som nedan. <?xml version= 1.0?> <xsl:styleshet xmlns:xsl= http://www.w3.org/tr/wd-xsl > <xsl:template match= / > <html> <body> <h1> DTD Elementdeklarationer Varje elementdeklaration måste innehålla elementets namn och typ av data som elementet innehåller. Dessa kan vara o En lista av underelement. För vart och ett av underelementen måste en elementdeklaration finnas sedan. o Tomt element. Deklareras med nyckelordet EMPTY. Ett sådant element kan inte innehålla någon information men även om det är tomt så kan det förses med meningsfulla attribut eller speciella funktioner. Ett exempel på en sådan tagg är <BR> i HTML. Den är tom men har ändå en mening i flödet. o ANY. Ett sådant element kan innehålla vilket innehåll som helst som DTD n tillåter. o Blandat innehåll. Ett element kan även innehålla ett blandat innehåll. Innehållet definieras i en lista separerad med pipe tecken. EX: <!ELEMENT Namn(#PCDATA A B Z)*> Datatyper. XML har en ganska enkel uppsättning datatyper dessa är i huvudsak o Tolkad data, #PCDATA. Parsed caracter data. Processorn läser och bearbetar datat med avseende på taggar. o Ej tolkad data #CDATA. Datat bearbetas ej utan skrivs ut som det är. EX <![CDATA[<ELEMENT>text</ELEMENT>]]> skulle precenteras som <ELEMENT>text</ELEMENT>. Elementdeklarationssymboler. o Parenteser innesluter attribut eller under element. o Komma separerar element i en lista i parentesen. Elementen i listan måste förekomma och i angiven ordning. Ex ELEMENT(1,2,3) o Pipe separerar valbara element. Ex. ELEMENT(1 2 3) elementet måste innehålla elementen 1 eller 2 eller 3. o Frågetecken anger att elementet kan förekomma. Ex: ELEMENT(1)? Om elementet förekommer så får det förekomma endast en gång
o Asterisk anger att elementet kan förekoma godtyckligt antal gånger. Ex ELEMENT(1)* Elementet kanförekomma inte als eller hur många ggr som helst. o Plus anger att elementet skall förekomma minst en gång. Ex ELEMENT(1)+ o Ingen symbol anger att elementet skall förekomma exakt en gång. Attribut deklareras med nyckelordet <!ATTLIST Direkt efter ATTLIST komer elementets namn därefter attributet och sist typen. EX <!ATTLIST Dataor PROCESSOR CDATA> o CDATA endast text data kan användas i attributet o ENTITY Attributet måste referera till en extern binär förekomst deklarerad i DTD n. o ENTETYS samma som ovan men tillåter multipla värden separerade av mellanslag. o ID Attributets värde måste vara en unik identifierare o IDREF Attributet måste vara en referens till en unik ID deklarerad någon annan stans i dokumentet. o IDREFS Samma som ovan men tillåter multipla värden separerade av mellanslag. o NMTOKEN Attributvärdena är en mix av namn. o NMTOKENS so men multipla vården o NOTATION Attributvärdet måste rferera till en notation deklarerad på annat ställe i DTD n. Deklarationen kan även vara en lista av notationer. o Enumerated Attributet måste matcha ett av de uppräknade värdena. Tilläggsattribut o #REQUIERD Varje element som innehåller attributet måste specificera ett värde o #IMPLIED Attributet är opptional. Processorn hoppar över attributet om det inte finns o #FIXED Attributet måste ha ett fast värde Ex. <?xml version="1.0"?> <!DOCTYPE EMAIL [ <!ELEMENT EMAIL (TO+, FROM, CC*, BCC*, SUBJECT?, BODY?)> <!ATTLIST EMAIL LANGUAGE (Western Greek Latin Universal) "Western" ENCRYPTED CDATA #IMPLIED PRIORITY (NORMAL LOW HIGH) "NORMAL"> <!ELEMENT TO (#PCDATA)> <!ELEMENT FROM (#PCDATA)> <!ELEMENT CC (#PCDATA)> <!ELEMENT BCC (#PCDATA)> <!ATTLIST BCC HIDDEN CDATA #FIXED "TRUE"> <!ELEMENT SUBJECT (#PCDATA)>
<!ELEMENT BODY (#PCDATA)> ]> <EMAIL LANGUAGE="Western" ENCRYPTED="128" PRIORITY="HIGH"> <TO>Jodie@msn.com</TO> <FROM>Bill@msn.com</FROM> <CC>Philip@msn.com</CC> <BCC>Naomi@msn.com</BCC> <SUBJECT>My First DTD</SUBJECT> <BODY>Hello, World!</BODY> </EMAIL> Oregelbundna källträd Vi har hitintills använt os av regelbundna källträd. Där har argumentet <xsl:for-each select= ELEMENT/UNDERELEMENT >. Om källträdet är oregelbundet kan denna metod dock ej användas. Då kan i stället elementet <xsl:apply-template> tillsammans med det tidigare använda <xsl:tampate match= / >. Argumentet template fungerar som väljare på samma sätt som en regel i css. Vilket element som skall formateras bestämmer du med attributet match. Du skapar en regel för varje element i källträdet genom att använda elementet <xsl:tampate>, en gång för varje regel. För att få stilmallen att använda de olika reglerna så används <xsl:applytemplate>. Ex: XML fil <?xml version="1.0" encoding="iso-8859-1"?> <?xml-stylesheet type="text/xsl" href="semester.xsl"?> <SEMESTERTIPS> <RESMÅL>Kanarieöarna</RESMÅL> </SEMESTERTIPS> Forts Ex: XSL fil <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/tr/wd-xsl"> <xsl:template match="/"> <HTML> <HEAD> </HEAD> <BODY> <xsl:apply-templates select= "SEMESTERTIPS/RESMÅL"/> </BODY> </HTML> </xsl:template> <xsl:template match="resmål"> <H1><xsl:value-of select="."/></h1> </xsl:template> </xsl:stylesheet> Denna stilmall innehåller två regler. Den ena är den vanliga med <xsl:tampate match= / > och den nya <xsl:apply-templates select=
DSO "SEMESTERTIPS/RESMÅL"/>. Attributet select väljer elementet RESMÅL och XML tolken börjar leta efter regler för denna. Punkten i select sattsen har en speciell betydelse, den anger att stilmallen skall plocka ut värdet från det aktuella elementet (RESMÅL). Om detta element i sin tur innehåller ett underelement istället för text vad händer då? Då måste man skriva <xls:apply_templates> i regeln för det elementet. Ex: Ter nivåer <xsl:tamplate match= RESMÅL > <xsl:apply-templates/> </xsl:template> <xls:tamplate match= NAMN > <H1><xsl:value-of select="."/></h1> </xsl:template> Koden hanterar nu tre nivåer. Men hur gör man om man har godtyckligt antal nivåer? För att formatera godtyckligt antal nivåer måste vi bygga ut stilmallen ytterligare. Principen är den att alla regler har ett <xsl:apply-templates/> i sig och att man lägger till regler för alla underelement som kan förekomma samt att man läger till en topp regel som returnerar texten (textnod). <xsl:template match="text()"> <xsl:value-of select="."/> </xsl:template> Operatorer i selekt. o / Väljer underelementet under ett annat o // ett underelement på vilken nivå som helst under ett annat element o. syftar på det aktuella elementet o * väljer alla element oavsett namn Attribut. För att arbeta med attribut behöver du kunna hämta och presentera värden på attribut. Att lägga till attribut i XML koden är enkelt du behöver bara skriva dit det Ex: <VÄRDE ENHET= cm >14</VÄRDE> För att hämta detta attribut skulle man skriva <xsl:value-of select= VÄRDE/@ENHET />. Det är @ som är operatorn som hämtar värdet på attrebutet. För att skapa ett attribut i mål trädet används <xsl:attrebute> i stilmallen (attrib2) Länk och attribut (link) Med xmldso kan man binda data till kontroller på webbsidan. Därefter kan man välja om man vill arbeta med data en nod i taget eller med ett helt data sett. För att jobba med en post i taget så måste datat vara bundet till ett SPAN element i koden EX: <SPAN ID= price DATASRC=#xmldso DATAFLD= PRICE STYLE= collor:blue > </SPAN> DATASRC säger vilken DSO som skall användas. DATAFLD talar om vilket element som data skall hämtas från. Dso ka användas både för att läsa och skriva data till ett record set Nästa gång XML:LINK, XML-DATA
DSO Exempel. Ett exempel på en applikation som både läser och skriver data. För detta exempel behövs fyra filer, käll filen, applikations filen och en mål fil samt ett Java Script. Källfilen är den samma som i tidigare exempel och innehåller data för ett antal växter. Applikationen är en HTML fil som läser data ur XML filen med hjälp av DSO Mål filen är filen där resultatet av bearbetningen i applikationen hamnar Applikationen är en online shopp där användaren måste ange ett namn innan denne kan köpa något. Den första delen av filen är en vanlig ccs stilmall för text som används senare i koden. Sedan kommer OnLoad scriptet. Detta laddar rätt xml dokument till XMLDSO objekten. Därefter kommer en länk till ett Java Script som används för att visa mål filen. DoMenu. Dess uppgift är att visa sortimentet när en knapp klickas. GoRecord. Denna funktion flyttar xml dso innehållet till den post i recordsettet som klickas på i föregående meny. Dennaupprätt håller en till en förhållande till datainnehållet i xml filen. Innehållet i listen uppdateras om källan ändras. MouseHover ändrar färg på en listpost när muspekaren hålls över den. Funktionen uppdatelist utför flera saker när man klickar på By It. Först kontrollerar den om kunden skrivit in något kund namn. Om inte visar den ett meddelande till kunden om att detta krävs. Om namnet finns så kallas funktionen addtolist. Funktionen addtolist är den mest komplexa funktionen i hela applikationen. Funktionen är designad för att fånga upp olika användare interaktioner. Den skall tex kunna avgöra om en vara är dubblett eller inte, vi vill inte lägga till den till listan en gång till, istället vill vi öka kvantiteten av varan. Om kund namnet är nytt så skall det läggas till som ett nytt root element listan. För att klara detta så går funktionen igenom mål XML filen för att kontrollera om dessa förekommer sedan tidigare. Om den hittar kunden i listan så kontrollerar den om aktuell vara finns sedan tidigare. Om ingen match hittas så läggs varan till listan. Om kunden inte finns sedan tidigare så läggs kunden och varan till i listan. Om både kunden och varan finns sedan tidigare så ökas endast antalet. När allt detta är gjort så kallas funktionen showlist. ShowList genererar en tabell med alla varor och kvantiteter som aktuell kund köpt. Tabellen byggs upp av de data som för närvarande finns i mål filen. Där efter följer kontroll sektionen av applikationen. Där läggs de två xml dso kontrollerna till sidan. Dessa instansieras med höjd och brädd satta till noll efter som vi inte vill att dessa skall ta upp någon platts på sidan. Vi vill ju bara komma åt de data de kan förse oss med. Vi behöver en kontroll för vardera xml filen. Nästa del av koden ritar upp tabellen med alla varor. Varje gång som DSO n uppdateras genom att kunden klickar på en post så uppdateras även datat i den bundna tabellen med. Normalt så sätter men DATASRC attributet i tabellen men om vi gör det här så skulle vi visa alla data på en gång. Eftersom att vi
endast vill ha datat i en nod så binder vi datakällan till en individuell cell i tabellen. Sedan följer kund delen och funktions knapparna. Den visar inmatnings fältet för kund namnet och knapparna för By It och Sohw XML. Den innehåller även ett tomt DIV element som används för att presentera data från showlist när By It klickas. Den sista knappen är Wildflowers som visar sortimentet när den klickas. Den sista sektionen av koden känner av mus positionen över Wildflowers och eventuell klickning. Denna information skulle sedan med hjälp av XMLHTTP kunna sändas till servern för att processas eller lagras. Spara på servern <% Response.Expires = -1000; if (Request.Server.Variables( REQUEST_METHODE ) == POST ) { //Load the posted XML data and save it to disk. xmldoc.load(request); xmldoc.save(server.mappath( sparad.xml )); %> ok <% } %> Xlink Antaget av W3C som rekommendation 3 juli 2000. Xlink används i XML för att länka resurser mellan dokument XML innehåller ingen inbyggd link funktion. I stället använder man vokabulären i xlink för att länka mellan xml resurser. Det finna två varianter av xlinks, simpel oxc extended. Xlink skall vara lika enkla som länkar i HTML men kunna ges utökad funktionalitet vid behov. Xlinks kan förekomma i mer än en riktning. Xlink tillåter dokument att länka till alla typer av resurser på internet. Simple links har samma funktionalitet som ankar element i HTML. Simple links kan ansluta bara i en riktning liksom i HTML. I Xlink finns all data i link elementet. <!ELEMENT SLINK ANY> <!ATTLIST SLINK XML:LINK CDATA #FIXED "simple" HREF CDATA #REQUIRED INLINE (true false) "true" ROLE CDATA #IMPLIED TITLE CDATA #IMPLIED SHOW (replace new embed) #IMPLIED ACTUATE (auto user) #IMPLIED BEHAVIOR CDATA #IMPLIED CONTENT-ROLE CDATA #IMPLIED CONTENT-TITLE CDATA #IMPLIED >
Att deklarera ett nytt element som kan användas i dokumentet förutsätter att man deklarerar elementet ock alla dess attrebut. XML:LINK. Man valde att reservera ett attributnamn som link funktion. Denna kan ha värdet simple eller xtended. <SLINK XML:LINK="simple" HREF="http://mspress.microsoft.com"> Microsoft Press Home Page </SLINK> Href. Resorce locator, fungerar precis som i HTML förutom att den kan innehålla en referens till en Xpointer som kan användas för att peka till en specifik del i ett annat xml dokument. Inline används främst för extended links Role. Detta förmedlar information till applikationen om den resurs som linken leder till Title. Title innehåler en visnings bar lable eller en text fras som ger information till användaren. Show. Show attributet en av de mest uppmärksammade förbättringarna jämfört med HTML. Show kan ha värdena replace, new och embed. Dessa talar om hur länken skall fungera. Repace anger att målet skall ersätta vad som finns nuvarande fönster. New anger att målet skall öppnas i ett nytt fönster. Embed anger att målet skall bäddas in i käll dokumentet. Detta är det stora nya. Actuate anger om Söka och adressera data i en xml fil Med hjälp av xsl mönster bestämmer man vad som skal sökas i datat. Frågan skulle kunna utformas enligt följande BOOK/CHAPTER. Frågan abnger endast vad som skall hittas inte hur det skall hittas. Vad returneras? Resultatet blir ett sett av noder från XML filen och med alla relationer inom xml filen intakta. Man får alltså ett komplett xml träd tillbaka. Detta träd kan sedan bearbetas vidare. function start() { todata.innertext = xmldoc.selectsinglenode("email/to").text; fromdata.innertext = xmldoc.selectsinglenode("email/from").text; ccdata.innertext = xmldoc.selectsinglenode("email/cc").text; subjectdata.innertext = xmldoc.selectsinglenode("email/subject").text; bodydata.innertext = xmldoc.selectsinglenode("email/body").text; } Funktionen säger hitta de noder som passar in på följande mönster och hämta data från dem. Filen som data hämtas från ser ut som följer. <?xml version="1.0"?> <!DOCTYPE EMAIL [ <!ELEMENT EMAIL (TO, FROM, CC, SUBJECT, BODY)> <!ELEMENT TO (#PCDATA)>
<!ELEMENT FROM (#PCDATA)> <!ELEMENT CC (#PCDATA)> <!ELEMENT SUBJECT (#PCDATA)> <!ELEMENT BODY (#PCDATA)> ]> <EMAIL> <TO>Jodie@msn.com</TO> <FROM>Bill@msn.com</FROM> <CC>Philip@msn.com</CC> <SUBJECT>My First DTD</SUBJECT> <BODY>Hello, World!</BODY> </EMAIL> I detta exempel är resultatet själva datat men resultatet kan vara mycket mer än bara enstaka noder med data. Resultatet kan vara en komplex samling av noder som alla innehåller data. För att en xsl fråga skall fungera måste ge den ett context i vilket den skall arbeta. Context är den eller den samling av noder som frågan skall fokusera på. Valet av context påverkar resultatet högst betydligt. Ett exempel på context i koden ovan är EMAIL/TO. Frågan specificerar att processorn skall hitta en nod med namnet TO direkt under elementet (noden) EMAIL. Ex 9.3, 9.4 Nyckel funktionen i list 9.4 är raden var qry = xmldoc.selectnodes( CATALOG ); Om vi ändrar denna så får vi ett annat resultat. Ex CATALOG/PLANT, CATALOG/PLANT/LIGHT. Det urval vi erhåller I return från frågan kallas en collection och brukar refereras till utifrån det element som urvalet gjorts utifrån. Detta var den enklaste varianten av fråga. Urvalsseparatorer. Den mest grundläggande urvalsseparatorn är (/) som vi redan sett men det finns fler. I ovanstående exempel så kommer urvalet endast att välja ut noder av typen CATALOG/PLANT, alltså plant noder som är under noder till CATALOG. Om vi vill referera till roten skriver vi bara /. En annan separator är // vilken säger: sök efter alla noder någonstans i trädstrukturen som matchar det namn som anges efter // Ex: //LIGHT. Två andra separatorer är./ och.//../ anger att mönstret till höger det aktuella contextet..// anger att mönstret till höger skall hittas rekursivt nedåt i aktuellt context. Dessa används aldrig ensamt. Operatorn ALLA (*) hittar alla under element i ett givet context. Ex: var qry = xmldoc.selectnodes( CATALOG/PLANT/* ); visar alla underelement till PLANT eller var qry = xmldoc.selectnodes( CATALOG/*/LIGHT ); hittar alla underelement LIGHT som är barnbarn till CATALOG oavsett vilket element som finns i mellan. Attribut operatorn (@) identifierar ett attribut i ett specificerat element. Man placerar operatorn framför det attribut man vill välja ut Ex: var qry = xmldoc.selectnodes( CATALOG/PLANT/AVAIBILITY/@USONLY ); hitar alla element AVALIBILITY som har attributet USONLY. Gruppering. Ibland behöver man använda något system för att kunna gruppera strängen för att åstadkomma en tillräcklig bra passning. Detta görs med () och underfrågor anges inom []. Prioritetsordning 1. (), 2. [], 3. /, //,./,.// Man kan infoga villkor i söksträngen med hjälp av under fråga mönstret. Ex: CATALOG/PLANT[ZONE] säger hitta alla plantor som är underelement till
CATALOG och som innehåller minst ett element ZONE. Detta kan jämföras med SQL s WHERE satts. Det finns även funktioner för att göra jämförelser på datat. Dessa funktioner kan delas in i Boolska uttryck. o $and$ o $or$ o $not$ Ex: var qry = xmldoc.selectnodes( CATALOG/PLANT[$not$ (ZONE $or$ BOTANICAL) $and$ LIGHT] ); hitta alla plantor som är underelement till CATALOG och som innehåller minst ett element LIGHT men som inte innehåller elementen ZONE eller BOTANICAL. Likhetsoperatorer. Det finns även operatorer för att testa på värdet av ett element. Dessa operatorer gör det möjligt att jämföra värdet i ett element mot ett specificerat värde. o Likhet ($eq$ eller =) o Case-insensetive likhet ($ieq$) o Olikhet ($ne$ eller!=) o Case-insensetive Olikhet ($ine$) Ex: var qry = xmldoc.selectnodes( //PLANT[LIGHT = `Mostly Shady`]) ); söker efter något PLANT element I dokumentet som innehåller värdet Mostly Shady. Andra jämförande operatorer är ALL och ANY. ALL säger att vi bara får tillbaka ett resultat om alla underelement innehåller ett vist element. Ex: var qry = xmldoc.selectnodes( CATALOG[$all$ PLANT/ZONE = `4`] ); Sök efter noder i katalogen efter där alla noder plant innehåller zone med värdet 4. På motsvarande sätt söker $any$ efter något element som matchar. I exemplet med plant katalogen kommer det första inte att returnera någon ting medan det senare returnerar hela trädstrukturen. Numeriska jämförare. Följande finns o $lt$ < mindre än o $ilt$ Case-insensetive mindre än o $le$ <= mindre än eller lika med o $ile$ Case-insensetive mindre än eller lika med o $gt$ > större än o $igt$ Case-insensetive större än o $ge$ >= större än eller lika med o $ige$ Case-insensetive större än eller lika med Sträng jämförelse string Omvandlare o Integer omvandlar vid jämförelsen strängen till ett heltal. o Real omvandlar vid jämförelsen strängen till ett decimaltal. Metoder. Det finns inbyggda metoder som kan användas för att manipulera ett urval eller för att ta fram information om noder och element. Formen är context!metod(argument)
Del 2 Audio, Video, Kapitel 33 Att lägga till bakgrundsljud Det enklaste sättet att lägga till bakgrundsljud är att använda elementet <bgsound>. Elementet stöds av webbläsare från och med IE 4 och NN 6. Bgsound har fyra egenskaper som kan anges. SRC anger sökvägen till ljudklippet LOOP anger hur många gånger som ljudklippet skall spelas. Om man anger 1 spelas klippet om och om igen så länge sidan visas. BALANCE anger förhållandet mellan höger och vänster ljudkanal. Värden anges från 1000 (allt ljud till vänster) till +1000 (allt ljud till höger). VOLUME anger volymen i värden från 0 till 1000. Volym kan inte styras med script. För att ändra egenskaper för bgsound med JavaScript, koppla ett ID till bgsound och använd detta för att få tillgång till objektet. OBS! bgsound måste placeras i head. Att lägga till video Ett sätt att lägga till video är att använda <img> elementet. Då man använder img för video byter man ut src egenskapen mot dynsrc för att ange sökvägen till filen. Detta fungerar endast i IE. Ett i mitt tycke bättre sätt att lägga till video och ljud är med elementet <embed>. Den främsta fördelen med detta tycker jag är att man får mycket bättre kontroll över hur det presenteras. När webbläsaren upptäcker att man har infogat video eller ljud med embed så starts det default gränssnitt som finns Detta gränssnitt är ofta mediaspelaren eller realplayer beroende på vad som finns installerat på datorn. Embed har flera egenskaper som kan anges bland annat SRC (sökväg), HIDDEN och loop. Stödet för embed är bra i både NN och IE men lite bristfälligt i Opera. Som vanlit kopplar man ett ID till objektet kör att kunna styra objektet dynamiskt med JavaScript. Windows mediaspelaren kan även infogas som ett ActiveX objekt men då kan applikationen endast köras i IE. Denna infogas med elementet object precis som alla andra ActiveX objekt. Jag infogr ett exempel.
<object id = "VideoPlayer" width = "200" height = "225" classid = "CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95"> <param name = "FileName" value = "car_hi.wmv" /> <param name = "AutoStart" value = "true" /> <param name = "ShowControls" value = "false" /> <param name = "Loop" value = "true" /> </object> Det finns även en AcitveX för realplayer som kan infogas. Liksom alla andra AciveX komponenter så fungerar den bara i IE. Det är då bättre att infoga realplayer som ett plugg in med embed enlig följande: <embed id = "racontrol" src = "" type = "audio/x-pn-realaudio-plugin" width = "275" height = "125" controls = "Default" autostart = "false" /> Boken tar upp ytterligare några metoder men jag tänker inte behandla dem här. Avslutning Den bok som jag använder är i mitt tycke bra upplagd ur ett pedagogiskt perspektiv men det är ändå en del saker som jag saknar. Bland annat såg jag gärna att man behandlade XHTML lite utförligare. Te.x. möjligheterna att skapa egna moduler med egna tolkningsmallar som medför att man kan definiera egna taggar och egen funktionalitet i webbsidorna. Detta är en av de viktigaste fördelarna med xhtml. Jag tycker även att xml borde behandlas utförligare. Det boken tar upp av xml är inte ens en introduktion men man kanske tycker att det skulle ta för stor platts i boken och i så fall borde de ha utelämnat det helt. Tack och hej då Pär-Ove