Project

General

Profile

1
<RESOURCE_PROFILE>
2
    <HEADER>
3
        <RESOURCE_IDENTIFIER
4
                value="e91fa039-fcd1-4d9b-9c67-2bd3ade35608_VHJhbnNmb3JtYXRpb25SdWxlRFNSZXNvdXJjZXMvVHJhbnNmb3JtYXRpb25SdWxlRFNSZXNvdXJjZVR5cGU="/>
5
        <RESOURCE_TYPE value="TransformationRuleDSResourceType"/>
6
        <RESOURCE_KIND value="TransformationRuleDSResources"/>
7
        <RESOURCE_URI value=""/>
8
        <DATE_OF_CREATION value="2022-10-23T16:28:45+00:00"/>
9
    </HEADER>
10
    <BODY>
11
        <CONFIGURATION>
12
            <SOURCE_METADATA_FORMAT interpretation="cleaned" layout="store" name="odf"/>
13
            <SINK_METADATA_FORMAT name="odf_hbase"/>
14
            <IMPORTED/>
15
            <SCRIPT>
16
                <TITLE>xslt_cleaning_oaire2datacite_hadoop-w3id</TITLE>
17
                <CODE><!-- adaptated from  xslt_cleaning_oaire2datacite_hadoop by Alessia-->
18
                    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
19
                                    xmlns:oaire="http://namespace.openaire.eu/schema/oaire/"
20
                                    xmlns:vocabulary="http://eu/dnetlib/transform/clean"
21
                                    xmlns:dateCleaner="http://eu/dnetlib/transform/dateISO"
22
                                    xmlns:oaf="http://namespace.openaire.eu/oaf"
23
                                    xmlns:oai="http://www.openarchives.org/OAI/2.0/"
24
                                    xmlns:datacite="http://datacite.org/schema/kernel-4"
25
                                    xmlns:dri="http://www.driver-repository.eu/namespace/dri"
26
                                    xmlns:xs="http://www.w3.org/2001/XMLSchema"
27
                                    xmlns:dr="http://www.driver-repository.eu/namespace/dr"
28
                                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
29
                                    xmlns:dc="http://purl.org/dc/elements/1.1/"
30
                                    exclude-result-prefixes="xsl vocabulary dateCleaner" version="2.0">
31
                        <xsl:param name="varOfficialName"/>
32
                        <xsl:param name="varDataSourceId"/>
33
                        <xsl:param name="varAKA" select="'aka_________::'"/>
34
                        <xsl:param name="varARC" select="'arc_________::'"/>
35
                        <xsl:param name="varANR" select="'anr_________::'"/>
36
                        <xsl:param name="varCHISTERA" select="'chistera____::'"/>
37
                        <xsl:param name="varCONICYT" select="'conicytf____::'"/>
38
                        <xsl:param name="varDFG" select="'dfgf________::'"/>
39
                        <xsl:param name="varEUENVAGENCY" select="'euenvagency_::'"/>
40
                        <xsl:param name="varFCT" select="'fct_________::'"/>
41
                        <xsl:param name="varFP7" select="'corda_______::'"/>
42
                        <xsl:param name="varFWF" select="'fwf_________::'"/>
43
                        <xsl:param name="varGSRI" select="'gsri________::'"/>
44
                        <xsl:param name="varGSRT" select="'gsrt________::'"/>
45
                        <xsl:param name="varH2020" select="'corda__h2020::'"/>
46
                        <xsl:param name="varHRZZ" select="'irb_hr______::'"/>
47
                        <xsl:param name="varINNOVIRIS" select="'innoviris___::'"/>
48
                        <xsl:param name="varMESTD" select="'mestd_______::'"/>
49
                        <xsl:param name="varMIUR" select="'miur________::'"/>
50
                        <xsl:param name="varMZOS" select="'irb_hr______::'"/>
51
                        <xsl:param name="varNHMRC" select="'nhmrc_______::'"/>
52
                        <xsl:param name="varNIH" select="'nih_________::'"/>
53
                        <xsl:param name="varNSF" select="'nsf_________::'"/>
54
                        <xsl:param name="varNWO" select="'nwo_________::'"/>
55
                        <xsl:param name="varRIF" select="'rif_________::'"/>
56
                        <xsl:param name="varRSF" select="'rsf_________::'"/>
57
                        <xsl:param name="varSFI" select="'sfi_________::'"/>
58
                        <xsl:param name="varSFRS" select="'sfrs________::'"/>
59
                        <xsl:param name="varSGOV" select="'sgov________::'"/>
60
                        <xsl:param name="varSNSF" select="'snsf________::'"/>
61
                        <xsl:param name="varTARA" select="'taraexp_____::'"/>
62
                        <xsl:param name="varTUBITAK" select="'tubitakf____::'"/>
63
                        <xsl:param name="varUKRI" select="'ukri________::'"/>
64
                        <xsl:param name="varWT" select="'wt__________::'"/>
65
                        <xsl:param name="index" select="0"/>
66
                        <xsl:param name="transDate" select="current-dateTime()"/>
67
                        <xsl:template match="/">
68
                            <xsl:variable name="datasourcePrefix"
69
                                          select="normalize-space(//oaf:datasourceprefix)"/><!-- TODO: termination handling at Spark level must be refined! -->
70
                            <xsl:if test="//oai:header/@status = 'deleted'">
71
                                <xsl:call-template name="terminate"/>
72
                            </xsl:if>
73
                            <xsl:if test="string-length(//*[local-name() = 'date'][1]) &lt; 4">
74
                                <xsl:call-template name="terminate"/>
75
                            </xsl:if>
76
                            <xsl:call-template name="validRecord"/>
77
                        </xsl:template>
78
                        <xsl:template name="terminate">
79
                            <xsl:message terminate="yes">record is not compliant, transformation is interrupted.
80
                            </xsl:message>
81
                        </xsl:template>
82
                        <xsl:template name="validRecord">
83
                            <record>
84
                                <xsl:apply-templates select="//*[local-name() = 'header']"/>
85
                                <metadata><!-- ~~~~~ pre-detect resourceType, superType and store in variable ~~~~~ --><!-- optimize resourceType, superType in case of several statements (e.g. FU Berlin unfortunately contains record with several) --><!--
86
                                         <xsl:variable name='varCobjCategory' select="TransformationFunction:convertString($tf, distinct-values(//*[local-name()='resourceType'][1]/@uri), 'TextTypologies')" />
87
                                         <xsl:variable name="varSuperType" select="TransformationFunction:convertString($tf, $varCobjCategory, 'SuperTypes')"/>
88
                                    -->
89
                                    <xsl:variable name="varTypLst"
90
                                                  select="distinct-values((//*[local-name() = 'resourceType']/(., @*)))"/>
91
                                    <xsl:variable name="varCobjCatLst"
92
                                                  select="                         distinct-values((for $i in $varTypLst                         return                             vocabulary:clean(normalize-space($i), 'dnet:publication_resource')))"/>
93
                                    <xsl:variable name="varCobjSupLst"
94
                                                  select="                         for $i in $varCobjCatLst                         return                             concat($i, '###', vocabulary:clean(normalize-space($i), 'dnet:result_typologies'))"/>
95
                                    <xsl:variable name="varCobjSup"
96
                                                  select="($varCobjSupLst[not(substring-after(., '###') = 'other') and not(substring-before(., '###') = ('0038', '0039', '0040'))][1], $varCobjSupLst[not(substring-after(., '###') = 'other')][1], $varCobjSupLst[not(substring-before(., '###') = ('0020', '0000'))][1], $varCobjSupLst[not(substring-before(., '###') = ('0000'))][1], $varCobjSupLst[not(substring-before(., '###') = ('0000'))][1], '0000')[1]"/>
97
                                    <xsl:variable name="varSuperType" select="substring-after($varCobjSup, '###')"/>
98
                                    <xsl:variable name="varCobjCategory"
99
                                                  select="substring-before($varCobjSup, '###')"/><!-- ~~~~~ pre-detect, -clean, -deduplicat PIDs and store in variable ~~~~~ -->
100
                                    <xsl:variable name="varKnownFileEndings"
