Project

General

Profile

« Previous | Next » 

Revision 31972

Changed logic in MdBuilder in order to push the namespaceprefix to the mdBuilder template.

Updated default mdBuilder template accordingly

View differences:

modules/dnet-msro-service/trunk/src/main/java/eu/dnetlib/msro/workflows/nodes/transform/MdBuilderJobNode.java
1 1
package eu.dnetlib.msro.workflows.nodes.transform;
2 2

  
3 3
import java.io.IOException;
4
import java.util.List;
4 5

  
5 6
import javax.xml.ws.wsaddressing.W3CEndpointReference;
6 7

  
......
49 50
			final StringTemplate st = new StringTemplate(IOUtils.toString(getMdBuilderTemplateXslt().getInputStream()));
50 51
			st.setAttribute("xpath", lookupLocator.getService().getResourceProfileByQuery(xQuery));
51 52
			st.setAttribute("datasourceId", datasourceId);
53
			
54
			/* If namespacePrefix has been already pushed to env by some custom JobNode e.g. ObtainOpenaireDataSourceParamsJobNode
55
			   then push it to ST. Else:
56
			   a) try to get it from EXTRAFIELDS of the datasource
57
			   b) try to get it from DATASOURCE_ORIGINAL_ID of the datasource
58
			   c) if any of the is present, then push to ST the datasourceId */
52 59
			if (token.getEnv().hasAttribute("namespacePrefix")) {
53 60
				st.setAttribute("namespacePrefix", token.getEnv().getAttribute("namespacePrefix"));
54 61
			} else {
55
				st.setAttribute("namespacePrefix", datasourceId);
62
				List<String> namespacePrefix;
63
				xQuery = "/*[.//RESOURCE_IDENTIFIER/@value='" + datasourceId + "']//EXTRA_FIELDS/FIELD[./key='NamespacePrefix']/value/string()";
64
				namespacePrefix = lookupLocator.getService().quickSearchProfile(xQuery);
65
				if (namespacePrefix.size() != 0){
66
					st.setAttribute("namespacePrefix", namespacePrefix.get(0));
67
				} else {
68
					xQuery = "/*[.//RESOURCE_IDENTIFIER/@value='" + datasourceId + "']//DATASOURCE_ORIGINAL_ID/string()";
69
					namespacePrefix = lookupLocator.getService().quickSearchProfile(xQuery);
70
					if (namespacePrefix.size() != 0) {
71
						st.setAttribute("namespacePrefix", namespacePrefix.get(0));
72
					} else {
73
						st.setAttribute("namespacePrefix", datasourceId);
74
					}
75
				}
56 76
			}
57 77
			final W3CEndpointReference epr = xsltMappedResultSetFactory.createMappedResultSet((new EPRUtils()).getEpr(inputEpr), st.toString());
58 78
	
modules/dnet-msro-service/trunk/src/main/resources/eu/dnetlib/msro/workflows/xslt/mdBuilder.xslt.st
1 1
<?xml version="1.0" encoding="UTF-8"?>
2 2
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
	xmlns:datetime="http://exslt.org/dates-and-times" xmlns:exslt="http://exslt.org/common"
5
	xmlns:oai="http://www.openarchives.org/OAI/2.0/"
6
	xmlns:dnet="eu.dnetlib.miscutils.functional.xml.DnetXsltFunctions"
7
	xmlns:oaf="http://namespace.openaire.eu/oaf"
8
	exclude-result-prefixes="xsl datetime exslt dnet xsi"
9
	xmlns:dri="http://www.driver-repository.eu/namespace/dri">
10

  
11
	<xsl:template match="/">
12
		<oai:record>
13
			<oai:header>
14
				<dri:objIdentifier><xsl:value-of select="concat('$namespacePrefix$::', dnet:md5($xpath$))"/></dri:objIdentifier>
15
				<dri:recordIdentifier><xsl:value-of select="$xpath$"/></dri:recordIdentifier>
16
				<dri:dateOfCollection><xsl:value-of select="datetime:dateTime()"/></dri:dateOfCollection>
17
				<dri:repositoryId>$datasourceId$</dri:repositoryId>
18
				<oaf:datasourceprefix>$namespacePrefix$</oaf:datasourceprefix>
