Avatar billede zarathustra Nybegynder
17. oktober 2001 - 19:34 Der er 8 kommentarer og
1 løsning

XML til multiple view (flere medier)

Jeg har lavet et XML-script, som jeg ønsker at vise både som XHTML og som WML (WAP). Derfor har jeg lavet to forskellige XSL-stylesheets, der omdanner XML til hhv. XHTML og WML. Dermed skulle det være muligt, at visningen sker korrekt når XML-filen efterspørges af de forskellige medier.
Det er ikke noget problem at vise filen som XHTML. Men som WML...det vil den ikke. Jeg får fejlmeldingen \"Keyword xsl:stylesheet may not contain wml.\"
Jeg tror fejlen ligger i start-angivelsen i enten min XML-fil eller min WML-fil.


Her er XML-filen (data.xml):
<?xml version=\"1.0\" encoding=\"ISO8859-1\"?>
<?xml-stylesheet type=\"text/xsl\" href=\"xhtml_style.xsl\" alternate=\"yes\" media=\"screen\" title=\"MainStylesheet\" ?>
<?xml-stylesheet type=\"text/xsl\" href=\"wireless.xsl\"  media=\"wap\"?>

<data>
....
</data>

Her er XSL, der omdanner til WML (wireless.xsl):
<?xml version=\"1.0\" encoding=\"ISO8859-1\"?>
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">
<xsl:output method=\"xml\" doctype-public=\"-//WAPFORUM//DTD WML 1.1//EN\" media-type=\"text/vnd.wap.wml\" doctype-system=\"http://www.wapforum.org/DTD/wml_1.1.xml\"/>

<wml>
....
</wml>


Skulle det ikke være så skide smart at bruge XML, når man vil vise til flere forskellige medier? - hvorfor skal det så være så problematisk?!!
Denne form for multiple view findes der heller ikke meget litteratur om på nettet!
/zarathustra
Avatar billede kanyle Nybegynder
17. oktober 2001 - 20:18 #1
Der er flere highend (very highend) Content Management Systemer der let kan klare dette ;)
Avatar billede zarathustra Nybegynder
17. oktober 2001 - 20:43 #2
kanyle, tak for tippet...men jeg er da ligeglad!! Jeg skal selv løse dette problem - hvordan gør man?
Avatar billede kresten Nybegynder
18. oktober 2001 - 10:24 #3
Her desværre ikke en løsning, men følger med her på sidenlinien. Interessant problem :)
Avatar billede janegil Nybegynder
18. oktober 2001 - 12:13 #4
Ettersom du angir hvilket stylesheet du bruker inne i XML-fila, antar jeg du bruker klientside transformasjon?

Så har du noen problemer:

IE (i hvert fall 5.5) ignorerer MIME-typen i xsl:output, den gir alltid text/html.

Og jeg tror i grunnen ikke alternative stilark er støttet i noen browser.

En WAP-telefon forstår jo ikke XML. har har ingen XSL/T (ennå!), så du er eventuelt avhengig av at WAP-gatewayen transformerer.

Du er en av mine lidelsesfeller: Tror at ting skal virke, bare fordi det er korrekt kodet. Mens vi venter på at koden din en gang i fremtiden blir støttet av browserne, må du eventuelt bruke server-side transformasjon, basert på HTTP Accept-headeren. Men så skal du til å kode i ASP eller noe.
Avatar billede zarathustra Nybegynder
18. oktober 2001 - 12:56 #5
Ja, jeg  bruger klientsidetranformation. Desuden bruger jeg IE6.0. Den skulle vist kunne lidt mere en IE5.5