101
                                                  select="('.bmp', '.doc', '.docx', '.epub', '.flv', '.jpeg', '.jpg', '.m4v', '.mp4', '.mpg', '.odp', '.pdf', '.png', '.ppt', '.tiv', '.txt', '.xls', '.xlsx', '.zip')"/><!-- landingPage URL --><!-- either generate landing pages (as often not given), or compare URL with baseURL --><!--
102
                                         // covered in comparison: URL encoded baseURLs, item URL und baseURL differing only in prefix www. or postfix port
103
                                         // not covered in comparison: URL encoded item URL, URLs being a substring of URLs (like item URL http://def.br/... and baseURL http://abcdef.br/...), ports when only in baseURL or only in item URL
104
                                         // tries to not consider higher level URLs as item URLs (e.g. journal URLs) by enforcing something after /
105
                                    -->
106
                                    <xsl:variable name="varOrigBaseUrl"
107
                                                  select="//*[local-name() = 'about']/*[local-name() = 'provenance']//*[local-name() = 'originDescription' and not(./*[local-name() = 'originDescription'])]/*[local-name() = 'baseURL']"/>
108
                                    <xsl:variable name="varAggrBaseUrl"
109
                                                  select="//*[local-name() = 'about']/*[local-name() = 'provenance']//*[local-name() = 'originDescription' and (./*[local-name() = 'originDescription'])]/*[local-name() = 'baseURL']"/>
110
                                    <xsl:variable name="varLandingPage"
111
                                                  select="(//datacite:identifier[(contains(substring-after(., '://'), '/') and contains($varOrigBaseUrl, substring-before(substring-after(., '://'), '/'))) or (contains(substring-after(., '://'), ':') and contains($varOrigBaseUrl, substring-before(substring-after(., '://'), ':')))][not(replace(lower-case(.), '.*(\.[a-z]*)$', '$1') = $varKnownFileEndings)], //datacite:identifier[(contains(substring-after(., '://'), '/') and contains($varAggrBaseUrl, substring-before(substring-after(., '://'), '/'))) or (contains(substring-after(., '://'), ':') and contains($varAggrBaseUrl, substring-before(substring-after(., '://'), ':')))][not(replace(lower-case(.), '.*(\.[a-z]*)$', '$1') = $varKnownFileEndings)], //oaf:datasourceprefix[. = 'od_______268']/concat('https://qspace.library.queensu.ca/handle/', substring-after(//dri:recordIdentifier, 'oai:qspace.library.queensu.ca:')), //oaf:datasourceprefix[. = 'od_______307']/concat('http://repositorium.sdum.uminho.pt/handle/', substring-after(//dri:recordIdentifier, 'oai:repositorium.sdum.uminho.pt:')), //oaf:datasourceprefix[. = 'od_______317']/concat('https://papyrus.bib.umontreal.ca/xmlui/handle/', substring-after(//dri:recordIdentifier, 'oai:papyrus.bib.umontreal.ca:')), //oaf:datasourceprefix[. = 'od______1318']/concat('https://orbi.uliege.be/handle/', substring-after(//dri:recordIdentifier, 'oai:orbi.ulg.ac.be:')), //oaf:datasourceprefix[. = 'od______1388']/concat('http://rabida.uhu.es/dspace/handle/', substring-after(//dri:recordIdentifier, 'oai:rabida.uhu.es:')), //oaf:datasourceprefix[. = 'od______1472']/concat('https://gredos.usal.es/handle/', substring-after(//dri:recordIdentifier, 'oai:gredos.usal.es:')), //oaf:datasourceprefix[. = 'od______1560']/concat('https://riunet.upv.es/handle/', substring-after(//dri:recordIdentifier, 'oai:riunet.upv.es:')), //oaf:datasourceprefix[. = 'od______3158']/concat('https://open.uct.ac.za/handle/', substring-after(//dri:recordIdentifier, 'oai:localhost:')), //oaf:datasourceprefix[. = 'od______4225']/concat('https://repository.rothamsted.ac.uk/item/', substring-after(//dri:recordIdentifier, 'oai:repository.rothamsted.ac.uk:')), //oaf:datasourceprefix[. = 'od______9626']/(//datacite:identifier)[@identifierType = 'Handle'][not(contains(., '/handle/123456789/'))], //oaf:datasourceprefix[not(. = ('od_______268', 'od_______307', 'od______1318', 'od______1388', 'od______1472', 'od______4225'))]/(//datacite:identifier, //datacite:alternateIdentifier)[lower-case(@*) = ('url', 'uri')][not(contains(., 'doi.org/')) and not(contains(., '/doi/')) and not(contains(., '/pmc/'))][starts-with(., 'http')])[1]"/><!-- IDs (identifier and alternateIdentifier, not relatedIdentifier) --><!-- container PIDs (ISSNs, ISBNs) often erroneously stuffed in alternateIdentifier for contained items (journal articles, book chapters, ...), are to be shifted into relatedIdentifier instead -->
112
                                    <xsl:variable name="varPidDoi"
113
                                                  select="concat(' DOI:::', string-join(distinct-values(((//datacite:identifier, //datacite:alternateIdentifier)[contains(., 'doi.org/10.')]/lower-case(substring-after(., 'doi.org/')), (//datacite:identifier, //datacite:alternateIdentifier)[contains(., 'info:doi:')]/substring-after(., 'info:doi:'), (//datacite:identifier, //datacite:alternateIdentifier)[lower-case(@*) = 'doi'][not(contains(., 'doi.org/10.')) and not(contains(., 'info:doi:')) and not(contains(., '/doi/'))]/lower-case(.), (//datacite:identifier, //datacite:alternateIdentifier)[matches(., '.*/doi/.*/10\..*')]/replace(., '.*/doi/.*/(10\..*)$', '$1'))), ' DOI:::'))"/>
114
                                    <xsl:variable name="varPidHandle"
115
                                                  select="concat(' Handle:::', string-join(distinct-values(((//datacite:identifier, //datacite:alternateIdentifier)[contains(., 'hdl.handle.net/')][not(contains(., '123456789'))]/substring-after(., 'hdl.handle.net/'), (//datacite:identifier, //datacite:alternateIdentifier)[contains(., 'info:hdl:')][not(contains(., '123456789'))]/substring-after(., 'info:hdl:'), (//datacite:identifier, //datacite:alternateIdentifier)[lower-case(@*) = 'handle'][not(starts-with(., 'http')) and not(contains(., 'hdl.handle.net/')) and not(contains(., 'info:hdl:')) and not(contains(., '/handle/123456789/'))])), ' Handle:::'))"/>
116
                                    <xsl:variable name="varPidUrn"
117
                                                  select="concat(' URN:::', string-join(distinct-values(((//datacite:identifier, //datacite:alternateIdentifier)[starts-with(lower-case(.), 'urn:nbn:')]/concat('urn:nbn:', substring-after(lower-case(.), 'urn:nbn:')), (//datacite:identifier, //datacite:alternateIdentifier)[starts-with(lower-case(.), 'http') and (contains(lower-case(.), '://nbn-resolving.org/urn:nbn:') or contains(lower-case(.), '://nbn-resolving.de/urn/resolver.pl?urn:nbn:') or contains(lower-case(.), '://nbn-resolving.de/urn:nbn:') or contains(lower-case(.), '://resolver.obvsg.at/urn:nbn:') or contains(lower-case(.), '://urn.fi/urn:nbn:') or contains(lower-case(.), '://urn.kb.se/resolve?urn=urn:nbn:'))]/concat('urn:nbn:', substring-after(lower-case(.), 'urn:nbn:')))), ' URN:::'))"/>
118
                                    <xsl:variable name="varPidArk"
119
                                                  select="concat(' ARK:::', string-join(distinct-values(((//datacite:identifier, //datacite:alternateIdentifier)[starts-with(., 'http') and contains(., '/ark:/')]/concat('ark:/', substring-after(., '/ark:/')))), ' ARK:::'))"/>
120
                                    <xsl:variable name="varPidPmid"
