RXML2-migrering

Från Lysators datorhandbok, den ultimata referensen.
Version från den 17 oktober 2006 kl. 09.05 av Ceder (diskussion | bidrag) (Konverterade revision 1.2 av /mp/www/main/local/datorhandbok/www/rxml2-migrering.html)
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök

Konvertera RXML1 till RXML2

Bli XML-kompatibel

Om dokumentet

Här kladdas lösningar ner på problem som tagits upp i KOM-mötet "Infosystem(@) Lysator". Det är inte avsett att vara en komplett guide utan ett ställa att teckna ner lösningar på problem som någon behövt hjälp med.

Detta dokument är författat av zino, och konverterades till wiki av ceder.

Därför vill du uppgradera

Den största skillnaden mellan Roxen 1.x och Roxen 2.x+ är att RXML också fick ändrade majorversion från RXML1 till RXML2. De stora ändringar som gjordes gör att RXML1 på många sätt är inkompatibel med RXML2. Det finns många anledningar till det, men de kan i slutändan destilleras till: Förbättrad säkerhet och XML-kompatibilitet. Det finns också ett kompatibilitetsmode, men slår man på det tappar man många av de fördelar som RXML2 ger.

Specifika Problem

RXML parse error: This tag doesn't handle content.

Exempel på RXML1 som kommer att generera det om det stoppas i en RXML2-miljö:

 <insert file=template>

I XML måste alla taggar avslutas med "/>" för att indikera att de inte är början på en container. Korrekt RXML2:


 <insert file="template" />

<insert> with replace

I RXML1 kunde man ersätta strängar i det man satte in genom att sätta in attribut med vilka namn som helst i <insert>. Det är inte så XML-vänligt, så den möjligheten finns inte längre. Den absolut vanligaste användningen är att göra sid-templates av olika slag.

Exempel i RXML1:

foo.html:

 <insert file="header" _title="Foo">
 Lorem gazonkium
 <insert file="footer" _email="zino">

header:

 <head>  <title>_title</title> </head>
 <body>

footer

   Maintainer: <a href="_email@test.com">_email@test.com</a>
 </body>

Förslag på RXML2-lösning:

foo.html (container style):

 <use file="template" />
 <my-template title="Foo" email="zino">
 Lorem gazonkium
 </my-template>


template (container style):

 <define container="my-template">
   <head>  <title>&_.title;</title> </head>
   <body>
     <contents/>
     Maintainer: <a href="&_.email;@test.com">&_.email;@test.com</a>
   </body>
 </define>

<insert>-attributet name fungerar inte

Det är korrekt uppfattat. Använd variabler.

RXML1:

 <define name=foo>Hej</define>
 <insert name=foo>

RXML2:

 <set variable=var.foo>Hej</set>
 &var.foo;

Tagar, containers och attribut som skrivs med stora bokstäver fungerar inte

XML har lyckligtvis tightat upp det. Skriv allt med små bokstäver så fungerar det.

RXML1:

 <MODIFIED>

RXML2:

 <modified/>

<modified lang="se" /> ger inte svensk text

Koden "se" är upptagen av ett annat språk och svenska måste anges med standardkoden sv.

RXML1:

 <modified lang="se">

RXML2:

 <modified lang="sv"/>

Sidan blir inte RXML-parsad alls

För att din sida ska RXML-parsas så måste filen ha execute-bitten satt. Dvs, du måste göra operationen chmod +x filnamn.html. Detta är ett val som gjorts av Lysators webansvarige i den nya servern för att låta användaren ha större kontroll över hur resultat retuneras från servern.

(Det här är inte ett RXML2-specifikt problem, utan en skillnad i inställning av servrarna på Lysator.)

(En dårsateprodukt)