Project

General

Profile

« Previous | Next » 

Revision 62933

Added by Alessia Bardi 10 months ago

Final version of the hadoop mapping that also sets the validation date when the FWF links come from FWF source

View differences:

modules/dnet-openaireplus-profiles/trunk/src/main/resources/eu/dnetlib/test/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/xslt_cleaning_oaire2datacite_hadoop.xml
1 1
<RESOURCE_PROFILE>
2 2
    <HEADER>
3
        <RESOURCE_IDENTIFIER
4
                value="5c777768-c164-41aa-90f1-58d17b4b272d_VHJhbnNmb3JtYXRpb25SdWxlRFNSZXNvdXJjZXMvVHJhbnNmb3JtYXRpb25SdWxlRFNSZXNvdXJjZVR5cGU="/>
3
        <RESOURCE_IDENTIFIER value="_VHJhbnNmb3JtYXRpb25SdWxlRFNSZXNvdXJjZXMvVHJhbnNmb3JtYXRpb25SdWxlRFNSZXNvdXJjZVR5cGU="/>
5 4
        <RESOURCE_TYPE value="TransformationRuleDSResourceType"/>
6 5
        <RESOURCE_KIND value="TransformationRuleDSResources"/>
7 6
        <RESOURCE_URI value=""/>
8
        <DATE_OF_CREATION value="2023-11-27T09:43:46+00:00"/>
7
        <DATE_OF_CREATION value="2023-11-28T14:38:50+00:00"/>
9 8
    </HEADER>
10 9
    <BODY>
11 10
        <CONFIGURATION>
......
15 14
            <SCRIPT>
16 15
                <TITLE>xslt_cleaning_oaire2datacite_hadoop</TITLE>
17 16
                <CODE><!--
17
                    adaptation 2023-11-28 for FWF project links (without validationDate - setting the validationDate caused the rule to skip almost all records for unknown reasons; Alessia Bardi/CNR
18 18
                    adaptation 2023-05-09 for ROHub types in EOSC Future ; Alessia Bardi/CNR
19 19
                    adaptation 2021-08-23 ; ACz/UNIBI
20 20
                    -->
21
                    <xsl:stylesheet xmlns:oaire="http://namespace.openaire.eu/schema/oaire/"
22
                                    xmlns:dateCleaner="http://eu/dnetlib/transform/dateISO"
23
                                    xmlns:datacite="http://datacite.org/schema/kernel-4"
24
                                    xmlns:dr="http://www.driver-repository.eu/namespace/dr"
25
                                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
26
                                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
27
                                    xmlns:vocabulary="http://eu/dnetlib/transform/clean"
28
                                    xmlns:oaf="http://namespace.openaire.eu/oaf"
29
                                    xmlns:oai="http://www.openarchives.org/OAI/2.0/"
30
                                    xmlns:dri="http://www.driver-repository.eu/namespace/dri"
31
                                    xmlns:xs="http://www.w3.org/2001/XMLSchema"
32
                                    xmlns:dc="http://purl.org/dc/elements/1.1/"
33
                                    exclude-result-prefixes="xsl vocabulary dateCleaner" version="2.0">
21
                    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:oaire="http://namespace.openaire.eu/schema/oaire/" xmlns:vocabulary="http://eu/dnetlib/transform/clean" xmlns:dateCleaner="http://eu/dnetlib/transform/dateISO" xmlns:oaf="http://namespace.openaire.eu/oaf" xmlns:oai="http://www.openarchives.org/OAI/2.0/" xmlns:datacite="http://datacite.org/schema/kernel-4" xmlns:dri="http://www.driver-repository.eu/namespace/dri" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dr="http://www.driver-repository.eu/namespace/dr" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dc="http://purl.org/dc/elements/1.1/" exclude-result-prefixes="xsl vocabulary dateCleaner" version="2.0">
34 22
                        <xsl:param name="varOfficialName"/>
35 23
                        <xsl:param name="varDataSourceId"/>
36 24
                        <xsl:param name="varAKA" select="'aka_________::'"/>
......
60 48
                        <xsl:param name="varRSF" select="'rsf_________::'"/>
61 49
                        <xsl:param name="varSFI" select="'sfi_________::'"/>
62 50
                        <xsl:param name="varSFRS" select="'sfrs________::'"/>
63
                        <xsl:param name="varSGOV"
64
                                   select="'sgov________::'"/><!-- SGOV to be added, awaiting DOI from Pilar, found project ids not in CSV list? -->
51
                        <xsl:param name="varSGOV" select="'sgov________::'"/><!-- SGOV to be added, awaiting DOI from Pilar, found project ids not in CSV list? -->
65 52
                        <xsl:param name="varSNSF" select="'snsf________::'"/>
66
                        <xsl:param name="varTARA"
67
                                   select="'taraexp_____::'"/><!-- TARA to be added, awaiting DOI from André -->
53
                        <xsl:param name="varTARA" select="'taraexp_____::'"/><!-- TARA to be added, awaiting DOI from André -->
68 54
                        <xsl:param name="varTUBITAK" select="'tubitakf____::'"/>
69
                        <xsl:param name="varUKRI"
70
                                   select="'ukri________::'"/><!-- UKRI replace RCUK namespace:  'rcuk________::'  -->
55
                        <xsl:param name="varUKRI" select="'ukri________::'"/><!-- UKRI replace RCUK namespace:  'rcuk________::'  -->
71 56
                        <xsl:param name="varWT" select="'wt__________::'"/>
72 57
                        <xsl:param name="index" select="0"/>
73 58
                        <xsl:param name="transDate" select="current-dateTime()"/>
74 59
                        <xsl:template match="/">
75
                            <xsl:variable name="datasourcePrefix"
76
                                          select="normalize-space(//oaf:datasourceprefix)"/><!-- TODO: termination handling at Spark level must be refined! -->
60
                            <xsl:variable name="datasourcePrefix" select="normalize-space(//oaf:datasourceprefix)"/><!-- TODO: termination handling at Spark level must be refined! -->
77 61
                            <xsl:if test="//oai:header/@status='deleted'">
78 62
                                <xsl:call-template name="terminate"/>
79 63
                            </xsl:if>
......
100 84
                     <xsl:variable name='varCobjCategory' select="TransformationFunction:convertString($tf, distinct-values(//*[local-name()='resourceType'][1]/@uri), 'TextTypologies')" />
101 85
                     <xsl:variable name="varSuperType" select="TransformationFunction:convertString($tf, $varCobjCategory, 'SuperTypes')"/>
102 86
                -->
103
                                    <xsl:variable name="varTypLst"
104
                                                  select="distinct-values((//*[local-name()='resourceType']/(., @*)))"/>
105
                                    <xsl:variable name="varCobjCatLst"
106
                                                  select="distinct-values((for $i in $varTypLst      return vocabulary:clean( normalize-space($i), 'dnet:publication_resource')))"/>
107
                                    <xsl:variable name="varCobjSupLst"
108
                                                  select="for $i in $varCobjCatLst      return concat($i, '###', vocabulary:clean( normalize-space($i), 'dnet:result_typologies'))"/>
109
                                    <xsl:variable name="varCobjSup"
110
                                                  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]"/>
