[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

[xsl] unwanted noNamespaceSchemaLocation?


Subject: [xsl] unwanted noNamespaceSchemaLocation?
From: "Trevor Nicholls" <trevor@xxxxxxxxxxxxxxxxxx>
Date: Wed, 15 Sep 2010 00:44:06 +1200

Hi

I have a number of separate XML files which each have <document> as their
outermost node. A document element might look like this:

  <document
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="../../util/docs.xsd"
    version="1.80"
  >
    ...
  </document>

Documents may contain <include> elements, which point to other documents.
Thus:

  <document ..>
    <title>Test Document</title>
    <include srcfile="intro.xml"/>
    <include srcfile="middle.xml"/>
    <include srcfile="end.xml"/>
  </document>

where each of the XML documents referred to in the srcfile attributes have
the same schema declaration as the outer document.

We have a particular XML stylesheet which processes a document and creates
an expanded version which contains all included documents in the single
file; in this document the (sub)documents are children of <included>
elements.

A minimal version of the expand.xsl stylesheet is as follows:

  <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" encoding="UTF-8" />
  
  <xsl:template match="/">
    <xsl:apply-templates>
      <xsl:with-param name="currdoc" />
    </xsl:apply-templates>
  </xsl:template>
  
  <!-- Content of include'd subfiles inside an includED element -->
  <xsl:template match="include">
    <xsl:param name="currdoc" />
    <xsl:element name="included">
      <xsl:attribute name="srcfile">
        <xsl:value-of select="@srcfile" />
      </xsl:attribute>
      <xsl:apply-templates select="document(@srcfile)/*">
        <xsl:with-param name="currdoc" select="@srcfile" />
      </xsl:apply-templates>
    </xsl:element>
  </xsl:template>
  
  <xsl:template match="*">
    <xsl:param name="currdoc" />
  <!-- don't want to copy namespace nodes, hence <xsl:element> instead of
<xsl:copy> -->
    <xsl:element name="{name()}">
      <xsl:apply-templates select="@*" />
      <xsl:apply-templates select="node()">
        <xsl:with-param name="currdoc" select="$currdoc" />
      </xsl:apply-templates>
    </xsl:element>
  </xsl:template>
  
  <xsl:template match="@*">
    <xsl:copy />
  </xsl:template>

My question is, how can I eliminate the
   xsi:noNamespaceSchemaLocation="../../util/docs.xsd"
attribute from all the lower level <document> elements?

The stylesheet must be XSL 1.0 because that's a restriction of one of the
environments in which it runs (although if there is an XSL2 solution I would
be interested in it for the future).

Cheers
Trevor


Current Thread
Keywords