Revision 2398 tmp/org.txm.oriflamms.rcp/groovy/org/txm/macro/oriflamms/prepare/oriflamms-convert-inscriptions-oriflammsxml.xsl

oriflamms-convert-inscriptions-oriflammsxml.xsl (revision 2398)
1 1
<?xml version="1.0"?>
2
<xsl:stylesheet xmlns:edate="http://exslt.org/dates-and-times"
3
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tei="http://www.tei-c.org/ns/1.0"
4
  xmlns:xd="http://www.pnp-software.com/XSLTdoc"
5
  xmlns:txm="http://textometrie.org/1.0"
6
  xmlns:xi="http://www.w3.org/2001/XInclude" 
7
  xmlns:svg="http://www.w3.org/2000/svg" 
8
  xmlns:math="http://www.w3.org/1998/Math/MathML"
9
  exclude-result-prefixes="tei edate xd txm xi svg math" version="2.0">
2
<xsl:stylesheet
3
	xmlns:edate="http://exslt.org/dates-and-times"
4
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
5
	xmlns:tei="http://www.tei-c.org/ns/1.0"
6
	xmlns:xd="http://www.pnp-software.com/XSLTdoc"
7
	xmlns:txm="http://textometrie.org/1.0"
8
	xmlns:xi="http://www.w3.org/2001/XInclude"
9
	xmlns:svg="http://www.w3.org/2000/svg"
10
	xmlns:math="http://www.w3.org/1998/Math/MathML"
11
	exclude-result-prefixes="tei edate xd txm xi svg math" version="2.0">
10 12

  
11
  <xsl:output method="xml" encoding="utf-8" omit-xml-declaration="no" indent="yes"/>
12
  
13
  <xd:doc type="stylesheet">
14
    <xd:short>
15
      Cette feuille permet de convertir la transcription tokénisée des 
16
      Chartes de Fontenay au format XML-TEI du projet Oriflamms.
17
    </xd:short>
18
    <xd:detail>
19
      This stylesheet is free software; you can redistribute it and/or
20
      modify it under the terms of the GNU Lesser General Public
21
      License as published by the Free Software Foundation; either
22
      version 3 of the License, or (at your option) any later version.
23
      
24
      This stylesheet is distributed in the hope that it will be useful,
25
      but WITHOUT ANY WARRANTY; without even the implied warranty of
26
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
27
      Lesser General Public License for more details.
28
      
29
      You should have received a copy of GNU Lesser Public License with
30
      this stylesheet. If not, see http://www.gnu.org/licenses/lgpl.html
31
    </xd:detail>
32
    <xd:author>Alexei Lavrentiev alexei.lavrentev@ens-lyon.fr</xd:author>
33
    <xd:copyright>2015, CNRS / ICAR (Équipe CACTUS)</xd:copyright>
34
  </xd:doc>
13
	<xsl:output method="xml" encoding="utf-8"
14
		omit-xml-declaration="no" indent="yes" />
35 15

  
36
  <xsl:variable name="filename">
37
    <xsl:analyze-string select="document-uri(.)" regex="^(.*)/([^/]+)\.[^/]+$">
38
      <xsl:matching-substring>
39
        <xsl:value-of select="regex-group(2)"/>
40
      </xsl:matching-substring>
41
    </xsl:analyze-string>
42
  </xsl:variable>
16
	<xd:doc type="stylesheet">
17
		<xd:short>
18
			Cette feuille permet de convertir la transcription tokénisée des
19
			Chartes de Fontenay au format XML-TEI du projet Oriflamms.
20
		</xd:short>
21
		<xd:detail>
22
			This stylesheet is free software; you can redistribute it and/or
23
			modify it under the terms of the GNU Lesser General Public
24
			License as published by the Free Software Foundation; either
25
			version 3 of the License, or (at your option) any later version.
43 26

  
27
			This stylesheet is distributed in the hope that it will be useful,
28
			but WITHOUT ANY WARRANTY; without even the implied warranty of
29
			MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
