[xsl] generating xml with a runtime resolved default namespace

Subject: [xsl] generating xml with a runtime resolved default namespace
From: Jerome.Euzenat@xxxxxxxxxxxx (Jerome Euzenat)
Date: Tue, 7 Jan 2003 18:38:31 +0100
Hello,

        I submit to this enlightened list a concrete XSLT problem for a change.
It comes from the need to have a variable default namespace in the output docu-
ment. That is a default namespace which is known at run-time only.
        I reduce the problem below to a small stylesheet and input and output
documents:

--------- tentative stylesheet
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0"
 xmlns     = "http://www.w3.org/2003/OWL-XMLSchema";
 xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
 xmlns:owls= "http://www.w3.org/2003/OWL-XMLSchema";>

<xsl:param name="prefix">http://www.example.com</xsl:param>

  <xsl:template match="/">
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="owls:Ontology">
    <rdf:RDF
          xmlns="{$prefix}#"
          xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";>
      <xsl:apply-templates mode="axioms"/>
    </rdf:RDF>
  </xsl:template>

<xsl:template match="owls:Individual" mode="axioms">
<xsl:element name="@owls:class">
<xsl:attribute name="rdf:resource"><xsl:value-of select="@owls:name"/></xsl:attribute>
</xsl:element>
</xsl:template>


</xsl:stylesheet>

------------- input
<?xml version="1.0" encoding="UTF-8"?>

<owls:Ontology  xmlns:owls= "http://www.w3.org/2003/OWL-XMLSchema";>
  <owls:Individual owls:name="foo" owls:class="Bar" />
</owls:Ontology>

------------- output
<?xml version="1.0" encoding="UTF-8"?>

<rdf:RDF  xmlns="http://www.example.com#";
          xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";>
  <Bar rdf:resource="#foo" />
</rdf:RDF>

IMPORTANT CONSTRAINT: Yes Bar is in the http://www.example.com# namespace.

REMARKS:
0) this is extracted from a real test case (i.e. due yesterday ;-);
1) the '#' do not cause trouble;
2) not found in the FAQ
3) the problem is that XSLT does not treat xmlns and xmlns: prefixed attributes as the others (and it is pretty consistent in doing so, in source, in alias and in attribute);
4) we cannot use <xsl:element name="rdf:RDF" namespace="{$prefix}#"> because it will consider that rdf is the same as http://www.example.com#;



Any help to offer?


Thanks,

--
 Jérôme Euzenat                  __
                                 /      /\
 INRIA Rhône-Alpes,            _/  _   _   _ _    _
                              /_) | ` / ) | \ \  /_)
 655, avenue de l'Europe,    (___/___(_/_/  / /_(_________________
 Montbonnot St Martin,       /        http://www.inrialpes.fr/exmo
 38334 Saint-Ismier cedex,  /          Jerome.Euzenat@xxxxxxxxxxxx
 France____________________/                Jerome.Euzenat@xxxxxxx

XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list


Current Thread