Projekter indenfor datanet extensible Markup Language XML DIKU.PEH.787
Hvad er XML? Et meta sprog til beskrivelse af data dvs. det beskriver kun data, hverken præsentation, behandling eller noget andet XML er en SGML (Standard Generalized Markup Language) applikation dvs. reglerne for at lave et XML dokument er defineret på en sådan måde, at SGML software håndterer et XML dokument korrekt XML er en stripped-down SGML XML understøtter arbitrære markups dvs. enhver kan definerer sit eget data format XML er udviklet under W3C konsortiet World Wide Web Consortium: http://www.w3c.org XML er en åben standard dvs. alle kan frit anvende den XML Version 1.0 blev offentliggjort i februar 1998 DIKU.PEH.788
XML Design Goals ❶ XML shall be straightforwardly usable over the Internet ❷ XML shall support a wide variety af applications ❸ XML shall be compatible with SGML ❹ It shall be easy to write programs which process XML documents ❺ The number of optional features in XML is to be kept to the absolute minimum, ideally zero ❻ XML documents should be human-legible and reasonably clear ❼ The XML design should be prepared quickly ❽ The design of XML shall be formal and concise ❾ XML documents shall be easy to create ❿ Terseness in XML markup is of minimal importance Kilde: XML specification, http://www.w3.org/tr/1998/rec-xml-19980210 DIKU.PEH.789
Eksempel Menu (I) Menu kort Restauranens navn Ret type Ret Pris Beskrivelse DIKU.PEH.790
Eksempel Menu (II) rname Liam s Chowder House and Grill desc Warmed leek salad item price 6,95 menu graphic desc Prosciutto ham item price 7,95 graphic DIKU.PEH.791
XML Dokument: Menu (I) <?xml version="1.0" encoding='utf-8'?> <menu date="12nov1998"> <rname>liam's Chowder House and Grill</rname> <item type="appetizer"> <descr>warmed leek salad, coated with a balsamic vinegar</descr> <price units="usd">6.95</price> <graphic gtype="gif" src="http//:www.goodfood.com/menu/leek-salad.gif"/> </item> </menu> <!-- Following item is tasty! --> <item type="appetizer"> <descr>prosciutto ham with melon</descr> <price units="usd">7.95</price> <graphic gtype="jpeg" src="http//:www.goodfood.com/menu/ham-melon.gif"/> </item> DIKU.PEH.792
XML Tags Start tag <gi-name >, hvor gi-name er Generic Identifier og er Attribute Specification Angiver starten på et element, inklusiv specifikationen af de attributer, der gælder for elementet End tag </gi-name>, hvor gi-name er Generic Identifier på det element, der afsluttes Angiver slutningen på et element og kan ikke indeholde nogen attribut specifikation Empty-element tag <gi-name />, hvor gi-name er Generic Identifier og er Attribute Specification Kan ikke indeholde andre markup s eller tekst Kan indeholde attrubut specifikationer DIKU.PEH.793
XML Attribute Specifications Attributter er navngivne enheder, der definerer egenskaberne for en specifik instans af et element Placering Kan stå i start-tags og empty-element tags Hvad gør de Specificerer attributter for elementet og tildeler disse attributter en værdi Regler En attribut kan kun specificeres én gang for et givet element Attribute værdier skal være i anførselstegn (enten eller ) Attribute værdier må ikke indeholde tegnet <... DIKU.PEH.794
XML declaration and comments XML declaration: <?xml version= 1.0?> angiver at dette (efterfølgende data) er et XML dokument skal være første markup element mulige attributer: version, angiver XML versionen encoding, angiver den anvendte tegn indkodning standalone, angiver, om dokumentet kan læses og behandles uafhængigt af external entities Comments indledes med strengen <!-- og afsluttes med strengen --> kan indeholde alle tegn undtagen -- og --> kan deles over flere linier DIKU.PEH.795
XML Dokument: Menu (II) DIKU.PEH.796
Well-formed og Valid Well-formed betyder, at dokumentet følger XML standarden Et XML dokument er Valid, hvis det er well-formed og det er konsistent med syntaksen defineret i en DTD (eller XML schema) og DTD (eller XML schema) definerer alle elementer DIKU.PEH.797
Hvad er DTD og XML schema De specificerer: strukturen af et dokument dette element indeholder disse elementer, hvilke igen indeholder disse andre elementer osv. datatypen for hvert element og attribue dette element skal indeholde en integer i området 0 til 12.000 (en DTD er ikke særlig godt til at specificere datatyper som denne) ELEMENT ATTLIST #PCDATA ENTITY CDATA DTD/XML schema er det ordforråd, der kan anvendes til at definere ordforrådet for menu complextype element sequence string boolean integer menu descr item rname type price DIKU.PEH.974
Document Type Declaration (DTD) En DTD definerer syntaks reglerne for et dokuments elementer og attributter En DTD definerer entities og notations En DTD er en formaliseret beskrivelse af datastrukturen for et XML dokument En DTD kan enten placeres i starten af et XML dokument eller i en separat fil En DTD kan anvendes i flere forskellige dokumenter En DTD kan opdeles i flere dele, der hver især er placeres i en separat fil Valideringen af et XML dokument sker med en såkaldt XML-parser DIKU.PEH.798
Komponenter i en DTD Elementer (ELEMENT) er de dele, der indeholder data Attributter (ATTLIST) er de egenskaber, der er knyttet til hvert enkelt element. De fortæller noget om, hvordan data skal fortolkes Entiteter (ENTITY) pointere/variable, der refererer til information et andet sted (internt eller eksternt) DIKU.PEH.799
DTD for eksemplet Menu <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE menu [ <!-- menu has any number of items, each item containing a description, price, and optional graphic. --> <!ENTITY resto "Liam's Chowder House and Grill" > <!ELEMENT menu (rname, (item)*) > <!ATTLIST menu date CDATA #REQUIRED ref CDATA #IMPLIED rest CDATA #FIXED "&resto;" > <!ELEMENT rname (#PCDATA)*> <!ELEMENT item (descr, price, graphic?) > <!ATTLIST item type (appetizer entree dessert drink) "entree" > <!ELEMENT descr (#PCDATA)* > <!ELEMENT price (#PCDATA)* > <!ATTLIST price units CDATA #REQUIRED > <!ELEMENT graphic EMPTY > <!ATTLIST graphic gtype CDATA #REQUIRED src CDATA #REQUIRED > ]> Element -only Content Model Mixed Content Model EMPTY Content Model DIKU.PEH.800
Element Type Declaration (content model) EMPTY Content Model elementer, der følger denne model er tomme, dvs. ingen brugerdata. De kan kun optræde som emty-element tags ANY Content Model elementer, der følger denne model, kan indeholde alt, enhver kombination af data (tekst) og andre elementer Element-only Content Model elementer, der følger denne model, kan kun indeholde andre elementer, dvs. kan ikke indeholde data (tekst) Mixed Content Model elementer, der følger denne model, kan indeholde både andre elementer og data (tekst) der er defineret 2 former <!ELEMENT elem-name (#PCDATA)* > <!ELEMENT elem-name (#PCDATA elem1 elem2)* > DIKU.PEH.801
Element-only content model Fixed order angives med, a,b eller b,a,c Choice angives med a b eller b c a Repeat angives med *,?, +, eller ingen tegn * : nul eller flere? : nul eller en + : en eller flere : en og kun en eksempel: a, b* : a flugt af nul eller flere b Gruppering angives med ( ) eksempel: (a, (b, c?)*) : a fulgt af nul eller flere sekvenser af b fulgt af intet eller c DIKU.PEH.802
Attribute-List Declarations Attributter defineres med <!ATTLIST elem-name attribute-definitions> hvor attribute-definitions er af formen att-name type default-declaration type er enten et nøgleord eller et udtryk, der definerer attributtens type eksempler: enumerated-list : ( value1 value2 value3 ) string-type : CDATA default-declaration kan være #REQUIRED, attributten skal specificeres i alle elementer og der er ingen default værdi #IMPLIED, attributten kan specificeres i elementerne og der er ingen default værdi attr-value, attributten kan specificeres i elementerne og attr-value er default værdien #FIXED attr-value, attributten kan ikke tildeles andre værdier i en element instans. DIKU.PEH.803
XML Dokument med DTD: Menu (III) DIKU.PEH.804
Hvorfor XML schema? Mange var utilfredse med DTD Det var en anderledes syntaks Man skriver sit XML (instance) dokument i en syntaks og DTD en i en anden syntaks --> dårligt, inkonsistent Begrænsede datatype muligheder DTD understøtter kun meget begrænsede muligheder for at specificere datatyper. F.eks. kan man ikke angive, at elementet <elevation> er et heltal i området 0 til 12.000 Ønske om et sæt datatyper, der er kompatibelt med datatyper anvendt i forbindelse med databaser DTD understøtter 10 datatyper; XML Schemas understøtter 44+ DIKU.PEH.975
XML Schema Udvidede datatyper 44+ versus 10 Mulighed for at definere egne datatyper Eksempel: Dette er en ny type baseret på string typen og elementer af denne type skal følge dette mønster: ddd-dddd, hvor 'd' repræsenterer et tal." Skrevet i den samme syntaks som selve dokumenterne Færre syntakser at huske på Object-oriented Kan extend eller restrict en type (specificere nye typer på baseret på de gamle) Sæt s kan udtrykkes, f.eks., kan child elementer forekomme i vilkårlig rækkefølge Kan specificere at et element indhold skal være unik (keys on content) Kan definere multiple elementer med det samme navn men forskelligt indhold Kan definere substitut elementer - f.eks. at "Book" elementet er et substitut for "Publication" elementet. DIKU.PEH.976
XML Schema for Menu (I) <xsd:schema xmlns:xsd="http://www.w3.org/1999/xmlschema"> <xsd:element name="menu"> <xsd:complextype content="elementonly"> <xsd:sequence> <xsd:element name="rname" type="xsd:string"/> <xsd:element name="item" type="itemtype" minoccurs="1" maxoccurs="unbounded"/> </xsd:sequence> <xsd:attribute name="date" type="xsd:date" use="required"/> <xsd:attribute name="ref" type="xsd:string" use="optional"/> <xsd:attribute name="rest" type="xsd:string" use="fixed" value="liam's Chowder House and Grill"/> </xsd:complextype> </xsd:element> <xsd:complextype name="itemtype" content="elementonly"> <xsd:sequence> <xsd:element name="descr" type="xsd:string"/> <xsd:element name="price" type="pricetype"/> <xsd:element name="graphic" type="graphictype"/> </xsd:sequence> <xsd:attribute name="type" use="default" value="entree"> <xsd:simpletype base="xsd:nmtoken"> <xsd:enumeration value="appetizer"/> <xsd:enumeration value="entree"/> <xsd:enumeration value="dessert"/> <xsd:enumeration value="drink"/> </xsd:simpletype> </xsd:attribute> </xsd:complextype> DIKU.PEH.977
XML Schema for Menu (II) <xsd:complextype name="pricetype" base="xsd:decimal"> <xsd:attribute name="units" type="xsd:string" use="required"/> </xsd:complextype> <xsd:complextype name="graphictype" content="empty"> <xsd:attribute name="gtype" use="required"> <xsd:simpletype base="xsd:nmtoken"> <xsd:enumeration value="gif"/> <xsd:enumeration value="jpeg"/> </xsd:simpletype> </xsd:attribute> <xsd:attribute name="src" type="xsd:string" use="required"/> </xsd:complextype> </xsd:schema> DIKU.PEH.978
DTD contra XML Schema DTD skrevet i non-xml syntaks Schema flere basis datatyper defineret understøtter ikke namespace tillader brugerdefineret datatyper tilbyder kun meget begrænset datatyper understøtter nedarvning af datatyper mange værktøjer tilgængelig meget udbredt understøtter namespace mange værktøjer tilgængelig udbredt kendskab og praktisk erfaring DIKU.PEH.936
Simple Textual Alarm Interface - STAI En Alarm Overvågnings specifikation baseret på OSI-management (X.733) TMN (Q.821) En protokol, der specificerer hvordan CMIP events kan sendes som almindelig tekst En samling templates, der gør anvendelsen nemmere Model: alarmer og heartbeats Q-adaptor TCP IP 802.3 Udstyr DIKU.PEH.917
Eksempel på alarm (QTEXT) roiv-apdu{ invokeid = 45 operation-value = m-eventreport argument{ managedobjectclass = managedelement managedobjectinstance{ distinguishedname{ managedelementid = smsc facilityid = AD} } eventtime = 19961231235959.9+0100 eventtype = communicationsalarm eventinfo{ probablecause = 5 perceivedseverity = minor notificationidentifier = 345 additionaltext = This is a test of an alarm} } } DIKU.PEH.918
Alarm template (QTEXT) roiv-apdu{ invokeid = <invokeid> operation-value = m-eventreport argument{ managedobjectclass = <MOC> managedobjectinstance{ distinguishedname{ <DN>} } eventtime = <eventtime> eventtype = <eventtype> eventinfo{ probablecause = <cause> perceivedseverity = <severity> notificationidentifier = <notiid> additionaltext = <text>} } } DIKU.PEH.919
Eksempel på alarm (QXML) <?xml version="1.0" encoding='iso-8859-1' standalone="yes"?> <!DOCTYPE roiv-apdu SYSTEM "stai.dtd"> <roiv-apdu> <invokeid>45</invokeid> <operation-value oper="m-eventreport" /> <argument> <managedobjectclass>managedelement</managedobjectclass> <managedobjectinstance> <distinguishedname> <rdn attrname= managedelementid >smsc</rdn> <rdn attrname="facilityid">ad</rdn> </distinguishedname> </managedobjectinstance> <eventtime timetype="mix">19961231235959.9+0100</eventtime> <eventtype evtype="communicationsalarm" /> <eventinfo> <probablecause cause="5" /> <perceivedseverity severity="minor" /> <notificationidentifier>345</notificationidentifier> <additionaltext xml:lang="da">dette er en tekst med danske æ-ø-å</additionaltext> </eventinfo> </argument> </roiv-apdu> DIKU.PEH.932
STAI DTD (udpluk) <!-- ELEMENT and ATTLIST Specifications --> <!-- ********************************** -->.. <!ELEMENT eventtime (#PCDATA)> <!ATTLIST eventtime timetype (%eventtimechoises;) #REQUIRED > <!ELEMENT eventinfo (probablecause, perceivedseverity, notificationidentifier, additionaltext?)> <!ELEMENT probablecause EMPTY> %probablecause-grammer; <!ELEMENT perceivedseverity EMPTY> <!ATTLIST perceivedseverity severity (%severitychoises;) #REQUIRED > <!ELEMENT notificationidentifier (#PCDATA)> <!ELEMENT additionaltext (#PCDATA)> <!ATTLIST additionaltext xml:lang NMTOKEN "en-uk" > DIKU.PEH.933
STAI DTD (udpluk fortsat) <?xml version="1.0" encoding='utf-8'?> <!-- * QXML version 1.1 * Copyright (C) Tele Danmark 2000 --> <!-- * The event time has to follow one of three predefined format: --> <!ENTITY % eventtimechoises "local utc mix" > <!-- * The event type has to be one of the following predefined types: --> <!ENTITY % eventtypechoises "communicationsalarm qualityofservicealarm processingerroralarm equipmentalarm enviromentalalarm systemok" > <!-- * The severity of an alarm has to be one of the following predefined: --> <!ENTITY % severitychoises "cleared indeterminate critical major minor warning" > DIKU.PEH.934
STAI Schema (udpluk) <xsd:complextype name="eventtimetype" content="textonly" base="xsd:string" derivedby="extension"> <xsd:annotation> <xsd:appinfo>event Time Element</xsd:appinfo> <xsd:documentation> The event time..... </xsd:documentation> </xsd:annotation> <xsd:pattern value="(0) (((0[1-9]\d{2}) ([1-9]\d{3}) (00[1-9]\d{1}) (000[1-9]))((0[1-9]) (1[0-2]))((0[1-9]) ([1-2][0-9]) (3[0-1]))(([0-1][0-9]) (2[0-3]))([0-5][0-9])([0-5][0-9])[.][0-9](Z ([+ -](([0-1][0-9]) (2[0-3]))([0-5][0-9])))?)" /> <xsd:attribute name="timetype" use="required" > <xsd:simpletype base="xsd:nmtoken"> <xsd:enumeration value="local"> </xsd:enumeration> <xsd:enumeration value="utc"> </xsd:enumeration> <xsd:enumeration value="mix"> </xsd:enumeration> </xsd:simpletype> </xsd:attribute> </xsd:complextype> DIKU.PEH.935
XML Namespaces Anvendes til at angive unique universal names eks.: <part>window</part> kan anvendes i forbindelse med et hus og et program hvorimod <house:window xmlns:window= http://www.house.com/xml > <house:part>window</house:part> entydigt definerer, hvad der skal forstås dvs. et universal name består af : <prefix> : <local name> og som prefix er valgt at anvende URL s disse URL s skal dog ikke opfattes som et sted, hvor man kan hente informationer om, hvilke lokale navne der dækkes af et bestemt prefix DIKU.PEH.937
XSTL (XSL Transformations) (I) Projekter indenfor datanet XSTL er en del af XSL (Extensible Stylesheet Language), men kan udmærket anvendes alene XSLT genererer udfra et XML dokument et nyt XML dokument Output til HTML understøttes også På baggrund af instruktioner i et XSTL style sheet behandles input XML dokumentet, og output XML dokumentet genereres DIKU.PEH.938
XSTL (XSL Transformations) (II) Projekter indenfor datanet XML XLS/HTML XML Behandling WAP/WML DIKU.PEH.806
XSTL (XSL Transformations) - Eks. Menu DIKU.PEH.807
XSL for eksemplet Menu <xsl:stylesheet xmlns:xsl="http://www.w3.org/tr/wd-xsl"> <xsl:template match="/"> <HTML> <HEAD> <TITLE>Menu example in HTML</TITLE> <STYLE TYPE="text/css"> BODY {font-family:tahoma,arial,sans-serif; font-size:10pt; font-weight:normal; line-height:140%} </STYLE> </HEAD> <BODY> <BR /> <DIV STYLE="font-family:ArnoldBoeD; color:red; font-size:24pt; text-align:center"> <xsl:apply-templates select="//rname" /> </DIV> <BR /> <HR></HR> <TABLE WIDTH="100%" CELLPADDING="5"> <xsl:apply-templates select="//item" /> </TABLE> <HR></HR> </BODY> </HTML> </xsl:template> <xsl:template match="rname"> <xsl:value-of /> </xsl:template> <xsl:template match="item"> <TR> <xsl:apply-templates select="descr" /> <xsl:apply-templates select="price" /> </TR> </xsl:template> <xsl:template match="descr"> <TD STYLE="font-family:Tahoma,Ariel,sans-serif; color:blue; font-size:16pt; font-weight:bold"> <xsl:value-of /> </TD> </xsl:template> <xsl:template match="price"> <TD STYLE="font-family:Tahoma,Ariel,sans-serif; color:black; font-size:14pt; font-weight:bold"> $<xsl:value-of /> </TD> </xsl:template> </xsl:stylesheet> DIKU.PEH.808
XML Teknologier Definitions and Structure DTD XML schema XML Data Types Data Transfer Data Store Applikation XML Display and Reporting XSL CSS Links to other resources XPoint XLink HTML Resources XML DIKU.PEH.809