30
			Lesser General Public License for more details.
44 31

  
45
  <xsl:strip-space elements="*"/>
46
  <xsl:template match="/">
47
    <xsl:apply-templates/>
48
  </xsl:template>
49
  
50
  
51
  <xsl:template match="*">
52
        <xsl:copy>
53
          <xsl:apply-templates select="@*"/>
54
          <xsl:apply-templates select="*|processing-instruction()|comment()|text()"/>
55
        </xsl:copy>
56
  </xsl:template>
32
			You should have received a copy of GNU Lesser Public License with
33
			this stylesheet. If not, see http://www.gnu.org/licenses/lgpl.html
34
		</xd:detail>
35
		<xd:author>Alexei Lavrentiev alexei.lavrentev@ens-lyon.fr</xd:author>
36
		<xd:copyright>2015, CNRS / ICAR (Équipe CACTUS)</xd:copyright>
37
	</xd:doc>
57 38

  
58
  <xsl:template match="comment()|text()">
59
    <xsl:copy/>
60
  </xsl:template>
61
  
62
  <xsl:template match="processing-instruction()"/>
39
	<xsl:variable name="filename">
40
		<xsl:analyze-string select="document-uri(.)"
41
			regex="^(.*)/([^/]+)\.[^/]+$">
42
			<xsl:matching-substring>
43
				<xsl:value-of select="regex-group(2)" />
44
			</xsl:matching-substring>
45
		</xsl:analyze-string>
46
	</xsl:variable>
63 47

  
64
  <!-- On supprime les attributs par défaut de la DTD TEI -->
65
  
66
  <xsl:template match="@*">
67
    <xsl:choose>
68
      <xsl:when test="matches(name(.),'^(part|instant|anchored|full)$')"/>
69
<!--      <xsl:when test="matches(name(.),'rend')">
70
        <xsl:choose>
71
          <xsl:when test="matches(.,'^aggl$')"><xsl:attribute name="rend">space-after(none)</xsl:attribute></xsl:when>
72
          <xsl:otherwise><xsl:copy/></xsl:otherwise>
73
        </xsl:choose>
74
      </xsl:when>-->
75
      <xsl:otherwise><xsl:copy/></xsl:otherwise>
76
    </xsl:choose>
77
  </xsl:template>
78 48

  
79
  <xsl:template match="tei:teiHeader">    
80
      <xsl:copy>
81
        <xsl:apply-templates select="@*"/>
82
        <xsl:apply-templates/>
83
      </xsl:copy>    
84
  </xsl:template>
85
    
49
	<xsl:strip-space elements="*" />
50
	<xsl:template match="/">
51
		<xsl:apply-templates />
52
	</xsl:template>
86 53

  
87
<xsl:template match="tei:revisionDesc">
88
  <xsl:copy>
89
  <xsl:apply-templates select="@*"/>
90
    <change xmlns="http://www.tei-c.org/ns/1.0" when="2007-01-01" who="#DS">Publication du document original</change>
91
    <!-- information récupérée à partir de /TEI/text[1]/front[1]/titlePage[1]/docDate[1] -->
92
    <change xmlns="http://www.tei-c.org/ns/1.0" when="{format-date(current-date(),'[Y]-[M01]-[D01]')}" who="#auto">Conversion automatique au format XML-TEI-Oriflamms</change>
93
  <xsl:apply-templates/>
94
  </xsl:copy>
95
</xsl:template>
96
  
97
  <xsl:template match="tei:encodingDesc">
98
    <xsl:copy>
99
      <xsl:apply-templates select="@*"/>
100
      <xsl:apply-templates/>
101
      <xsl:if test="not(//tei:prefixDef[@ident='ori'])">
102
        <listPrefixDef xmlns="http://www.tei-c.org/ns/1.0">
103
          <prefixDef xmlns="http://www.tei-c.org/ns/1.0" ident="ori" 
104
            matchPattern="([a-z]+)" 
105
            replacementPattern="oriflamms-annotation-scheme.xml#$1">
