<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet exclude-result-prefixes="europeana xalan xs" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wgs84_pos="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:rdaGr2="http://rdvocab.info/ElementsGr2/" xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:ore="http://www.openarchives.org/ore/terms/" xmlns:edm="http://www.europeana.eu/schemas/edm/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:crm="http://www.cidoc-crm.org/rdfs/cidoc_crm_v5.0.2_english_label.rdfs#" xmlns:europeana="http://www.europeana.eu/schemas/ese/" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:xalan="http://xml.apache.org/xalan" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="@*|node()">
		<xsl:copy>
			<xsl:apply-templates select="@*|node()"/>
		</xsl:copy>
	</xsl:template>
	<xsl:template match="*[ancestor::Document]">
		<xsl:element name="{name()}" namespace="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
			<xsl:apply-templates select="*"/>
		</xsl:element>
	</xsl:template>
	<xsl:template match="/">
		<rdf:RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/1999/02/22-rdf-syntax-ns# http://www.europeana.eu/schemas/edm/EDM.xsd">
			<xsl:apply-templates select="*"/>
		</rdf:RDF>
	</xsl:template>
	<!-- ESE2EDM_SGCB-v.1 // diseñado por Julio Cordal (S.G. Coordinación Bibliotecaria). Versión 4 -->
	<!--  Este documento es una hoja de transformación (XSD) que permite transformar registros en formato ESE en registros en formato EDM. Se espera como entrada un archivo XML válido que contenga uno o varios archivos ESE V.3.4  y se produce como salida un registro XML-RDF que contiene la información del registro o registros ESE en formato EDM v.5.2.6. Se han mapeado los campos del formato ESE a las tres clases principales del formato EDM: edm:ProvidedCHO, ore:Aggregation y edm:WebResource. 

Este mapeo se ha basado en el mapeo ESE a EDM de campos obligatorios que utiliza Europeana para la transformación automática de formatos. No sólo supone una mejora cuantitativa al mapear todos los campos, sino también cualitativa, al utilizar tres clases principales EDM en vez de dos (ProvidedCHO, Agregation y WebResource).

Teniendo en cuenta que hay algunos campos del formato ESE que pueden mapearse a propiedades EDM que se usan en más de una clase (dc:format, dc:rights, edm:rights, etc.), en función de cómo utilice estos campos ESE la institución de origen, puede ser necesario realizar leves modificaciones en el mapeo para generar registros EDM con la información correctamente codificada. La salida será en todo caso EDM válido y bien formado. Más adelante, en las etiquetas correspondientes se insertan comentarios de uso de estos campos. 