121
                                                  select="concat(' PMID:::', string-join(distinct-values(((//datacite:identifier, //datacite:alternateIdentifier)[starts-with(., 'http') and contains(., '://www.ncbi.nlm.nih.gov/pmc/articles/')]/substring-after(., '://www.ncbi.nlm.nih.gov/pmc/articles/'), (//datacite:identifier, //datacite:alternateIdentifier)[starts-with(., 'info:pmid/')]/substring-after(., 'info:pmid/'), (//datacite:identifier, //datacite:alternateIdentifier)[starts-with(lower-case(.), 'pmid:') or starts-with(lower-case(.), 'pubmed:')]/substring-after(., ':'), (//datacite:identifier, //datacite:alternateIdentifier)[lower-case(@*) = 'pmc'][not(contains(., 'ncbi.nlm.nih.gov'))][not(contains(., ':'))], (//datacite:identifier, //datacite:alternateIdentifier)[lower-case(@*) = 'pmid'][not(contains(., ':'))])), ' PMID:::'))"/>
122
                                    <xsl:variable name="varPidPmcid"
123
                                                  select="concat(' PMCID:::', string-join(distinct-values(((//datacite:identifier, //datacite:alternateIdentifier)[starts-with(., 'http') and (contains(lower-case(.), '://www.ncbi.nlm.nih.gov/pmc/articles/pmc') or contains(lower-case(.), '://europepmc.org/articles/pmc'))]/substring-after(., '/articles/'), (//datacite:identifier, //datacite:alternateIdentifier)[starts-with(lower-case(.), 'pmcid:') or starts-with(lower-case(.), 'pmc:')]/substring-after(., ':'), (//datacite:identifier, //datacite:alternateIdentifier)[lower-case(@*) = 'pmcid'])), ' PMCID:::'))"/>
124
                                    <xsl:variable name="varPidHal"
125
                                                  select="concat(' HAL:::', string-join(distinct-values(((//datacite:identifier, //datacite:alternateIdentifier)[lower-case(@*) = 'hal' and (starts-with(., 'hal-') or starts-with(., 'halshs-') or starts-with(., 'halsde-'))], (//datacite:identifier, //datacite:alternateIdentifier)[starts-with(., 'http') and (contains(., '://hal.archives-ouvertes.fr/hal') or contains(., '://hal.inria.fr/hal') or contains(., '://halshs.archives-ouvertes.fr/hal') or contains(., '://halsde.archives-ouvertes.fr/hal'))]/substring-after(., '.fr/'))), ' HAL:::'))"/>
126
                                    <xsl:variable name="varPidBibc"
127
                                                  select="concat(' BIBC:::', string-join(distinct-values(((//datacite:identifier, //datacite:alternateIdentifier)[starts-with(lower-case(.), 'bibcode:')]/substring-after(lower-case(.), 'bibcode:'), (//datacite:identifier, //datacite:alternateIdentifier)[starts-with(., 'http') and contains(lower-case(.), 'bibcode=')]/substring(substring-after(lower-case(.), 'bibcode='), 1, 19))), ' BIBC:::'))"/>
128
                                    <xsl:variable name="varPidArxiv"
129
                                                  select="concat(' arXiv:::', string-join(distinct-values(((//datacite:identifier, //datacite:alternateIdentifier)[starts-with(lower-case(.), 'arxiv:')]/substring-after(lower-case(.), 'arxiv:'), (//datacite:identifier, //datacite:alternateIdentifier)[(starts-with(., 'http') or starts-with(lower-case(.), 'arxiv: http')) and contains(., '://arxiv.org/abs/')]/substring-after(., '://arxiv.org/abs/'), (//datacite:identifier, //datacite:alternateIdentifier)[(starts-with(., 'http') or starts-with(lower-case(.), 'arxiv: http')) and contains(., '://arxiv.org/pdf/')]/substring-before(substring-after(lower-case(.), '://arxiv.org/pdf/'), '.pdf'), (//datacite:identifier, //datacite:alternateIdentifier)[lower-case(@*) = 'arxiv'])), ' arXiv:::'))"/>
130
                                    <xsl:variable name="varPidWos"
131
                                                  select="concat(' WOS:::', string-join(distinct-values(((//datacite:identifier, //datacite:alternateIdentifier)[lower-case(@*) = 'wos'][not(starts-with(lower-case(.), 'wos:'))], (//datacite:identifier, //datacite:alternateIdentifier)[starts-with(lower-case(.), 'wos:') and not(starts-with(lower-case(.), 'wos: wos:'))]/substring-after(lower-case(.), 'wos:'), (//datacite:identifier, //datacite:alternateIdentifier)[starts-with(lower-case(.), 'wos: wos:')]/substring-after(lower-case(.), 'wos: wos:'))), ' WOS:::'))"/>
132
                                    <xsl:variable name="varPidScp"
133
                                                  select="concat(' SCP:::', string-join(distinct-values(((//datacite:identifier, //datacite:alternateIdentifier)[starts-with(lower-case(.), 'scopus_id:') or starts-with(lower-case(.), 'scopus:')]/substring-after(., ':'), (//datacite:identifier, //datacite:alternateIdentifier)[starts-with(normalize-space(.), 'scopus: eid=')]/substring-after(., 'eid=2-s2.0-'), (//datacite:identifier, //datacite:alternateIdentifier)[starts-with(normalize-space(.), 'http') and contains(., '://www.scopus.com/inward/record.ur') and contains(., 'scp=')]/substring-after(., 'scp='), (//datacite:identifier, //datacite:alternateIdentifier)[starts-with(normalize-space(.), 'http') and contains(., '://www.scopus.com/inward/record.ur') and contains(., 'eid=2-s2.0-')]/substring-after(., 'eid=2-s2.0-'))), ' SCP:::'))"/>
134
                                    <xsl:variable name="varPidUrl"
135
                                                  select="concat(' URL:::', string-join(distinct-values(((//datacite:identifier, //datacite:alternateIdentifier)[lower-case(@*) = 'url'][not(contains(., 'doi.org/10.')) and not(contains(., 'info:doi:')) and not(matches(., '.*/doi/.*/10\..*'))][not(contains(., 'hdl.handle.net/')) and not(contains(., 'info:hdl:'))][not(contains(., '://www.ncbi.nlm.nih.gov/pmc/articles/'))][not(. = $varLandingPage)])), ' URL:::'))"/>
136
                                    <xsl:variable name="varPidIsbn"
137
                                                  select="concat(' ISBN:::', string-join(distinct-values(((//datacite:identifier, //datacite:alternateIdentifier)[lower-case(@*) = 'isbn' and not(contains(., ':')) and not($varCobjCategory = '0013')], (//datacite:identifier, //datacite:alternateIdentifier)[lower-case(@*) = 'isbn' and starts-with(lower-case(.), 'urn:isbn') and not($varCobjCategory = '0013')]/substring-after(lower-case(.), 'urn:isbn:'))), ' ISBN:::'))"/>
138
                                    <xsl:variable name="varPidIssn"
139
                                                  select="string-join(distinct-values(((//datacite:identifier, //datacite:alternateIdentifier)[lower-case(@*) = ('issn', 'pissn', 'eissn', 'lissn') and matches(., '.*\d{4}[\s-]?\d{3}[\dXx].*') and not($varCobjCategory = '0001')]/concat(' ', upper-case((@identifierType, @alternateIdentifierType)), ':::', replace(., '^.*(\d{4})[\s-]?(\d{3}[\dXx]).*$', '$1-$2')))), '')"/>
140
                                    <xsl:variable name="varPidW3id"
141
                                                  select="concat(' w3id:::', string-join(distinct-values((                                     (//datacite:identifier)[@identifierType='w3id']/text(), ' w3id:::'))))"/><!-- heap all IDs, drop landingPage URL -->
142
                                    <xsl:variable name="varPidPre"
143
                                                  select="concat($varPidDoi[not(. = ' DOI:::')], $varPidHandle[not(. = ' Handle:::')], $varPidUrn[not(. = ' URN:::')], $varPidArk[not(. = ' ARK:::')], $varPidPmid[not(. = ' PMID:::')], $varPidPmcid[not(. = ' PMCID:::')], $varPidHal[not(. = ' HAL:::')], $varPidBibc[not(. = ' BIBC:::')], $varPidArxiv[not(. = ' arXiv:::')], $varPidWos[not(. = ' WOS:::')], $varPidScp[not(. = ' SCP:::')], $varPidUrl[not(. = ' URL:::')], $varPidIsbn[not(. = ' ISBN:::')], $varPidIssn[not(. = ' ISSN:::')], $varPidW3id[not(. = ' w3id:::')])"/><!--