87
                                    <xsl:variable name="varTypLst" select="distinct-values((//*[local-name()='resourceType']/(., @*)))"/>
88
                                    <xsl:variable name="varCobjCatLst" select="distinct-values((for $i in $varTypLst      return vocabulary:clean( normalize-space($i), 'dnet:publication_resource')))"/>
89
                                    <xsl:variable name="varCobjSupLst" select="for $i in $varCobjCatLst      return concat($i, '###', vocabulary:clean( normalize-space($i), 'dnet:result_typologies'))"/>
90
                                    <xsl:variable name="varCobjSup" 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]"/>
111 91
                                    <xsl:variable name="varSuperType" select="substring-after($varCobjSup, '###')"/>
112
                                    <xsl:variable name="varCobjCategory"
113
                                                  select="substring-before($varCobjSup, '###')"/><!-- ~~~~~ pre-detect, -clean, -deduplicat PIDs and store in variable ~~~~~ -->
114
                                    <xsl:variable name="varKnownFileEndings"
115
                                                  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 --><!--
92
                                    <xsl:variable name="varCobjCategory" select="substring-before($varCobjSup, '###')"/><!-- ~~~~~ pre-detect, -clean, -deduplicat PIDs and store in variable ~~~~~ -->
93
                                    <xsl:variable name="varKnownFileEndings" 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 --><!--
116 94
                     // covered in comparison: URL encoded baseURLs, item URL und baseURL differing only in prefix www. or postfix port
117 95
                     // 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
118 96
                     // tries to not consider higher level URLs as item URLs (e.g. journal URLs) by enforcing something after /
119 97
                -->
120
                                    <xsl:variable name="varOrigBaseUrl"
121
                                                  select="//*[local-name() = 'about']/*[local-name() = 'provenance']//*[local-name() = 'originDescription' and not(./*[local-name() = 'originDescription'])]/*[local-name() = 'baseURL']"/>
122
                                    <xsl:variable name="varAggrBaseUrl"
123
                                                  select="//*[local-name() = 'about']/*[local-name() = 'provenance']//*[local-name() = 'originDescription' and (./*[local-name() = 'originDescription'])]/*[local-name() = 'baseURL']"/>
124
                                    <xsl:variable name="varLandingPage"
125
                                                  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 -->
126
                                    <xsl:variable name="varPidDoi"
127
                                                  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:::'))"/>
128
                                    <xsl:variable name="varPidHandle"
129
                                                  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:::'))"/>
130
                                    <xsl:variable name="varPidUrn"
131
                                                  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:::'))"/>
132
                                    <xsl:variable name="varPidArk"
133
                                                  select="concat(' ARK:::', string-join(distinct-values((                                     (//datacite:identifier, //datacite:alternateIdentifier)[starts-with(., 'http') and contains(., '/ark:/')]/concat('ark:/', substring-after(., '/ark:/'))                                 )), ' ARK:::'))"/>
134
                                    <xsl:variable name="varPidPmid"
135
                                                  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:::'))"/>
136
                                    <xsl:variable name="varPidPmcid"
137
                                                  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:::'))"/>
138
                                    <xsl:variable name="varPidHal"
139
                                                  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:::'))"/>
140
                                    <xsl:variable name="varPidBibc"
141
                                                  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:::'))"/>
142
                                    <xsl:variable name="varPidArxiv"
143
                                                  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:::'))"/>
144
                                    <xsl:variable name="varPidWos"
145
                                                  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:::'))"/>
146
                                    <xsl:variable name="varPidScp"
147
                                                  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:::'))"/>
148
                                    <xsl:variable name="varPidUrl"
149
                                                  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:::'))"/>
150
                                    <xsl:variable name="varPidIsbn"
151
                                                  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:::'))"/>
152
                                    <xsl:variable name="varPidIssn"
153
                                                  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'))                             )), '')"/><!-- heap all IDs, drop landingPage URL -->
154
                                    <xsl:variable name="varPidW3id"
155
                                                  select="concat(' w3id:::', string-join(distinct-values((                                     (//datacite:identifier)[@identifierType='w3id']/text(), ' w3id:::'))))"/><!-- heap all IDs, drop landingPage URL -->
156
                                    <xsl:variable name="varPidPre"
157
                                                  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:::')])"/><!--
98
                                    <xsl:variable name="varOrigBaseUrl" select="//*[local-name() = 'about']/*[local-name() = 'provenance']//*[local-name() = 'originDescription' and not(./*[local-name() = 'originDescription'])]/*[local-name() = 'baseURL']"/>
99
                                    <xsl:variable name="varAggrBaseUrl" select="//*[local-name() = 'about']/*[local-name() = 'provenance']//*[local-name() = 'originDescription' and (./*[local-name() = 'originDescription'])]/*[local-name() = 'baseURL']"/>
100
                                    <xsl:variable name="varLandingPage" 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 -->
101
                                    <xsl:variable name="varPidDoi" 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:::'))"/>
102
                                    <xsl:variable name="varPidHandle" 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:::'))"/>
103
                                    <xsl:variable name="varPidUrn" 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:::'))"/>
104
                                    <xsl:variable name="varPidArk" select="concat(' ARK:::', string-join(distinct-values((                                     (//datacite:identifier, //datacite:alternateIdentifier)[starts-with(., 'http') and contains(., '/ark:/')]/concat('ark:/', substring-after(., '/ark:/'))                                 )), ' ARK:::'))"/>