106
            <p>In the context of this project, private URIs with the prefix
107
              "ori" point to <gi>interp</gi> elements in the project's
108
              oriflamms-annotation-scheme.xml file.
109
            </p>
110
          </prefixDef>
111
        </listPrefixDef>
112
      </xsl:if>
113
    </xsl:copy>
114
  </xsl:template>
115 54

  
116
<!-- On restructure le document pour avoir un TEI par charte -->
117
  
118
  <!-- TEI devient teiCorpus -->
119
  
120
  <xsl:template match="tei:TEI">
121
    <xsl:element name="teiCorpus" xmlns="http://www.tei-c.org/ns/1.0">
122
      <xsl:apply-templates select="@*"/>
123
      <xsl:apply-templates select="tei:teiHeader"/>
124
      <facsimile xmlns="http://www.tei-c.org/ns/1.0"><xsl:apply-templates select="tei:facsimile"/></facsimile>
125
      <xsl:apply-templates select="tei:text"/>
126
    </xsl:element>
127
  </xsl:template>
55
	<xsl:template match="*">
56
		<xsl:copy>
57
			<xsl:apply-templates select="@*" />
58
			<xsl:apply-templates
59
				select="*|processing-instruction()|comment()|text()" />
60
		</xsl:copy>
61
	</xsl:template>
128 62

  
129
<xsl:template match="tei:facsimile">
130
  <xsl:apply-templates/>
131
</xsl:template>
132
  
133
  
134
  <!-- on supprime l'élément text de niveau 1 et travaille directement sur le niveau 2 (l'élément group intermédiaire disparait)-->
135
  
136
  <xsl:template match="tei:TEI/tei:text">
137
    <xsl:apply-templates select="descendant::tei:text"/>
138
  </xsl:template>
63
	<xsl:template match="comment()|text()">
64
		<xsl:copy />
65
	</xsl:template>
139 66

  
140
  <xsl:template match="tei:text//tei:text[descendant::*[@facs]]">
141
    
142
    <TEI xmlns="http://www.tei-c.org/ns/1.0">
143
      <teiHeader xmlns="http://www.tei-c.org/ns/1.0">
144
        <fileDesc xmlns="http://www.tei-c.org/ns/1.0">
145
          <titleStmt xmlns="http://www.tei-c.org/ns/1.0">
146
            <title xmlns="http://www.tei-c.org/ns/1.0"><xsl:text>Acte original </xsl:text>
147
              <xsl:value-of select="substring-after(preceding-sibling::comment()[contains(.,'acte original')][1],'acte original ')"/></title>
148
            <author xmlns="http://www.tei-c.org/ns/1.0"><xsl:value-of select="descendant::tei:docAuthor"/></author>
149
          </titleStmt>
150
          <publicationStmt xmlns="http://www.tei-c.org/ns/1.0">
151
            <p xmlns="http://www.tei-c.org/ns/1.0">See the header of the teiCorpus</p>
152
          </publicationStmt>
153
          <!-- les éléments listWit et listBibl sont placés dans sourceDesc -->
154
          <sourceDesc xmlns="http://www.tei-c.org/ns/1.0">
155
            <xsl:copy-of select="descendant::tei:listWit"/>
156
            <xsl:copy-of select="descendant::tei:listBibl[1]"></xsl:copy-of>
157
          </sourceDesc>
158
        </fileDesc>
159
        <profileDesc xmlns="http://www.tei-c.org/ns/1.0">
160
          <!-- docDate devient profileDesc/creation/date[@type='documentCreation'] -->
161
          <creation xmlns="http://www.tei-c.org/ns/1.0"><xsl:apply-templates select="descendant::tei:docDate"/></creation>
162
          <!-- argument devient profileDesc/abstract -->
163
          <xsl:apply-templates select="descendant::tei:argument"/>
164
        </profileDesc>
165
      </teiHeader>
166
      <text xmlns="http://www.tei-c.org/ns/1.0">
167
        <xsl:apply-templates select="@*"/>
