SlideShare a Scribd company logo
Namespaces   -Att kunna blanda XML-vokabulärer i samma instansdokument
Vad är namespaces? Ett sätt att kunna blanda olika XML-vokabulärer i samma dokument. Bra för att kunna tillåta lokala utbyggnader av vokabulärer, t.ex. om ett företag i stort kan använda en viss vokabulär för något syfte, men saknar något. Även bra i webbsammanhang, där man t.ex. kan bädda in svg-kod i html-kod, eller kan göra länkar med xlink (båda fungerar i Firefox)
Hur gör man? Man ”binder” ett visst prefix till en viss vokabulär (≈DTD).  Elementnamn som föregås av detta prefix följt av ett kolon tillhör just den vokabulären. Elementnamn som föregås av annat (eller inget) prefix tillhör någon annan vokabulär.
Exempel 1. Enkel användning av namespace <imf:some-element xmlns:imf=”http://ifra.com/imf/”> <title> default namespace </title> <imf:title> Från namespacen imf </imf:title> </imf:some-element>
Vilket prefix? Man väljer själv i XML-instansen (=XML-dokument) vilket prefix man vill välja för en viss vokabulär.  Dock finns många vokabulärer där man  brukar  använda vissa prefix. svg: för Scalable Vector Graphics xsd: för XML Schema Definition fo: för XSL Formatting Objects
Exempel 2. Prefixval Nedanstående är identiskt som exempel 1, men med annat valt prefix <banan:some-element xmlns:banan”http://ifra.com/imf/”> <title> default namespace </title> <banan:title> Från namespacen imf </banan:title> </banan:some-element>
Default namespace Det går även att ange en namespace som ska gälla utan att elementen behöver föregås av prefix.  Detta görs genom att använda attributet  xmlns  utan något postfix.
Exempel 3: Default Namespace <imf xmlns=”http://foo.com/bar”> <title> Från namespacen http://foo.bar </title> </imf> Namespacen gäller alla icke-prefixade ättlingar till elementet där namespacen deklareras.
Prefix och bindning Prefixet binds genom attributet  xmlns  följt av :prefixnamn.  Prefixet kan vara ett ”XML name” (se boken). I instansdokument kallas strängen före kolon för  prefix , strängen efter kolon för  local part  och hela strängen för  qualified name . Prefix Local part Qualified name <imf:title>
Vad är ”namespacen” En namespace är en URI (http://…, ftp://… etc) Det viktiga är att URIn är unik, dvs att ingen annan använder just den URIn. Därför brukar man välja en namespace-URI i en domän man har kontroll över. URIn behöver inte peka på något faktiskt dokument, men det skadar inte. Många parsers letar efter en DTD/Schema på URIn om inget annat anges.
Binda en namespace till en verklig URI-resurs Det går även att binda en namespace till en URI som är en annan än namespace-URIn. Detta kan göras med attributet  schemaLocation  som finns definierad i namespacen  XMLSchema-instance, som brukar bindas till prefixet  xsi Syntaxen är ganska grötig, se följande exempel.
Exempel 4.  Binda namespaces till en URI <imf xmlns=&quot;http://ifra.com/imf”  xmlns:demo=”http://demo.com/imf” xmlns:xsi= ”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation= &quot;http://demo.com/imf http://foo.se/demo.xsd http://ifra.com/imf http://foo.se/imf.xsd&quot;> Default namespace är http://ifra.com/imf  som binds till adressen  http://foo.se/imf.xsd . Namespacen  http://demo.com/imf  binds till adressen  http://foo.se/demo.xsd
Scope Ett prefix/namespace är giltigt i elementet det deklareras i samt dess ättlingar (dvs barn, barnbarn osv).
Exempel 5: Scope html head body title root p svg:svg svg:title svg: image p Här deklareras namespacen Giltighets- område
Validering med DTD Att validera ett dokument som använder olika namespaces är inte helt trivialt. DTD-definitionerna måste tillåta att element från andra namespaces får förekomma på vissa bestämda eller obestämda platser. I en DTD måste ett qualified name användas i själva deklarationen. Detta betyder att själva valet av prefix har betydelse. Detta är en klumpig lösning.
Exempel 6: Validering med DTD <!ELEMENT foo (svg:svg | head) > <!ATTLIST foo xlink:type CDATA #IMPLIED>
Validering med XML Schemas XML Schemas har bättre möjligheter att blanda olika namespaces och fortfarande kunna validera instansdokument. Mer om detta senare.
Riktigt exempel (ganska) <imf  xmlns=&quot;http://www.ifra.com/imf” xmlns:demo=&quot;http://www.demo.com/imf&quot;> <object action=&quot;modify&quot;> <PrintingJob/> <object_uid>17</object_uid> <activities> <activity> <demo:Printing>on_hold</demo:Printing> <reason>web break</reason> </activity> </activities> </object> </imf>

More Related Content

PPT
Web Liaisons Meeting, 1 Nov 2007
DOC
Sfti externt objekt dokumentschema object envelope 1 0
PPTX
JSON and REST
PPT
Info kexjobb-2013-11-11
PPT
Info om masterval och kexjobb, medieteknik KTH VT2013
PPTX
Teaching procrastination - A way of helping students to improve their study h...
PPT
Info masterval medieteknik på KTH 2012-05-03
PPT
Info masterval och kexjobb i medieteknik KTH HT 2011
Web Liaisons Meeting, 1 Nov 2007
Sfti externt objekt dokumentschema object envelope 1 0
JSON and REST
Info kexjobb-2013-11-11
Info om masterval och kexjobb, medieteknik KTH VT2013
Teaching procrastination - A way of helping students to improve their study h...
Info masterval medieteknik på KTH 2012-05-03
Info masterval och kexjobb i medieteknik KTH HT 2011

More from bjornh (16)

PPT
LIKT seminar on mobile learning
PPT
Location-based mLearning reminders
PPT
K-Seminar on mobile learning
PPT
Podcastseminarium
PPT
Web 2.0
PPT
Web publishing and XHTML
PPT
CSS
PPT
XML Schemas
PPT
XSL-FO
PPT
RDF och RSS
PPT
Device Independence
PPT
XSLT
PPT
CSS
PPT
PHP och MySQL
PPT
Web 2.0
PPT
XML och DTD
LIKT seminar on mobile learning
Location-based mLearning reminders
K-Seminar on mobile learning
Podcastseminarium
Web 2.0
Web publishing and XHTML
CSS
XML Schemas
XSL-FO
RDF och RSS
Device Independence
XSLT
CSS
PHP och MySQL
Web 2.0
XML och DTD
Ad

Namespaces

  • 1. Namespaces -Att kunna blanda XML-vokabulärer i samma instansdokument
  • 2. Vad är namespaces? Ett sätt att kunna blanda olika XML-vokabulärer i samma dokument. Bra för att kunna tillåta lokala utbyggnader av vokabulärer, t.ex. om ett företag i stort kan använda en viss vokabulär för något syfte, men saknar något. Även bra i webbsammanhang, där man t.ex. kan bädda in svg-kod i html-kod, eller kan göra länkar med xlink (båda fungerar i Firefox)
  • 3. Hur gör man? Man ”binder” ett visst prefix till en viss vokabulär (≈DTD). Elementnamn som föregås av detta prefix följt av ett kolon tillhör just den vokabulären. Elementnamn som föregås av annat (eller inget) prefix tillhör någon annan vokabulär.
  • 4. Exempel 1. Enkel användning av namespace <imf:some-element xmlns:imf=”http://ifra.com/imf/”> <title> default namespace </title> <imf:title> Från namespacen imf </imf:title> </imf:some-element>
  • 5. Vilket prefix? Man väljer själv i XML-instansen (=XML-dokument) vilket prefix man vill välja för en viss vokabulär. Dock finns många vokabulärer där man brukar använda vissa prefix. svg: för Scalable Vector Graphics xsd: för XML Schema Definition fo: för XSL Formatting Objects
  • 6. Exempel 2. Prefixval Nedanstående är identiskt som exempel 1, men med annat valt prefix <banan:some-element xmlns:banan”http://ifra.com/imf/”> <title> default namespace </title> <banan:title> Från namespacen imf </banan:title> </banan:some-element>
  • 7. Default namespace Det går även att ange en namespace som ska gälla utan att elementen behöver föregås av prefix. Detta görs genom att använda attributet xmlns utan något postfix.
  • 8. Exempel 3: Default Namespace <imf xmlns=”http://foo.com/bar”> <title> Från namespacen http://foo.bar </title> </imf> Namespacen gäller alla icke-prefixade ättlingar till elementet där namespacen deklareras.
  • 9. Prefix och bindning Prefixet binds genom attributet xmlns följt av :prefixnamn. Prefixet kan vara ett ”XML name” (se boken). I instansdokument kallas strängen före kolon för prefix , strängen efter kolon för local part och hela strängen för qualified name . Prefix Local part Qualified name <imf:title>
  • 10. Vad är ”namespacen” En namespace är en URI (http://…, ftp://… etc) Det viktiga är att URIn är unik, dvs att ingen annan använder just den URIn. Därför brukar man välja en namespace-URI i en domän man har kontroll över. URIn behöver inte peka på något faktiskt dokument, men det skadar inte. Många parsers letar efter en DTD/Schema på URIn om inget annat anges.
  • 11. Binda en namespace till en verklig URI-resurs Det går även att binda en namespace till en URI som är en annan än namespace-URIn. Detta kan göras med attributet schemaLocation som finns definierad i namespacen XMLSchema-instance, som brukar bindas till prefixet xsi Syntaxen är ganska grötig, se följande exempel.
  • 12. Exempel 4. Binda namespaces till en URI <imf xmlns=&quot;http://ifra.com/imf” xmlns:demo=”http://demo.com/imf” xmlns:xsi= ”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation= &quot;http://demo.com/imf http://foo.se/demo.xsd http://ifra.com/imf http://foo.se/imf.xsd&quot;> Default namespace är http://ifra.com/imf som binds till adressen http://foo.se/imf.xsd . Namespacen http://demo.com/imf binds till adressen http://foo.se/demo.xsd
  • 13. Scope Ett prefix/namespace är giltigt i elementet det deklareras i samt dess ättlingar (dvs barn, barnbarn osv).
  • 14. Exempel 5: Scope html head body title root p svg:svg svg:title svg: image p Här deklareras namespacen Giltighets- område
  • 15. Validering med DTD Att validera ett dokument som använder olika namespaces är inte helt trivialt. DTD-definitionerna måste tillåta att element från andra namespaces får förekomma på vissa bestämda eller obestämda platser. I en DTD måste ett qualified name användas i själva deklarationen. Detta betyder att själva valet av prefix har betydelse. Detta är en klumpig lösning.
  • 16. Exempel 6: Validering med DTD <!ELEMENT foo (svg:svg | head) > <!ATTLIST foo xlink:type CDATA #IMPLIED>
  • 17. Validering med XML Schemas XML Schemas har bättre möjligheter att blanda olika namespaces och fortfarande kunna validera instansdokument. Mer om detta senare.
  • 18. Riktigt exempel (ganska) <imf xmlns=&quot;http://www.ifra.com/imf” xmlns:demo=&quot;http://www.demo.com/imf&quot;> <object action=&quot;modify&quot;> <PrintingJob/> <object_uid>17</object_uid> <activities> <activity> <demo:Printing>on_hold</demo:Printing> <reason>web break</reason> </activity> </activities> </object> </imf>