105
                                    <xsl:variable name="varPidPmid" 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:::'))"/>
106
                                    <xsl:variable name="varPidPmcid" 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:::'))"/>
107
                                    <xsl:variable name="varPidHal" 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:::'))"/>
108
                                    <xsl:variable name="varPidBibc" 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:::'))"/>
109
                                    <xsl:variable name="varPidArxiv" 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:::'))"/>
110
                                    <xsl:variable name="varPidWos" 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:::'))"/>
111
                                    <xsl:variable name="varPidScp" 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:::'))"/>
112
                                    <xsl:variable name="varPidUrl" 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:::'))"/>
113
                                    <xsl:variable name="varPidIsbn" 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:::'))"/>
114
                                    <xsl:variable name="varPidIssn" 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'))                             )), '')"/><!-- heap all IDs, drop landingPage URL -->
115
                                    <xsl:variable name="varPidW3id" select="concat(' w3id:::', string-join(distinct-values((                                     (//datacite:identifier)[@identifierType='w3id']/text(), ' w3id:::'))))"/><!-- heap all IDs, drop landingPage URL -->
116
                                    <xsl:variable name="varPidPre" 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:::')])"/><!--
158 117
                     <xsl:variable name="varPid" select="concat($varPidPre, $varLandingPage[string-length($varPidPre) = 0]/concat('landingPage:::', .))"/>
159 118
                     <xsl:variable name="varPid" select="concat($varPidPre, concat(' landingPage:::', $varLandingPage[string-length($varPidPre) = 0], .))"/>
160 119
                -->
161
                                    <xsl:variable name="varPid"
162
                                                  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 -->
163
                                    <xsl:variable name="varRelPidDoi"
164
                                                  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:::'))"/>
165
                                    <xsl:variable name="varRelPidHandle"
166
                                                  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:::'))"/>
167
                                    <xsl:variable name="varRelPidPmid"
168
                                                  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:::'))"/>
169
                                    <xsl:variable name="varRelPidPmcid"
170
                                                  select="concat(' PMCID:::', string-join(distinct-values((                                     (//datacite:relatedIdentifier)[lower-case(@*)='pmcid']                                     /concat(., ':::', @relationType)                                 )), ' PMCID:::'))"/>
171
                                    <xsl:variable name="varRelPidArxiv"
172
                                                  select="concat(' arXiv:::', string-join(distinct-values((                                     (//datacite:relatedIdentifier)[lower-case(@*)='arxiv']                                     /concat(., ':::', @relationType)                                 )), ' arXiv:::'))"/>
173
                                    <xsl:variable name="varRelPidWos"
174
                                                  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:::'))"/>
175
                                    <xsl:variable name="varRelPidUrl"
176
                                                  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:::'))"/>
177
                                    <xsl:variable name="varRelPidW3id"
178
                                                  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:::'))"/>
179
                                    <xsl:variable name="varRelPid"
180
                                                  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/"> -->
120
                                    <xsl:variable name="varPid" 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 -->
121
                                    <xsl:variable name="varRelPidDoi" 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:::'))"/>
122
                                    <xsl:variable name="varRelPidHandle" 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:::'))"/>
123
                                    <xsl:variable name="varRelPidPmid" 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:::'))"/>
124
                                    <xsl:variable name="varRelPidPmcid" select="concat(' PMCID:::', string-join(distinct-values((                                     (//datacite:relatedIdentifier)[lower-case(@*)='pmcid']                                     /concat(., ':::', @relationType)                                 )), ' PMCID:::'))"/>
125
                                    <xsl:variable name="varRelPidArxiv" select="concat(' arXiv:::', string-join(distinct-values((                                     (//datacite:relatedIdentifier)[lower-case(@*)='arxiv']                                     /concat(., ':::', @relationType)                                 )), ' arXiv:::'))"/>
126
                                    <xsl:variable name="varRelPidWos" 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:::'))"/>
127
                                    <xsl:variable name="varRelPidUrl" 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:::'))"/>
128
                                    <xsl:variable name="varRelPidW3id" 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:::'))"/>
129
                                    <xsl:variable name="varRelPid" 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/"> -->
181 130
                                    <datacite:resource><!-- ~~~~~ IDs ~~~~~ --><!-- choose 'best' PID among identifiers and alternateIdentifers, and cut off DOI resolver prefix to just get the number part -->
182 131
                                        <datacite:identifier>
183
                                            <xsl:attribute name="identifierType"
184
                                                           select="substring-before(tokenize(normalize-space($varPid), ' ')[1], ':::')"/>
185
                                            <xsl:value-of
186
                                                    select="substring-after(tokenize(normalize-space($varPid), ' ')[1], ':::')"/>
132
                                            <xsl:attribute name="identifierType" select="substring-before(tokenize(normalize-space($varPid), ' ')[1], ':::')"/>
133
                                            <xsl:value-of select="substring-after(tokenize(normalize-space($varPid), ' ')[1], ':::')"/>
187 134
                                        </datacite:identifier>
188 135
                                        <datacite:alternateIdentifiers>
189
                                            <xsl:for-each
190
                                                    select="tokenize(normalize-space($varPid), ' ')[position() &gt; 1][string-length(substring-after(., ':::')) &gt; 0]">
136
                                            <xsl:for-each select="tokenize(normalize-space($varPid), ' ')[position() &gt; 1][string-length(substring-after(., ':::')) &gt; 0]">
191 137
                                                <datacite:alternateIdentifier>
192
                                                    <xsl:attribute name="alternateIdentifierType"
193
                                                                   select="substring-before(., ':::')"/>
138
                                                    <xsl:attribute name="alternateIdentifierType" select="substring-before(., ':::')"/>
194 139
                                                    <xsl:value-of select="substring-after(., ':::')"/>
195 140
                                                </datacite:alternateIdentifier>
196 141
                                            </xsl:for-each>
197
                                            <xsl:for-each
198
                                                    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)]">
142
                                            <xsl:for-each 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)]">
199 143
                                                <datacite:alternateIdentifier>
200
                                                    <xsl:attribute name="alternateIdentifierType"
201
                                                                   select="./@*[local-name()=('identifierType', 'alternateIdentifierType')]"/>
144
                                                    <xsl:attribute name="alternateIdentifierType" select="./@*[local-name()=('identifierType', 'alternateIdentifierType')]"/>
202 145
                                                    <xsl:value-of select="."/>
203 146
                                                </datacite:alternateIdentifier>
204 147
                                            </xsl:for-each>
205 148
                                            <xsl:if test="not(starts-with(normalize-space(lower-case($varPid)), 'landingpage')) and string-length($varLandingPage) &gt; 0">
206 149
                                                <datacite:alternateIdentifier>
207
                                                    <xsl:attribute name="alternateIdentifierType"
208
                                                                   select="'landingPage'"/>
150
                                                    <xsl:attribute name="alternateIdentifierType" select="'landingPage'"/>
209 151
                                                    <xsl:value-of select="$varLandingPage"/>
210 152
                                                </datacite:alternateIdentifier>
211 153
                                            </xsl:if>
212 154
                                        </datacite:alternateIdentifiers>
213 155
                                        <datacite:relatedIdentifiers>
214
                                            <xsl:for-each
215
                                                    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')]">
156
                                            <xsl:for-each 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')]">
216 157
                                                <datacite:relatedIdentifier>
217
                                                    <xsl:attribute name="relatedIdentifierType"
218
                                                                   select="./@relatedIdentifierType"/>
158
                                                    <xsl:attribute name="relatedIdentifierType" select="./@relatedIdentifierType"/>
219 159
                                                    <xsl:attribute name="relationType" select="./@relationType"/>
220
                                                    <xsl:value-of
221
                                                            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))"/>
160
                                                    <xsl:value-of 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))"/>
222 161
                                                </datacite:relatedIdentifier>
223 162
                                            </xsl:for-each>
224 163
                                        </datacite:relatedIdentifiers><!-- change namespace/format from oaire to datacite for description, language, rights, ... -->
......
235 174
                                        </xsl:for-each>
236 175
                                        <xsl:if test="(//datacite:rights, //oaire:licenseCondition)[string-length(.) &gt; 0 or string-length(@rightsURI) &gt; 0 or string-length(@uri) &gt; 0]">
237 176
                                            <datacite:rightsList>
238
                                                <xsl:for-each
239
                                                        select="(//datacite:rights | //oaire:licenseCondition)[string-length(.) &gt; 0 or string-length(@rightsURI) &gt; 0 or string-length(@uri) &gt; 0]">
177
                                                <xsl:for-each select="(//datacite:rights | //oaire:licenseCondition)[string-length(.) &gt; 0 or string-length(@rightsURI) &gt; 0 or string-length(@uri) &gt; 0]">
240 178
                                                    <datacite:rights>
241 179
                                                        <xsl:attribute name="rightsURI" select="(@rightsURI, @uri)[1]"/>
242 180
                                                        <xsl:value-of select="."/>
......
269 207
                                                </xsl:for-each>
270 208
                                            </datacite:descriptions>
271 209
                                        </xsl:if>
272
                                        <xsl:for-each
273
                                                select="distinct-values(//dc:language)[string-length(normalize-space(.)) &gt; 0]">
210
                                        <xsl:for-each select="distinct-values(//dc:language)[string-length(normalize-space(.)) &gt; 0]">
274 211
                                            <datacite:language>
275 212
                                                <xsl:value-of select="normalize-space(.)"/>
276 213
                                            </datacite:language>
277 214
                                        </xsl:for-each>
278
                                        <xsl:for-each
279
                                                select="distinct-values(//dc:publisher)[string-length(normalize-space(.)) &gt; 0]">
215
                                        <xsl:for-each select="distinct-values(//dc:publisher)[string-length(normalize-space(.)) &gt; 0]">
280 216
                                            <datacite:publisher>
281 217
                                                <xsl:value-of select="normalize-space(.)"/>
282 218
                                            </datacite:publisher>
283 219
                                        </xsl:for-each>
284 220
                                        <xsl:if test="//dc:format[string-length(normalize-space(.)) &gt; 0]">
285 221
                                            <datacite:formats>
286
                                                <xsl:for-each
287
                                                        select="distinct-values(//dc:format)[string-length(normalize-space(.)) &gt; 0]">
222
                                                <xsl:for-each select="distinct-values(//dc:format)[string-length(normalize-space(.)) &gt; 0]">
288 223
                                                    <datacite:format>
289 224
                                                        <xsl:value-of select="normalize-space(.)"/>
290 225
                                                    </datacite:format>
......
299 234
                                                            <xsl:value-of select="./oaire:funderName"/>
300 235
                                                        </datacite:funderName>
301 236
                                                        <datacite:funderIdentifier>
302
                                                            <xsl:attribute name="funderIdentifierType"
303
                                                                           select="'Crossref Funder ID'"/>
237
                                                            <xsl:attribute name="funderIdentifierType" select="'Crossref Funder ID'"/>
304 238
                                                            <xsl:value-of select="./oaire:funderIdentifier"/>
305 239
                                                        </datacite:funderIdentifier>
306 240
                                                        <datacite:awardNumber>
......
310 244
                                                </xsl:for-each>
311 245
                                            </datacite:fundingReferences>
312 246
                                        </xsl:if>
313
                                        <xsl:apply-templates
314
                                                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> -->
247
                                        <xsl:apply-templates 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> -->
315 248
                                    </datacite:resource><!-- ~~~~~ put oaf elements below datacite:resource ~~~~~ --><!-- oaf:identifier -->
316
                                    <xsl:for-each
317
                                            select="tokenize(normalize-space($varPid), ' ')[string-length(substring-after(normalize-space(.), ':::')) &gt; 0]">
249
                                    <xsl:for-each select="tokenize(normalize-space($varPid), ' ')[string-length(substring-after(normalize-space(.), ':::')) &gt; 0]">
318 250
                                        <oaf:identifier>
319
                                            <xsl:attribute name="identifierType"
320
                                                           select="substring-before(normalize-space(.), ':::')"/>
251
                                            <xsl:attribute name="identifierType" select="substring-before(normalize-space(.), ':::')"/>
321 252
                                            <xsl:value-of select="substring-after(normalize-space(.), ':::')"/>
322 253
                                        </oaf:identifier>
323 254
                                    </xsl:for-each>
......
330 261
                                    <xsl:if test="//*[local-name() = 'about']/*[local-name() = 'provenance']/*[local-name() = 'originDescription']/*[local-name() = 'originDescription']/*[local-name() = 'identifier' and string-length(.) &gt; 0]">