168
        <xsl:variable name="facsID">
169
          <xsl:value-of select="replace(descendant::*[@facs][1]/@facs,'^#','')"/>
170
        </xsl:variable>
171
        <milestone xmlns="http://www.tei-c.org/ns/1.0" unit="surface">
172
          <xsl:attribute name="xml:id">
173
            <xsl:value-of select="concat('surf_',$filename,'_',translate($facsID,' ()','_--'))"/>
67
	<xsl:template match="processing-instruction()" />
68

  
69
	<!-- On supprime les attributs par défaut de la DTD TEI -->
70

  
71
	<xsl:template match="@*">
72
		<xsl:choose>
73
			<xsl:when
74
				test="matches(name(.),'^(part|instant|anchored|full)$')" />
75
			<!-- <xsl:when test="matches(name(.),'rend')"> <xsl:choose> <xsl:when 
76
				test="matches(.,'^aggl$')"><xsl:attribute name="rend">space-after(none)</xsl:attribute></xsl:when> 
77
				<xsl:otherwise><xsl:copy/></xsl:otherwise> </xsl:choose> </xsl:when> -->
78
			<xsl:otherwise>
79
				<xsl:copy />
80
			</xsl:otherwise>
81
		</xsl:choose>
82
	</xsl:template>
83

  
84
	<xsl:template match="tei:teiHeader">
85
		<xsl:copy>
86
			<xsl:apply-templates select="@*" />
87
			<xsl:apply-templates />
88
		</xsl:copy>
89
	</xsl:template>
90

  
91

  
92
	<xsl:template match="tei:revisionDesc">
93
		<xsl:copy>
94
			<xsl:apply-templates select="@*" />
95
			<change xmlns="http://www.tei-c.org/ns/1.0" when="2007-01-01"
96
				who="#DS">Publication du document original</change>
97
			<!-- information récupérée à partir de /TEI/text[1]/front[1]/titlePage[1]/docDate[1] -->
98
			<change xmlns="http://www.tei-c.org/ns/1.0"
99
				when="{format-date(current-date(),'[Y]-[M01]-[D01]')}" who="#auto">Conversion
100
				automatique au format XML-TEI-Oriflamms</change>
101
			<xsl:apply-templates />
102
		</xsl:copy>
103
	</xsl:template>
104

  
105
	<xsl:template match="tei:encodingDesc">
106
		<xsl:copy>
107
			<xsl:apply-templates select="@*" />
108
			<xsl:apply-templates />
109
			<xsl:if test="not(//tei:prefixDef[@ident='ori'])">
110
				<listPrefixDef xmlns="http://www.tei-c.org/ns/1.0">
111
					<prefixDef xmlns="http://www.tei-c.org/ns/1.0"
112
						ident="ori" matchPattern="([a-z]+)"
113
						replacementPattern="oriflamms-annotation-scheme.xml#$1">
114
						<p>
115
							In the context of this project, private URIs with the prefix
116
							"ori" point to
117
							<gi>interp</gi>
118
							elements in the project's
119
							oriflamms-annotation-scheme.xml file.
120
						</p>
121
					</prefixDef>
122
				</listPrefixDef>
123
			</xsl:if>
124
		</xsl:copy>
125
	</xsl:template>
126

  
127
	<!-- On restructure le document pour avoir un TEI par charte -->
128

  
129
	<!-- TEI devient teiCorpus -->
130

  
131
	<xsl:template match="tei:TEI">
132
		<xsl:element name="teiCorpus"
133
			xmlns="http://www.tei-c.org/ns/1.0">
134
			<xsl:apply-templates select="@*" />
135
			<xsl:apply-templates select="tei:teiHeader" />
136
			<facsimile xmlns="http://www.tei-c.org/ns/1.0">
137
				<xsl:apply-templates select="tei:facsimile" />
138
			</facsimile>
139
			<xsl:apply-templates select="tei:text" />
140
		</xsl:element>
141
	</xsl:template>
142

  
143
	<xsl:template match="tei:facsimile">
