xsl-list
[Top] [All Lists]

Re: [xsl] Re: Testing the existence of a binary file

2010-02-14 06:56:08
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hello Gerrit,

if java is accessible in your environment, you can use the following
function:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
        version="2.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
        xmlns:xs="http://www.w3.org/2001/XMLSchema";
        xmlns:java-file="java:java.io.File"
        xmlns:java-uri="java:java.net.URI"
        xmlns:misc="someURI"
        >
        <xsl:function name="misc:file-exists" as="xs:boolean">
                <xsl:param name="uri" as="xs:string?"/>
                <xsl:value-of
select="java-file:exists(java-file:new(java-uri:new($uri)))"/>
        </xsl:function>
</xsl:stylesheet>

I ended up with this solution, because it only depends on the
availability of java (it works also with AltovaXML), and there was some
changes in the support of saxon:last-modified/saxon:file-last-modified
during the saxon revisions.

I don't know how it's fit to Schematron, but maybe you find a way.

Best regards,

Stefan


Imsieke, Gerrit, le-tex schrieb:
Since nobody answered, I tried to come up with a solution on my own.

It seems that in Java there is no such thing as a 'raw' encoding, since
everything will be represented as 16-bit Unicode characters internally.
http://java.sun.com/javase/7/docs/api/java/nio/charset/CharsetDecoder.html
If I supplied my own CharsetDecoder, maybe I could just ignore malformed
input and unmappable characters and report success for any input of
non-zero length. But I was looking for a solution that works with Saxon
out of the box, not requiring users to install Java extension functions.

Looking at what I was trying to achieve, that is: testing the sheer
existence of a binary file, rather than reading its raw contents, I came
up with the following solution:

<sch:assert
  test="saxon:try(
          format-dateTime(
            saxon:last-modified(
              resolve-uri(
                @src,
                $base-uri
              )
            ),
            '[Y]'
          ),
          false()
        )"
  id="ImageMissing">
    Image <sch:value-of select="@src"/> must be present at its @src
location.
</sch:assert>

This relies on the operating system reporting a last change date for the
file in question, and of course on Saxon's built-in extension functions
which will be an issue for Saxon HE users.

Gerrit


On 05.02.2010 10:21, Imsieke, Gerrit, le-tex wrote:
Dear List Members,

In Schematron using the xslt2 binding, I want to check whether image
files (whose relative path is given in a @src attribute) are present.

So in the generated XSLT file, I have code like the following.

<xsl:when test="unparsed-text-available(resolve-uri(@src, $base-uri))"/>

This works fine if @src refers to text files in US-ASCII or UTF-8
encodings, but not for PNGs oder JPEGs.

So I was looking for an encoding name that I can use as the second
argument to unparsed-text-available. But I couldn't find an encoding
such as RAW or BINARY that Java accepts (I'm using saxon 9.2.0.3 on Java
1.6.0_17).

This issue must have been raised before, but unfortunately I didn't find
previous threads on this matter.

Any hints appreciated.

Gerrit


-----BEGIN PGP SIGNATURE-----
Comment: GnuPT v3.6.6
Comment: Download: http://www.gnupt.de
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkt38r8ACgkQ9H2ejphQ4SF9fACeKVWZ3ryIl0krfTSFEYbP1ZZX
P50AniMjNo4q6012zddFhIQ72V5zxYG0
=gPYN
-----END PGP SIGNATURE-----

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--