jmeMedlem sedan maj 20011 967 inlägg
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>
zcorpanMedlem sedan dec. 20042 269 inlägg
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?
jmeMedlem sedan maj 20011 967 inlägg
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.
zcorpanMedlem sedan dec. 20042 269 inlägg
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?
jmeMedlem sedan maj 20011 967 inlägg
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.
zcorpanMedlem sedan dec. 20042 269 inlägg
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>
jmeMedlem sedan maj 20011 967 inlägg
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?
zcorpanMedlem sedan dec. 20042 269 inlägg
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.