144
		<xsl:apply-templates />
145
	</xsl:template>
146

  
147

  
148
	<!-- on supprime l'élément text de niveau 1 et travaille directement sur 
149
		le niveau 2 (l'élément group intermédiaire disparait) -->
150

  
151
	<xsl:template match="tei:TEI/tei:text">
152
		<xsl:apply-templates select="descendant::tei:text" />
153
	</xsl:template>
154

  
155
	<xsl:template
156
		match="tei:text//tei:text[descendant::*[@facs]]">
157

  
158
		<TEI xmlns="http://www.tei-c.org/ns/1.0">
159
			<teiHeader xmlns="http://www.tei-c.org/ns/1.0">
160
				<fileDesc xmlns="http://www.tei-c.org/ns/1.0">
161
					<titleStmt xmlns="http://www.tei-c.org/ns/1.0">
162
						<title xmlns="http://www.tei-c.org/ns/1.0">
163
							<xsl:text>Acte original </xsl:text>
164
							<xsl:value-of
165
								select="substring-after(preceding-sibling::comment()[contains(.,'acte original')][1],'acte original ')" />
166
						</title>
167
						<author xmlns="http://www.tei-c.org/ns/1.0">
168
							<xsl:value-of select="descendant::tei:docAuthor" />
169
						</author>
170
					</titleStmt>
171
					<publicationStmt
172
						xmlns="http://www.tei-c.org/ns/1.0">
173
						<p xmlns="http://www.tei-c.org/ns/1.0">See the header of the teiCorpus</p>
174
					</publicationStmt>
175
					<!-- les éléments listWit et listBibl sont placés dans sourceDesc -->
176
					<sourceDesc xmlns="http://www.tei-c.org/ns/1.0">
177
						<xsl:copy-of select="descendant::tei:listWit" />
178
						<xsl:copy-of select="descendant::tei:listBibl[1]"></xsl:copy-of>
179
					</sourceDesc>
180
				</fileDesc>
181
				<profileDesc xmlns="http://www.tei-c.org/ns/1.0">
182
					<!-- docDate devient profileDesc/creation/date[@type='documentCreation'] -->
183
					<creation xmlns="http://www.tei-c.org/ns/1.0">
184
						<xsl:apply-templates
185
							select="descendant::tei:docDate" />
186
					</creation>
187
					<!-- argument devient profileDesc/abstract -->
188
					<xsl:apply-templates
189
						select="descendant::tei:argument" />
190
				</profileDesc>
191
			</teiHeader>
192
			<text xmlns="http://www.tei-c.org/ns/1.0">
193
				<xsl:apply-templates select="@*" />
194
				<xsl:variable name="facsID">
195
					<xsl:value-of
196
						select="replace(descendant::*[@facs][1]/@facs,'^#','')" />
197
				</xsl:variable>
198
				<milestone xmlns="http://www.tei-c.org/ns/1.0"
199
					unit="surface">
200
					<xsl:attribute name="xml:id">
201
            <xsl:value-of
202
						select="concat('surf_',$filename,'_',translate($facsID,' ()','_--'))" />
174 203
          </xsl:attribute>
175
        </milestone>
176
        <xsl:if test="not(descendant::tei:pb[@facs])">
177
          <pb xmlns="http://www.tei-c.org/ns/1.0">
178
            <xsl:attribute name="facs">
204
				</milestone>
205
				<xsl:if test="not(descendant::tei:pb[@facs])">
206
					<pb xmlns="http://www.tei-c.org/ns/1.0">
207
						<xsl:attribute name="facs">
179 208
              <xsl:choose>
180
                <xsl:when test="matches(descendant::*[@facs][1]/@facs,'^#')">
181
                  <xsl:value-of select="//tei:graphic[following-sibling::tei:zone[@xml:id=$facsID]]/@url"/>
209
                <xsl:when
210
							test="matches(descendant::*[@facs][1]/@facs,'^#')">
211
                  <xsl:value-of
212
							select="//tei:graphic[following-sibling::tei:zone[@xml:id=$facsID]]/@url" />
182 213
                  <!--<xsl:value-of select="$facsID"/>-->
183 214
                </xsl:when>
184
                <xsl:otherwise><xsl:value-of select="descendant::*[@facs][1]/@facs"/></xsl:otherwise>
215
                <xsl:otherwise><xsl:value-of
216
							select="descendant::*[@facs][1]/@facs" /></xsl:otherwise>
185 217
              </xsl:choose>
186 218
            </xsl:attribute>
187
          </pb>
188
        </xsl:if>
189
        <body xmlns="http://www.tei-c.org/ns/1.0">
190
          <xsl:apply-templates select="descendant::tei:div1"/>
191
        </body>
192
      </text>
193
    </TEI>
194
  </xsl:template>
195
  
196
  <xsl:template match="tei:text//tei:text[not(descendant::*[@facs])]">
197
    <xsl:comment>No facs attribute provided for any element in this text (n="<xsl:value-of select="@n"/>")!</xsl:comment>
198
    <xsl:comment><xsl:copy-of select="."/></xsl:comment>
199
  </xsl:template>
200
  
201
  <xsl:template match="tei:docDate[ancestor::tei:group]">
202
    <date type="documentCreation" xmlns="http://www.tei-c.org/ns/1.0">
203
      <xsl:apply-templates select="@*"/>
204
      <xsl:apply-templates/>
205
    </date>
206
  </xsl:template>
207
  
208
  <xsl:template match="tei:argument">
209
    <abstract xmlns="http://www.tei-c.org/ns/1.0"><xsl:apply-templates/></abstract>
210
  </xsl:template>
219
					</pb>
220
				</xsl:if>
221
				<body xmlns="http://www.tei-c.org/ns/1.0">
222
					<xsl:apply-templates
223
						select="descendant::tei:div1" />
224
				</body>
225
			</text>
226
		</TEI>
227
	</xsl:template>
211 228

  
212
  <!-- on ajoute un attribut pour faciliter l'identification des segments à ne pas aligner -->
229
	<xsl:template
230
		match="tei:text//tei:text[not(descendant::*[@facs])]">
231
		<xsl:comment>
232
			No facs attribute provided for any element in this text (n="
233
			<xsl:value-of select="@n" />
234
			")!
235
		</xsl:comment>
236
		<xsl:comment>
237
			<xsl:copy-of select="." />
238
		</xsl:comment>
239
	</xsl:template>
213 240

  
214
  <xsl:template match="tei:choice/tei:expan|tei:choice/tei:corr|tei:div1[@type='edition']">
215
    <xsl:copy>
216
      <xsl:apply-templates select="@*"/>
217
      <xsl:attribute name="ana">ori:align-no</xsl:attribute>
218
      <xsl:apply-templates/>
219
    </xsl:copy>
220
  </xsl:template>
221
  
241
	<xsl:template match="tei:docDate[ancestor::tei:group]">
242
		<date type="documentCreation" xmlns="http://www.tei-c.org/ns/1.0">
243
			<xsl:apply-templates select="@*" />
244
			<xsl:apply-templates />
245
		</date>
246
	</xsl:template>
222 247

  
248
	<xsl:template match="tei:argument">
249
		<abstract xmlns="http://www.tei-c.org/ns/1.0">
250
			<xsl:apply-templates />
251
		</abstract>
252
	</xsl:template>
253

  
254
	<!-- on ajoute un attribut pour faciliter l'identification des segments 
255
		à ne pas aligner -->
256

  
257
	<xsl:template
258
		match="tei:choice/tei:expan|tei:choice/tei:corr|tei:div1[@type='edition']">
259
		<xsl:copy>
260
			<xsl:apply-templates select="@*" />
261
			<xsl:attribute name="ana">ori:align-no</xsl:attribute>
262
			<xsl:apply-templates />
263
		</xsl:copy>
264
	</xsl:template>
265

  
266

  
223 267
</xsl:stylesheet>

Also available in: Unified diff