144
                                         <xsl:variable name="varPid" select="concat($varPidPre, $varLandingPage[string-length($varPidPre) = 0]/concat('landingPage:::', .))"/>
145
                                         <xsl:variable name="varPid" select="concat($varPidPre, concat(' landingPage:::', $varLandingPage[string-length($varPidPre) = 0], .))"/>
146
                                    -->
147
                                    <xsl:variable name="varPid"
148
                                                  select="concat($varPidPre, //oaf:datasourceprefix[string-length($varPidPre) = 0]/concat(' landingPage:::', $varLandingPage))"/><!-- relatedIdentifier --><!-- container PIDs (ISSNs, ISBNs) often erroneously stuffed in alternateIdentifier for contained items (journal articles, book chapters, ...), are to be shifted into relatedIdentifier instead -->
149
                                    <xsl:variable name="varRelPidDoi"
150
                                                  select="concat(' DOI:::', string-join(distinct-values(((//datacite:relatedIdentifier)[contains(., 'doi.org/10.')]/concat(lower-case(substring-after(., 'doi.org/')), ':::', @relationType), (//datacite:relatedIdentifier)[contains(., 'info:doi:')]/concat(substring-after(., 'info:doi:'), ':::', @relationType), (//datacite:relatedIdentifier)[@relatedIdentifierType = 'DOI'][not(contains(., 'doi.org/10.')) and not(contains(., 'info:doi:')) and not(contains(., '/doi/'))]/concat(lower-case(.), ':::', @relationType), (//datacite:relatedIdentifier)[matches(., '.*/doi/.*/10\..*')]/concat(replace(., '.*/doi/.*/(10\..*)$', '$1'), ':::', @relationType))), ' DOI:::'))"/>
151
                                    <xsl:variable name="varRelPidHandle"
152
                                                  select="concat(' Handle:::', string-join(distinct-values(((//datacite:relatedIdentifier)[contains(., 'hdl.handle.net/')]/concat(substring-after(., 'hdl.handle.net/'), ':::', @relationType), (//datacite:relatedIdentifier)[contains(., 'info:hdl:')]/concat(substring-after(., 'info:hdl:'), ':::', @relationType), (//datacite:relatedIdentifier)[lower-case(@relatedIdentifierType) = 'handle'][not(contains(., 'hdl.handle.net/')) and not(contains(., 'info:hdl:'))]/concat(., ':::', @relationType))), ' Handle:::'))"/>
153
                                    <xsl:variable name="varRelPidPmid"
154
                                                  select="concat(' PMID:::', string-join(distinct-values(((//datacite:relatedIdentifier)[contains(., '://www.ncbi.nlm.nih.gov/pmc/articles/')]/concat(substring-after(., '://www.ncbi.nlm.nih.gov/pmc/articles/'), ':::', @relationType), (//datacite:relatedIdentifier)[lower-case(@*) = 'pmc'][not(contains(., 'ncbi.nlm.nih.gov'))]/concat(., ':::', @relationType))), ' PMID:::'))"/>
155
                                    <xsl:variable name="varRelPidPmcid"
156
                                                  select="concat(' PMCID:::', string-join(distinct-values(((//datacite:relatedIdentifier)[lower-case(@*) = 'pmcid']/concat(., ':::', @relationType))), ' PMCID:::'))"/>
157
                                    <xsl:variable name="varRelPidArxiv"
158
                                                  select="concat(' arXiv:::', string-join(distinct-values(((//datacite:relatedIdentifier)[lower-case(@*) = 'arxiv']/concat(., ':::', @relationType))), ' arXiv:::'))"/>
159
                                    <xsl:variable name="varRelPidWos"
160
                                                  select="concat(' WOS:::', string-join(distinct-values(((//datacite:relatedIdentifier)[lower-case(@*) = 'wos'][not(starts-with(lower-case(.), 'wos:'))]/concat(., ':::', @relationType), (//datacite:relatedIdentifier)[starts-with(lower-case(.), 'wos:')]/concat(substring-after(lower-case(.), 'wos:'), ':::', @relationType))), ' WOS:::'))"/>
161
                                    <xsl:variable name="varRelPidW3id"
162
                                                  select="concat(' w3id:::', string-join(distinct-values(((//datacite:relatedIdentifier)[lower-case(@*) = 'w3id'][not(starts-with(lower-case(.), 'w3id:'))]/concat(., ':::', @relationType), (//datacite:relatedIdentifier)[starts-with(lower-case(.), 'w3id:')]/concat(substring-after(lower-case(.), 'w3id:'), ':::', @relationType))), ' w3id:::'))"/>
163
                                    <xsl:variable name="varRelPidUrl"
164
                                                  select="concat(' URL:::', string-join(distinct-values(((//datacite:relatedIdentifier)[lower-case(@*) = 'url'][not(contains(., 'doi.org/10.')) and not(contains(., 'info:doi:')) and not(matches(., '.*/doi/.*/10\..*'))][not(contains(., 'hdl.handle.net/')) and not(contains(., 'info:hdl:'))][not(contains(., '://www.ncbi.nlm.nih.gov/pmc/articles/'))]/concat(., ':::', @relationType))), ' URL:::'))"/><!-- xsl:variable name="varRelPid" select="concat($varRelPidDoi[not(. = ' DOI:::')], $varRelPidHandle[not(. = ' Handle:::')], $varRelPidPmid[not(. = ' PMID:::')], $varRelPidPmcid[not(. = ' PMCID:::')], $varRelPidArxiv[not(. = ' arXiv:::')], $varRelPidWos[not(. = ' WOS:::')], $varRelPidUrl[not(. = ' URL:::')])"/ -->
165
                                    <xsl:variable name="varRelPid"
166
                                                  select="concat($varRelPidDoi[not(. = ' DOI:::')], $varRelPidHandle[not(. = ' Handle:::')], $varRelPidPmid[not(. = ' PMID:::')], $varRelPidPmcid[not(. = ' PMCID:::')], $varRelPidArxiv[not(. = ' arXiv:::')], $varRelPidWos[not(. = ' WOS:::')], $varRelPidW3id[not(. = ' w3id:::')], $varRelPidUrl[not(. = ' URL:::')])"/><!-- container PIDs --><!-- TODO --><!-- drop oaire resource --><!-- <oaire:resource xmlns="http://namespace.openaire.eu/schema/oaire/"> --><!-- container PIDs --><!-- TODO --><!-- drop oaire resource --><!-- <oaire:resource xmlns="http://namespace.openaire.eu/schema/oaire/"> -->
167
                                    <datacite:resource><!-- ~~~~~ IDs ~~~~~ --><!-- choose 'best' PID among identifiers and alternateIdentifers, and cut off DOI resolver prefix to just get the number part -->
168
                                        <datacite:identifier>
169
                                            <xsl:attribute name="identifierType"
170
                                                           select="substring-before(tokenize(normalize-space($varPid), ' ')[1], ':::')"/>
171
                                            <xsl:value-of
172
                                                    select="substring-after(tokenize(normalize-space($varPid), ' ')[1], ':::')"/>
173
                                        </datacite:identifier>
174
                                        <datacite:alternateIdentifiers>
175
                                            <xsl:for-each
176
                                                    select="tokenize(normalize-space($varPid), ' ')[position() &gt; 1][string-length(substring-after(., ':::')) &gt; 0]">
177
                                                <datacite:alternateIdentifier>
178
                                                    <xsl:attribute name="alternateIdentifierType"
179
                                                                   select="substring-before(., ':::')"/>
180
                                                    <xsl:value-of select="substring-after(., ':::')"/>
181
                                                </datacite:alternateIdentifier>
182
                                            </xsl:for-each>
183
                                            <xsl:for-each
184
                                                    select="(//datacite:alternateIdentifier, //datacite:identifier)[not($varCobjCategory = '0001' and ./@*[local-name() = ('identifierType', 'alternateIdentifierType')]/lower-case(.) = ('issn', 'pissn', 'eissn', 'lissn'))][not($varCobjCategory = '0013' and ./@*[local-name() = ('identifierType', 'alternateIdentifierType')]/lower-case(.) = 'isbn')][not(ends-with(., 'pdf'))][not(@*[local-name() = ('identifierType', 'alternateIdentifierType')]/lower-case(.) = ('doi', 'handle', 'urn', 'pmid', 'pmcid', 'arxiv', 'wos', 'url', 'isbn', 'issn', 'eissn', 'lissn', 'pissn'))][not(. = $varLandingPage)]">