Hvad angår output i min browser, så er jeg helt med på, at den kun giver text/html. Det er netop derfor, at den ene XSL-stylesheet(\"MainStylesheet\") omdanner til XHTML. Det har den som nævnt tidligere heller intet problem med. I hvert fald ikke så længe jeg fjerne henvisningen

<?xml-stylesheet type=\"text/xsl\" href=\"wireless.xsl\"  media=\"wap\"?>

i min XML-fil.

Det er imidlertid heller ikke noget problem at få mit output til at indeholde WML - og så må det jo være fordi WAP-gatewayen transformerer som den skal. MEN, dette virker - ligesom med XHTML-visningen, hvis jeg har fjernet

<?xml-stylesheet type=\"text/xsl\" href=\"xhtml_style.xsl\" alternate=\"yes\" media=\"screen\" title=\"MainStylesheet\" ?>

fra min XML-fil.
 
Altså, jeg kan godt vise XHTML i min browser og WML i min WAP-telefon på baggrund af XML og XSL. Problemet er bare, at jeg ikke kan gøre det samtidigt!!! Og at jeg derfor i princippet skal oprette to XML-dokumenter med samme indhold, men med henvisning til to forskellige XSL-stylesheets.
Og det er det, som ikke kan passe!!
/zarathustra
Avatar billede kresten Nybegynder
18. oktober 2001 - 13:03 #6
Jo, det kan passe... eller det vil sige du skulle nok lave en \"mellem station\" hvor du angiver om det er til XHTML eller WML som og genererer XML\'en. Men det er måske XML filer skrevet til disk?
Avatar billede janegil Nybegynder
18. oktober 2001 - 13:19 #7
Transformere til WML i WAP-gw? Jeg er villt imponert! (Men det skal nok komme ubehagelige overraskelser hvis noen bruker en annen WAPgw enn den du tester med? Det kunne vært interessant å få en URL for WAP-XML\'en, og IP-adressen til gw\'en din?)

Men ordningen med å angi et (eller flere) stilark i XML\'en, er jo bare en nødløsning. Vi har jo bruk for en metode til å sette sammen innhold og stil fra uavhengige kilder i klenten, ideelt sett skal ikke innholdsleverandøren og stildesigneren behøve å vite om hverandre.

Fra http://www.w3.org/TR/xml-stylesheet/#rationale
The mechanism chosen for this version of the specification is not a constraint on the additional mechanisms planned for future versions. There is no expectation that these will use processing instructions; indeed they may not include the linking information in the source document.
Avatar billede zarathustra Nybegynder
19. oktober 2001 - 09:54 #8
Janegil, jeg tror faktisk at du har ret. Jeg blev vist en anelse påståelig hvad angår transformering i WAP-gatewayen, og fik rodet rundt i de utallige løsninger der ikke fungerede og dem der fungerede. Når nu jeg tænker mig ordentlig om, så er WAP også for sølle til at håndtere en sådan client-side transformation. Det må selvfølgelig ske på serversiden.

Så jeg har fundet en php-løsning:
<?php
// Create a new processor handle
$th = @xslt_create() or die(\"Can\'t create XSLT handle!\");
// Open the XML and XSL files
                  $xh = fopen($xmlFile, \"r\") or die(\"Can\'t open XML file\");
                  $sh = fopen($xslFile, \"r\") or die(\"Can\'t open XSL file\");

                  // Read in the XML and XSL contents
                  $xmlContent = fread($xh, filesize($xmlFile));
                  $xslContent = fread($sh, filesize($xslFile));

                  // Perform the XSL transformation
                  @xslt_process($xslContent, $xmlContent, $XSLtransformation);

// Output the transformed XML file
                  echo $XSLtransformation;

                  // Free up the resources
                  @xslt_free($th);
?>

Her er xmlFile mit input og xslFile min WML-stylesheet. Det fungerer. Men hvis jeg skal lave det rigtigt effektivt, så skulle jeg lade mit php-program finde frem til (måske via den benyttede protokol) hvilken type medie, der spørges efter, og dermed hvilken XSL, der skal bruges.

Alle mand, tak for diverse kommentarer
:-) zarathustra
Avatar billede janegil Nybegynder
19. oktober 2001 - 11:14 #9
WAP2:
Når WAP 2 kommer, kan du nøyes med å kode én versjon: XHTML Bacic, den blir forstått av både W@P2-telefoner og vanlige nettlesere. Om du altså er fornøyd med minimalistisk HTML på en 17-tommers skjerm.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester