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