Print

Print


My vote was going to be to update your EAD-to-HTML style sheet, but if you're dealing with a mix of DTD and schema-associated files, here's a style sheet that should transform your schema files into DTD-associated EAD instead:


<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- include the proper path to your DTD files in the doctype-system attribute-->
    <xsl:output indent="yes" method="xml" encoding="utf-8"
        doctype-system="/eadcb/shared/ead/ead.dtd"
        doctype-public="+//ISBN 1-931666-00-8//DTD ead.dtd (Encoded Archival Description (EAD) Version 2002)//EN"/>
    <xsl:strip-space elements="*"/>

    <!-- Stylesheet to remove all namespaces from a document -->
    <!-- NOTE: this will lead to attribute name clash, if an element contains
        two attributes with same local name but different namespace prefix -->
    <!-- Nodes that cannot have a namespace are copied as such -->
    <!-- template to copy elements -->
    <xsl:template match="*">
        <xsl:element name="{local-name()}">
            <xsl:apply-templates select="@* | node()"/>
        </xsl:element>
    </xsl:template>

    <!-- template to copy attributes -->
    <xsl:template match="@*">
        <xsl:choose>
            <xsl:when test="local-name()='schemaLocation'"/>
            <xsl:otherwise>
                <xsl:attribute name="{local-name()}">
                    <xsl:value-of select="."/>
                </xsl:attribute>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <!-- template to copy the rest of the nodes -->
    <xsl:template match="comment() | text() | processing-instruction()">
        <xsl:copy/>
    </xsl:template>

</xsl:stylesheet>

Granted, I just tested this with one file, but it seemed to do the trick.  I found this example online and modified it slightly.  Will that work for you?  

Mark Custer



-----Original Message-----
From: Encoded Archival Description List [mailto:[log in to unmask]] On Behalf Of Eric Lease Morgan
Sent: Tuesday, April 03, 2012 4:18 PM
To: [log in to unmask]
Subject: duplicate an xml file

Using XSLT, how can I duplicate an XML file sans namespaces?

I have a set of valid DTD-based EAD files that I transform into HTML using a XSL stylesheet. Tastes great and less filling.

I now have a set of valid schema-based EAD files but I can't transform them because namespaces get in the way. 

My tentative solution to this problem is to copy the schema-based EAD file to new XML file sans the name spaces, and then transform the result, but my XPath statements are incorrect. This way I can use a single XSL stylesheet for HTML creation.

Here is a schema-based EAD snippet:

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <ead
    xsi:schemaLocation = "urn:isbn:1-931666-22-9 http://www.loc.gov/ead/ead.xsd"
    xmlns:ns2          = "http://www.w3.org/1999/xlink"
    xmlns              = "urn:isbn:1-931666-22-9"
    xmlns:xsi          = "http://www.w3.org/2001/XMLSchema-instance">
  
    <eadheader><!-- cool stuff here --></eadheader>
    <archdesc level="collection"><!-- more cool stuff here --></archdesc>
  
  </ead>


Here is a stylesheet:

  <?xml version='1.0'?>
  <xsl:stylesheet
    xmlns:xsl='http://www.w3.org/1999/XSL/Transform' 
    version='1.0'>
    <xsl:template match="/">
      <ead>
        <xsl:copy-of select="/ead/eadheader"/>
        <xsl:copy-of select="/ead/archdesc"/>
      </ead>
    </xsl:template>
  
  </xsl:stylesheet>


The stylesheet works great if I remove all the name spaces from the EAD, but I can't do that because that is the whole point of the transformation. What sort of XPath statements do I need in order successful do the copy-of command? 

-- 
Eric Lease Morgan
University of Notre Dame