185
                                                <datacite:alternateIdentifier>
186
                                                    <xsl:attribute name="alternateIdentifierType"
187
                                                                   select="./@*[local-name() = ('identifierType', 'alternateIdentifierType')]"/>
188
                                                    <xsl:value-of select="."/>
189
                                                </datacite:alternateIdentifier>
190
                                            </xsl:for-each>
191
                                            <xsl:if test="not(starts-with(normalize-space(lower-case($varPid)), 'landingpage')) and string-length($varLandingPage) &gt; 0">
192
                                                <datacite:alternateIdentifier>
193
                                                    <xsl:attribute name="alternateIdentifierType"
194
                                                                   select="'landingPage'"/>
195
                                                    <xsl:value-of select="$varLandingPage"/>
196
                                                </datacite:alternateIdentifier>
197
                                            </xsl:if>
198
                                        </datacite:alternateIdentifiers>
199
                                        <datacite:relatedIdentifiers>
200
                                            <xsl:for-each
201
                                                    select="(//datacite:relatedIdentifier)[not(@relatedIdentifierType/lower-case(.) = ('doi', 'handle', 'pmid', 'pmcid', 'wos', 'url'))][not(starts-with(lower-case(.), 'wos:') or contains(., 'hdl.handle.net/') or contains(., 'doi.org/10.'))][not(@relatedIdentifierType/lower-case(.) = ('issn', 'pissn', 'eissn', 'lissn', 'isbn') and @relationType/lower-case(.) = 'ispartof')]">
202
                                                <datacite:relatedIdentifier>
203
                                                    <xsl:attribute name="relatedIdentifierType"
204
                                                                   select="./@relatedIdentifierType"/>
205
                                                    <xsl:attribute name="relationType" select="./@relationType"/>
206
                                                    <xsl:value-of
207
                                                            select=".[not(@relatedIdentifierType/lower-case(.) = ('issn', 'pissn', 'eissn', 'lissn'))], .[@relatedIdentifierType/lower-case(.) = ('issn', 'pissn', 'eissn', 'lissn')]/concat(substring(., 1, 4), '-', substring(., string-length(.) - 3, 4))"/>
208
                                                </datacite:relatedIdentifier>
209
                                            </xsl:for-each>
210
                                        </datacite:relatedIdentifiers><!-- change namespace/format from oaire to datacite for description, language, rights, ... -->
211
                                        <xsl:for-each select="//oaire:resourceType">
212
                                            <datacite:resourceType>
213
                                                <xsl:attribute name="xs:anyURI" select="@uri"/>
214
                                                <xsl:value-of select="."/>
215
                                            </datacite:resourceType>
216
                                        </xsl:for-each>
217
                                        <xsl:for-each select="distinct-values(//oaire:version)">
218
                                            <datacite:version>
219
                                                <xsl:value-of select="."/>
220
                                            </datacite:version>
221
                                        </xsl:for-each>
222
                                        <xsl:if test="(//datacite:rights, //oaire:licenseCondition)[string-length(.) &gt; 0 or string-length(@rightsURI) &gt; 0 or string-length(@uri) &gt; 0]">
223
                                            <datacite:rightsList>
224
                                                <xsl:for-each
225
                                                        select="(//datacite:rights | //oaire:licenseCondition)[string-length(.) &gt; 0 or string-length(@rightsURI) &gt; 0 or string-length(@uri) &gt; 0]">
226
                                                    <datacite:rights>
227
                                                        <xsl:attribute name="rightsURI" select="(@rightsURI, @uri)[1]"/>
228
                                                        <xsl:value-of select="."/>
229
                                                    </datacite:rights>
230
                                                </xsl:for-each>
231
                                            </datacite:rightsList>
232
                                        </xsl:if>
233
                                        <xsl:if test="//datacite:title">
234
                                            <datacite:titles>
235
                                                <xsl:for-each select="//datacite:title">
236
                                                    <datacite:title>
237
                                                        <xsl:for-each select="@*">
238
                                                            <xsl:copy/>
239
                                                        </xsl:for-each>
240
                                                        <xsl:value-of select="."/>
241
                                                    </datacite:title>
242
                                                </xsl:for-each>
243
                                            </datacite:titles>
244
                                        </xsl:if>
245
                                        <xsl:if test="//dc:description">
246
                                            <datacite:descriptions>
247
                                                <xsl:for-each select="//dc:description">
248
                                                    <datacite:description>
249
                                                        <xsl:attribute name="descriptionType" select="'Abstract'"/>
250
                                                        <xsl:for-each select="@*">
251
                                                            <xsl:copy/>
252
                                                        </xsl:for-each>
253
                                                        <xsl:value-of select="."/>
254
                                                    </datacite:description>
255
                                                </xsl:for-each>
256
                                            </datacite:descriptions>
257
                                        </xsl:if>
258
                                        <xsl:for-each
259
                                                select="distinct-values(//dc:language)[string-length(normalize-space(.)) &gt; 0]">
260
                                            <datacite:language>
261
                                                <xsl:value-of select="normalize-space(.)"/>
262
                                            </datacite:language>
263
                                        </xsl:for-each>
264
                                        <xsl:for-each
265
                                                select="distinct-values(//dc:publisher)[string-length(normalize-space(.)) &gt; 0]">
266
                                            <datacite:publisher>
267
                                                <xsl:value-of select="normalize-space(.)"/>
268
                                            </datacite:publisher>
269
                                        </xsl:for-each>
270
                                        <xsl:if test="//dc:format[string-length(normalize-space(.)) &gt; 0]">
271
                                            <datacite:formats>
272
                                                <xsl:for-each
273
                                                        select="distinct-values(//dc:format)[string-length(normalize-space(.)) &gt; 0]">
274
                                                    <datacite:format>
275
                                                        <xsl:value-of select="normalize-space(.)"/>
276
                                                    </datacite:format>
277
                                                </xsl:for-each>
278
                                            </datacite:formats>
279
                                        </xsl:if>
280
                                        <xsl:if test="//oaire:fundingReference[./oaire:awardNumber]">
281
                                            <datacite:fundingReferences>
282
                                                <xsl:for-each select="//oaire:fundingReference[./oaire:awardNumber]">
283
                                                    <datacite:fundingReference>
284
                                                        <datacite:funderName>
285
                                                            <xsl:value-of select="./oaire:funderName"/>
286
                                                        </datacite:funderName>
287
                                                        <datacite:funderIdentifier>
288
                                                            <xsl:attribute name="funderIdentifierType"
289
                                                                           select="'Crossref Funder ID'"/>
290
                                                            <xsl:value-of select="./oaire:funderIdentifier"/>
291
                                                        </datacite:funderIdentifier>
292
                                                        <datacite:awardNumber>
293
                                                            <xsl:value-of select="./oaire:awardNumber"/>
294
                                                        </datacite:awardNumber><!--<xsl:value-of select="."/>-->
295
                                                    </datacite:fundingReference>
296
                                                </xsl:for-each>
297
                                            </datacite:fundingReferences>
298
                                        </xsl:if>
299
                                        <xsl:apply-templates
300
                                                select="(//*[local-name() = 'resource'], //*[local-name() = 'oai_openaire'])/*[not(local-name() = ('identifier', 'alternateIdentifiers', 'alternateIdentifier', 'relatedIdentifiers', 'relatedIdentifier', 'description', 'titles', 'title', 'language', 'publisher', 'resourceType', 'version', 'fundingReferences', 'fundingReference', 'rights', 'licenseCondition', 'file', 'format', 'audience', 'source', 'coverage'))][not(starts-with(local-name(), 'citation'))]"/><!-- </oaire:resource> -->
301
                                    </datacite:resource><!-- ~~~~~ put oaf elements below datacite:resource ~~~~~ --><!-- oaf:identifier -->
302
                                    <xsl:for-each
303
                                            select="tokenize(normalize-space($varPid), ' ')[string-length(substring-after(normalize-space(.), ':::')) &gt; 0]">
304
                                        <oaf:identifier>
