You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by "Edwards, Jayme" <JC...@software.rockwell.com> on 2000/07/13 19:21:11 UTC
Problem resolving base URI in document function
Hello,
I'm using Cocoon 1.7.4, Tomcat 3.2 beta, Xerces 1.0.3, and Xalan 1.1. I have a project that uses XML documents of a specific grammar to pass filenames to a stylesheet which then loads them with the "document()" function relative to the source document. I'm having a problem where Xalan's implementation of document() either isn't working properly, or I'm not understanding the XSLT specification fully.
For example lets say I have a file:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="view/mydoc.xsl"?>
<mydoc filename="mydoc"/>
and it is located in /mydoc.xml (path on tomcat context) for which the REAL directory is:
D:\somedir\webapps\docroot\mydoc.xml
and I have a file:
<?xml version="1.0"?>
<myresources>
<myresource id="test">Testing, 1, 2, 3</myresource>
</myresources>
and it is located in /resources/mydoc_en.xml (path on tomcat context) for which the REAL directory is:
D:\somedir\webapps\docroot\resources\mydoc_en.xml
and I have a stylesheet:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:variable name="myotherdoc" select="document(concat('resources/', /mydoc/@filename, '_en.xml'), /mydoc)/myresources"/>
</xsl:stylesheet>
and it is located in /view/mydoc.xsl (path on tomcat context) for which the REAL directory is:
D:\somedir\webapps\docroot\view\mydoc.xsl
As per the XSL specification, the document() function can take one, or two parameters. If it only takes one this can be
an existing nodeset to be treated as a document with its own root or a string that specifies a filename of an XML document
to load. The spec also says if the second parameter is ommitted the base URI that will be used to resolve the filename
(if relative) is determined from the document that contains the call to the document() function. This is not the case, in that
I want to load the "resource" file for a document in a directory relative to my original mydoc.xml file. Luckily, the spec also
states that if you pass a nodeset as the second parameter to document(), the document from which this nodeset was
retrieved (the first node in document order) will be used to resolve the base URI. If you look at the xsl:stylesheet, I do this
by passing a second parameter to document with nodes from the original source document being transformed. The problem
is, I can tell it DOES use the second parameter to form the base URI, but the base URI comes out relative to the web URI
and not the URI on the filesystem. In the example above, Xalan tries to load the following document:
D:\somedir\resources\mydoc_en.xml
Which of course doesn't exist. It looks as though the base URI was determined as being different, but went up too many levels.
Any help with this problem would be great. Its pretty critical to provide fully extensibly data-to-style based web solutions with XSL.
Thanks,
Jayme
Newbie questions
Posted by Andre Lei <an...@runhere.com>.
Hi,
I'm new to the list and have several questions I hope to get answered. I am
using the command-line version.
I'm using Xerces and Xalan to go from XML -> XSL -> JSP. The '<' and '>'
characters keeps getting escaped everytime even though I'm using CDATA in
the XML and/or XSL. There is a -ESCAPE switch that by default escapes the <
> & ' " characters to HTML entities. There is no documenation to turn this
off nor does providing -ESCAPE & override the defaults. I'm trying to
produce <%@ page import="foo" %> and the '<' always turns to <.
I also tried the -HTML and -TEXT switches. The -HTML basically strips out
the xml version="1.0" info from the output document and -TEXT seems to strip
out all HTML tags, but still doesn't produce the <%@ that I want.
Can someone verify the uses for these switches?
Thanks,
Andre