19
				<xsl:for-each select="/*[local-name() = 'record']/*[local-name() = 'header']/*">
20
					<xsl:copy-of select="."/>
21
				</xsl:for-each>
22
			</oai:header>
23
			<xsl:choose>
24
				<xsl:when test="count(/*[local-name() = 'record']/*[local-name() = 'metadata']) &gt; 0">
25
					<xsl:copy-of select="/*[local-name() = 'record']/*[local-name() = 'metadata']"/>
26
				</xsl:when>
27
				<xsl:otherwise>
28
					<oai:metadata>
29
						<xsl:copy-of select="."/>
30
					</oai:metadata>
31
				</xsl:otherwise>
32
			</xsl:choose>
33
		</oai:record>
34
	</xsl:template>
35

  
3
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
    xmlns:datetime="http://exslt.org/dates-and-times" xmlns:exslt="http://exslt.org/common"
5
    xmlns:oai="http://www.openarchives.org/OAI/2.0/"
6
    xmlns:dnet="eu.dnetlib.miscutils.functional.xml.DnetXsltFunctions"
7
    exclude-result-prefixes="xsl datetime exslt dnet"
8
    xmlns:dri="http://www.driver-repository.eu/namespace/dri">
9
    
10
    <xsl:variable name="status" select="/*[local-name() = 'record']/*[local-name() = 'header']/@status" />
11
    
12
    <xsl:template match="/">
13
        <oai:record xmlns="http://namespace.openaire.eu/"
14
            xmlns:dc="http://purl.org/dc/elements/1.1/"
15
            xmlns:dr="http://www.driver-repository.eu/namespace/dr"
16
            xmlns:prov="http://www.openarchives.org/OAI/2.0/provenance"
17
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
18
            
19
			<!-- Patch OAI header or create ex-novo if not oai -->
20
            <oai:header>
21
                <xsl:if test="\$status">
22
                    <xsl:attribute name="status" >
23
                        <xsl:value-of select="\$status"/>
24
                    </xsl:attribute>
25
                </xsl:if>
26
                <xsl:if test="not(.//dri:objIdentifier)">
27
                    <dri:objIdentifier><xsl:value-of select="concat('$namespacePrefix$::', dnet:md5($xpath$))"/></dri:objIdentifier>
28
                </xsl:if>
29
                <xsl:if test="not(.//dri:recordIdentifier)">
30
                    <dri:recordIdentifier><xsl:value-of select="$xpath$"/></dri:recordIdentifier>
31
                </xsl:if>
32
                <xsl:if test="not(.//dri:dateOfCollection)">
33
                    <dri:dateOfCollection><xsl:value-of select="datetime:dateTime()"/></dri:dateOfCollection>
34
                </xsl:if>
35
                <xsl:if test="not(.//dri:repositoryId)">
36
                    <dri:repositoryId>$datasourceId$</dri:repositoryId>
37
                </xsl:if>
38
                <xsl:if test="not(.//dri:datasourceprefix)">
39
                    <dri:datasourceprefix>$namespacePrefix$</dri:datasourceprefix>
40
                </xsl:if>
41
                
42
				<!-- Bulk copy of old header -->
43
                <xsl:for-each select="/*[local-name() = 'record']/*[local-name() = 'header']/*">
44
                    <xsl:copy-of select="."/>
45
                </xsl:for-each>
46
            </oai:header>
47
            
48
			<!-- Handle metadata block -->
49
            <xsl:choose>
50
            	<!-- If OAI then copy copy the metadata block along -->
51
                <xsl:when test="count(/*[local-name() = 'record']/*[local-name() = 'metadata']) &gt; 0">
52
                    <xsl:copy-of select="/*[local-name() = 'record']/*[local-name() = 'metadata']"/>
53
                </xsl:when>
54
                <!-- If OAI copy in bulk the metadata block -->
55
                <xsl:when test="\$status = 'deleted'" />
56
                <!-- If not-OAI copy ALL the record inside metadata block -->
57
                <xsl:otherwise>
58
                    <oai:metadata>
59
                        <xsl:copy-of select="."/>
60
                    </oai:metadata>
61
                </xsl:otherwise>
62
            </xsl:choose>
63
        </oai:record>
64
    </xsl:template>
65
    
36 66
</xsl:stylesheet>

Also available in: Unified diff