305
                                            <xsl:attribute name="identifierType"
306
                                                           select="substring-before(normalize-space(.), ':::')"/>
307
                                            <xsl:value-of select="substring-after(normalize-space(.), ':::')"/>
308
                                        </oaf:identifier>
309
                                    </xsl:for-each>
310
                                    <xsl:if test="not(starts-with(normalize-space(lower-case($varPid)), 'landingpage')) and string-length($varLandingPage) &gt; 0">
311
                                        <oaf:identifier>
312
                                            <xsl:attribute name="identifierType" select="'landingPage'"/>
313
                                            <xsl:value-of select="$varLandingPage"/>
314
                                        </oaf:identifier>
315
                                    </xsl:if>
316
                                    <xsl:if test="//*[local-name() = 'about']/*[local-name() = 'provenance']/*[local-name() = 'originDescription']/*[local-name() = 'originDescription']/*[local-name() = 'identifier' and string-length(.) &gt; 0]">
317
                                        <oaf:identifier>
318
                                            <xsl:attribute name="identifierType" select="'oai-original'"/>
319
                                            <xsl:value-of
320
                                                    select="//*[local-name() = 'about']/*[local-name() = 'provenance']//*[local-name() = 'originDescription' and not(./*[local-name() = 'originDescription'])]/*[local-name() = 'identifier']"/>
321
                                        </oaf:identifier>
322
                                    </xsl:if>
323

    
324

    
325
                                    <dr:CobjCategory>
326
                                        <xsl:variable name="varCobjCategory" select="vocabulary:clean( //*[local-name()='resourceType']/text(), 'dnet:publication_resource')"/>
327
                                        <xsl:variable name="varSuperType" select="vocabulary:clean( $varCobjCategory, 'dnet:result_typologies')"/>
328
                                        <xsl:if test="not(number($varCobjCategory) &gt; 0)">
329
                                            <xsl:variable name="varCobjCategory" select="'0000'"/>
330
                                            <xsl:variable name="varSuperType" select="'other'"/>
331
                                        </xsl:if>
332
                                        <xsl:attribute name="type">
333
                                            <xsl:value-of select="$varSuperType"/>
334
                                        </xsl:attribute>
335
                                        <xsl:value-of select="$varCobjCategory"/>
336
                                    </dr:CobjCategory>
337

    
338
                                       <!-- review status -->
339
                                    <xsl:variable name="varRefereedConvt"
340
                                                  select="                         for $i in (//*[local-name() = 'resourceType']/(., @uri), //oai:setSpec, //*[local-name() = 'description'])                         return                             vocabulary:clean(normalize-space($i), 'dnet:review_levels')"/>
341
                                    <xsl:variable name="varRefereedIdntf"
342
                                                  select="(//*[local-name() = ('identifier', 'alternateIdentifier', 'file')][count(//*[local-name() = ('metadata', 'resource')]//*[local-name() = ('identifier', 'alternateIdentifier', 'file')]) = 1][matches(lower-case(.), '(^|.*[\.\-_\\/\s\(\)%\d#:])pre[\.\-_\\/\s\(\)%\d#:]?prints?([\.\-_\\/\s\(\)%\d#:].*)?$')]/'0002', //*[local-name() = ('identifier', 'alternateIdentifier', 'file')][count(//*[local-name() = ('metadata', 'resource')]//*[local-name() = ('identifier', 'alternateIdentifier', 'file')]) = 1][matches(lower-case(.), '(^|.*[\.\-_\\/\s\(\)%\d#:])refereed([\.\-_\\/\s\(\)%\d#:].*)?$')]/'0001', //*[local-name() = ('identifier', 'alternateIdentifier', 'file')][count(//*[local-name() = ('metadata', 'resource')]//*[local-name() = ('identifier', 'alternateIdentifier', 'file')]) = 1][matches(lower-case(.), '.*-peer-reviewed-(fulltext-)?article-.*')]/'0001')"/>
343
                                    <xsl:variable name="varRefereedSourc"
344
                                                  select="(//*[local-name() = ('publisher', 'source', 'citationTitle')][matches(lower-case(.), '.*[\s\-\.\\_/:%]pre[\s\-\.\\_/:%]?prints?([\s\-\.\\_/:%].*|$)')]/'0002')"/>
345
                                    <xsl:variable name="varRefereedReltn"
346
                                                  select="//*[local-name() = 'relatedIdentifier'][./@relationType/lower-case(.) = 'isreviewedby']/'0001'"/>
347
                                    <xsl:variable name="varRefereedDesct"
348
                                                  select="(//*[local-name() = 'description'][matches(lower-case(.), '.*(this\s*book|this\s*volume|it)\s*(constitutes|presents)\s*the\s*(thoroughly\s*)?refereed') or matches(lower-case(.), '.*peer[\.\-_/\s\(\)]?review\s*under\s*responsibility\s*of.*') or matches(lower-case(.), '(this|a)\s*(article|preprint)\s*(has\s*been\s*)?(peer[\-\s]*)?reviewed\s*and\s*recommended\s*by\s*peer[\-\s]*community')]/'0001')"/>
349
                                    <xsl:variable name="varRefereedTitle"
350
                                                  select="(//*[local-name() = ('title')][matches(lower-case(.), '.*\[.*peer[\s\-\._]*review\s*:.*\]\s*$')]/'0001')"/>
351
                                    <xsl:variable name="varRefereedVersn"
352
                                                  select="vocabulary:clean(normalize-space(//*[local-name() = 'version']), 'dnet:review_levels')"/>
353
                                    <xsl:variable name="varRefereed"
354
                                                  select="($varRefereedConvt, $varRefereedIdntf, $varRefereedSourc, $varRefereedReltn, $varRefereedDesct, $varRefereedTitle, $varRefereedVersn)"/>
355
                                    <xsl:choose>
356
                                        <xsl:when test="count($varRefereed[. = '0001']) &gt; 0">
357
                                            <oaf:refereed>
358
                                                <xsl:value-of select="'0001'"/>
359
                                            </oaf:refereed>
360
                                        </xsl:when>
361
                                        <xsl:when test="count($varRefereed[. = '0002']) &gt; 0">
362
                                            <oaf:refereed>
363
                                                <xsl:value-of select="'0002'"/>
364
                                            </oaf:refereed>
365
                                        </xsl:when>
366
                                    </xsl:choose>
367
                                    <oaf:dateAccepted>
368
                                        <xsl:value-of
369
                                                select="dateCleaner:dateISO(normalize-space(//datacite:date[@dateType = 'Issued']))"/>
370
                                    </oaf:dateAccepted>
371
                                    <xsl:variable name="varEmbargoEndDate"
372
                                                  select="dateCleaner:dateISO(normalize-space(//*[local-name() = 'date'][@dateType = 'Available']))"/>
373
                                    <xsl:variable name="varAccessRights"
374
                                                  select="                         string-join((for $i in ((//*[local-name() = 'rights'], //*[lower-case(local-name()) = 'licensecondition'])/(@*, .))                         return                             vocabulary:clean($i, 'dnet:access_modes')), ' ')"/>
375
                                    <oaf:accessrights>
376
                                        <xsl:choose>
377
                                            <xsl:when test="contains($varAccessRights, 'OPEN SOURCE')">
378
                                                <xsl:value-of select="'OPEN SOURCE'"/>
379
                                            </xsl:when>
380
                                            <xsl:when test="contains($varAccessRights, 'OPEN')">
381
                                                <xsl:value-of select="'OPEN'"/>
382
                                            </xsl:when>
383
                                            <xsl:when
384
                                                    test="contains($varAccessRights, 'EMBARGO') and not((xs:date(max(($varEmbargoEndDate, '0001-01-01'))) gt current-date()))">
385
                                                <xsl:value-of select="'OPEN'"/>
386
                                            </xsl:when>
387
                                            <xsl:when
388
                                                    test="contains($varAccessRights, 'EMBARGO') and (xs:date(max(($varEmbargoEndDate, '0001-01-01'))) gt current-date())">
389
                                                <xsl:value-of select="'EMBARGO'"/>
390
                                            </xsl:when>
391
                                            <xsl:when test="contains($varAccessRights, 'RESTRICTED')">
392
                                                <xsl:value-of select="'RESTRICTED'"/>
