View
2.191
Download
0
Category
Preview:
DESCRIPTION
namespaces
Citation preview
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 namespacetill 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="http://ifra.com/imf” xmlns:demo=”http://demo.com/imf” xmlns:xsi= ”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation="http://demo.com/imf http://foo.se/demo.xsd http://ifra.com/imf http://foo.se/imf.xsd">
• Default namespace ärhttp://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:titlesvg:image
p
Här deklarerasnamespacen
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="http://www.ifra.com/imf”xmlns:demo="http://www.demo.com/imf"><object action="modify"> <PrintingJob/> <object_uid>17</object_uid> <activities> <activity> <demo:Printing>on_hold</demo:Printing> <reason>web break</reason> </activity> </activities> </object></imf>
Recommended