Difference between revisions of "Change2change.xslt"
Jump to navigation
Jump to search
m |
Stuartyeates (talk | contribs) |
||
(10 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
− | The P5 <change> element is significantly different than the P4 <change> element. This stylesheet reads in a TEI P4 XML file and writes out the same file but with P5-format <change> elements | + | The P5 <change> element is significantly different than the P4 <change> element. This stylesheet reads in a TEI P4 XML file and writes out the same file but with P5-format <change> elements. |
<hr /> | <hr /> | ||
− | <pre> | + | <pre><nowiki><?xml version="1.0" encoding="utf-8"?> |
− | <?xml version="1.0" encoding="utf-8"?> | ||
<!-- Tiny XSLT 1.0 stylesheet that reads in a TEI file with <change> elements --> | <!-- Tiny XSLT 1.0 stylesheet that reads in a TEI file with <change> elements --> | ||
Line 9: | Line 8: | ||
<!-- Copyleft 2006 Syd Bauman and the Text Encoding Initiative Consortium --> | <!-- Copyleft 2006 Syd Bauman and the Text Encoding Initiative Consortium --> | ||
− | <!-- The output of this stylesheet is not P5- | + | <!-- The output of this stylesheet is not P5-compliant XML; in fact, even the --> |
<!-- one element we are changing, namely <change>, may not be valid P5. This is --> | <!-- one element we are changing, namely <change>, may not be valid P5. This is --> | ||
<!-- because although we move all the bits of information to the right place, it --> | <!-- because although we move all the bits of information to the right place, it --> | ||
<!-- may still be in the wrong format. E.g., a <date value="2006-01-31">31 Jan --> | <!-- may still be in the wrong format. E.g., a <date value="2006-01-31">31 Jan --> | ||
− | <!-- 06</date> will be transformed to the valid | + | <!-- 06</date> will be transformed to the valid when="2006-01-31", but a <date>31 --> |
− | <!-- Jan 06</date> will be tranformed to the invalid | + | <!-- Jan 06</date> will be tranformed to the invalid when="31 Jan 06". --> |
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | ||
xmlns:tei="http://www.tei-c.org/ns/1.0" | xmlns:tei="http://www.tei-c.org/ns/1.0" | ||
version="1.0"> | version="1.0"> | ||
+ | |||
+ | <xsl:import href="Copy-All.xsl"/> | ||
<xsl:output method="xml" | <xsl:output method="xml" | ||
encoding="UTF-8" | encoding="UTF-8" | ||
− | cdata-section-elements="eg"/ | + | cdata-section-elements="eg"/> |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<!-- special template for <change> elements that have to change --> | <!-- special template for <change> elements that have to change --> | ||
<xsl:template match="revisionDesc/change"> | <xsl:template match="revisionDesc/change"> | ||
<xsl:element name="change"> | <xsl:element name="change"> | ||
− | <xsl:attribute name=" | + | <xsl:attribute name="when"> |
− | <!-- For the value of the new | + | <!-- For the value of the new when= attribute ... --> |
<!-- look at my child <date> element, --> | <!-- look at my child <date> element, --> | ||
<xsl:choose> | <xsl:choose> | ||
Line 89: | Line 83: | ||
</xsl:template> | </xsl:template> | ||
− | </xsl:stylesheet> | + | </xsl:stylesheet></nowiki> |
</pre> | </pre> | ||
+ | [[Category:XSLT]] | ||
[[Category:P4toP5]] | [[Category:P4toP5]] | ||
[[User:Syd|Syd]] 06:51, 26 May 2006 (BST) | [[User:Syd|Syd]] 06:51, 26 May 2006 (BST) |
Latest revision as of 09:25, 14 March 2010
The P5 <change> element is significantly different than the P4 <change> element. This stylesheet reads in a TEI P4 XML file and writes out the same file but with P5-format <change> elements.
<?xml version="1.0" encoding="utf-8"?> <!-- Tiny XSLT 1.0 stylesheet that reads in a TEI file with <change> elements --> <!-- that conform to P4, and writes out the same with <change> elements that --> <!-- are likely to conform to P5 (pre-release 0.3.1). --> <!-- Copyleft 2006 Syd Bauman and the Text Encoding Initiative Consortium --> <!-- The output of this stylesheet is not P5-compliant XML; in fact, even the --> <!-- one element we are changing, namely <change>, may not be valid P5. This is --> <!-- because although we move all the bits of information to the right place, it --> <!-- may still be in the wrong format. E.g., a <date value="2006-01-31">31 Jan --> <!-- 06</date> will be transformed to the valid when="2006-01-31", but a <date>31 --> <!-- Jan 06</date> will be tranformed to the invalid when="31 Jan 06". --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tei="http://www.tei-c.org/ns/1.0" version="1.0"> <xsl:import href="Copy-All.xsl"/> <xsl:output method="xml" encoding="UTF-8" cdata-section-elements="eg"/> <!-- special template for <change> elements that have to change --> <xsl:template match="revisionDesc/change"> <xsl:element name="change"> <xsl:attribute name="when"> <!-- For the value of the new when= attribute ... --> <!-- look at my child <date> element, --> <xsl:choose> <!-- if it has a value= attribute, use its value --> <xsl:when test="./date/@value"> <xsl:value-of select="./date/@value"/> </xsl:when> <!-- if not, use its content --> <xsl:otherwise> <xsl:value-of select="./date/text()"/> </xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:attribute name="who"> <!-- For the value of the new who= attribute ... --> <!-- look at my child <respStmt>'s first <name> child ... --> <!-- (warn if there's more than 1 <name> child of <respStmt>) --> <xsl:if test="count(./respStmt/name)>1"> <xsl:message> warning: more than one <name> child of <respStmt>, using the first </xsl:message> </xsl:if> <xsl:variable name="respName"> <xsl:choose> <!-- ... if it has a key=, use its value --> <xsl:when test="./respStmt/name/@key"> <xsl:value-of select="./respStmt/name/@key"/> </xsl:when> <!-- ... if no key=, if it has a reg=, use its value --> <xsl:when test="./respStmt/name/@reg"> <xsl:value-of select="./respStmt/name/@reg"/> </xsl:when> <!-- ... neither key= nor reg=, use content --> <xsl:otherwise> <xsl:value-of select="./respStmt/name/text()"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <!-- ... now that we have a name, strip out icky characters --> <xsl:variable name="respVal" select='translate(normalize-space($respName),"-,'&#$%^!~`={}[]<>?/:; +=\|@","-")'/> <!-- [Note that hyphens are left in place, as they are valid NAME characters.] --> <!-- This is not the right way to do this. What we really want is not to strip --> <!-- out the few non-NAME characters I can think of and type easily, but rather --> <!-- we'd prefer to keep only the NAME characters and ditch everything else. --> <!-- I don't know if that can be done in XSLT 1.0, and if it can, I don't know --> <!-- how to do it. Note also that we do not check that the first char is --> <!-- a NAMESTART character. --> <!-- ... and stick a "#" in front --> <xsl:text>#</xsl:text> <xsl:value-of select="$respVal"/> </xsl:attribute> <!-- content of new <change> is the content of old <change>'s child <item> --> <xsl:apply-templates select="./item/*|./item/text()|./item/processing-instruction()|./item/comment()"/> </xsl:element> </xsl:template> </xsl:stylesheet>
Syd 06:51, 26 May 2006 (BST)