[oXygen-user] Feature request: Validation for linked images in SVG paths

Wendell Piez wapiez at wendellpiez.com
Wed Jul 31 08:15:54 CDT 2013


Matt,

Oops, sorry about that $t, it was a relic of an earlier iteration. It
should be . (dot).

I just started with Alex's code, reworked and reworked again. (Compulsive
activity after a long day of XSLT/XQuery/XPath.) There is certain to be
other tuning necessary for your case.

Cheers, Wendell

Wendell Piez | http://www.wendellpiez.com
XML | XSLT | electronic publishing
Eat Your Vegetables
_____oo_________o_o___ooooo____ooooooo_^


On Tue, Jul 30, 2013 at 11:36 PM, KAATMAN Matthew <
matthew.kaatman at biomerieux.com> wrote:

> Hey Wendell,****
>
> ** **
>
> I am learning from all these examples. $t is undefined. Would you mind
> clarifying what it should be set to?****
>
> ** **
>
> Thanks!
> Matt****
>
> ** **
>
> *From:* oxygen-user-bounces at oxygenxml.com [mailto:
> oxygen-user-bounces at oxygenxml.com] *On Behalf Of *Wendell Piez
> *Sent:* Tuesday, July 30, 2013 6:20 PM
>
> *To:* oxygen-user at oxygenxml.com
> *Subject:* Re: [oXygen-user] Feature request: Validation for linked
> images in SVG paths****
>
> ** **
>
> Hi,****
>
> ** **
>
> Schematron is not only useful; it's fun. (I admit I am hard-core.)****
>
> ** **
>
> Refactoring a little (but untested):****
>
> ** **
>
> <let name="referencedImages"
> value="$svgDocument//*:image/@*:href[not(starts-with(.,'data'))]"/>****
>
> <let name="missingImages"
> value="$referencedImages[not(exslt:exists(resolve-uri($t,
> base-uri($svgDocument))))]"/>****
>
> <assert test="empty($missingImages)">An image file referenced in SVG image
> <value-of select="@href"/> is missing:****
>
>   check for <value-of select="string-join($missingImages,', ')"/></assert>
> ****
>
> ** **
>
> Thanks to Alex for doing the real work.****
>
> ** **
>
> Cheers, Wendell****
>
> ** **
>
>
> ****
>
> Wendell Piez | http://www.wendellpiez.com
> XML | XSLT | electronic publishing
> Eat Your Vegetables
> _____oo_________o_o___ooooo____ooooooo_^****
>
> ** **
>
> On Tue, Jul 30, 2013 at 10:35 AM, Alex Jitianu <alex_jitianu at sync.ro>
> wrote:****
>
> Hello Matt,
>
> 1. The odd line is related to the fact that when validating with a
> Schematron file under the hood the Schematron is transformed in XSLT and
> that XSLT is applied on the document. The reported error line is inside
> that intermediate XSLT and unfortunately I don't think there is a round
> trip to get the real location in the Schematron file.
>
> 2. I believe the NullPointerException is a side effect of the fact that I
> didn't consider the fact that the SVG file is also referred relatively in
> the DITA document. As a result the SVG will not get located and parsed by
> the document() function and later on exists() function will break. In the
> example below I've added the resolve-uri() function to compute the SVG
> document location.
>
> 3. In the example below I've changed a bit the assert XPath to ignore the
> href values that start with 'data'. You should also take into account the
> fact that the SVG can contain multiple image elements. Perhaps you could
> assert it more elegantly than this but here a possible solution:****
>
>
>
> <schema
>     xmlns="http://purl.oclc.org/dsdl/schematron"<http://purl.oclc.org/dsdl/schematron>
>     queryBinding="xslt2"
>     xmlns:exslt="http://expath.org/ns/file" <http://expath.org/ns/file>>
>     <ns uri="http://expath.org/ns/file" <http://expath.org/ns/file>prefix="exslt"/>
>     <pattern>
>         <rule context="image">****
>
>             <let name="svgDocument" value="document(resolve-uri(@href,
> base-uri()))" />
>             <let name="svgExists" value="exists($svgDocument)"/>
>             <assert test="$svgExists">The SVG file can't be loaded
> <value-of select="resolve-uri(@href, base-uri())"/></assert>
>
>             <let name="realImages" value="$svgDocument//*:image/@*:href"/>
>             <!-- If the SVG file can't be loaded or the SVG points to an
> embeded image SKIP IT. -->
>             <let name="testImages" value="for $realImage in $realImages
> return if (not($svgExists) or starts-with($realImage, 'data')) then true()
> else exslt:exists(resolve-uri($realImage, base-uri($svgDocument)))"/>
>             <assert test="empty(index-of($testImages, false()))">The image
> file must exist</assert>****
>
>
>
>         </rule>
>     </pattern>
> </schema>
>
> Best regards,
> Alex****
>
> On 30-Jul-13 3:33 PM, KAATMAN Matthew wrote:****
>
> Hey Alex,****
>
>  ****
>
> This looks really promising!****
>
>  ****
>
> When I run validate with this schematron I get the following:****
>
>  ****
>
> System ID: C:\svn\scripts\svgCheck.sch****
>
> Engine name: ISO Schematron (XSLT 2.0)****
>
> Severity: fatal****
>
> Type: XML validation****
>
> Start location: 149:0 (Odd because the schematron is only 14 lines)****
>
>  ****
>
> System ID: C:\dita\pt\products\vitek2systems\pi\Appendix_A.dita (This is
> the first file with an SVG for the document I checked.)****
>
> Engine name: ISO Schematron (XSLT 2.0)****
>
> Severity: error****
>
> Description: Exception thrown by extension function {public static boolean
> com.saxonica.functions.extfn.EXPathFile.exists(java.lang.String)}:
> java.lang.NullPointerException****
>
> Type: XML validation****
>
>  ****
>
> Even if I delete all SVG references, I receive the above two errors.****
>
>  ****
>
> I then tried it on a map with more SVGs and some that were verified to be
> broken. It is properly detecting the errors but I see false positives when
> the SVG contains embedded images instead of linked. I believe it’s trying
> to verify the binary data as the uri.****
>
>  ****
>
> System ID: C:\dita\en\products\simon\service\Attachments.dita****
>
> Engine name: ISO Schematron (XSLT 2.0)****
>
> Severity: error****
>
> Description: A sequence of more than one item is not allowed as the first
> argument of resolve-uri() ("data:image/jpeg;base64,/9j/4AA...",
> "data:image/png;base64,iVBORw0K...") ****
>
> Type: XML validation****
>
>  ****
>
> Is there a way for me to adjust the schematron to ignore href values that
> start with “data”?****
>
>  ****
>
> I had previously attended a webinar Oxygen presented on schematron. I’m
> finally starting to understand how powerful it can be!****
>
>  ****
>
> Thank you,
> Matt****
>
>  ****
>
>  ****
>
> *From:* oxygen-user-bounces at oxygenxml.com [
> mailto:oxygen-user-bounces at oxygenxml.com<oxygen-user-bounces at oxygenxml.com>]
> *On Behalf Of *Alex Jitianu
> *Sent:* Tuesday, July 30, 2013 2:25 AM
> *To:* oxygen-user at oxygenxml.com
> *Subject:* Re: [oXygen-user] Feature request: Validation for linked
> images in SVG paths****
>
>  ****
>
> Hello  Matt,
>
> In Oxygen v15.0 we've added in the "Validate and check for Completeness"
> dialog a new entry called "Additional schematron checks" in which you can
> specify additional Schematron checks that should be be executed on the
> topics. You can perform the check you've described using a Schematron file
> with the following content:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <schema
>     xmlns="http://purl.oclc.org/dsdl/schematron"<http://purl.oclc.org/dsdl/schematron>
>     queryBinding="xslt2"
>     xmlns:exslt="http://expath.org/ns/file" <http://expath.org/ns/file>>
>     <ns uri="http://expath.org/ns/file" <http://expath.org/ns/file>prefix="exslt"/>
>     <pattern>
>         <rule context="image[ends-with(@href, '.svg')]"<image[ends-with%28 at href,%27.svg%27%29]>
> >
>             <let name="svgDocument" value="document(@href)" />
>             <assert
> test="exslt:exists(resolve-uri($svgDocument//*:image/@*:href,
> base-uri($svgDocument)))">
>                 The image file from the following SVG doesn't exist:
> <value-of select="base-uri($svgDocument)"/></assert>
>         </rule>
>     </pattern>
> </schema>
>
> Best regards,
> Alex
> --
> Alex Jitianu
> <oXygen/>  XML Editor, Schema Editor and XSLT Editor/Debugger
> http://www.oxygenxml.com
>
>
> On 29-Jul-13 9:38 PM, KAATMAN Matthew wrote:****
>
> Hey Guys,****
>
>  ****
>
> This is a feature request that's not extremely crucial, but it would be
> helpful for us.****
>
>  ****
>
> I'm having our authors create SVG overlays and link to the background
> image (jpeg or png).****
>
>  ****
>
> Sometimes they accidentally link to an image that isn't in our repository
> path.****
>
>  ****
>
> Within the SVG, I'll end up with something like:****
>
> <image width="1200" height="1807"
> xlink:href="../../../../../../../Users/Username/Pictures/PREVI
> PAV/PAV_printer_cover_open.jpg"  >****
>
>  ****
>
> When it should be:****
>
> <image width="1200" height="1807"
> xlink:href="images/PAV_printer_cover_open.jpg"  >****
>
>  ****
>
> Although, the validate/check for completeness wouldn't catch this on their
> workstation as the image exists and is valid, it would find it quickly on
> mine since it's outside the path that gets checked in and I’d be missing
> that image.****
>
>  ****
>
> It doesn't seem like the OT throws any errors either. The only way I find
> out is when I'm viewing the PDF and notice that antenna house has
> substituted a broken image.****
>
>  ****
>
> Example:****
>
> ****
>
>  ****
>
> Thanks!
> Matt****
>
> AVIS : Ce courrier et ses pieces jointes sont destines a leur seul
> destinataire et peuvent contenir des informations confidentielles
> appartenant a bioMerieux. Si vous n'etes pas destinataire, vous etes
> informe que toute lecture, divulgation, ou reproduction de ce message et
> des pieces jointes est strictement interdite. Si vous avez recu ce message
> par erreur merci d'en prevenir l'expediteur et de le detruire, ainsi que
> ses pieces jointes. NOTICE: This message and attachments are intended only
> for the use of their addressee and may contain confidential information
> belonging to bioMerieux. If you are not the intended recipient, you are
> hereby notified that any reading, dissemination, distribution, or copying
> of this message, or any attachment, is strictly prohibited. If you have
> received this message in error, please notify the original sender
> immediately and delete this message, along with any attachments.
>
> ****
>
> _______________________________________________****
>
> oXygen-user mailing list****
>
> oXygen-user at oxygenxml.com****
>
> http://www.oxygenxml.com/mailman/listinfo/oxygen-user****
>
>  ****
>
> AVIS : Ce courrier et ses pieces jointes sont destines a leur seul
> destinataire et peuvent contenir des informations confidentielles
> appartenant a bioMerieux. Si vous n'etes pas destinataire, vous etes
> informe que toute lecture, divulgation, ou reproduction de ce message et
> des pieces jointes est strictement interdite. Si vous avez recu ce message
> par erreur merci d'en prevenir l'expediteur et de le detruire, ainsi que
> ses pieces jointes. NOTICE: This message and attachments are intended only
> for the use of their addressee and may contain confidential information
> belonging to bioMerieux. If you are not the intended recipient, you are
> hereby notified that any reading, dissemination, distribution, or copying
> of this message, or any attachment, is strictly prohibited. If you have
> received this message in error, please notify the original sender
> immediately and delete this message, along with any attachments. ****
>
> ** **
>
>
> _______________________________________________
> oXygen-user mailing list
> oXygen-user at oxygenxml.com
> http://www.oxygenxml.com/mailman/listinfo/oxygen-user****
>
> ** **
> AVIS : Ce courrier et ses pieces jointes sont destines a leur seul
> destinataire et peuvent contenir des informations confidentielles
> appartenant a bioMerieux. Si vous n'etes pas destinataire, vous etes
> informe que toute lecture, divulgation, ou reproduction de ce message et
> des pieces jointes est strictement interdite. Si vous avez recu ce message
> par erreur merci d'en prevenir l'expediteur et de le detruire, ainsi que
> ses pieces jointes. NOTICE: This message and attachments are intended only
> for the use of their addressee and may contain confidential information
> belonging to bioMerieux. If you are not the intended recipient, you are
> hereby notified that any reading, dissemination, distribution, or copying
> of this message, or any attachment, is strictly prohibited. If you have
> received this message in error, please notify the original sender
> immediately and delete this message, along with any attachments.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.oxygenxml.com/pipermail/oxygen-user/attachments/20130731/0beeb964/attachment-0001.html 


More information about the oXygen-user mailing list