advertisement

Namespaces

50 %
50 %
advertisement
Information about Namespaces

Published on November 1, 2007

Author: bjornh

Source: slideshare.net

Description

namespaces
advertisement

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)

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.

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>

<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

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>

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.

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.

<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>

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 .

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.

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.

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

<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).

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.

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>

<!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.

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>

<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>

Add a comment

Related pages

Namespace (C#-Referenz)

Einen Diskurs über Zugriffsmodifizierer in Namespaces, die Elementen zugewiesen werden können, finden Sie unter Zugriffsmodifizierer (C#-Referenz).
Read more

Namensraum – Wikipedia

Technische Details. Ein Name identifiziert ein Objekt. Zur eindeutigen Zuordnung ist jedoch der entsprechende Kontext – der Namensraum – zu beachten.
Read more

Namensraum (XML) – Wikipedia

XML-Namensräume (englisch „XML namespaces“) werden benutzt, um das Vokabular eines XML-Dokumentes eindeutig zu identifizieren und um in einem ...
Read more

Namespaces (C# Programming Guide) - msdn.microsoft.com

Namespaces are heavily used in C# programming in two ways. First, the .NET Framework uses namespaces to organize its many classes, as follows:
Read more

PHP: Namespaces - Manual

Be warned that it is not trivial to convert a project to use namespaces. If you add the same namespace to the top of all your files, your application will ...
Read more

namespaces [DokuWiki]

You don't need to create namespaces separately; simply create pages with colons in the pagename. The token after the last colon will be the name of the ...
Read more

XML Namespaces - W3Schools

Well organized and easy to understand Web bulding tutorials with lots of examples of how to use HTML, CSS, JavaScript, SQL, PHP, and XML.
Read more

Namespaces in XML 1.0 (Third Edition)

XML namespaces provide a simple method for qualifying element and attribute names used in Extensible Markup Language documents by associating them with ...
Read more

Namespace - Wikipedia, the free encyclopedia

Thus, in these languages namespaces can nest, forming a namespace tree. At the root of this tree is the unnamed global namespace. Use in common languages C
Read more

Name visibility - C++ Tutorials - cplusplus.com - The C++ ...

Name visibility Scopes Named entities, such as variables, functions, and compound types need to be declared before being used in C++. The point in the ...
Read more