331 262
                                        <oaf:identifier>
332 263
                                            <xsl:attribute name="identifierType" select="'oai-original'"/>
333
                                            <xsl:value-of
334
                                                    select="//*[local-name() = 'about']/*[local-name() = 'provenance']//*[local-name() = 'originDescription' and not(./*[local-name() = 'originDescription'])]/*[local-name() = 'identifier']"/>
264
                                            <xsl:value-of select="//*[local-name() = 'about']/*[local-name() = 'provenance']//*[local-name() = 'originDescription' and not(./*[local-name() = 'originDescription'])]/*[local-name() = 'identifier']"/>
335 265
                                        </oaf:identifier>
336 266
                                    </xsl:if>
337
                                    <xsl:variable name="varEmbargoEndDate"
338
                                                  select="dateCleaner:dateISO(normalize-space(//*[local-name()='date'][@dateType='Available']))"/><!-- resourceType, superType -->
267
                                    <xsl:variable name="varEmbargoEndDate" select="dateCleaner:dateISO(normalize-space(//*[local-name()='date'][@dateType='Available']))"/><!-- resourceType, superType -->
339 268
                                    <xsl:choose>
340
                                        <xsl:when
341
                                                test="lower-case(//*[local-name()='resourceType']/@resourceTypeGeneral) = ('dataset', 'software', 'literature', 'publication', 'other research product') or not(//*[local-name()='resourceType']/@resourceTypeGeneral)">
269
                                        <xsl:when test="lower-case(//*[local-name()='resourceType']/@resourceTypeGeneral) = ('dataset', 'software', 'literature', 'publication', 'other research product') or not(//*[local-name()='resourceType']/@resourceTypeGeneral)">
342 270
                                            <dr:CobjCategory>
343
                                                <xsl:variable name="varCobjCategory"
344
                                                              select="vocabulary:clean( //*[local-name()='resourceType']/@resourceTypeGeneral, 'dnet:publication_resource')"/>
345
                                                <xsl:variable name="varSuperType"
346
                                                              select="vocabulary:clean( $varCobjCategory, 'dnet:result_typologies')"/>
271
                                                <xsl:variable name="varCobjCategory" select="vocabulary:clean( //*[local-name()='resourceType']/@resourceTypeGeneral, 'dnet:publication_resource')"/>
272
                                                <xsl:variable name="varSuperType" select="vocabulary:clean( $varCobjCategory, 'dnet:result_typologies')"/>
347 273
                                                <xsl:attribute name="type">
348 274
                                                    <xsl:value-of select="$varSuperType"/>
349 275
                                                </xsl:attribute><!-- EOSC Future: special handling of research objects from ROHub -->
350 276
                                                <xsl:choose>
351 277
                                                    <xsl:when test="$varDataSourceId = 'fairsharing_::4119'">
352
                                                        <xsl:value-of
353
                                                                select="vocabulary:clean(//*[local-name()='resourceType']/text(), 'dnet:publication_resource')"/>
278
                                                        <xsl:value-of select="vocabulary:clean(//*[local-name()='resourceType']/text(), 'dnet:publication_resource')"/>
354 279
                                                    </xsl:when>
355 280
                                                    <xsl:otherwise>
356 281
                                                        <xsl:value-of select="$varCobjCategory"/>
......
363 288
                                            </dr:CobjCategory>
364 289
-->
365 290
                                        </xsl:when><!-- drop journals --><!--  TODO: termination handling must refine -->
366
                                        <xsl:when
367
                                                test="lower-case(//*[local-name()='resourceType']/@uri) = 'http://purl.org/coar/resource_type/c_0640'">
291
                                        <xsl:when test="lower-case(//*[local-name()='resourceType']/@uri) = 'http://purl.org/coar/resource_type/c_0640'">
368 292
                                            <xsl:call-template name="terminate"/>
369 293
                                        </xsl:when><!--
370 294
                                        <xsl:otherwise>
......
372 296
                                        </xsl:otherwise>
373 297
-->
374 298
                                    </xsl:choose><!-- review status -->
375
                                    <xsl:variable name="varRefereedConvt"
376
                                                  select="for $i in (                             //*[local-name()='resourceType']/(., @uri), //oai:setSpec, //*[local-name()='description'])                      return vocabulary:clean( normalize-space($i), 'dnet:review_levels')"/>
377
                                    <xsl:variable name="varRefereedIdntf"
378
                                                  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')"/>
379
                                    <xsl:variable name="varRefereedSourc"
380
                                                  select="(//*[local-name()=('publisher', 'source', 'citationTitle')][matches(lower-case(.), '.*[\s\-\.\\_/:%]pre[\s\-\.\\_/:%]?prints?([\s\-\.\\_/:%].*|$)')]/'0002')"/>
381
                                    <xsl:variable name="varRefereedReltn"
382
                                                  select="//*[local-name() = 'relatedIdentifier'][./@relationType/lower-case(.)='isreviewedby']/'0001'"/>
383
                                    <xsl:variable name="varRefereedDesct"
384
                                                  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')"/>
385
                                    <xsl:variable name="varRefereedTitle"
386
                                                  select="(//*[local-name()=('title')][matches(lower-case(.), '.*\[.*peer[\s\-\._]*review\s*:.*\]\s*$')]/'0001')"/>
387
                                    <xsl:variable name="varRefereedVersn"
388
                                                  select="vocabulary:clean( normalize-space( //*[local-name()='version']), 'dnet:review_levels')"/>
389
                                    <xsl:variable name="varRefereed"
390
                                                  select="($varRefereedConvt, $varRefereedIdntf, $varRefereedSourc, $varRefereedReltn, $varRefereedDesct, $varRefereedTitle, $varRefereedVersn)"/>
299
                                    <xsl:variable name="varRefereedConvt" select="for $i in (                             //*[local-name()='resourceType']/(., @uri), //oai:setSpec, //*[local-name()='description'])                      return vocabulary:clean( normalize-space($i), 'dnet:review_levels')"/>
300
                                    <xsl:variable name="varRefereedIdntf" 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')"/>
301
                                    <xsl:variable name="varRefereedSourc" select="(//*[local-name()=('publisher', 'source', 'citationTitle')][matches(lower-case(.), '.*[\s\-\.\\_/:%]pre[\s\-\.\\_/:%]?prints?([\s\-\.\\_/:%].*|$)')]/'0002')"/>