En esta úlitma versión, se añade el código necesario para que tras la transformación aparezca la información del atributo xml:lang en los siguientes campos:
- dc:title
- dcterms:alternative
- dc:description
- dc:publisher
- dc:rights
- dc:coverage
- dcterms:spatial
-->
	<xsl:output omit-xml-declaration="no"/>
	<!-- Plantilla para archivos que contienen varios registros ESE -->
	<xsl:template match="/europeana:metadata">
		<xsl:apply-templates select="/europeana:metadata"/>
	</xsl:template>
	<xsl:template match="/europeana:metadata">
		<xsl:for-each select="europeana:record">
			<!-- edm:ProvidedCHO -->
			<xsl:if test="dc:identifier">
				<!-- edm:ProvidedCHO -->
				<edm:ProvidedCHO>
					<xsl:if test="dc:identifier">
						<xsl:attribute name="rdf:about"><xsl:for-each select="dc:identifier"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
					</xsl:if>
					<!-- dc:creator -->
					<xsl:for-each select="dc:creator">
						<dc:creator>
							<xsl:value-of select="."/>
						</dc:creator>
					</xsl:for-each>
					<!-- dc:description -->
					<xsl:for-each select="dc:description">
						<dc:description>
							<xsl:if test="@xml:lang">
								<xsl:attribute name="xml:lang">
									<xsl:value-of select="@xml:lang"/>
								</xsl:attribute>
							</xsl:if>
							<xsl:value-of select="."/>
						</dc:description>
					</xsl:for-each>
					<!-- dc:identifier -->
					<xsl:for-each select="dc:identifier">
						<dc:identifier>
							<xsl:value-of select="."/>
						</dc:identifier>
					</xsl:for-each>
					<!-- dc:language -->
					<xsl:for-each select="dc:language">
						<dc:language>
							<xsl:value-of select="."/>
						</dc:language>
					</xsl:for-each>
					<!-- dc:date -->
					<xsl:for-each select="dc:date">
						<dc:date>
							<xsl:value-of select="."/>
						</dc:date>
					</xsl:for-each>
					<!-- dc:publisher -->
					<xsl:for-each select="dc:publisher">
						<dc:publisher>
							<xsl:if test="@xml:lang">
								<xsl:attribute name="xml:lang">
									<xsl:value-of select="@xml:lang"/>
								</xsl:attribute>
							</xsl:if>
							<xsl:value-of select="."/>
						</dc:publisher>
					</xsl:for-each>
					<!-- dc:source -->
					<xsl:for-each select="dc:source">
						<dc:source>
							<xsl:value-of select="."/>
						</dc:source>
					</xsl:for-each>
					<!-- dc:subject -->
					<xsl:for-each select="dc:subject">
						<dc:subject>
							<xsl:if test="@xml:lang">
								<xsl:attribute name="xml:lang">
									<xsl:value-of select="@xml:lang"/>
								</xsl:attribute>
							</xsl:if>
							<xsl:value-of select="."/>
						</dc:subject>
					</xsl:for-each>
					<!-- dc:title -->
					<xsl:for-each select="dc:title">
						<dc:title>
							<xsl:if test="@xml:lang">
								<xsl:attribute name="xml:lang">
									<xsl:value-of select="@xml:lang"/>
								</xsl:attribute>
							</xsl:if>
							<xsl:value-of select="."/>
						</dc:title>
					</xsl:for-each>
					<!-- dc:type -->
					<xsl:for-each select="dc:type">
						<dc:type>
							<xsl:value-of select="."/>
						</dc:type>
					</xsl:for-each>
					<!-- dc:coverage -->
					<xsl:for-each select="dc:coverage">
						<dc:coverage>
							<xsl:if test="@xml:lang">
								<xsl:attribute name="xml:lang">
									<xsl:value-of select="@xml:lang"/>
								</xsl:attribute>
							</xsl:if>
							<xsl:value-of select="."/>
						</dc:coverage>
					</xsl:for-each>
					<!-- dcterms:alternative -->
					<xsl:for-each select="dcterms:alternative">
						<dcterms:alternative>
							<xsl:if test="@xml:lang">
								<xsl:attribute name="xml:lang">
									<xsl:value-of select="@xml:lang"/>
								</xsl:attribute>
							</xsl:if>
							<xsl:value-of select="."/>
						</dcterms:alternative>
					</xsl:for-each>
					<!-- dcterms:hasFormat -->
					<xsl:for-each select="dcterms:hasFormat">
						<dcterms:hasFormat>
							<xsl:value-of select="."/>
						</dcterms:hasFormat>
					</xsl:for-each>
					<!-- dcterms:hasPart -->
					<xsl:for-each select="dcterms:hasPart">
						<dcterms:hasPart>
							<xsl:value-of select="."/>
						</dcterms:hasPart>
					</xsl:for-each>
					<!-- dcterms:hasVersion -->
					<xsl:for-each select="dcterms:hasVersion">
						<dcterms:hasVersion>
							<xsl:value-of select="."/>
						</dcterms:hasVersion>
					</xsl:for-each>
					<!-- dcterms:conformsTo -->
					<xsl:for-each select="dcterms:conformsTo">
						<dcterms:conformsTo>
							<xsl:value-of select="."/>
						</dcterms:conformsTo>
					</xsl:for-each>
					<!-- dcterms:contributor -->
					<xsl:for-each select="dc:contributor">
						<dc:contributor>
							<xsl:value-of select="."/>
						</dc:contributor>
					</xsl:for-each>
					<!-- dcterms:created -->
					<xsl:for-each select="dcterms:created">
						<dcterms:created>
							<xsl:value-of select="."/>
						</dcterms:created>
					</xsl:for-each>
					<!-- dcterms:extent -->
					<xsl:for-each select="dcterms:extent">
						<dcterms:extent>
							<xsl:value-of select="."/>
						</dcterms:extent>
					</xsl:for-each>
					<!-- dcterms:isPartOf -->
					<xsl:for-each select="dcterms:isPartOf">
						<dcterms:isPartOf>
							<xsl:value-of select="."/>
						</dcterms:isPartOf>
					</xsl:for-each>
					<!-- dcterms:isReferencedBy -->
					<xsl:for-each select="dcterms:isReferencedBy">
						<dcterms:isReferencedBy>
							<xsl:value-of select="."/>
						</dcterms:isReferencedBy>
					</xsl:for-each>
					<!-- dcterms:isReplacedBy -->
					<xsl:for-each select="dcterms:isReplacedBy">
						<dcterms:isReplacedBy>
							<xsl:value-of select="."/>
						</dcterms:isReplacedBy>
					</xsl:for-each>
					<!-- dcterms:isRequiredBy -->
					<xsl:for-each select="dcterms:isRequiredBy">
						<dcterms:isRequiredBy>
							<xsl:value-of select="."/>
						</dcterms:isRequiredBy>
					</xsl:for-each>
					<!-- dcterms:issued -->
					<xsl:for-each select="dcterms:issued">
						<dcterms:issued>
							<xsl:value-of select="."/>
						</dcterms:issued>
					</xsl:for-each>
					<!-- dcterms:isVersionOf -->
					<xsl:for-each select="dcterms:isVersionOf">
						<dcterms:isVersionOf>
							<xsl:value-of select="."/>
						</dcterms:isVersionOf>
					</xsl:for-each>
					<!-- dcterms:medium -->
					<xsl:for-each select="dcterms:medium">
						<dcterms:medium>
							<xsl:value-of select="."/>
						</dcterms:medium>
					</xsl:for-each>
					<!-- dcterms:provenance -->
					<xsl:for-each select="dcterms:provenance">
						<dcterms:provenance>
							<xsl:value-of select="."/>
						</dcterms:provenance>
					</xsl:for-each>
					<!-- dcterms:references -->
					<xsl:for-each select="dcterms:references">
						<dcterms:references>
							<xsl:value-of select="."/>
						</dcterms:references>
					</xsl:for-each>
					<!-- dc:relation -->
					<xsl:for-each select="dc:relation">
						<dc:relation>
							<xsl:value-of select="."/>
						</dc:relation>
					</xsl:for-each>
					<!-- dcterms:replaces -->
					<xsl:for-each select="dcterms:replaces">
						<dcterms:replaces>
							<xsl:value-of select="."/>
						</dcterms:replaces>
					</xsl:for-each>
					<!-- dcterms:requires -->
					<xsl:for-each select="dcterms:requires">
						<dcterms:requires>
							<xsl:value-of select="."/>
						</dcterms:requires>
					</xsl:for-each>
					<!-- dcterms:spatial -->
					<xsl:for-each select="dcterms:spatial">
						<dcterms:spatial>
							<xsl:if test="@xml:lang">
								<xsl:attribute name="xml:lang">
									<xsl:value-of select="@xml:lang"/>
								</xsl:attribute>
							</xsl:if>
							<xsl:value-of select="."/>
						</dcterms:spatial>
					</xsl:for-each>
					<!-- dcterms:tableOfContents -->
					<xsl:for-each select="dcterms:tableOfContents">
						<dcterms:tableOfContents>
							<xsl:value-of select="."/>
						</dcterms:tableOfContents>
					</xsl:for-each>
					<!-- dcterms:temporal -->
					<xsl:for-each select="dcterms:temporal">
						<dcterms:temporal>
							<xsl:value-of select="."/>
						</dcterms:temporal>
					</xsl:for-each>
					<!-- edm:type -->
					<xsl:for-each select="europeana:type">
						<edm:type>
							<xsl:value-of select="."/>
						</edm:type>
					</xsl:for-each>
					<!-- edm:unstored -->
					<xsl:for-each select="europeana:unstored">
						<edm:unstored>
							<xsl:value-of select="."/>
						</edm:unstored>
					</xsl:for-each>
				</edm:ProvidedCHO>
			</xsl:if>
			<!-- ore:Aggregation -->
			<xsl:if test="dc:identifier">
				<!-- ore:Aggregation -->
				<ore:Aggregation>
					<xsl:if test="dc:identifier">
						<xsl:attribute name="rdf:about"><xsl:for-each select="dc:identifier"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
					</xsl:if>
					<!-- edm:aggregatedCHO -->
					<xsl:if test="dc:identifier">
						<!-- edm:aggregatedCHO -->
						<edm:aggregatedCHO>
							<xsl:if test="dc:identifier">
								<xsl:attribute name="rdf:resource"><xsl:for-each select="dc:identifier"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
							</xsl:if>
						</edm:aggregatedCHO>
					</xsl:if>
					<!-- edm:dataProvider -->
					<xsl:for-each select="europeana:dataProvider">
						<edm:dataProvider>
							<xsl:value-of select="."/>
						</edm:dataProvider>
					</xsl:for-each>
					<!-- edm:isShownAt -->
					<xsl:if test="europeana:isShownAt">
						<!-- edm:isShownAt -->
						<edm:isShownAt>
							<xsl:if test="europeana:isShownAt">
								<xsl:attribute name="rdf:resource"><xsl:for-each select="europeana:isShownAt"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
							</xsl:if>
						</edm:isShownAt>
					</xsl:if>
					<!-- edm:isShownBy -->
					<xsl:if test="europeana:isShownBy">
						<!-- edm:isShownBy -->
						<edm:isShownBy>
							<xsl:if test="europeana:isShownBy">
								<xsl:attribute name="rdf:resource"><xsl:for-each select="europeana:isShownBy"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
							</xsl:if>
						</edm:isShownBy>
					</xsl:if>
					<!-- edm:object -->
					<xsl:if test="europeana:object">
						<edm:object>
							<xsl:attribute name="rdf:resource"><xsl:for-each select="europeana:object"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
						</edm:object>
					</xsl:if>
					<!-- edm:provider -->
					<xsl:for-each select="europeana:provider">
						<edm:provider>
							<xsl:value-of select="."/>
						</edm:provider>
					</xsl:for-each>
					<!-- edm:rights -->
					<xsl:if test="europeana:rights">
						<edm:rights>
							<xsl:attribute name="rdf:resource"><xsl:for-each select="europeana:rights"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
						</edm:rights>
					</xsl:if>
					<!-- edm:ugc -->
					<xsl:for-each select="europeana:ugc">
						<edm:ugc>
							<xsl:value-of select="."/>
						</edm:ugc>
					</xsl:for-each>
				</ore:Aggregation>
			</xsl:if>
			<!-- edm:WebResource -->
			<xsl:choose>
				<xsl:when test="europeana:isShownAt">
					<!-- edm:WebResource -->
					<edm:WebResource>
						<xsl:attribute name="rdf:about"><xsl:for-each select="europeana:isShownAt"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
						<!-- dc:format. Esta propiedad normalmente corresponderá al recurso web (edm:WebResource), pero podría hacer referencia al objeto original (edm:ProvidedCHO). En este último caso, habría que poner estas etiquetas en la sección de edm:ProvidedCHO de este documento, para que en la salida del mapeo quede dc:format como propiedad de edm:ProvideCHO.  -->
						<xsl:for-each select="dc:format">
							<dc:format>
								<xsl:value-of select="."/>
							</dc:format>
						</xsl:for-each>
						<!-- dcterms:isFormatOf. Esta propiedad normalmente corresponderá al recurso web (edm:WebResource), pero podría hacer referencia al objeto original (edm:ProvidedCHO). En este último caso, habría que poner estas etiquetas en la sección de edm:ProvidedCHO de este documento, para que en la salida del mapeo quede dcterms:isFormatOf como propiedad de edm:ProvideCHO.  -->
						<xsl:for-each select="dcterms:isFormatOf">
							<dcterms:isFormatOf>
								<xsl:value-of select="."/>
							</dcterms:isFormatOf>
						</xsl:for-each>
						<!-- dc:rights. Esta propiedad normalmente se usa para indicar derechos o limitaciones de acceso a los que se ciñe la copia digital, es decir, corresponderá al recurso web (edm:WebResource), pero a veces se usa para hacer referencia al objeto original (edm:ProvidedCHO). En este último caso, habría que poner estas etiquetas en la sección de edm:ProvidedCHO de este documento, para que en la salida del mapeo quede dc:rights como propiedad de edm:ProvideCHO. -->
						<xsl:for-each select="dc:rights">
							<dc:rights>
								<xsl:if test="@xml:lang">
								<xsl:attribute name="xml:lang">
									<xsl:value-of select="@xml:lang"/>
								</xsl:attribute>
							</xsl:if>
							<xsl:value-of select="."/>
							</dc:rights>
						</xsl:for-each>
						<!-- edm:rights -->
						<xsl:if test="europeana:rights">
							<edm:rights>
								<xsl:attribute name="rdf:resource"><xsl:for-each select="europeana:rights"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
							</edm:rights>
						</xsl:if>
					</edm:WebResource>
				</xsl:when>
				<xsl:otherwise>
					<edm:WebResource>
						<xsl:attribute name="rdf:resource"><xsl:for-each select="europeana:isShownBy"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
						<!-- dc:format. Esta propiedad normalmente corresponderá al recurso web (edm:WebResource), pero podría hacer referencia al objeto original (edm:ProvidedCHO). En este último caso, habría que poner estas etiquetas en la sección de edm:ProvidedCHO de este documento, para que en la salida del mapeo quede dc:format como propiedad de edm:ProvideCHO. -->
						<xsl:for-each select="dc:format">
							<dc:format>
								<xsl:value-of select="."/>
							</dc:format>
						</xsl:for-each>
						<!-- dcterms:isFormatOf. Esta propiedad normalmente corresponderá al recurso web (edm:WebResource), pero podría hacer referencia al objeto original (edm:ProvidedCHO). En este último caso, habría que poner estas etiquetas en la sección de edm:ProvidedCHO de este documento, para que en la salida del mapeo quede dcterms:isFormatOf como propiedad de edm:ProvideCHO. -->
						<xsl:for-each select="dcterms:isFormatOf">
							<dcterms:isFormatOf>
								<xsl:value-of select="."/>
							</dcterms:isFormatOf>
						</xsl:for-each>
						<!-- dc:rights. Esta propiedad normalmente se usa para indicar derechos o limitaciones de acceso a los que se ciñe la copia digital, es decir, corresponderá al recurso web (edm:WebResource), pero a veces se usa para hacer referencia al objeto original (edm:ProvidedCHO). En este último caso, habría que poner estas etiquetas en la sección de edm:ProvidedCHO de este documento, para que en la salida del mapeo quede dc:rights como propiedad de edm:ProvideCHO. -->
						<xsl:for-each select="dc:rights">
							<dc:rights>
								<xsl:if test="@xml:lang">
								<xsl:attribute name="xml:lang">
									<xsl:value-of select="@xml:lang"/>
								</xsl:attribute>
							</xsl:if>
							<xsl:value-of select="."/>
							</dc:rights>
						</xsl:for-each>
						<!-- edm:rights -->
						<xsl:if test="europeana:rights">
							<edm:rights>
								<xsl:attribute name="rdf:resource"><xsl:for-each select="europeana:rights"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
							</edm:rights>
						</xsl:if>
					</edm:WebResource>
				</xsl:otherwise>
			</xsl:choose>
		</xsl:for-each>
	</xsl:template>
	<!-- Plantilla para archivos que contienen un sólo registro ESE -->
	<xsl:template match="/europeana:record">
		<xsl:apply-templates select="/europeana:record"/>
	</xsl:template>
	<xsl:template match="/europeana:record">
		<!-- edm:ProvidedCHO -->
		<xsl:if test="dc:identifier">
			<!-- edm:ProvidedCHO -->
			<edm:ProvidedCHO>
				<xsl:if test="dc:identifier">
					<xsl:attribute name="rdf:about"><xsl:for-each select="dc:identifier"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
				</xsl:if>
				<!-- dc:creator -->
				<xsl:for-each select="dc:creator">
					<dc:creator>
						<xsl:value-of select="."/>
					</dc:creator>
				</xsl:for-each>
				<!-- dc:description -->
				<xsl:for-each select="dc:description">
					<dc:description>
						<xsl:if test="@xml:lang">
								<xsl:attribute name="xml:lang">
									<xsl:value-of select="@xml:lang"/>
								</xsl:attribute>
							</xsl:if>
							<xsl:value-of select="."/>
					</dc:description>
				</xsl:for-each>
				<!-- dc:identifier -->
				<xsl:for-each select="dc:identifier">
					<dc:identifier>
						<xsl:value-of select="."/>
					</dc:identifier>
				</xsl:for-each>
				<!-- dc:language -->
				<xsl:for-each select="dc:language">
					<dc:language>
						<xsl:value-of select="."/>
					</dc:language>
				</xsl:for-each>
				<!-- dc:date -->
				<xsl:for-each select="dc:date">
					<dc:date>
						<xsl:value-of select="."/>
					</dc:date>
				</xsl:for-each>
				<!-- dc:publisher -->
				<xsl:for-each select="dc:publisher">
					<dc:publisher>
						<xsl:if test="@xml:lang">
								<xsl:attribute name="xml:lang">
									<xsl:value-of select="@xml:lang"/>
								</xsl:attribute>
							</xsl:if>
							<xsl:value-of select="."/>
					</dc:publisher>
				</xsl:for-each>
				<!-- dc:source -->
				<xsl:for-each select="dc:source">
					<dc:source>
						<xsl:value-of select="."/>
					</dc:source>
				</xsl:for-each>
				<!-- dc:subject -->
				<xsl:for-each select="dc:subject">
					<dc:subject>
						<xsl:if test="@xml:lang">
								<xsl:attribute name="xml:lang">
									<xsl:value-of select="@xml:lang"/>
								</xsl:attribute>
							</xsl:if>
							<xsl:value-of select="."/>
					</dc:subject>
				</xsl:for-each>
				<!-- dc:title -->
				<xsl:for-each select="dc:title">
					<dc:title>
						<xsl:if test="@xml:lang">
								<xsl:attribute name="xml:lang">
									<xsl:value-of select="@xml:lang"/>
								</xsl:attribute>
							</xsl:if>
							<xsl:value-of select="."/>
					</dc:title>
				</xsl:for-each>
				<!-- dc:type -->
				<xsl:for-each select="dc:type">
					<dc:type>
						<xsl:value-of select="."/>
					</dc:type>
				</xsl:for-each>
				<!-- dc:coverage -->
				<xsl:for-each select="dc:coverage">
					<dc:coverage>
						<xsl:if test="@xml:lang">
								<xsl:attribute name="xml:lang">
									<xsl:value-of select="@xml:lang"/>
								</xsl:attribute>
							</xsl:if>
							<xsl:value-of select="."/>
					</dc:coverage>
				</xsl:for-each>
				<!-- dcterms:alternative -->
				<xsl:for-each select="dcterms:alternative">
					<dcterms:alternative>
						<xsl:if test="@xml:lang">
								<xsl:attribute name="xml:lang">
									<xsl:value-of select="@xml:lang"/>
								</xsl:attribute>
							</xsl:if>
							<xsl:value-of select="."/>
					</dcterms:alternative>
				</xsl:for-each>
				<!-- dcterms:hasFormat -->
				<xsl:for-each select="dcterms:hasFormat">
					<dcterms:hasFormat>
						<xsl:value-of select="."/>
					</dcterms:hasFormat>
				</xsl:for-each>
				<!-- dcterms:hasPart -->
				<xsl:for-each select="dcterms:hasPart">
					<dcterms:hasPart>
						<xsl:value-of select="."/>
					</dcterms:hasPart>
				</xsl:for-each>
				<!-- dcterms:hasVersion -->
				<xsl:for-each select="dcterms:hasVersion">
					<dcterms:hasVersion>
						<xsl:value-of select="."/>
					</dcterms:hasVersion>
				</xsl:for-each>
				<!-- dcterms:conformsTo -->
				<xsl:for-each select="dcterms:conformsTo">
					<dcterms:conformsTo>
						<xsl:value-of select="."/>
					</dcterms:conformsTo>
				</xsl:for-each>
				<!-- dcterms:contributor -->
				<xsl:for-each select="dcterms:contributor">
					<dcterms:contributor>
						<xsl:value-of select="."/>
					</dcterms:contributor>
				</xsl:for-each>
				<!-- dcterms:created -->
				<xsl:for-each select="dcterms:created">
					<dcterms:created>
						<xsl:value-of select="."/>
					</dcterms:created>
				</xsl:for-each>
				<!-- dcterms:extent -->
				<xsl:for-each select="dcterms:extent">
					<dcterms:extent>
						<xsl:value-of select="."/>
					</dcterms:extent>
				</xsl:for-each>
				<!-- dcterms:isPartOf -->
				<xsl:for-each select="dcterms:isPartOf">
					<dcterms:isPartOf>
						<xsl:value-of select="."/>
					</dcterms:isPartOf>
				</xsl:for-each>
				<!-- dcterms:isReferencedBy -->
				<xsl:for-each select="dcterms:isReferencedBy">
					<dcterms:isReferencedBy>
						<xsl:value-of select="."/>
					</dcterms:isReferencedBy>
				</xsl:for-each>
				<!-- dcterms:isReplacedBy -->
				<xsl:for-each select="dcterms:isReplacedBy">
					<dcterms:isReplacedBy>
						<xsl:value-of select="."/>
					</dcterms:isReplacedBy>
				</xsl:for-each>
				<!-- dcterms:isRequiredBy -->
				<xsl:for-each select="dcterms:isRequiredBy">
					<dcterms:isRequiredBy>
						<xsl:value-of select="."/>
					</dcterms:isRequiredBy>
				</xsl:for-each>
				<!-- dcterms:issued -->
				<xsl:for-each select="dcterms:issued">
					<dcterms:issued>
						<xsl:value-of select="."/>
					</dcterms:issued>
				</xsl:for-each>
				<!-- dcterms:isVersionOf -->
				<xsl:for-each select="dcterms:isVersionOf">
					<dcterms:isVersionOf>
						<xsl:value-of select="."/>
					</dcterms:isVersionOf>
				</xsl:for-each>
				<!-- dcterms:medium -->
				<xsl:for-each select="dcterms:medium">
					<dcterms:medium>
						<xsl:value-of select="."/>
					</dcterms:medium>
				</xsl:for-each>
				<!-- dcterms:provenance -->
				<xsl:for-each select="dcterms:provenance">
					<dcterms:provenance>
						<xsl:value-of select="."/>
					</dcterms:provenance>
				</xsl:for-each>
				<!-- dcterms:references -->
				<xsl:for-each select="dcterms:references">
					<dcterms:references>
						<xsl:value-of select="."/>
					</dcterms:references>
				</xsl:for-each>
				<!-- dc:relation -->
				<xsl:for-each select="dc:relation">
					<dc:relation>
						<xsl:value-of select="."/>
					</dc:relation>
				</xsl:for-each>
				<!-- dcterms:replaces -->
				<xsl:for-each select="dcterms:replaces">
					<dcterms:replaces>
						<xsl:value-of select="."/>
					</dcterms:replaces>
				</xsl:for-each>
				<!-- dcterms:requires -->
				<xsl:for-each select="dcterms:requires">
					<dcterms:requires>
						<xsl:value-of select="."/>
					</dcterms:requires>
				</xsl:for-each>
				<!-- dcterms:spatial -->
				<xsl:for-each select="dcterms:spatial">
					<dcterms:spatial>
						<xsl:if test="@xml:lang">
								<xsl:attribute name="xml:lang">
									<xsl:value-of select="@xml:lang"/>
								</xsl:attribute>
							</xsl:if>
							<xsl:value-of select="."/>
					</dcterms:spatial>
				</xsl:for-each>
				<!-- dcterms:tableOfContents -->
				<xsl:for-each select="dcterms:tableOfContents">
					<dcterms:tableOfContents>
						<xsl:value-of select="."/>
					</dcterms:tableOfContents>
				</xsl:for-each>
				<!-- dcterms:temporal -->
				<xsl:for-each select="dcterms:temporal">
					<dcterms:temporal>
						<xsl:value-of select="."/>
					</dcterms:temporal>
				</xsl:for-each>
				<!-- edm:type -->
				<xsl:for-each select="europeana:type">
					<edm:type>
						<xsl:value-of select="."/>
					</edm:type>
				</xsl:for-each>
				<!-- edm:unstored -->
				<xsl:for-each select="europeana:unstored">
					<edm:unstored>
						<xsl:value-of select="."/>
					</edm:unstored>
				</xsl:for-each>
			</edm:ProvidedCHO>
		</xsl:if>
		<!-- ore:Aggregation -->
		<xsl:if test="dc:identifier">
			<!-- ore:Aggregation -->
			<ore:Aggregation>
				<xsl:if test="dc:identifier">
					<xsl:attribute name="rdf:about"><xsl:for-each select="dc:identifier"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
				</xsl:if>
				<!-- edm:aggregatedCHO -->
				<xsl:if test="dc:identifier">
					<!-- edm:aggregatedCHO -->
					<edm:aggregatedCHO>
						<xsl:if test="dc:identifier">
							<xsl:attribute name="rdf:resource"><xsl:for-each select="dc:identifier"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
						</xsl:if>
					</edm:aggregatedCHO>
				</xsl:if>
				<!-- edm:dataProvider -->
				<xsl:for-each select="europeana:dataProvider">
					<edm:dataProvider>
						<xsl:value-of select="."/>
					</edm:dataProvider>
				</xsl:for-each>
				<!-- edm:isShownAt -->
				<xsl:if test="europeana:isShownAt">
					<!-- edm:isShownAt -->
					<edm:isShownAt>
						<xsl:if test="europeana:isShownAt">
							<xsl:attribute name="rdf:resource"><xsl:for-each select="europeana:isShownAt"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
						</xsl:if>
					</edm:isShownAt>
				</xsl:if>
				<!-- edm:isShownBy -->
				<xsl:if test="europeana:isShownBy">
					<!-- edm:isShownBy -->
					<edm:isShownBy>
						<xsl:if test="europeana:isShownBy">
							<xsl:attribute name="rdf:resource"><xsl:for-each select="europeana:isShownBy"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
						</xsl:if>
					</edm:isShownBy>
				</xsl:if>
				<!-- edm:object -->
				<xsl:if test="europeana:object">
					<edm:object>
						<xsl:attribute name="rdf:resource"><xsl:for-each select="europeana:object"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
					</edm:object>
				</xsl:if>
				<!-- edm:provider -->
				<xsl:for-each select="europeana:provider">
					<edm:provider>
						<xsl:value-of select="."/>
					</edm:provider>
				</xsl:for-each>
				<!-- edm:rights -->
				<xsl:if test="europeana:rights">
					<edm:rights>
						<xsl:attribute name="rdf:resource"><xsl:for-each select="europeana:rights"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
					</edm:rights>
				</xsl:if>
				<!-- edm:ugc -->
				<xsl:for-each select="europeana:ugc">
					<edm:ugc>
						<xsl:value-of select="."/>
					</edm:ugc>
				</xsl:for-each>
			</ore:Aggregation>
		</xsl:if>
		<!-- edm:WebResource -->
		<xsl:choose>
			<xsl:when test="europeana:isShownAt">
				<!-- edm:WebResource -->
				<edm:WebResource>
					<xsl:attribute name="rdf:about"><xsl:for-each select="europeana:isShownAt"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
					<!-- dc:format. Esta propiedad normalmente corresponderá al recurso web (edm:WebResource), pero podría hacer referencia al objeto original (edm:ProvidedCHO). En este último caso, habría que poner estas etiquetas en la sección de edm:ProvidedCHO de este documento, para que en la salida del mapeo quede dc:format como propiedad de edm:ProvideCHO.  -->
					<xsl:for-each select="dc:format">
						<dc:format>
							<xsl:value-of select="."/>
						</dc:format>
					</xsl:for-each>
					<!-- dcterms:isFormatOf. Esta propiedad normalmente corresponderá al recurso web (edm:WebResource), pero podría hacer referencia al objeto original (edm:ProvidedCHO). En este último caso, habría que poner estas etiquetas en la sección de edm:ProvidedCHO de este documento, para que en la salida del mapeo quede dcterms:isFormatOf como propiedad de edm:ProvideCHO.  -->
					<xsl:for-each select="dcterms:isFormatOf">
						<dcterms:isFormatOf>
							<xsl:value-of select="."/>
						</dcterms:isFormatOf>
					</xsl:for-each>
					<!-- dc:rights. Esta propiedad normalmente se usa para indicar derechos o limitaciones de acceso a los que se ciñe la copia digital, es decir, corresponderá al recurso web (edm:WebResource), pero a veces se usa para hacer referencia al objeto original (edm:ProvidedCHO). En este último caso, habría que poner estas etiquetas en la sección de edm:ProvidedCHO de este documento, para que en la salida del mapeo quede dc:rights como propiedad de edm:ProvideCHO. -->
					<xsl:for-each select="dc:rights">
						<dc:rights>
							<xsl:if test="@xml:lang">
								<xsl:attribute name="xml:lang">
									<xsl:value-of select="@xml:lang"/>
								</xsl:attribute>
							</xsl:if>
							<xsl:value-of select="."/>
						</dc:rights>
					</xsl:for-each>
					<!-- edm:rights -->
					<xsl:if test="europeana:rights">
						<edm:rights>
							<xsl:attribute name="rdf:resource"><xsl:for-each select="europeana:rights"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
						</edm:rights>
					</xsl:if>
				</edm:WebResource>
			</xsl:when>
			<xsl:otherwise>
				<edm:WebResource>
					<xsl:attribute name="rdf:resource"><xsl:for-each select="europeana:isShownBy"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
					<!-- dc:format. Esta propiedad normalmente corresponderá al recurso web (edm:WebResource), pero podría hacer referencia al objeto original (edm:ProvidedCHO). En este último caso, habría que poner estas etiquetas en la sección de edm:ProvidedCHO de este documento, para que en la salida del mapeo quede dc:format como propiedad de edm:ProvideCHO. -->
					<xsl:for-each select="dc:format">
						<dc:format>
							<xsl:value-of select="."/>
						</dc:format>
					</xsl:for-each>
					<!-- dcterms:isFormatOf. Esta propiedad normalmente corresponderá al recurso web (edm:WebResource), pero podría hacer referencia al objeto original (edm:ProvidedCHO). En este último caso, habría que poner estas etiquetas en la sección de edm:ProvidedCHO de este documento, para que en la salida del mapeo quede dcterms:isFormatOf como propiedad de edm:ProvideCHO. -->
					<xsl:for-each select="dcterms:isFormatOf">
						<dcterms:isFormatOf>
							<xsl:value-of select="."/>
						</dcterms:isFormatOf>
					</xsl:for-each>
					<!-- dc:rights. Esta propiedad normalmente se usa para indicar derechos o limitaciones de acceso a los que se ciñe la copia digital, es decir, corresponderá al recurso web (edm:WebResource), pero a veces se usa para hacer referencia al objeto original (edm:ProvidedCHO). En este último caso, habría que poner estas etiquetas en la sección de edm:ProvidedCHO de este documento, para que en la salida del mapeo quede dc:rights como propiedad de edm:ProvideCHO. -->
					<xsl:for-each select="dc:rights">
						<dc:rights>
							<xsl:if test="@xml:lang">
								<xsl:attribute name="xml:lang">
									<xsl:value-of select="@xml:lang"/>
								</xsl:attribute>
							</xsl:if>
							<xsl:value-of select="."/>
						</dc:rights>
					</xsl:for-each>
					<!-- edm:rights -->
					<xsl:if test="europeana:rights">
						<edm:rights>
							<xsl:attribute name="rdf:resource"><xsl:for-each select="europeana:rights"><xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:attribute>
						</edm:rights>
					</xsl:if>
				</edm:WebResource>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
</xsl:stylesheet>