393
                                            </xsl:when>
394
                                            <xsl:when test="contains($varAccessRights, 'CLOSED')">
395
                                                <xsl:value-of select="'CLOSED'"/>
396
                                            </xsl:when>
397
                                        </xsl:choose>
398
                                    </oaf:accessrights>
399
                                    <xsl:for-each
400
                                            select="//*[local-name() = 'licenseCondition'][string-length(.) &gt; 0 or string-length(@uri) &gt; 0][(starts-with(@uri, 'http') and (contains(@uri, '://creativecommons.org/licenses/') or contains(@uri, '://creativecommons.org/publicdomain/') or contains(@uri, '://opensource.org/licenses/') or contains(@uri, '://opendatacommons.org/licenses/') or contains(@uri, '://rightsstatements.org/page/') or contains(@uri, '://rightsstatements.org/vocab/') or contains(@uri, '://www.opendefinition.org/licenses/') or contains(@uri, '://www.gnu.org/licenses/') or contains(@uri, '://artlibre.org/licence/') or contains(@uri, '://repositorio.uca.edu.sv/jspui/licencias/') or contains(@uri, '://bibliotecavirtual.unl.edu.ar/licencia/'))) or matches(., '^CC[- ]BY([- ](NC([- ](ND|SA))?|ND|SA))([- ]\d(\.\d)?)?$', 'i')]">
401
                                        <oaf:license>
402
                                            <xsl:value-of select=".[not(./@uri)], .[./@uri]/@uri"/>
403
                                        </oaf:license>
404
                                    </xsl:for-each>
405
                                    <oaf:language>
406
                                        <xsl:value-of
407
                                                select="vocabulary:clean(//*[local-name() = 'language'], 'dnet:languages')"/>
408
                                    </oaf:language>
409
                                    <xsl:call-template name="funding"/>
410
                                    <oaf:hostedBy>
411
                                        <xsl:attribute name="name">
412
                                            <xsl:value-of select="$varOfficialName"/>
413
                                        </xsl:attribute>
414
                                        <xsl:attribute name="id">
415
                                            <xsl:value-of select="$varDataSourceId"/>
416
                                        </xsl:attribute>
417
                                    </oaf:hostedBy>
418
                                    <oaf:collectedFrom>
419
                                        <xsl:attribute name="name">
420
                                            <xsl:value-of select="$varOfficialName"/>
421
                                        </xsl:attribute>
422
                                        <xsl:attribute name="id">
423
                                            <xsl:value-of select="$varDataSourceId"/>
424
                                        </xsl:attribute>
425
                                    </oaf:collectedFrom>
426
                                    <xsl:for-each select="//*[local-name()='subject']">
427
                                        <xsl:if test="starts-with(./text(), 'EOSC::')">
428
                                            <oaf:eoscifguidelines>
429
                                                <xsl:attribute name="code" select="./text()"/>
430
                                                <xsl:attribute name="label" select="./text()"/>
431
                                                <xsl:attribute name="url"/>
432
                                                <xsl:attribute name="semanticrelation" select="string('compliesWith')"/>
433
                                            </oaf:eoscifguidelines>
434
                                        </xsl:if>
435
                                    </xsl:for-each>
436
                                </metadata>
437
                                <xsl:copy-of select="//*[local-name() = 'about']"/>
438
                            </record>
439
                        </xsl:template>
440
                        <!-- Remove EOSC:: subjects, they need to go to eoscifguidelines  -->
441
                        <xsl:template match="//*[local-name()='subject' and starts-with(./text(), 'EOSC::')]"/>
442
                        <xsl:template match="node() | @*">
443
                            <xsl:copy copy-namespaces="no">
444
                                <xsl:apply-templates select="node() | @*"/>
445
                            </xsl:copy>
446
                        </xsl:template>
447
                        <xsl:template match="//*[local-name() = 'metadata']//*[local-name() = 'resource']">
448
                            <xsl:copy copy-namespaces="no">
449
                                <xsl:apply-templates select="node() | @*"/>
450
                            </xsl:copy>
451
                        </xsl:template>
452
                        <xsl:template name="funding"><!-- funding -->
453
                            <xsl:for-each
454
                                    select="//*[local-name() = 'fundingReference'][./*[local-name() = 'awardNumber']]">
455
                                <xsl:choose><!-- FP7 -->
456
                                    <xsl:when
457
                                            test="(./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100004963|10.13039/100011199|10.13039/100011102)\s*$')] or (./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100000780)$')] and ./*[local-name() = 'fundingStream'] = ('Framework Programme Seven', 'FP7')) or (./*[local-name() = 'funderName'] = 'European Commission' and ./*[local-name() = 'fundingStream'] = ('Framework Programme Seven', 'FP7'))) and ./*[local-name() = 'awardNumber'][matches(., '.*(^|[^\d])\d\d\d\d\d\d($|[^\d]).*')]">
458
                                        <oaf:projectid>
459
                                            <xsl:value-of
460
                                                    select="concat($varFP7, replace(./*[local-name() = 'awardNumber'], '.*(^|[^\d])(\d\d\d\d\d\d)($|[^\d]).*', '$2'))"/>
461
                                        </oaf:projectid>
462
                                    </xsl:when><!-- H2020 (Horizon 2020 Framework Programme) --><!-- -->
463
                                    <xsl:when
464
                                            test="(./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/100010661)\s*')] or (./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100000780)$')] and ./*[local-name() = 'fundingStream'] = ('Horizon 2020 Framework Programme', 'H2020')) or (./*[local-name() = 'funderName'] = 'European Commission' and ./*[local-name() = 'fundingStream'] = ('Horizon 2020 Framework Programme', 'H2020'))) and ./*[local-name() = 'awardNumber'][matches(., '.*(^|[^\d])\d\d\d\d\d\d($|[^\d]).*')]">
465
                                        <oaf:projectid>
466
                                            <xsl:value-of
467
                                                    select="concat($varH2020, replace(./*[local-name() = 'awardNumber'], '.*(^|[^\d])(\d\d\d\d\d\d)($|[^\d]).*', '$2'))"/>
468
                                        </oaf:projectid>
469
                                    </xsl:when><!-- AKA -->
470
                                    <xsl:when
471
                                            test="./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100002341)\s*$')] or ./*[local-name() = 'funderName'][contains(., 'Suomen Akatemia') or contains(., 'Academy of Finland')]">
472
                                        <oaf:projectid>
473
                                            <xsl:value-of select="concat($varAKA, ./*[local-name() = 'awardNumber'])"/>
474
                                        </oaf:projectid>
475
                                    </xsl:when><!-- ARC -->
476
                                    <xsl:when
477
                                            test="(./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100000923)\s*$')] or ./*[local-name() = 'funderName'][contains(., 'Australian Research Council')]) and ./*[local-name() = 'awardNumber'][matches(., '^\d{6}$')]">
478
                                        <oaf:projectid>
479
                                            <xsl:value-of
480
                                                    select="concat($varAKA, replace(./*[local-name() = 'awardNumber'], '.*(^\d{6}$).*', '$2'))"/>
481
                                        </oaf:projectid>
482
                                    </xsl:when><!-- CONICYT -->
483
                                    <xsl:when
484
                                            test="./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100002848)\s*$')] or ./*[local-name() = 'funderName'][contains(., 'Comisión Nacional de Investigación Científica y Tecnológica') or contains(., 'CONICYT')]">
485
                                        <oaf:projectid>
486
                                            <xsl:value-of
487
                                                    select="concat($varCONICYT, ./*[local-name() = 'awardNumber'])"/>
488
                                        </oaf:projectid>
489
                                    </xsl:when><!-- DFG -->
490
                                    <xsl:when
491
                                            test="./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100001659)\s*$')] or ./*[local-name() = 'funderName'][contains(., 'Deutsche Forschungsgemeinschaft') or contains(., 'DFG') or contains(., 'Deutsche Forschungsgemeinschaft (DFG)')]">
492
                                        <oaf:projectid>
493
                                            <xsl:value-of select="concat($varDFG, ./*[local-name() = 'awardNumber'])"/>
494
                                        </oaf:projectid>
495
                                    </xsl:when><!----><!-- FCT -->
496
                                    <xsl:when