302
                                    <xsl:variable name="varRefereedReltn" select="//*[local-name() = 'relatedIdentifier'][./@relationType/lower-case(.)='isreviewedby']/'0001'"/>
303
                                    <xsl:variable name="varRefereedDesct" 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')"/>
304
                                    <xsl:variable name="varRefereedTitle" select="(//*[local-name()=('title')][matches(lower-case(.), '.*\[.*peer[\s\-\._]*review\s*:.*\]\s*$')]/'0001')"/>
305
                                    <xsl:variable name="varRefereedVersn" select="vocabulary:clean( normalize-space( //*[local-name()='version']), 'dnet:review_levels')"/>
306
                                    <xsl:variable name="varRefereed" select="($varRefereedConvt, $varRefereedIdntf, $varRefereedSourc, $varRefereedReltn, $varRefereedDesct, $varRefereedTitle, $varRefereedVersn)"/>
391 307
                                    <xsl:choose>
392 308
                                        <xsl:when test="count($varRefereed[. = '0001']) &gt; 0">
393 309
                                            <oaf:refereed>
......
401 317
                                        </xsl:when>
402 318
                                    </xsl:choose>
403 319
                                    <oaf:dateAccepted>
404
                                        <xsl:value-of
405
                                                select="dateCleaner:dateISO( normalize-space(//datacite:date[@dateType = 'Issued']))"/>
320
                                        <xsl:value-of select="dateCleaner:dateISO( normalize-space(//datacite:date[@dateType = 'Issued']))"/>
406 321
                                    </oaf:dateAccepted><!--
407 322
                     <oaf:accessrights>
408 323
                     <xsl:variable name='varAccessRights' select="TransformationFunction:convertString($tf, (//*[local-name() = 'rights']/(@uri, @rightsURI))[1], 'AccessRights')" />
......
416 331
                     </xsl:when>
417 332
                     </xsl:choose>
418 333
                -->
419
                                    <xsl:variable name="varAccessRights"
420
                                                  select="string-join((for $i in ((//*[local-name() = 'rights'], //*[lower-case(local-name())='licensecondition'])/(@*, .)) return  vocabulary:clean( $i, 'dnet:access_modes')), ' ')"/>
334
                                    <xsl:variable name="varAccessRights" select="string-join((for $i in ((//*[local-name() = 'rights'], //*[lower-case(local-name())='licensecondition'])/(@*, .)) return  vocabulary:clean( $i, 'dnet:access_modes')), ' ')"/>
421 335
                                    <oaf:accessrights>
422 336
                                        <xsl:choose>
423 337
                                            <xsl:when test="contains($varAccessRights, 'OPEN SOURCE')">
......
426 340
                                            <xsl:when test="contains($varAccessRights, 'OPEN')">
427 341
                                                <xsl:value-of select="'OPEN'"/>
428 342
                                            </xsl:when>
429
                                            <xsl:when
430
                                                    test="contains($varAccessRights, 'EMBARGO') and not((xs:date( max( ($varEmbargoEndDate, '0001-01-01') ) ) gt current-date()))">
343
                                            <xsl:when test="contains($varAccessRights, 'EMBARGO') and not((xs:date( max( ($varEmbargoEndDate, '0001-01-01') ) ) gt current-date()))">
431 344
                                                <xsl:value-of select="'OPEN'"/>
432 345
                                            </xsl:when>
433
                                            <xsl:when
434
                                                    test="contains($varAccessRights, 'EMBARGO') and (xs:date( max( ($varEmbargoEndDate, '0001-01-01') ) ) gt current-date())">
346
                                            <xsl:when test="contains($varAccessRights, 'EMBARGO') and (xs:date( max( ($varEmbargoEndDate, '0001-01-01') ) ) gt current-date())">
435 347
                                                <xsl:value-of select="'EMBARGO'"/>
436 348
                                            </xsl:when>
437 349
                                            <xsl:when test="contains($varAccessRights, 'RESTRICTED')">
......
442 354
                                            </xsl:when>
443 355
                                        </xsl:choose>
444 356
                                    </oaf:accessrights>
445
                                    <xsl:for-each
446
                                            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')]">
357
                                    <xsl:for-each 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')]">
447 358
                                        <oaf:license>
448 359
                                            <xsl:value-of select=".[not(./@uri)], .[./@uri]/@uri"/>
449 360
                                        </oaf:license>
450 361
                                    </xsl:for-each>
451 362
                                    <oaf:language>
452
                                        <xsl:value-of
453
                                                select="vocabulary:clean( //*[local-name()='language'], 'dnet:languages')"/>
363
                                        <xsl:value-of select="vocabulary:clean( //*[local-name()='language'], 'dnet:languages')"/>
454 364
                                    </oaf:language>
455 365
                                    <xsl:call-template name="funding"/>
456 366
                                    <oaf:hostedBy>
......
527 437
                            </xsl:copy>
528 438
                        </xsl:template>
529 439
                        <xsl:template name="funding"><!-- funding -->
530
                            <xsl:for-each
531
                                    select="//*[local-name()='fundingReference'][./*[local-name()='awardNumber']]">
440
                            <xsl:for-each select="//*[local-name()='fundingReference'][./*[local-name()='awardNumber']]">
532 441
                                <xsl:choose><!-- FP7 -->
533
                                    <xsl:when
534
                                            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]).*')]">
442
                                    <xsl:when 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]).*')]">
535 443
                                        <oaf:projectid>
536
                                            <xsl:value-of
537
                                                    select="concat($varFP7, replace(./*[local-name()='awardNumber'], '.*(^|[^\d])(\d\d\d\d\d\d)($|[^\d]).*', '$2'))"/>
444
                                            <xsl:value-of select="concat($varFP7, replace(./*[local-name()='awardNumber'], '.*(^|[^\d])(\d\d\d\d\d\d)($|[^\d]).*', '$2'))"/>
538 445
                                        </oaf:projectid>
539 446
                                    </xsl:when><!-- H2020 (Horizon 2020 Framework Programme) --><!-- -->
540
                                    <xsl:when
541
                                            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]).*')]">
447
                                    <xsl:when 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]).*')]">
542 448
                                        <oaf:projectid>
543
                                            <xsl:value-of
