webForumDet fria alternativet

Multipla namespaces

XML

7 svar · 769 visningar · startad av jme

Medlem sedan maj 20012 237 inlägg
Frågan#1

Hej.

Hur kan jag använda multipla namespaces i en och samma xml-fil?

Jag har följande xml-fil men validatorn säger:

The 'http://jme.kaasuvuoto.com:joulukortti' element is not declared.

<joulukortti xmlns:krt="http://jme.kaasuvuoto.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jme.kaasuvuoto.com/joulukortti.xsd">
	<vastaanottaja>Pekka</vastaanottaja>
	<lahettaja></lahettaja>
	<viesti></viesti>
	<pvm></pvm>
	<osoite>
		<katu></katu>
		<postinumero></postinumero>
		<kunta></kunta>
		<maa></maa>
	</osoite>
</joulukortti>
Medlem sedan dec. 20042 245 inlägg
#2

jme skrev:

Hur kan jag använda multipla namespaces i en och samma xml-fil?

Genom att sätta defaultnamnrymden (med xmlns="...") och/eller binda ett namnrymdsprefix till en namnrymd (med xmlns:foo="..."), och därefter använda det prefixet i taggar (och/eller attribut).

jme skrev:

Jag har följande xml-fil men validatorn säger:

Vilken validator?

jme skrev:

The 'http://jme.kaasuvuoto.com:joulukortti' element is not declared.

<joulukortti xmlns:krt="http://jme.kaasuvuoto.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jme.kaasuvuoto.com/joulukortti.xsd">
	<vastaanottaja>Pekka</vastaanottaja>
	<lahettaja></lahettaja>
	<viesti></viesti>
	<pvm></pvm>
	<osoite>
		<katu></katu>
		<postinumero></postinumero>
		<kunta></kunta>
		<maa></maa>
	</osoite>
</joulukortti>

Det ser ut som att du vill ha "xmlns" och inte "xmlns:krt", alternativt "krt:" i alla taggar.

Varför behöver dokumentet peka till schemat?

Medlem sedan maj 20012 237 inlägg
#3

Vilken validator?

Kommer inte ihåg längre. :|

Det skall nog vara:

<krt:vastaanottaja>

osv...

Varför behöver dokumentet peka till schemat?

Var väl bara ett av försöken att få multipla namespace att fungera.

Medlem sedan dec. 20042 245 inlägg
#4

jme skrev:

Var väl bara ett av försöken att få multipla namespace att fungera.

Men du använder väl bara en namnrymd i dokumentet? På vilket sätt spelar det roll hur många namnrymder man har?

Medlem sedan maj 20012 237 inlägg
#5

Jo, exemplet jag gav kanske inte är korrekt, men jag vill kunna använda flera nmespaces.

typ:

<krt:blaarg>...</krt:blaarg>
<abc:foo>xxx</abc:foo>

i samma xml-dokument.

Medlem sedan dec. 20042 245 inlägg
#6

Ok... Har du löst problemet eller har jag fortfarande inte förstått frågan? :)

Man är inte tvungen att använda namnrymdsprefix, men det kan underlätta i vissa lägen. Följande dokument har alla samma betydelse:

<krt:joulukortti xmlns:krt="http://jme.kaasuvuoto.com"
                 xmlns:abc="http://example.org/ns/abc">
 <krt:vastaanottaja>Pekka</krt:vastaanottaja>
 <abc:foo>xxx</abc:foo>
</krt:joulukortti>
<krt:joulukortti xmlns:krt="http://jme.kaasuvuoto.com"
                 xmlns="http://example.org/ns/abc">
 <krt:vastaanottaja>Pekka</krt:vastaanottaja>
 <foo>xxx</foo>
</krt:joulukortti>
<joulukortti xmlns="http://jme.kaasuvuoto.com"
             xmlns:abc="http://example.org/ns/abc">
 <vastaanottaja>Pekka</vastaanottaja>
 <abc:foo>xxx</abc:foo>
</joulukortti>
<joulukortti xmlns="http://jme.kaasuvuoto.com">
 <vastaanottaja>Pekka</vastaanottaja>
 <foo xmlns="http://example.org/ns/abc">xxx</foo>
</joulukortti>
Medlem sedan maj 20012 237 inlägg
#7

zscorpan: tack för svaret. Skall kika på det nu. Hade glömt att följa tråden i ett par dagar. Vad jag förstår så är en av orsakerna till varför man kör med namespaces att om man har två element som har samma namn men i helt olika kontext så kan man med hjälp av namespaces kunna använda dessa båda i samma dokument utan problem. Mitt exempel har egentligen inte detta problem men jag vill få det att fungera så att jag verkligen behöver det.

Sen vill jag även kunna koppla in en xsd-fil till mitt namespace(krt). Hur gör jag det?

Medlem sedan dec. 20042 245 inlägg
#8

jme skrev:

zscorpan: tack för svaret. Skall kika på det nu. Hade glömt att följa tråden i ett par dagar. Vad jag förstår så är en av orsakerna till varför man kör med namespaces att om man har två element som har samma namn men i helt olika kontext så kan man med hjälp av namespaces kunna använda dessa båda i samma dokument utan problem. Mitt exempel har egentligen inte detta problem men jag vill få det att fungera så att jag verkligen behöver det.

Namnrymder har en annan uppgift också. Nämligen att ange vilken applikation ett visst element tillhör... Ett XML-element består av två delar: en namnrymd och det lokala namnet. Om du inte anger någon namnrymd hamnar elementen i "ingen namnrymd" namnrymden, vilket innebär att de har helt annan betydelse mot om de är i någon annan namnrymd (precis som om du har samma namnrymd men ändrar det lokala namnet).

jme skrev:

Sen vill jag även kunna koppla in en xsd-fil till mitt namespace(krt). Hur gör jag det?

Här förstår jag inte riktigt vad du menar.

Om du vill validera ditt dokument borde du i validatorn kunna ange dokumentet du vill validera och schemat du vill validera mot. Det finns ingen anledning att dokumentet ska ange vilka regler det påstås följa (även om det är vanligt att göra det med DTDer).

Om din validator endast fungerar med att dokumentet anger schemat så borde du leta efter en bättre validator eller kanske till och med ett bättre schema-språk.

262 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)