497
                                            test="./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100001871)\s*$')] or ./*[local-name() = 'funderName'][contains(., 'Fundação para a Ciência e a Tecnologia')]">
498
                                        <oaf:projectid>
499
                                            <xsl:value-of select="concat($varFCT, ./*[local-name() = 'awardNumber'])"/>
500
                                        </oaf:projectid>
501
                                    </xsl:when><!-- FWF -->
502
                                    <xsl:when
503
                                            test="./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100002428)\s*$')] or ./*[local-name() = 'funderName'][contains(., 'Fonds zur Förderung der Wissenschaftlichen Forschung') or contains(., 'Austrian Science Fund')]">
504
                                        <oaf:projectid>
505
                                            <xsl:value-of select="concat($varFCT, ./*[local-name() = 'awardNumber'])"/>
506
                                        </oaf:projectid>
507
                                    </xsl:when><!-- MESTD -->
508
                                    <xsl:when
509
                                            test="./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100001871)\s*$')] or ./*[local-name() = 'funderName'][(contains(., 'Ministarstvo Prosvete, Nauke i Tehnolo') and contains(., 'kog Razvoja')) or contains(., 'MESTD')]">
510
                                        <oaf:projectid>
511
                                            <xsl:value-of
512
                                                    select="concat($varMESTD, ./*[local-name() = 'awardNumber'])"/>
513
                                        </oaf:projectid>
514
                                    </xsl:when><!-- MZOS -->
515
                                    <xsl:when
516
                                            test="./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100006588)\s*$')] or ./*[local-name() = 'funderName'][contains(., 'Ministarstvo Znanosti, Obrazovanja i Sporta') or contains(., 'Ministry of Science, Education and Sports')]">
517
                                        <oaf:projectid>
518
                                            <xsl:value-of select="concat($varMZOS, ./*[local-name() = 'awardNumber'])"/>
519
                                        </oaf:projectid>
520
                                    </xsl:when><!-- NHMRC -->
521
                                    <xsl:when
522
                                            test="./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100000925)\s*$')] or ./*[local-name() = 'funderName'][contains(., 'National Health and Medical Research Council') or contains(., 'NHMRC')]">
523
                                        <oaf:projectid>
524
                                            <xsl:value-of
525
                                                    select="concat($varNHMRC, ./*[local-name() = 'awardNumber'])"/>
526
                                        </oaf:projectid>
527
                                    </xsl:when><!-- NIH -->
528
                                    <xsl:when
529
                                            test="./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/100000002)\s*$')] or ./*[local-name() = 'funderName'][contains(., 'National Institutes of Health')]">
530
                                        <oaf:projectid>
531
                                            <xsl:value-of select="concat($varNIH, ./*[local-name() = 'awardNumber'])"/>
532
                                        </oaf:projectid>
533
                                    </xsl:when><!-- NSF -->
534
                                    <xsl:when
535
                                            test="./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/100000001)\s*$')] or ./*[local-name() = 'funderName'][contains(., 'National Science Foundation')]">
536
                                        <oaf:projectid>
537
                                            <xsl:value-of select="concat($varNSF, ./*[local-name() = 'awardNumber'])"/>
538
                                        </oaf:projectid>
539
                                    </xsl:when><!-- NWO -->
540
                                    <xsl:when
541
                                            test="./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100003246)\s*$')] or ./*[local-name() = 'funderName'][contains(., 'Netherlands Organisation for Scientific Research') or contains(., 'Nederlandse Organisatie voor Wetenschappelijk Onderzoek')]">
542
                                        <oaf:projectid>
543
                                            <xsl:value-of select="concat($varNWO, ./*[local-name() = 'awardNumber'])"/>
544
                                        </oaf:projectid>
545
                                    </xsl:when><!-- RCUK -->
546
                                    <xsl:when
547
                                            test="./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100000690)\s*$')] or ./*[local-name() = 'funderName'][contains(., 'Research Councils UK') or contains(., 'RCUK')]">
548
                                        <oaf:projectid>
549
                                            <xsl:value-of select="concat($varUKRI, ./*[local-name() = 'awardNumber'])"/>
550
                                        </oaf:projectid>
551
                                    </xsl:when><!-- SFI -->
552
                                    <xsl:when
553
                                            test="(./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100001602)\s*$')] or ./*[local-name() = 'funderName'][contains(., 'Science Foundation Ireland')]) and ./*[local-name() = 'awardNumber'][matches(., '.*([\dA-Za-z\.\-]+/)+[\dA-Za-z\.\-]+.*')]">
554
                                        <oaf:projectid>
555
                                            <xsl:value-of
556
                                                    select="concat($varSFI, replace(./*[local-name() = 'awardNumber'], '.*(^|\s)(([\dA-Za-z\.\-]+/)+[\dA-Za-z\.\-]+)($|\s).*', '$2'))"/>
557
                                        </oaf:projectid>
558
                                    </xsl:when><!-- SNSF -->
559
                                    <xsl:when
560
                                            test="./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100001711)\s*$')] or ./*[local-name() = 'funderName'][contains(., 'Swiss National Science Foundation') or contains(., 'Schweizerischer Nationalfonds zur Förderung der Wissenschaftlichen Forschung')]">
561
                                        <oaf:projectid>
562
                                            <xsl:value-of select="concat($varSNSF, ./*[local-name() = 'awardNumber'])"/>
563
                                        </oaf:projectid>
564
                                    </xsl:when><!-- TUBITAK -->
565
                                    <xsl:when
566
                                            test="./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100004410)\s*$')] or ./*[local-name() = 'funderName'][contains(., 'Turkish National Science and Research Council') or (contains(., 'Türkiye Bilimsel ve Teknolojik Ara') and contains(., 'rma Kurumu'))]">
567
                                        <oaf:projectid>
568
                                            <xsl:value-of
569
                                                    select="concat($varTUBITAK, ./*[local-name() = 'awardNumber'])"/>
570
                                        </oaf:projectid>
571
                                    </xsl:when><!-- UKRI -->
572
                                    <xsl:when
573
                                            test="./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/100014013)\s*$')] or ./*[local-name() = 'funderName'][contains(., 'UK Research and Innovation') or contains(., 'UKRI')]">
574
                                        <oaf:projectid>
575
                                            <xsl:value-of select="concat($varUKRI, ./*[local-name() = 'awardNumber'])"/>
576
                                        </oaf:projectid>
577
                                    </xsl:when><!-- WT -->
578
                                    <xsl:when
579
                                            test="./*[local-name() = 'funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/100004440)\s*$')] or ./*[local-name() = 'funderName'][contains(., 'Wellcome Trust') or . = 'WT']">
580
                                        <oaf:projectid>
581
                                            <xsl:value-of select="concat($varWT, ./*[local-name() = 'awardNumber'])"/>
582
                                        </oaf:projectid>
583
                                    </xsl:when>
584
                                </xsl:choose>
585
                            </xsl:for-each>
586
                        </xsl:template><!-- toDo: improve by selecting all attributes -->
587
                        <xsl:template match="//*[local-name() = 'nameIdentifier']">
588
                            <datacite:nameIdentifier>
589
                                <xsl:attribute name="nameIdentifierScheme"
590
                                               select="./@*[local-name() = ('nameIdentifierScheme')]"/>
591
                                <xsl:attribute name="schemeURI" select="./@*[local-name() = ('schemeURI')]"/>
592
                                <xsl:choose>
593
                                    <xsl:when test=".[contains(., 'orcid.org/')]">
594
                                        <xsl:value-of select="substring-after(., 'orcid.org/')"/>
595
                                    </xsl:when>
596
                                    <xsl:when test=".[contains(., 'researcherid.com/rid/')]">
597
                                        <xsl:value-of select="substring-after(., 'researcherid.com/rid/')"/>
598
                                    </xsl:when>
599
                                    <xsl:otherwise>
600
                                        <xsl:value-of select="."/>
601
                                    </xsl:otherwise>
602
                                </xsl:choose>
603
                            </datacite:nameIdentifier>
604
                        </xsl:template>
605
                    </xsl:stylesheet>
606
                </CODE>
607
            </SCRIPT>
608
        </CONFIGURATION>
609
        <STATUS/>
610
        <SECURITY_PARAMETERS/>
611
    </BODY>
612
</RESOURCE_PROFILE>
(61-61/64)