Difference between revisions of "Id-to-xml-id.xslt"

From TEIWiki
Jump to navigation Jump to search
m
 
(9 intermediate revisions by 3 users not shown)
Line 1: Line 1:
This stylesheet changes id= attributes to xml:id= attributes.
+
This stylesheet changes id= attributes to xml:id= attributes, except
 +
when on <language>, in which case they become ident= attributes.
 
That is all.
 
That is all.
 
<pre><nowiki><?xml version="1.0" encoding="UTF-8"?>
 
<pre><nowiki><?xml version="1.0" encoding="UTF-8"?>
 
<!-- Tiny XSLT 1.0 stylesheet that reads in a TEI P4:2004 file (or -->
 
<!-- Tiny XSLT 1.0 stylesheet that reads in a TEI P4:2004 file (or -->
 
<!-- any other XML file, really) and writes out the same file with -->
 
<!-- any other XML file, really) and writes out the same file with -->
<!-- the id= attribute changed to the xml:id= attribute. -->
+
<!-- the id= attribute changed to the xml:id= attribute, except    -->
 
+
<!-- for id= of <language>, which becomes ident=. -->
 +
 
 
<!-- Copyleft 2006 Syd Bauman and the Text Encoding Initiative Consortium -->
 
<!-- Copyleft 2006 Syd Bauman and the Text Encoding Initiative Consortium -->
  
Line 14: Line 16:
 
<!-- issue a warning). -->
 
<!-- issue a warning). -->
  
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+
<!-- Written 2006-05-05 by Syd Bauman -->
   xmlns:tei="http://www.tei-c.org/ns/1.0"
+
<!-- updated 2008-05-02 by Syd Bauman: use ident=, not xml:id=, for <language> -->
   version="1.0">
+
 
 +
<xsl:stylesheet version="1.0"
 +
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 +
   xmlns:tei="http://www.tei-c.org/ns/1.0">
 +
 
 +
   <xsl:import href="Copy-All.xsl"/>
 
    
 
    
 
   <xsl:output method="xml"
 
   <xsl:output method="xml"
Line 22: Line 29:
 
     cdata-section-elements="eg"/>
 
     cdata-section-elements="eg"/>
 
    
 
    
  <!-- Generic copy-everything template -->
 
  <xsl:template match="@*|*|processing-instruction()|comment()">
 
    <xsl:copy>
 
      <xsl:apply-templates select="*|@*|text()|processing-instruction()|comment()"/>
 
    </xsl:copy>
 
  </xsl:template>
 
 
    
 
    
 
   <!-- special template for elements with id= that have to change -->
 
   <!-- special template for elements with id= that have to change -->
Line 35: Line 36:
 
     </xsl:if>
 
     </xsl:if>
 
     <xsl:element name="{name(.)}">
 
     <xsl:element name="{name(.)}">
       <xsl:attribute name="xml:id">
+
       <xsl:variable name="newIDattr">
         <!-- For the value of the new xml:id= attribute use id= ... -->
+
        <xsl:choose>
 +
          <xsl:when test="name(.)='language'">
 +
            <xsl:text>ident</xsl:text>
 +
          </xsl:when>
 +
          <xsl:otherwise>
 +
            <xsl:text>xml:id</xsl:text>
 +
          </xsl:otherwise>
 +
        </xsl:choose>
 +
      </xsl:variable>
 +
      <xsl:attribute name="{$newIDattr}">
 +
         <!-- For the value of the new xml:id= or ident= attribute, use -->
 +
        <!-- the value of the current input id= -->
 
         <xsl:value-of select="@id"/>
 
         <xsl:value-of select="@id"/>
 
       </xsl:attribute>
 
       </xsl:attribute>
Line 46: Line 58:
 
   </xsl:template>
 
   </xsl:template>
 
    
 
    
</xsl:stylesheet>
+
</xsl:stylesheet></nowiki></pre>
</pre></nowiki>
+
[[Category:P4toP5]]
[[Category:P4toP5]]</pre>
+
[[Category:XSLT]]
 +
[[User:Syd|Syd]] 06:52, 26 May 2006 (BST)

Latest revision as of 09:15, 14 March 2010

This stylesheet changes id= attributes to xml:id= attributes, except when on <language>, in which case they become ident= attributes. That is all.

<?xml version="1.0" encoding="UTF-8"?>
<!-- Tiny XSLT 1.0 stylesheet that reads in a TEI P4:2004 file (or -->
<!-- any other XML file, really) and writes out the same file with -->
<!-- the id= attribute changed to the xml:id= attribute, except    -->
<!-- for id= of <language>, which becomes ident=. -->

<!-- Copyleft 2006 Syd Bauman and the Text Encoding Initiative Consortium -->

<!-- The output of this stylesheet is not P5-comnpliant XML; it is just -->
<!-- the same P4 document with xml:id= instead of id=. -->
<!-- Note that if an element already has both an id= and an xml:id=, we -->
<!-- nuke the old xml:id= and replace it with what used to be id= (and -->
<!-- issue a warning). -->

<!-- Written 2006-05-05 by Syd Bauman -->
<!-- updated 2008-05-02 by Syd Bauman: use ident=, not xml:id=, for <language> -->

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:tei="http://www.tei-c.org/ns/1.0">

  <xsl:import href="Copy-All.xsl"/>
  
  <xsl:output method="xml"
    encoding="UTF-8"
    cdata-section-elements="eg"/>
  
  
  <!-- special template for elements with id= that have to change -->
  <xsl:template match="*[@id]">
    <xsl:if test="@xml:id">
      <xsl:message>WARNING: deleting the existing xml:id=<xsl:value-of select="@xml:id"/> attribute of <<xsl:value-of select="name(.)"/> id=<xsl:value-of select="@id"/>>.</xsl:message>
    </xsl:if>
    <xsl:element name="{name(.)}">
      <xsl:variable name="newIDattr">
        <xsl:choose>
          <xsl:when test="name(.)='language'">
            <xsl:text>ident</xsl:text>
          </xsl:when>
          <xsl:otherwise>
            <xsl:text>xml:id</xsl:text>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:variable>
      <xsl:attribute name="{$newIDattr}">
        <!-- For the value of the new xml:id= or ident= attribute, use -->
        <!-- the value of the current input id= -->
        <xsl:value-of select="@id"/>
      </xsl:attribute>
      <!-- Now copy over all other attributes (i.e., all but id= and xml:id=) -->
      <xsl:copy-of select="attribute::*[not(name()='id') and not(name()='xml:id')]"/>
      <!-- Now copy over all the content -->
      <xsl:apply-templates select="./*|./text()|./processing-instruction()|./comment()"/>
    </xsl:element>
  </xsl:template>
  
</xsl:stylesheet>

Syd 06:52, 26 May 2006 (BST)