CÓDIGO
FUENTE/DEMOS
WML a partir de WML
Estoy tratando de armar un archivo wml a partir de un xml, usando
una xsl. Ahora, el problema que tengo es que no me reconoce el
código como wml, que es bastante lógico.
El problema que pude percibir, es que al estar usando un stylesheet
xml, busca la dtd del xsl y no puedo usar la dtd de wml, lo que
quiero saber, es si se puede usar 2 dtd, o unirlas en todo caso.
Leandro Andres Kitaura
Tengo entendido que no es posible usar dos DTD a la vez. Para
solucionar el problema en el XSL debes incluir los tags iniciales
y finales típicos. Entre estos SÓLO debes incluir el contenido
del bloque <wml>...</wml>:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<wml>
.....
.....
</wml>
</xsl:template>
</xslstylesheet>
Si estas utilizando el objeto DOM en ASP para desplegar WML,
antes de escribir en el browser la fusión del XML con el XSL debes
asignarla a un string y agregarle el header de WML para luego
escribir el resultado generado por la fusión:
'Genera WML
set xmlObj = Server.CreateObject("MSXML.DOMDocument")
xmlObj.async = true
xmlObj.loadXML(XML)
set xslObj = Server.CreateObject("MSXML.DOMDocument")
xslObj.async = false
xslObj.load(XSL)
'Mezcla XML con WML
strData = "<xml version '1.0'>"
strData = strData & "<!DOCTYPE wml PUBLIC'-//WAPFORUM//DTD
WML 1.1//EN'
'http://www.wapforum.org/DTD/wml -1.1.xml'>"
strData = strData & xmlObj.transformNode(xslObj)
'Despliega WML
Response.Write strData
La eficiencia de utilizar plantillas XSL a partir de datos en
XML se sigue manteniendo debido a que antes de hacer el RESPONSE.WRITE
se hace sólo uso del interprete del servidor.
Patricio Morales
Yo estoy tambien haciendo un proyecto con esos lenguajes y si
que se reconoce el wml aunque sea generado mediante transformaciones
xsl de xml. El problema puede surguirte a la hora de enviar tu
respuesta al browser ya que si la generas como yo a partir de
una pagina ASP (supongo que con las PHP de apache sera parecido)
tienes que indicarle el tipo mime de la respuesta mediante el
comando(Al menos en ASP) Response.ContentType = "text/vnd.wap.wml".
O sea que antes de enviar la respuesta (Supongo que generada mediante
una transformación XSLT de la pagina de contenidos en XML). Por
si eso no te sirve te envio el formato que tienen mis plantillas
XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0"
encoding="UTF-8" indent="yes"
doctype-public="-//WAPFORUM//DTD WML 1.1//EN"
doctype-system="http://www.wapforum.org/DTD/wml_1.1.xm"/>
<xsl:template match = "/" >
<wml>
.....Todas las transformaciones
</wml>
</xsl:template>
</xsl:stylesheet>
Las tres primeras lineas son necesarias para que :
1ª.- El procesador XML reconozca la plantilla que esta utilizando(Diria
que es una instrucción de las que llaman Processing instruction,
que no se todavia muy bien para que sirven)
2ª.- Esta lo que hace es añadir a la respuesta la primera linea
que tenemos en esta pagina. O sea que le mete el <?xml...?>que
ves en la primera linea de la plantilla a la respuesta wml, ya
que al ser wml un subconjunto de xml esta tiene que tener ese
encabezado.
3ª.- Esta tercera linea sirve para que al hacer la transformación
se genere el tag del DTD a utilizar(Quizas es esto lo unico que
necesitavas y te estoy clavando todo el rollo pero bueno). Esta
linea genera el codigo:
<!DOCTYPE wml PUBLIC"-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
que es la que le indica el DTD que tiene que utilizar.
Despues ya esta lo del inicio de la transformacion al encontrar
el nodo raiz,etc... Bueno que ya me salgo de la pregunta. A lo
que preguntas... pues es diferente el DTD de WML (Pagina generada)
del de XSL pagina que tienes guardada en el servidor.
Albert Andrés Coll