RXML2-migrering
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)