544
                                                    select="concat($varH2020, replace(./*[local-name()='awardNumber'], '.*(^|[^\d])(\d\d\d\d\d\d)($|[^\d]).*', '$2'))"/>
449
                                            <xsl:value-of select="concat($varH2020, replace(./*[local-name()='awardNumber'], '.*(^|[^\d])(\d\d\d\d\d\d)($|[^\d]).*', '$2'))"/>
545 450
                                        </oaf:projectid>
546 451
                                    </xsl:when><!-- HE (Horizon Europe Framework Programme) --><!-- -->
547
                                    <xsl:when
548
                                            test="(./*[local-name()='funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/100018693)\s*')]                         or (./*[local-name()='funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100000780)$')] and ./*[local-name()='fundingStream'] = ('Horizon Europe Framework Programme', 'HE'))                         or (./*[local-name()='funderName'] = 'European Commission' and ./*[local-name()='fundingStream'] = ('Horizon Europe Framework Programme', 'HE')))                     and ./*[local-name()='awardNumber'][matches(., '.*(^|[^\d])\d\d\d\d\d\d\d\d($|[^\d]).*')]">
452
                                    <xsl:when test="(./*[local-name()='funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/100018693)\s*')]                         or (./*[local-name()='funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100000780)$')] and ./*[local-name()='fundingStream'] = ('Horizon Europe Framework Programme', 'HE'))                         or (./*[local-name()='funderName'] = 'European Commission' and ./*[local-name()='fundingStream'] = ('Horizon Europe Framework Programme', 'HE')))                     and ./*[local-name()='awardNumber'][matches(., '.*(^|[^\d])\d\d\d\d\d\d\d\d($|[^\d]).*')]">
549 453
                                        <oaf:projectid>
550
                                            <xsl:value-of
551
                                                    select="concat($varHEUROPE, replace(./*[local-name()='awardNumber'], '.*(^|[^\d])(\d\d\d\d\d\d\d\d)($|[^\d]).*', '$2'))"/>
454
                                            <xsl:value-of select="concat($varHEUROPE, replace(./*[local-name()='awardNumber'], '.*(^|[^\d])(\d\d\d\d\d\d\d\d)($|[^\d]).*', '$2'))"/>
552 455
                                        </oaf:projectid>
553 456
                                    </xsl:when><!-- AKA -->
554
                                    <xsl:when
555
                                            test="./*[local-name()='funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100002341)\s*$') ]                     or ./*[local-name()='funderName'][contains(., 'Suomen Akatemia') or contains(., 'Academy of Finland')]">
457
                                    <xsl:when test="./*[local-name()='funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100002341)\s*$') ]                     or ./*[local-name()='funderName'][contains(., 'Suomen Akatemia') or contains(., 'Academy of Finland')]">
556 458
                                        <oaf:projectid>
557 459
                                            <xsl:value-of select="concat($varAKA, ./*[local-name()='awardNumber'])"/>
558 460
                                        </oaf:projectid>
559 461
                                    </xsl:when><!-- ARC -->
560
                                    <xsl:when
561
                                            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}$')]">
462
                                    <xsl:when 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}$')]">
562 463
                                        <oaf:projectid>
563
                                            <xsl:value-of
564
                                                    select="concat($varAKA, replace(./*[local-name()='awardNumber'], '.*(^\d{6}$).*', '$2'))"/>
464
                                            <xsl:value-of select="concat($varAKA, replace(./*[local-name()='awardNumber'], '.*(^\d{6}$).*', '$2'))"/>
565 465
                                        </oaf:projectid>
566 466
                                    </xsl:when><!-- CONICYT -->
567
                                    <xsl:when
568
                                            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')]">
467
                                    <xsl:when 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')]">
569 468
                                        <oaf:projectid>
570
                                            <xsl:value-of
571
                                                    select="concat($varCONICYT, ./*[local-name()='awardNumber'])"/>
469
                                            <xsl:value-of select="concat($varCONICYT, ./*[local-name()='awardNumber'])"/>
572 470
                                        </oaf:projectid>
573 471
                                    </xsl:when><!-- DFG -->
574
                                    <xsl:when
575
                                            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)')]">
472
                                    <xsl:when 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)')]">
576 473
                                        <oaf:projectid>
577 474
                                            <xsl:value-of select="concat($varDFG, ./*[local-name()='awardNumber'])"/>
578 475
                                        </oaf:projectid>
579 476
                                    </xsl:when><!----><!-- FCT -->
580
                                    <xsl:when
581
                                            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')]">
477
                                    <xsl:when 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')]">
582 478
                                        <oaf:projectid>
583 479
                                            <xsl:value-of select="concat($varFCT, ./*[local-name()='awardNumber'])"/>
584 480
                                        </oaf:projectid>
585 481
                                    </xsl:when><!-- FWF -->
586
                                    <xsl:when
587
                                            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')]">
482
                                    <xsl:when 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')]">
588 483
                                        <oaf:projectid>
589
                                            <xsl:value-of select="concat($varFWF, ./*[local-name()='awardNumber'])"/>
484
                                            <xsl:if test="$varDataSourceId = 'opendoar____::2639'">
485
                                                <xsl:attribute name="validationDate"
486
                                                               select="substring-before(//*[local-name() = 'header']/*[local-name() = 'dateOfCollection'], 'T')"
487
                                                />
488
                                            </xsl:if>
489
                                            <xsl:value-of select="concat($varFWF, translate(./*[local-name()='awardNumber'], ' ', '_'))"/>
590 490
                                        </oaf:projectid>
591 491
                                    </xsl:when><!-- MESTD -->
592
                                    <xsl:when
593
                                            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')]">
492
                                    <xsl:when 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')]">
594 493
                                        <oaf:projectid>
595 494
                                            <xsl:value-of select="concat($varMESTD, ./*[local-name()='awardNumber'])"/>
596 495
                                        </oaf:projectid>
597 496
                                    </xsl:when><!-- MZOS -->
598
                                    <xsl:when
599
                                            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')]">
497
                                    <xsl:when 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')]">
600 498
                                        <oaf:projectid>
601 499
                                            <xsl:value-of select="concat($varMZOS, ./*[local-name()='awardNumber'])"/>
602 500
                                        </oaf:projectid>
603 501
                                    </xsl:when><!-- NHMRC -->
604
                                    <xsl:when
605
                                            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')]">
