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


<!--

TODO  Reification
TODO  Testing

-->
<xsl:stylesheet
  xmlns:my='http://example.org/xxx'
  xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
  xmlns:xhtml2='http://www.w3.org/2002/06/xhtml2'
  xmlns:x='file://attributes.to.be.stripped.in.second.pass'
  xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
  xmlns:axsl='file://xsl.namespace.alias'
  xmlns:axml='file://xml.namespace.alias'
  version='2.0'
  xmlns:a='file://attributes.to.be.stripped.in.first.pass'
>
<!--
         xmlns:xml="http://www.w3.org/XML/1998/namespace"
  -->
  <xsl:namespace-alias
    result-prefix='xsl'
    stylesheet-prefix='axsl'
   />
  <xsl:output
    method='xml'
    indent='yes'
   />
  <xsl:template
    match='/*'
  >
    <axsl:stylesheet
      version='2.0'
    >
    
    <axsl:import 
       href="base.xsl"/>
    
    
      <axsl:output
        method='xml'
        indent='no'
       />
<!--
  
<axsl:namespace-alias stylesheet-prefix="axml" result-prefix="xml"/>
  -->
      <axsl:template
        match='/*'
      >
        <axsl:text><xsl:text>&#10;</xsl:text></axsl:text>
        <rdf:RDF>
        <axsl:text><xsl:text>&#10;</xsl:text></axsl:text>
           <axsl:apply-templates select="*"/>
        <axsl:text><xsl:text>&#10;</xsl:text></axsl:text>
        </rdf:RDF>
      </axsl:template>
      <axsl:template priority="2" match="*[@about or @nodeID or @rel or @rev or @content or @href or @property]">
        <axsl:copy-of select="my:toRDF(.)"/>
        <axsl:apply-templates select="*" />
      </axsl:template>
      <axsl:template match="*">
        <axsl:apply-templates select="*" />
      </axsl:template>
      
      
      <axsl:function name="my:resolve-uri">
         <axsl:param name="u"/>
         <axsl:param name="b"/>
         <axsl:if test="$u eq ''">
             <axsl:value-of select="$b"/>
         </axsl:if>
         <axsl:if test="$u ne ''">
             <axsl:value-of select="resolve-uri($u,$b)"/>
         </axsl:if>
      </axsl:function>
      <axsl:function name="my:about"  as="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema">
         <axsl:param name="n"/>
         <axsl:if test="$n[@about]">
             <axsl:value-of select="$n/@about"/>
         </axsl:if>
         <axsl:if test="$n[self::xhtml2:head][not(@about)]">
             <axsl:value-of select="''"/>
         </axsl:if>
      </axsl:function>
      
      <axsl:function name="my:toRDF">
         <axsl:param name="n"/>
         <axsl:for-each select="$n">
         <xsl:apply-templates
            select='match'
           />
         </axsl:for-each>
      </axsl:function>
    </axsl:stylesheet>
  </xsl:template>
  <xsl:template
    match='match[not(*/@x:foreach)]'
  >
    <axsl:if
      test="self::{@select}"
    >
        <axsl:text><xsl:text>  </xsl:text></axsl:text>
      <rdf:Description>
        <xsl:apply-templates
          select='subject/@*'
          mode='no-x'
         />
        <axsl:text><xsl:text>&#10;    </xsl:text></axsl:text>
        <axsl:element
          name='{{{predicate/@name}}}'
          namespace="{{namespace-uri-for-prefix(substring-before({predicate/@name},':'),.)}}"
        >
          <xsl:apply-templates
            select='object/@*'
            mode='no-x'
           />
          <xsl:apply-templates
            select='object/@x:literal'
           />
        </axsl:element>
        <axsl:text><xsl:text>&#10;  </xsl:text></axsl:text>
      </rdf:Description>
        <axsl:text><xsl:text>&#10;</xsl:text></axsl:text>
    </axsl:if>
  </xsl:template>
  <xsl:template
    match='match[subject/@x:foreach]'
  >
    <axsl:if
      test="self::{@select}"
    >
      <axsl:variable
        name='c'
        select='.'
       />
      <axsl:for-each
        select='{subject/@x:foreach}'
      >
        <axsl:text><xsl:text>&#10;  </xsl:text></axsl:text>
        <rdf:Description>
          <xsl:apply-templates
            select='subject/@*'
            mode='no-x'
           />
          <axsl:for-each
            select='$c'
          >
        <axsl:text><xsl:text>&#10;    </xsl:text></axsl:text>
            <axsl:element
              name='{{{predicate/@name}}}'
              namespace="{{namespace-uri-for-prefix(substring-before({predicate/@name},':'),.)}}"
            >
              <xsl:apply-templates
                select='object/@*'
                mode='no-x'
               />
              <xsl:apply-templates
                select='object/@x:literal'
               />
            </axsl:element>
          </axsl:for-each>
        <axsl:text><xsl:text>&#10;  </xsl:text></axsl:text>
        </rdf:Description>
      </axsl:for-each>
    </axsl:if>
  </xsl:template>
  <xsl:template
    match='match[object/@x:foreach]'
  >
    <axsl:if
      test="self::{@select}"
    >
      <axsl:variable
        name='c'
        select='.'
       />
      <axsl:for-each
        select='{object/@x:foreach}'
      >
        <axsl:variable
          name='f'
          select='.'
         />
        <axsl:text><xsl:text>&#10;  </xsl:text></axsl:text>
        <rdf:Description>
          <axsl:for-each
            select='$c'
          >
            <xsl:apply-templates
              select='subject/@*'
              mode='no-x'
             />
        <axsl:text><xsl:text>&#10;    </xsl:text></axsl:text>
            <axsl:element
              name='{{{predicate/@name}}}'
              namespace="{{namespace-uri-for-prefix(substring-before({predicate/@name},':'),.)}}"
            >
              <axsl:for-each
                select='$f'
              >
                <xsl:apply-templates
                  select='object/@*'
                  mode='no-x'
                 />
                <xsl:apply-templates
                  select='object/@x:literal'
                 />
              </axsl:for-each>
            </axsl:element>
          </axsl:for-each>
        <axsl:text><xsl:text>&#10;  </xsl:text></axsl:text>
        </rdf:Description>
      </axsl:for-each>
    </axsl:if>
  </xsl:template>
  <xsl:template
    match="@x:literal[.='#copy']"
    priority='3'
  >
    <axsl:copy-of
      select='node()'
     />
  </xsl:template>
  <xsl:template
    match='@x:literal'
    priority='2'
  >
    <axsl:value-of
      select='{.}'
     />
  </xsl:template>
  <xsl:template
    mode='no-x'
    match='@x:*'
  ></xsl:template>
  <xsl:template
    mode='no-x'
    match='@axml:lang'
    priority='2'
  >
    <axsl:attribute
      name='xml:lang'
      select='{.}'
     />
  </xsl:template>
  <xsl:template
    mode='no-x'
    match='@*'
  >
   <axsl:if test="string-length({.}) &gt; 0">
    <axsl:attribute
      name='{name()}'
      select='{.}'
     />
   </axsl:if>
  </xsl:template>
</xsl:stylesheet>