502
                                    <xsl:when 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')]">
606 503
                                        <oaf:projectid>
607 504
                                            <xsl:value-of select="concat($varNHMRC, ./*[local-name()='awardNumber'])"/>
608 505
                                        </oaf:projectid>
609 506
                                    </xsl:when><!-- NIH -->
610
                                    <xsl:when
611
                                            test="./*[local-name()='funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/100000002)\s*$')]                     or ./*[local-name()='funderName'][contains(., 'National Institutes of Health')]">
507
                                    <xsl:when test="./*[local-name()='funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/100000002)\s*$')]                     or ./*[local-name()='funderName'][contains(., 'National Institutes of Health')]">
612 508
                                        <oaf:projectid>
613 509
                                            <xsl:value-of select="concat($varNIH, ./*[local-name()='awardNumber'])"/>
614 510
                                        </oaf:projectid>
615 511
                                    </xsl:when><!-- NSF -->
616
                                    <xsl:when
617
                                            test="./*[local-name()='funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/100000001)\s*$')]                      or ./*[local-name()='funderName'][contains(., 'National Science Foundation')]">
512
                                    <xsl:when test="./*[local-name()='funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/100000001)\s*$')]                      or ./*[local-name()='funderName'][contains(., 'National Science Foundation')]">
618 513
                                        <oaf:projectid>
619 514
                                            <xsl:value-of select="concat($varNSF, ./*[local-name()='awardNumber'])"/>
620 515
                                        </oaf:projectid>
621 516
                                    </xsl:when><!-- NWO -->
622
                                    <xsl:when
623
                                            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')]">
517
                                    <xsl:when 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')]">
624 518
                                        <oaf:projectid>
625 519
                                            <xsl:value-of select="concat($varNWO, ./*[local-name()='awardNumber'])"/>
626 520
                                        </oaf:projectid>
627 521
                                    </xsl:when><!-- RCUK -->
628
                                    <xsl:when
629
                                            test="./*[local-name()='funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100000690)\s*$')]                      or ./*[local-name()='funderName'][contains(., 'Research Councils UK') or contains(., 'RCUK')]">
522
                                    <xsl:when test="./*[local-name()='funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/501100000690)\s*$')]                      or ./*[local-name()='funderName'][contains(., 'Research Councils UK') or contains(., 'RCUK')]">
630 523
                                        <oaf:projectid>
631 524
                                            <xsl:value-of select="concat($varUKRI, ./*[local-name()='awardNumber'])"/>
632 525
                                        </oaf:projectid>
633 526
                                    </xsl:when><!-- SFI -->
634
                                    <xsl:when
635
                                            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\.\-]+.*')]">
527
                                    <xsl:when 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\.\-]+.*')]">
636 528
                                        <oaf:projectid>
637
                                            <xsl:value-of
638
                                                    select="concat($varSFI, replace(./*[local-name()='awardNumber'], '.*(^|\s)(([\dA-Za-z\.\-]+/)+[\dA-Za-z\.\-]+)($|\s).*', '$2'))"/>
529
                                            <xsl:value-of select="concat($varSFI, replace(./*[local-name()='awardNumber'], '.*(^|\s)(([\dA-Za-z\.\-]+/)+[\dA-Za-z\.\-]+)($|\s).*', '$2'))"/>
639 530
                                        </oaf:projectid>
640 531
                                    </xsl:when><!-- SNSF -->
641
                                    <xsl:when
642
                                            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')]">
532
                                    <xsl:when 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')]">
643 533
                                        <oaf:projectid>
644 534
                                            <xsl:value-of select="concat($varSNSF, ./*[local-name()='awardNumber'])"/>
645 535
                                        </oaf:projectid>
646 536
                                    </xsl:when><!-- TUBITAK -->
647
                                    <xsl:when
648
                                            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'))]">
537
                                    <xsl:when 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'))]">
649 538
                                        <oaf:projectid>
650
                                            <xsl:value-of
651
                                                    select="concat($varTUBITAK, ./*[local-name()='awardNumber'])"/>
539
                                            <xsl:value-of select="concat($varTUBITAK, ./*[local-name()='awardNumber'])"/>
652 540
                                        </oaf:projectid>
653 541
                                    </xsl:when><!-- UKRI -->
654
                                    <xsl:when
655
                                            test="./*[local-name()='funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/100014013)\s*$')]                      or ./*[local-name()='funderName'][contains(., 'UK Research and Innovation') or contains(., 'UKRI')]">
542
                                    <xsl:when test="./*[local-name()='funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/100014013)\s*$')]                      or ./*[local-name()='funderName'][contains(., 'UK Research and Innovation') or contains(., 'UKRI')]">
656 543
                                        <oaf:projectid>
657 544
                                            <xsl:value-of select="concat($varUKRI, ./*[local-name()='awardNumber'])"/>
658 545
                                        </oaf:projectid>
659 546
                                    </xsl:when><!-- WT -->
660
                                    <xsl:when
661
                                            test="./*[local-name()='funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/100004440)\s*$')]                      or ./*[local-name()='funderName'][contains(., 'Wellcome Trust') or . = 'WT']">
547
                                    <xsl:when test="./*[local-name()='funderIdentifier'][matches(., '.*(doi.org/)?(10.13039/100004440)\s*$')]                      or ./*[local-name()='funderName'][contains(., 'Wellcome Trust') or . = 'WT']">
662 548
                                        <oaf:projectid>
663 549
                                            <xsl:value-of select="concat($varWT, ./*[local-name()='awardNumber'])"/>
664 550
                                        </oaf:projectid>
......
668 554
                        </xsl:template><!-- toDo: improve by selecting all attributes -->
669 555
                        <xsl:template match="//*[local-name()='nameIdentifier']">
670 556
                            <datacite:nameIdentifier>
671
                                <xsl:attribute name="nameIdentifierScheme"
672
                                               select="./@*[local-name()=('nameIdentifierScheme')]"/>
557
                                <xsl:attribute name="nameIdentifierScheme" select="./@*[local-name()=('nameIdentifierScheme')]"/>
673 558
                                <xsl:attribute name="schemeURI" select="./@*[local-name()=('schemeURI')]"/>
674 559
                                <xsl:choose>
675 560
                                    <xsl:when test=".[contains(., 'orcid.org/')]">

Also available in: Unified diff