Index: modules/dnet-dli/trunk/src/test/resources/eu/dnetlib/dli/parser/InputRecord.xml
===================================================================
--- modules/dnet-dli/trunk/src/test/resources/eu/dnetlib/dli/parser/InputRecord.xml	(revision 43901)
+++ modules/dnet-dli/trunk/src/test/resources/eu/dnetlib/dli/parser/InputRecord.xml	(nonexistent)
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<oai:record xmlns:oai="http://www.openarchives.org/OAI/2.0/" xmlns:dri="http://www.driver-repository.eu/namespace/dri"
-            xmlns="http://namespace.openaire.eu/">
-	<oai:header>
-		<dri:objIdentifier>dli::r3d100010134::00002f60593fd1f758fb838fafb46795</dri:objIdentifier>
-		<dri:recordIdentifier>oai:pangaea.de:doi:10.1594/PANGAEA.432865</dri:recordIdentifier>
-		<dri:dateOfCollection>2016-09-12T16:55:22.27+02:00</dri:dateOfCollection>
-		<dri:repositoryId/>
-		<dri:datasourceprefix>dli::r3d100010134</dri:datasourceprefix>
-		<dri:datasourceID/>
-		<identifier xmlns="http://www.openarchives.org/OAI/2.0/"
-		>oai:pangaea.de:doi:10.1594/PANGAEA.432865
-		</identifier>
-		<datestamp xmlns="http://www.openarchives.org/OAI/2.0/">2016-06-25T12:35:00Z</datestamp>
-	</oai:header>
-	<metadata xmlns="http://www.openarchives.org/OAI/2.0/">
-		<resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-		          xmlns="http://datacite.org/schema/kernel-3"
-		          xsi:schemaLocation="http://datacite.org/schema/kernel-3 http://schema.datacite.org/meta/kernel-3/metadata.xsd">
-			<identifier identifierType="DOI">10.1594/PANGAEA.432865</identifier>
-			<creators>
-				<creator>
-					<creatorName>WOCE Sea Level, WSL</creatorName>
-					<creatorName>WOCE Sea Level, WSL</creatorName>
-				</creator>
-			</creators>
-			<titles>
-				<title>Daily sea level from coastal tide gauge station Woods_Hole in 1978 (Research
-					quality database)
-				</title>
-				<title>Daily sea level from coastal tide gauge station Woods_Hole in 1978 (Research
-					quality database)
-				</title>
-			</titles>
-			<publisher>PANGAEA - Data Publisher for Earth &amp; Environmental Science</publisher>
-			<publicationYear>2006</publicationYear>
-			<subjects>
-				<subject subjectScheme="Parameter">DATE/TIME</subject>
-				<subject subjectScheme="Parameter">Sea level</subject>
-				<subject subjectScheme="Campaign">SeaLevel</subject>
-				<subject subjectScheme="Project">World Ocean Circulation Experiment (WOCE)</subject>
-			</subjects>
-			<contributors>
-				<contributor contributorType="HostingInstitution">
-					<contributorName>Sea Level Center, University of Hawaii</contributorName>
-				</contributor>
-			</contributors>
-			<dates>
-				<date dateType="Collected">1978-01-01T12:00:00/1978-12-31T12:00:00</date>
-			</dates>
-			<language>eng</language>
-			<resourceType resourceTypeGeneral="Dataset">Dataset</resourceType>
-			<relatedIdentifiers>
-				<relatedIdentifier relatedIdentifierType="URL" relationType="IsDocumentedBy"
-				>http://store.pangaea.de/Projects/WOCE/SeaLevel_rqds/Woods_Hole.txt
-				</relatedIdentifier>
-			</relatedIdentifiers>
-			<sizes>
-				<size>365 data points</size>
-			</sizes>
-			<formats>
-				<format>text/tab-separated-values</format>
-			</formats>
-			<rightsList>
-				<rights rightsURI="http://creativecommons.org/licenses/by/3.0/">Creative Commons
-					Attribution 3.0 Unported (CC-BY)
-				</rights>
-			</rightsList>
-			<geoLocations>
-				<geoLocation>
-					<geoLocationPoint>41.5233 -70.6717</geoLocationPoint>
-				</geoLocation>
-			</geoLocations>
-		</resource>
-	</metadata>
-</oai:record>
Index: modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/ProteinResolver.java
===================================================================
--- modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/ProteinResolver.java	(revision 43901)
+++ modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/ProteinResolver.java	(nonexistent)
@@ -1,53 +0,0 @@
-package eu.dnetlib.resolver;
-
-import java.util.Arrays;
-
-import eu.dnetlib.resolver.model.CompletionStatus;
-import eu.dnetlib.resolver.model.ObjectProvenance;
-import eu.dnetlib.resolver.model.ObjectProvisionMode;
-import eu.dnetlib.resolver.model.ResolvedObject;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Created by sandro on 9/26/16.
- */
-public class ProteinResolver extends AbstractPIDResolver {
-
-	private static String baseUrl = "http://www.uniprot.org/uniprot/%s.xml";
-
-	@Autowired
-	private ProteinParser proteinParser;
-
-	@Override
-	protected boolean canResolvePid(final String pidType) {
-		return pidType != null && (pidType.toLowerCase().equals("protein") || pidType.toLowerCase().equals("ncbi-n"));
-	}
-
-	@Override
-	protected ResolvedObject resolve(final String pid, final String pidType) {
-
-		if ((pid == null) || !pid.toLowerCase().startsWith("p"))
-			return null;
-		final ResolvedObject record = proteinParser.parseRecord(requestURL(String.format(baseUrl, pid)));
-		if (record != null) {
-			record.setPid(pid);
-			record.setPidType(pidType);
-			record.setCompletionStatus(CompletionStatus.complete.toString());
-			ObjectProvenance provenance = new ObjectProvenance();
-			provenance.setCompletionStatus(CompletionStatus.complete.toString());
-			provenance.setDatasourceId("dli::r3d100010357");
-			provenance.setDatasource("The Universal Protein Resource");
-			provenance.setProvisionMode(ObjectProvisionMode.resolved.toString());
-			record.setDatasourceProvenance(Arrays.asList(provenance));
-		}
-		return record;
-	}
-
-	public ProteinParser getProteinParser() {
-		return proteinParser;
-	}
-
-	public void setProteinParser(final ProteinParser proteinParser) {
-		this.proteinParser = proteinParser;
-	}
-}
Index: modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/ProteinParser.java
===================================================================
--- modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/ProteinParser.java	(revision 43901)
+++ modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/ProteinParser.java	(nonexistent)
@@ -1,52 +0,0 @@
-package eu.dnetlib.resolver;
-
-import java.util.List;
-
-import com.ximpleware.AutoPilot;
-import com.ximpleware.VTDGen;
-import com.ximpleware.VTDNav;
-import eu.dnetlib.resolver.model.ObjectType;
-import eu.dnetlib.resolver.model.ResolvedObject;
-import eu.dnetlib.resolver.parser.UtilityParser;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Created by sandro on 9/26/16.
- */
-public class ProteinParser {
-
-	private static final Log log = LogFactory.getLog(ProteinParser.class);
-
-	public ResolvedObject parseRecord(final String record) {
-		try {
-			final ResolvedObject parsedObject = new ResolvedObject();
-			final VTDGen vg = new VTDGen();
-			vg.setDoc(record.getBytes());
-			vg.parse(true);
-			final VTDNav vn = vg.getNav();
-			final AutoPilot ap = new AutoPilot(vn);
-
-			final List<String> titles =
-					UtilityParser.getTextValue(ap, vn, "//*[local-name()='protein']/*[local-name()='recommendedName']/*[local-name()='fullName']");
-
-			parsedObject.setTitles(titles);
-
-			titles.forEach(it -> System.out.println("it = " + it));
-
-			final List<String> descriptions =
-					UtilityParser.getTextValue(ap, vn, "//*[local-name()='comment' and ./@type='function']/*[local-name()='text']");
-
-			if (descriptions != null && descriptions.size() > 0) {
-				parsedObject.setDescription(descriptions.get(0));
-			}
-
-			parsedObject.setType(ObjectType.dataset);
-			return parsedObject;
-		} catch (Throwable e) {
-			log.error(String.format("Error on parsing document %s", record), e);
-			return null;
-		}
-	}
-
-}
Index: modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/linkprovider/repo_by_link_proovider.xml
===================================================================
--- modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/linkprovider/repo_by_link_proovider.xml	(revision 43901)
+++ modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/linkprovider/repo_by_link_proovider.xml	(nonexistent)
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<RESOURCE_PROFILE>
-	<HEADER>
-		<RESOURCE_IDENTIFIER value="8bf9879c-535a-4818-8de7-790a3eb90675_V29ya2Zsb3dUZW1wbGF0ZURTUmVzb3VyY2VzL1dvcmtmbG93VGVtcGxhdGVEU1Jlc291cmNlVHlwZQ=="/>
-		<RESOURCE_TYPE value="WorkflowTemplateDSResourceType"/>
-		<RESOURCE_KIND value="WorkflowTemplateDSResources"/>
-		<RESOURCE_URI value=""/>
-		<DATE_OF_CREATION value="2001-12-31T12:00:00"/>
-	</HEADER>
-	<BODY>
-		<CONFIGURATION>
-			<PARAMETERS>
-				<PARAM name="dsId" description="Datasource Id" required="true" type="string"/>
-				<PARAM name="interface" description="Datasource Interface" required="true" type="string"/>
-				<PARAM name="collMdstoreId" description="Store for collected records" required="true" type="string"/>
-				<PARAM name="cleanMdstoreId" description="Store for cleaned records" required="true" type="string"/>
-				<PARAM name="patchMdstoreId" description="Store for patched records" required="true" type="string"/>
-				<PARAM name="nativeObjectStoreId" description="Object Store for native images" required="true" type="string"/>
-				<PARAM name="indexId" description="Index Identifier" required="true" type="string"/>
-			</PARAMETERS>
-			<WORKFLOW>
-				<NODE name="deleteCollMdStore" type="DeleteMDStore" isStart="true">
-					<DESCRIPTION>Delete the mdstore of collected records</DESCRIPTION>
-					<PARAMETERS>
-						<PARAM name="mdstoreId" ref="collMdstoreId"/>
-					</PARAMETERS>
-					<ARCS>
-						<ARC to="deleteCleanMdStore"/>
-					</ARCS>
-				</NODE>
-				<NODE name="deleteCleanMdStore" type="DeleteMDStore">
-					<DESCRIPTION>Delete the mdstore of cleaned records</DESCRIPTION>
-					<PARAMETERS>
-						<PARAM name="mdstoreId" ref="cleanMdstoreId"/>
-					</PARAMETERS>
-					<ARCS>
-						<ARC to="removeApiExtraFields"/>
-					</ARCS>
-				</NODE>
-
-				<NODE name="removeApiExtraFields" type="RemoveApiExtraFields">
-					<DESCRIPTION>Reset the extrafields of the api</DESCRIPTION>
-					<PARAMETERS>
-						<PARAM name="datasourceId" ref="dsId"/>
-						<PARAM name="datasourceInterface" ref="interface"/>
-						<PARAM name="fields">
-							<LIST>
-								<ITEM value="last_collection_total"/>
-								<ITEM value="last_collection_date"/>
-								<ITEM value="last_collection_mdId"/>
-								<ITEM value="last_aggregation_total"/>
-								<ITEM value="last_aggregation_date"/>
-								<ITEM value="last_aggregation_mdId"/>
-							</LIST>
-						</PARAM>
-					</PARAMETERS>
-					<ARCS>
-						<ARC to="success"/>
-					</ARCS>
-				</NODE>
-			</WORKFLOW>
-		</CONFIGURATION>
-	</BODY>
-</RESOURCE_PROFILE>
Index: webapps/dnet-dli-container/trunk/src/main/resources/log4j.properties
===================================================================
--- webapps/dnet-dli-container/trunk/src/main/resources/log4j.properties	(revision 43901)
+++ webapps/dnet-dli-container/trunk/src/main/resources/log4j.properties	(revision 43902)
@@ -34,6 +34,7 @@
 log4j.logger.eu.dnetlib.enabling.is.sn.ISSNServiceCore=WARN
 log4j.logger.eu.dnetlib.xml.database.exist.ExistDatabase=WARN
 log4j.logger.eu.dnetlib.enabling.is.store.AbstractContentInitializer=FATAL
+log4j.logger.eu.dnetlib.data.collector.plugins.oai.engine.HttpConnector=FATAL
 
 log4j.logger.org.apache.hadoop.hbase.mapreduce.TableInputFormatBase=FATAL
 
Index: modules/dnet-dli/trunk/src/test/java/eu/dnetlib/resolver/DLIParserTest.java
===================================================================
--- modules/dnet-dli/trunk/src/test/java/eu/dnetlib/resolver/DLIParserTest.java	(revision 43901)
+++ modules/dnet-dli/trunk/src/test/java/eu/dnetlib/resolver/DLIParserTest.java	(revision 43902)
@@ -2,16 +2,29 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
 
+import eu.dnetlib.resolver.model.CompletionStatus;
 import eu.dnetlib.resolver.model.ResolvedObject;
 import eu.dnetlib.resolver.model.serializer.DMFSerializer;
 import eu.dnetlib.resolver.parser.DMFDom4jResolverParser;
 import eu.dnetlib.resolver.parser.DMFResolverParser;
+import eu.dnetlib.resolver.parser.ScholixResolverParser;
 import org.antlr.stringtemplate.StringTemplate;
 import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -24,7 +37,7 @@
 	private static final Log log = LogFactory.getLog(DLIParserTest.class);
 
 	@Test
-	public void testParser() throws IOException {
+	public void testDMFParser() throws IOException {
 		final InputStream resourceAsStream = getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputRecord.xml");
 
 		String str = IOUtils.toString(resourceAsStream);
@@ -47,6 +60,95 @@
 	}
 
 	@Test
+	public void testScholixParser() throws IOException {
+		final InputStream resourceAsStream = getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputRecordScholix.xml");
+
+		String str = IOUtils.toString(resourceAsStream);
+		ScholixResolverParser parser = new ScholixResolverParser();
+		ResolvedObject object = parser.parseObject(str);
+
+		System.out.println("object = " + object);
+
+		Assert.assertNotNull(object);
+		System.out.println("object.getCompletionStatus() = " + object.getCompletionStatus());
+
+		Assert.assertTrue(object.getCompletionStatus().equals(CompletionStatus.incomplete.toString()));
+
+		Assert.assertNotNull(object.getRelations());
+
+		Assert.assertTrue(object.getRelations().size() == 1);
+
+		System.out.println("object.getRelations().get(0) = " + object.getRelations().get(0));
+
+	}
+
+	@Test
+	public void testProteinParser() throws IOException {
+		final NCBINResolver resolver = new NCBINResolver();
+		resolver.setNCBINParser(new NCBINParser());
+		final ResolvedObject p02768 = resolver.resolve("U36380", "protein");
+
+		System.out.println(p02768.getDescription());
+
+		System.out.println("p02768 = " + p02768);
+
+	}
+
+	@Test
+	public void testNCBIn() throws Exception {
+
+		Path path = FileSystems.getDefault().getPath("/var/lib/dli/elsevier.csv");
+
+		//Files.lines(path).forEach(it -> System.out.println("it = " + it));
+
+		List<Pair<String, String>> elem =
+				Files.lines(path).map(it -> it.split("@")).filter(it -> (it != null && it.length == 5)).map(it -> Pair.of(it[3], it[4]))
+						.collect(Collectors.toList());
+
+		final NCBINResolver resolver = new NCBINResolver();
+		resolver.setNCBINParser(new NCBINParser());
+
+		elem.forEach(it -> {
+			if (it.getLeft().equals("ncbi-n")) {
+				final ResolvedObject obj = resolver.resolve(it.getRight(), "ncbi-n");
+				System.out.println("p02768 = " + obj);
+
+			}
+		});
+
+	}
+
+	private String requestUrl(final String url) {
+		final CloseableHttpClient httpclient = HttpClients.createDefault();
+		try {
+			HttpGet httpGet = new HttpGet(url);
+			final String out = httpclient.execute(httpGet, response -> {
+				int status = response.getStatusLine().getStatusCode();
+				if (status >= 200 && status < 300) {
+					HttpEntity entity = response.getEntity();
+					return entity != null ? EntityUtils.toString(entity) : null;
+				} else {
+					return null;
+				}
+			});
+			return out;
+		} catch (Throwable e) {
+			log.error(e);
+			return null;
+		} finally {
+			try {
+				httpclient.close();
+			} catch (IOException e) {
+				log.error("Error on closing httpclient", e);
+			}
+		}
+	}
+
+
+
+
+
+	@Test
 	public void testDom4jParser() throws Exception {
 
 		final InputStream resourceAsStream = getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputRecord.xml");
Index: modules/dnet-dli/trunk/src/test/resources/eu/dnetlib/dli/parser/InputRecordDMF.xml
===================================================================
--- modules/dnet-dli/trunk/src/test/resources/eu/dnetlib/dli/parser/InputRecordDMF.xml	(nonexistent)
+++ modules/dnet-dli/trunk/src/test/resources/eu/dnetlib/dli/parser/InputRecordDMF.xml	(revision 43902)
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<oai:record xmlns:oai="http://www.openarchives.org/OAI/2.0/" xmlns:dri="http://www.driver-repository.eu/namespace/dri"
+            xmlns="http://namespace.openaire.eu/">
+	<oai:header>
+		<dri:objIdentifier>dli::r3d100010134::00002f60593fd1f758fb838fafb46795</dri:objIdentifier>
+		<dri:recordIdentifier>oai:pangaea.de:doi:10.1594/PANGAEA.432865</dri:recordIdentifier>
+		<dri:dateOfCollection>2016-09-12T16:55:22.27+02:00</dri:dateOfCollection>
+		<dri:repositoryId/>
+		<dri:datasourceprefix>dli::r3d100010134</dri:datasourceprefix>
+		<dri:datasourceID/>
+		<identifier xmlns="http://www.openarchives.org/OAI/2.0/"
+		>oai:pangaea.de:doi:10.1594/PANGAEA.432865
+		</identifier>
+		<datestamp xmlns="http://www.openarchives.org/OAI/2.0/">2016-06-25T12:35:00Z</datestamp>
+	</oai:header>
+	<metadata xmlns="http://www.openarchives.org/OAI/2.0/">
+		<resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		          xmlns="http://datacite.org/schema/kernel-3"
+		          xsi:schemaLocation="http://datacite.org/schema/kernel-3 http://schema.datacite.org/meta/kernel-3/metadata.xsd">
+			<identifier identifierType="DOI">10.1594/PANGAEA.432865</identifier>
+			<creators>
+				<creator>
+					<creatorName>WOCE Sea Level, WSL</creatorName>
+					<creatorName>WOCE Sea Level, WSL</creatorName>
+				</creator>
+			</creators>
+			<titles>
+				<title>Daily sea level from coastal tide gauge station Woods_Hole in 1978 (Research
+					quality database)
+				</title>
+				<title>Daily sea level from coastal tide gauge station Woods_Hole in 1978 (Research
+					quality database)
+				</title>
+			</titles>
+			<publisher>PANGAEA - Data Publisher for Earth &amp; Environmental Science</publisher>
+			<publicationYear>2006</publicationYear>
+			<subjects>
+				<subject subjectScheme="Parameter">DATE/TIME</subject>
+				<subject subjectScheme="Parameter">Sea level</subject>
+				<subject subjectScheme="Campaign">SeaLevel</subject>
+				<subject subjectScheme="Project">World Ocean Circulation Experiment (WOCE)</subject>
+			</subjects>
+			<contributors>
+				<contributor contributorType="HostingInstitution">
+					<contributorName>Sea Level Center, University of Hawaii</contributorName>
+				</contributor>
+			</contributors>
+			<dates>
+				<date dateType="Collected">1978-01-01T12:00:00/1978-12-31T12:00:00</date>
+			</dates>
+			<language>eng</language>
+			<resourceType resourceTypeGeneral="Dataset">Dataset</resourceType>
+			<relatedIdentifiers>
+				<relatedIdentifier relatedIdentifierType="URL" relationType="IsDocumentedBy"
+				>http://store.pangaea.de/Projects/WOCE/SeaLevel_rqds/Woods_Hole.txt
+				</relatedIdentifier>
+			</relatedIdentifiers>
+			<sizes>
+				<size>365 data points</size>
+			</sizes>
+			<formats>
+				<format>text/tab-separated-values</format>
+			</formats>
+			<rightsList>
+				<rights rightsURI="http://creativecommons.org/licenses/by/3.0/">Creative Commons
+					Attribution 3.0 Unported (CC-BY)
+				</rights>
+			</rightsList>
+			<geoLocations>
+				<geoLocation>
+					<geoLocationPoint>41.5233 -70.6717</geoLocationPoint>
+				</geoLocation>
+			</geoLocations>
+		</resource>
+	</metadata>
+</oai:record>
Index: modules/dnet-dli/trunk/src/test/resources/eu/dnetlib/dli/parser/InputRecordScholix.xml
===================================================================
--- modules/dnet-dli/trunk/src/test/resources/eu/dnetlib/dli/parser/InputRecordScholix.xml	(nonexistent)
+++ modules/dnet-dli/trunk/src/test/resources/eu/dnetlib/dli/parser/InputRecordScholix.xml	(revision 43902)
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<record xmlns:oaf="http://namespace.openaire.eu/oaf"
+        xmlns:dri="http://www.driver-repository.eu/namespace/dri">
+	<oai:header xmlns:oai="http://www.openarchives.org/OAI/2.0/"
+	>
+		<dri:objIdentifier>dli::elsevier::0000d9de7b24b7cb315852926b88e473</dri:objIdentifier>
+		<dri:recordIdentifier>10.1016/j.jmgm.2014.05.002::3CQZ</dri:recordIdentifier>
+		<dri:dateOfCollection>2016-09-29T16:23:34.316+02:00</dri:dateOfCollection>
+		<dri:repositoryId>2d1245d4-c169-4247-9106-0f69f8d752eb_UmVwb3NpdG9yeVNlcnZpY2VSZXNvdXJjZXMvUmVwb3NpdG9yeVNlcnZpY2VSZXNvdXJjZVR5cGU=</dri:repositoryId>
+		<dri:datasourceprefix>dli::elsevier</dri:datasourceprefix>
+	</oai:header>
+	<metadata>
+		<scholix:link xmlns:scholix="http://www.scholix.org">
+			<assertion_info>
+				<source>dli::elsevier</source>
+				<relationType scheme="datacite">unknown</relationType>
+			</assertion_info>
+			<source>
+				<pid type="DOI">10.1016/j.jmgm.2014.05.002</pid>
+				<type>publication</type>
+			</source>
+			<target>
+				<pid type="pdb">3CQZ</pid>
+				<type>dataset</type>
+			</target>
+		</scholix:link>
+	</metadata>
+	<oaf:datainfo>
+		<oaf:completionStatus>incomplete</oaf:completionStatus>
+		<oaf:provisionMode>collected</oaf:provisionMode>
+	</oaf:datainfo>
+</record>
\ No newline at end of file
Index: modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/NCBINParser.java
===================================================================
--- modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/NCBINParser.java	(nonexistent)
+++ modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/NCBINParser.java	(revision 43902)
@@ -0,0 +1,52 @@
+package eu.dnetlib.resolver;
+
+import java.util.List;
+
+import com.ximpleware.AutoPilot;
+import com.ximpleware.VTDGen;
+import com.ximpleware.VTDNav;
+import eu.dnetlib.resolver.model.ObjectType;
+import eu.dnetlib.resolver.model.ResolvedObject;
+import eu.dnetlib.resolver.parser.UtilityParser;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Created by sandro on 9/26/16.
+ */
+public class NCBINParser {
+
+	private static final Log log = LogFactory.getLog(NCBINParser.class);
+
+	public ResolvedObject parseRecord(final String record) {
+		try {
+			final ResolvedObject parsedObject = new ResolvedObject();
+			final VTDGen vg = new VTDGen();
+			vg.setDoc(record.getBytes());
+			vg.parse(true);
+			final VTDNav vn = vg.getNav();
+			final AutoPilot ap = new AutoPilot(vn);
+
+			final List<String> titles =
+					UtilityParser.getTextValue(ap, vn, "//GBSeq_definition");
+
+			parsedObject.setTitles(titles);
+
+			titles.forEach(it -> System.out.println("it = " + it));
+
+			final List<String> descriptions =
+					UtilityParser.getTextValue(ap, vn, "//GBSeq_comment");
+
+			if (descriptions != null && descriptions.size() > 0) {
+				parsedObject.setDescription(descriptions.get(0));
+			}
+
+			parsedObject.setType(ObjectType.dataset);
+			return parsedObject;
+		} catch (Throwable e) {
+			log.error(String.format("Error on parsing document %s", record), e);
+			return null;
+		}
+	}
+
+}
Index: modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/NCBINResolver.java
===================================================================
--- modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/NCBINResolver.java	(nonexistent)
+++ modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/NCBINResolver.java	(revision 43902)
@@ -0,0 +1,54 @@
+package eu.dnetlib.resolver;
+
+import java.util.Arrays;
+
+import eu.dnetlib.resolver.model.CompletionStatus;
+import eu.dnetlib.resolver.model.ObjectProvenance;
+import eu.dnetlib.resolver.model.ObjectProvisionMode;
+import eu.dnetlib.resolver.model.ResolvedObject;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Created by sandro on 9/26/16.
+ */
+public class NCBINResolver extends AbstractPIDResolver {
+
+	private static String baseUrl =
+			"https://www.ncbi.nlm.nih.gov/sviewer/viewer.fcgi?db=nuccore&val=%s&page_size=5&fmt_mask=0&report=gbx&retmode=text&page=1&page_size=1";
+
+	@Autowired
+	private NCBINParser NCBINParser;
+
+	@Override
+	protected boolean canResolvePid(final String pidType) {
+		return pidType != null && (pidType.toLowerCase().equals("protein") || pidType.toLowerCase().equals("ncbi-n"));
+	}
+
+	@Override
+	protected ResolvedObject resolve(final String pid, final String pidType) {
+
+		if ((pid == null))
+			return null;
+		final ResolvedObject record = NCBINParser.parseRecord(requestURL(String.format(baseUrl, pid)));
+		if (record != null) {
+			record.setPid(pid);
+			record.setPidType(pidType);
+			record.setCompletionStatus(CompletionStatus.complete.toString());
+			ObjectProvenance provenance = new ObjectProvenance();
+			provenance.setCompletionStatus(CompletionStatus.complete.toString());
+			provenance.setDatasourceId("dli::r3d100010778");
+			provenance.setDatasource("NCBI Nucleotide");
+			provenance.setProvisionMode(ObjectProvisionMode.resolved.toString());
+			record.setDatasourceProvenance(Arrays.asList(provenance));
+		}
+		return record;
+	}
+
+	public NCBINParser getNCBINParser() {
+		return NCBINParser;
+	}
+
+	public void setNCBINParser(final NCBINParser NCBINParser) {
+		this.NCBINParser = NCBINParser;
+	}
+}
Index: modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/parser/UtilityParser.java
===================================================================
--- modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/parser/UtilityParser.java	(nonexistent)
+++ modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/parser/UtilityParser.java	(revision 43902)
@@ -0,0 +1,82 @@
+package eu.dnetlib.resolver.parser;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.ximpleware.AutoPilot;
+import com.ximpleware.VTDNav;
+
+/**
+ * Created by sandro on 9/29/16.
+ */
+public class UtilityParser {
+
+	public static List<Node> getTextValuesWithAttributes(final AutoPilot ap, final VTDNav vn, final String xpath, final List<String> attributes)
+			throws Exception {
+		List<Node> results = new ArrayList<>();
+		ap.selectXPath(xpath);
+		while (ap.evalXPath() != -1) {
+			final Node currentNode = new Node();
+			final Map<String, String> currentAttributes = new HashMap<>();
+			int t = vn.getText();
+			currentNode.setTextValue(vn.toNormalizedString(t));
+
+			attributes.forEach(attributeKey -> {
+				try {
+					int attr = vn.getAttrVal(attributeKey);
+					currentAttributes.put(attributeKey, vn.toNormalizedString(attr));
+				} catch (Throwable e) {
+
+				}
+			});
+			currentNode.setAttributes(currentAttributes);
+			results.add(currentNode);
+		}
+		return results;
+	}
+
+	public static List<String> getTextValue(final AutoPilot ap, final VTDNav vn, final String xpath) throws Exception {
+		List<String> results = new ArrayList<>();
+		ap.selectXPath(xpath);
+		while (ap.evalXPath() != -1) {
+
+			int t = vn.getText();
+			results.add(vn.toNormalizedString(t));
+		}
+		return results;
+	}
+
+	public static String getSingleValue(final AutoPilot ap, final VTDNav nav, final String xpath) throws Exception {
+		ap.selectXPath(xpath);
+		while (ap.evalXPath() != -1) {
+			return nav.toNormalizedString(nav.getText());
+		}
+		return null;
+	}
+
+	public static class Node {
+
+		private String textValue;
+
+		private Map<String, String> attributes;
+
+		public String getTextValue() {
+			return textValue;
+		}
+
+		public void setTextValue(final String textValue) {
+			this.textValue = textValue;
+		}
+
+		public Map<String, String> getAttributes() {
+			return attributes;
+		}
+
+		public void setAttributes(final Map<String, String> attributes) {
+			this.attributes = attributes;
+		}
+	}
+
+}
Index: modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/parser/DMFResolverParser.java
===================================================================
--- modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/parser/DMFResolverParser.java	(revision 43901)
+++ modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/parser/DMFResolverParser.java	(revision 43902)
@@ -1,6 +1,8 @@
 package eu.dnetlib.resolver.parser;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 import com.google.common.collect.Lists;
 import com.ximpleware.AutoPilot;
@@ -7,6 +9,7 @@
 import com.ximpleware.VTDGen;
 import com.ximpleware.VTDNav;
 import eu.dnetlib.resolver.model.*;
+import eu.dnetlib.resolver.parser.UtilityParser.Node;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -29,11 +32,11 @@
 			final AutoPilot ap = new AutoPilot(vn);
 			ap.declareXPathNameSpace("dri", "http://www.driver-repository.eu/namespace/dri");
 
-			final String datasourcePrefix = getSingleValue(ap, vn, "//dri:datasourceprefix");
+			final String datasourcePrefix = UtilityParser.getSingleValue(ap, vn, "//dri:datasourceprefix");
 			ap.declareXPathNameSpace("oaf", "http://namespace.openaire.eu/oaf");
 
-			final String completionStatus = getSingleValue(ap, vn, "//oaf:completionStatus");
-			final String provisionMode = getSingleValue(ap, vn, "//oaf:provisionMode");
+			final String completionStatus = UtilityParser.getSingleValue(ap, vn, "//oaf:completionStatus");
+			final String provisionMode = UtilityParser.getSingleValue(ap, vn, "//oaf:provisionMode");
 
 			final ObjectProvenance provenance = new ObjectProvenance();
 			provenance.setDatasourceId(datasourcePrefix);
@@ -43,27 +46,28 @@
 			parsedObject.setDatasourceProvenance(Lists.newArrayList(provenance));
 
 			ap.declareXPathNameSpace("datacite", "http://datacite.org/schema/kernel-3");
-			final List<Map<String, String>> identifierType = getTextValuesWithAttributes(ap, vn, "//datacite:identifier", Lists.newArrayList("identifierType"));
+			final List<Node> identifierType =
+					UtilityParser.getTextValuesWithAttributes(ap, vn, "//datacite:identifier", Lists.newArrayList("identifierType"));
 
 			if (identifierType != null && identifierType.size() > 0) {
 
-				final Map<String, String> result = identifierType.get(0);
-				parsedObject.setPid(result.get("resultText"));
-				parsedObject.setPidType(result.get("identifierType"));
+				final Node result = identifierType.get(0);
+				parsedObject.setPid(result.getTextValue());
+				parsedObject.setPidType(result.getAttributes().get("identifierType"));
 			} else {
 				log.error("Error on parsing record the identifire should not null ");
 				return null;
 			}
 
-			final List<Map<String, String>> relations =
-					getTextValuesWithAttributes(ap, vn, "//datacite:relatedIdentifier", Arrays.asList("relatedIdentifierType", "relationType"));
+			final List<Node> relations =
+					UtilityParser.getTextValuesWithAttributes(ap, vn, "//datacite:relatedIdentifier", Arrays.asList("relatedIdentifierType", "relationType"));
 
 			if (relations != null && relations.size() > 0) {
 				final List<ObjectRelation> relationsResult = new ArrayList<>();
 				relations.forEach(relationMap -> {
-					final String relationType = relationMap.get("relationType");
-					final String relatedIdentifierType = relationMap.get("relatedIdentifierType");
-					final String relatedPid = relationMap.get("resultText");
+					final String relationType = relationMap.getAttributes().get("relationType");
+					final String relatedIdentifierType = relationMap.getAttributes().get("relatedIdentifierType");
+					final String relatedPid = relationMap.getTextValue();
 					final ObjectRelation currentRelation = new ObjectRelation();
 					currentRelation.setTargetPID(new PID(relatedPid, relatedIdentifierType));
 					currentRelation.setRelationSemantics(relationType);
@@ -73,12 +77,12 @@
 				parsedObject.setRelations(relationsResult);
 			}
 
-			final List<Map<String, String>> subjects = getTextValuesWithAttributes(ap, vn, "//datacite:subject", Arrays.asList("subjectScheme"));
+			final List<Node> subjects = UtilityParser.getTextValuesWithAttributes(ap, vn, "//datacite:subject", Arrays.asList("subjectScheme"));
 
 			if (subjects != null && subjects.size() > 0) {
 				final List<SubjectType> subjectResult = new ArrayList<>();
 				subjects.forEach(subjectMap -> {
-					final SubjectType subject = new SubjectType(subjectMap.get("subjectScheme"), subjectMap.get("resultText"));
+					final SubjectType subject = new SubjectType(subjectMap.getAttributes().get("subjectScheme"), subjectMap.getTextValue());
 					subjectResult.add(subject);
 				});
 				parsedObject.setSubjects(subjectResult);
@@ -86,19 +90,19 @@
 
 			parsedObject.setCompletionStatus(completionStatus);
 
-			final List<String> creators = getTextValue(ap, vn, "//datacite:creator/datacite:creatorName");
+			final List<String> creators = UtilityParser.getTextValue(ap, vn, "//datacite:creator/datacite:creatorName");
 			if (creators != null && creators.size() > 0) {
 				parsedObject.setAuthors(creators);
 			}
-			final List<String> titles = getTextValue(ap, vn, "//datacite:title");
+			final List<String> titles = UtilityParser.getTextValue(ap, vn, "//datacite:title");
 			if (titles != null && titles.size() > 0) {
 				parsedObject.setTitles(titles);
 			}
-			final String type = getSingleValue(ap, vn, "//datacite:resourceType");
+			final String type = UtilityParser.getSingleValue(ap, vn, "//datacite:resourceType");
 
 			if (setDatasetType(parsedObject, type)) return null;
 
-			final List<String> dates = getTextValue(ap, vn, "//datacite:dates/date");
+			final List<String> dates = UtilityParser.getTextValue(ap, vn, "//datacite:dates/date");
 
 			if (dates != null && dates.size() > 0) {
 				parsedObject.setDate(dates.get(0));
@@ -110,46 +114,7 @@
 		}
 	}
 
-	private List<Map<String, String>> getTextValuesWithAttributes(final AutoPilot ap, final VTDNav vn, final String xpath, final List<String> attributes)
-			throws Exception {
-		List<Map<String, String>> results = new ArrayList<>();
-		ap.selectXPath(xpath);
-		while (ap.evalXPath() != -1) {
-			Map<String, String> currentValue = new HashMap<>();
-			int t = vn.getText();
-			currentValue.put("resultText", vn.toNormalizedString(t));
-			attributes.forEach(attributeKey -> {
-				try {
-					int attr = vn.getAttrVal(attributeKey);
-					currentValue.put(attributeKey, vn.toNormalizedString(attr));
-				} catch (Throwable e) {
 
-				}
-			});
 
-			results.add(currentValue);
-		}
-		return results;
-	}
-
-	private List<String> getTextValue(final AutoPilot ap, final VTDNav vn, final String xpath) throws Exception {
-		List<String> results = new ArrayList<>();
-		ap.selectXPath(xpath);
-		while (ap.evalXPath() != -1) {
-
-			int t = vn.getText();
-			results.add(vn.toNormalizedString(t));
-		}
-		return results;
-	}
-
-	private String getSingleValue(final AutoPilot ap, final VTDNav nav, final String xpath) throws Exception {
-		ap.selectXPath(xpath);
-		while (ap.evalXPath() != -1) {
-			return nav.toNormalizedString(nav.getText());
-		}
-		return null;
-	}
-
 }
 
Index: modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/parser/ScholixResolverParser.java
===================================================================
--- modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/parser/ScholixResolverParser.java	(nonexistent)
+++ modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/parser/ScholixResolverParser.java	(revision 43902)
@@ -0,0 +1,102 @@
+package eu.dnetlib.resolver.parser;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import com.google.common.collect.Lists;
+import com.ximpleware.AutoPilot;
+import com.ximpleware.VTDGen;
+import com.ximpleware.VTDNav;
+import eu.dnetlib.resolver.model.*;
+import eu.dnetlib.resolver.parser.UtilityParser.Node;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Created by sandro on 9/29/16.
+ */
+public class ScholixResolverParser extends AbstractResolverParser {
+
+	private static final Log log = LogFactory.getLog(ScholixResolverParser.class);
+
+	@Override
+	public ResolvedObject parseObject(final String record) {
+
+		try {
+			final ResolvedObject parsedObject = new ResolvedObject();
+			final VTDGen vg = new VTDGen();
+			vg.setDoc(record.getBytes());
+			vg.parse(true);
+
+			final VTDNav vn = vg.getNav();
+			final AutoPilot ap = new AutoPilot(vn);
+			ap.declareXPathNameSpace("dri", "http://www.driver-repository.eu/namespace/dri");
+
+			final String datasourcePrefix = UtilityParser.getSingleValue(ap, vn, "//dri:datasourceprefix");
+			ap.declareXPathNameSpace("oaf", "http://namespace.openaire.eu/oaf");
+
+			final String completionStatus = UtilityParser.getSingleValue(ap, vn, "//oaf:completionStatus");
+			final String provisionMode = UtilityParser.getSingleValue(ap, vn, "//oaf:provisionMode");
+
+			final ObjectProvenance provenance = new ObjectProvenance();
+			provenance.setDatasourceId(datasourcePrefix);
+			provenance.setDatasource(datasourcePrefix);
+			provenance.setCompletionStatus(completionStatus);
+			provenance.setProvisionMode(provisionMode);
+			parsedObject.setDatasourceProvenance(Lists.newArrayList(provenance));
+
+			parsedObject.setCompletionStatus(completionStatus);
+
+			ap.declareXPathNameSpace("scholix", "http://www.scholix.org");
+
+			List<Node> sourcePid = UtilityParser.getTextValuesWithAttributes(ap, vn, "//*[local-name()='source']/*[local-name()='pid']", Arrays.asList("type"));
+
+			if (sourcePid == null || sourcePid.size() == 0) {
+				return null;
+			}
+			List<Node> targetPid = UtilityParser.getTextValuesWithAttributes(ap, vn, "//*[local-name()='target']/*[local-name()='pid']", Arrays.asList("type"));
+			if (targetPid == null || targetPid.size() == 0) {
+				return null;
+			}
+			parsedObject.setPid(sourcePid.get(0).getTextValue());
+			parsedObject.setPidType(sourcePid.get(0).getAttributes().get("type"));
+
+			List<String> sourceTypes = UtilityParser.getTextValue(ap, vn, "//*[local-name()='source']/*[local-name()='type']");
+
+			List<String> targetTypes = UtilityParser.getTextValue(ap, vn, "//*[local-name()='target']/*[local-name()='type']");
+
+			if (sourceTypes != null && sourceTypes.size() > 0) {
+				parsedObject.setType(ObjectType.valueOf(sourceTypes.get(0)));
+			}
+
+			List<String> relationType = UtilityParser.getTextValue(ap, vn, "//*[local-name()='relationType']");
+			String relationSemantic = null;
+
+			if (relationType != null && relationType.size() > 0) {
+				relationSemantic = relationType.get(0);
+			}
+
+			if (sourceTypes != null && sourceTypes.size() > 0) {
+				parsedObject.setType(ObjectType.valueOf(sourceTypes.get(0)));
+			}
+
+			final List<ObjectRelation> relations = new ArrayList<>();
+
+			ObjectRelation relation = new ObjectRelation();
+			relation.setCompletionStatus(CompletionStatus.incomplete.toString());
+			relation.setRelationProvenance(parsedObject.getDatasourceProvenance());
+			relation.setRelationSemantics(relationSemantic);
+			relation.setTargetPID(new PID(targetPid.get(0).getTextValue(), targetPid.get(0).getAttributes().get("type")));
+			if (targetTypes != null || targetTypes.size() > 0)
+				relation.setTargetType(ObjectType.valueOf(targetTypes.get(0)));
+			relations.add(relation);
+			parsedObject.setRelations(relations);
+
+			return parsedObject;
+		} catch (Throwable e) {
+			log.error("Error on parsing parser");
+		}
+		return null;
+	}
+}
Index: modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/model/ResolvedObject.java
===================================================================
--- modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/model/ResolvedObject.java	(revision 43901)
+++ modules/dnet-dli/trunk/src/main/java/eu/dnetlib/resolver/model/ResolvedObject.java	(revision 43902)
@@ -42,6 +42,9 @@
 	 */
 	private ObjectType type;
 
+	/**
+	 * Description of the resolved object
+	 */
 	private String description;
 
 	/**
@@ -59,10 +62,13 @@
 	 */
 	private String date;
 
+	/**
+	 * A list of subjects of type scheme term
+	 */
 	private List<SubjectType> subjects;
 
 	/**
-	 * The relations.
+	 * The related objects.
 	 */
 	private List<ObjectRelation> relations;
 
@@ -402,9 +408,10 @@
 	@Override
 	public String toString() {
 
-		String s = "DLIObject \n\t Identifier: %s \n\t Pid:%s \n\t PIDType: %s \n\t Entity Type: %s \n\t Titles:%s \n\t Authors:%s, \n\tProvenance%s";
+		String s =
+				"DLIObject \n\t Identifier: %s \n\t Pid:%s \n\t PIDType: %s \n\t Entity Type: %s \n\t Titles:%s \n\t Description:%s \n\t Authors:%s, \n\tProvenance%s";
 
-		return String.format(s, this.getIdentifier(), this.getPid(), this.getPidType(), this.getType(), this.getTitles(),
+		return String.format(s, this.getIdentifier(), this.getPid(), this.getPidType(), this.getType(), this.getTitles(), this.description,
 				this.authors, Arrays.toString(this.getDatasourceProvenance().toArray()));
 
 	}
Index: modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/resolver/applicationContext-dli-resolver.xml
===================================================================
--- modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/resolver/applicationContext-dli-resolver.xml	(revision 43901)
+++ modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/resolver/applicationContext-dli-resolver.xml	(revision 43902)
@@ -40,6 +40,14 @@
 		<property name="cache" ref="dliResolverCache"/>
 	</bean>
 
+	<bean id="ncbinResolver"
+	      class="eu.dnetlib.resolver.NCBINResolver">
+		<property name="cache" ref="dliResolverCache"/>
+	</bean>
+
+	<bean id="ncbinParser"
+	      class="eu.dnetlib.resolver.NCBINParser"/>
+
 	<bean id="crossrefRecordParserJSON"
 	      class="eu.dnetlib.resolver.CrossRefParserJSON"/>
 
Index: modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/dli/workflows/repo-hi/dli_aggregation_wf.xml.st
===================================================================
--- modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/dli/workflows/repo-hi/dli_aggregation_wf.xml.st	(revision 43901)
+++ modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/dli/workflows/repo-hi/dli_aggregation_wf.xml.st	(revision 43902)
@@ -19,7 +19,7 @@
             <PARAMETERS>
             	<PARAM name="collMdstoreId"                     description="Store for collected records"           required="true" managedBy="system" category="MDSTORE_ID"/>
             	<PARAM name="cleanMdstoreId"                    description="Store for cleaned records"             required="true" managedBy="system" category="MDSTORE_ID"/>
-            	<PARAM name="cleanTransformationRuleId"         description="Transformation Rule Identifier"        required="true" managedBy="user"   category="TRANSFORMATION_RULE_ID" type="string" function="listProfiles('TransformationRuleDSResourceType', '//TITLE')"/>
+            	<PARAM name="cleanTransformationRuleId"         description="Transformation Rule Identifier"        required="true" managedBy="user"   category="TRANSFORMATION_RULE_ID" type="string" function="listProfiles('TransformationRuleDSResourceType', '//TITLE', 'DLI:')"/>
             </PARAMETERS>
             <WORKFLOW>
                 <NODE isStart="true" name="collection" type="LaunchWorkflowTemplate">
Index: modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/oai_datacite_transform.xml
===================================================================
--- modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/oai_datacite_transform.xml	(revision 43901)
+++ modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/oai_datacite_transform.xml	(revision 43902)
@@ -11,7 +11,7 @@
 		<CONFIGURATION>
 			<IMPORTED/>
 			<SCRIPT>
-				<TITLE>OAI_Datacite to DMF transform</TITLE>
+				<TITLE>DLI: OAI_Datacite to DMF transform</TITLE>
 				<CODE><![CDATA[
 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                 xmlns:datetime="http://exslt.org/dates-and-times" xmlns:exslt="http://exslt.org/common"
Index: modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/elsevier_transform.xml
===================================================================
--- modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/elsevier_transform.xml	(nonexistent)
+++ modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/elsevier_transform.xml	(revision 43902)
@@ -0,0 +1,58 @@
+<RESOURCE_PROFILE>
+	<HEADER>
+		<RESOURCE_IDENTIFIER
+				value="d6aa3c16-b6e8-4953-a39e-cb2ea99d2ba8_VHJhbnNmb3JtYXRpb25SdWxlRFNSZXNvdXJjZXMvVHJhbnNmb3JtYXRpb25SdWxlRFNSZXNvdXJjZVR5cGU="/>
+		<RESOURCE_TYPE value="TransformationRuleDSResourceType"/>
+		<RESOURCE_KIND value="TransformationRuleDSResources"/>
+		<RESOURCE_URI value=""/>
+		<DATE_OF_CREATION value="2014-11-19T11:05:55+01:00"/>
+	</HEADER>
+	<BODY>
+		<CONFIGURATION>
+			<IMPORTED/>
+			<SCRIPT>
+				<TITLE>DLI: Elsevier to Scholix transform</TITLE>
+				<CODE><![CDATA[
+<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:datetime="http://exslt.org/dates-and-times" xmlns:exslt="http://exslt.org/common"
+    xmlns:oaf="http://namespace.openaire.eu/oaf"
+    xmlns:dri="http://www.driver-repository.eu/namespace/dri"
+    exclude-result-prefixes="xsl datetime exslt">
+    <xsl:template match="/">
+        <record>
+            <xsl:copy-of select="//*[local-name()='header']"/>
+
+            <xsl:variable name="source" ><xsl:value-of select="//dri:datasourceprefix"/></xsl:variable>
+            <metadata>
+                <scholix:link xmlns:scholix="http://www.scholix.org" >
+                    <assertion_info>
+                        <source><xsl:value-of select="$source"/></source>
+                        <relationType scheme="datacite">unknown</relationType>
+                    </assertion_info>
+                    <source>
+                        <pid type="DOI"><xsl:value-of select="//column[./@name='ArticleID']"/></pid>
+                        <type>publication</type>
+                    </source>
+
+                    <target>
+                        <pid>
+                            <xsl:attribute name="type"><xsl:value-of select="//column[./@name='db']"/></xsl:attribute>
+                            <xsl:value-of select="//column[./@name='datasetID']"/></pid>
+                        <type>dataset</type>
+                    </target>
+                </scholix:link>
+            </metadata>
+            <oaf:datainfo>
+                <oaf:completionStatus>incomplete</oaf:completionStatus>
+                <oaf:provisionMode>collected</oaf:provisionMode>
+            </oaf:datainfo>
+        </record>
+    </xsl:template>
+</xsl:stylesheet>
+]]></CODE>
+			</SCRIPT>
+		</CONFIGURATION>
+		<STATUS/>
+		<SECURITY_PARAMETERS/>
+	</BODY>
+</RESOURCE_PROFILE>
Index: modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/linkprovider/repo_by_link_provider.xml
===================================================================
--- modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/linkprovider/repo_by_link_provider.xml	(nonexistent)
+++ modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/linkprovider/repo_by_link_provider.xml	(revision 43902)
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<RESOURCE_PROFILE>
+	<HEADER>
+		<RESOURCE_IDENTIFIER value="8bf9879c-535a-4818-8de7-790a3eb90675_V29ya2Zsb3dUZW1wbGF0ZURTUmVzb3VyY2VzL1dvcmtmbG93VGVtcGxhdGVEU1Jlc291cmNlVHlwZQ=="/>
+		<RESOURCE_TYPE value="WorkflowTemplateDSResourceType"/>
+		<RESOURCE_KIND value="WorkflowTemplateDSResources"/>
+		<RESOURCE_URI value=""/>
+		<DATE_OF_CREATION value="2001-12-31T12:00:00"/>
+	</HEADER>
+	<BODY>
+		<CONFIGURATION>
+			<PARAMETERS>
+				<PARAM name="dsId" description="Datasource Id" required="true" type="string"/>
+				<PARAM name="interface" description="Datasource Interface" required="true" type="string"/>
+				<PARAM name="collMdstoreId" description="Store for collected records" required="true" type="string"/>
+				<PARAM name="cleanMdstoreId" description="Store for cleaned records" required="true" type="string"/>
+				<PARAM name="patchMdstoreId" description="Store for patched records" required="true" type="string"/>
+				<PARAM name="nativeObjectStoreId" description="Object Store for native images" required="true" type="string"/>
+				<PARAM name="indexId" description="Index Identifier" required="true" type="string"/>
+			</PARAMETERS>
+			<WORKFLOW>
+				<NODE name="deleteCollMdStore" type="DeleteMDStore" isStart="true">
+					<DESCRIPTION>Delete the mdstore of collected records</DESCRIPTION>
+					<PARAMETERS>
+						<PARAM name="mdstoreId" ref="collMdstoreId"/>
+					</PARAMETERS>
+					<ARCS>
+						<ARC to="deleteCleanMdStore"/>
+					</ARCS>
+				</NODE>
+				<NODE name="deleteCleanMdStore" type="DeleteMDStore">
+					<DESCRIPTION>Delete the mdstore of cleaned records</DESCRIPTION>
+					<PARAMETERS>
+						<PARAM name="mdstoreId" ref="cleanMdstoreId"/>
+					</PARAMETERS>
+					<ARCS>
+						<ARC to="removeApiExtraFields"/>
+					</ARCS>
+				</NODE>
+
+				<NODE name="removeApiExtraFields" type="RemoveApiExtraFields">
+					<DESCRIPTION>Reset the extrafields of the api</DESCRIPTION>
+					<PARAMETERS>
+						<PARAM name="datasourceId" ref="dsId"/>
+						<PARAM name="datasourceInterface" ref="interface"/>
+						<PARAM name="fields">
+							<LIST>
+								<ITEM value="last_collection_total"/>
+								<ITEM value="last_collection_date"/>
+								<ITEM value="last_collection_mdId"/>
+								<ITEM value="last_aggregation_total"/>
+								<ITEM value="last_aggregation_date"/>
+								<ITEM value="last_aggregation_mdId"/>
+							</LIST>
+						</PARAM>
+					</PARAMETERS>
+					<ARCS>
+						<ARC to="success"/>
+					</ARCS>
+				</NODE>
+			</WORKFLOW>
+		</CONFIGURATION>
+	</BODY>
+</RESOURCE_PROFILE>
Index: modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/linkprovider/repo_hi_link_provider.xml
===================================================================
--- modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/linkprovider/repo_hi_link_provider.xml	(revision 43901)
+++ modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/linkprovider/repo_hi_link_provider.xml	(revision 43902)
@@ -45,7 +45,7 @@
 					<PARAMETERS>
 						<PARAM name="wfName" value="Aggregate Metadata from DLI Link Provider Datasource[Ingestion]"/>
 						<PARAM name="wfTemplate" value="/eu/dnetlib/dli/workflows/repo-hi/dli_aggregation_wf.xml.st"/>
-						<PARAM name="description" value="Aggregate and Validate Metadata from DLI Link Provider [Ingestion]"/>
+						<PARAM name="description" value="Aggregate  Metadata from DLI Link Provider [Ingestion]"/>
 					</PARAMETERS>
 					<ARCS>
 						<ARC to="createDLINative"/>
Index: modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/linkprovider/link_provider_transform_template.xml
===================================================================
--- modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/linkprovider/link_provider_transform_template.xml	(revision 43901)
+++ modules/dnet-dli/trunk/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/linkprovider/link_provider_transform_template.xml	(revision 43902)
@@ -21,7 +21,6 @@
 					<DESCRIPTION>Fetch records from MDStore</DESCRIPTION>
 					<PARAMETERS>
 						<PARAM name="mdId" ref="collMdstoreId"/>
-						<PARAM name="mdFormat" value="oai_efg"/>
 						<PARAM name="eprParam" value="orig_epr"/>
 					</PARAMETERS>
 					<ARCS>
Index: modules/dnet-dli/trunk/pom.xml
===================================================================
--- modules/dnet-dli/trunk/pom.xml	(revision 43901)
+++ modules/dnet-dli/trunk/pom.xml	(revision 43902)
@@ -44,7 +44,14 @@
 			<version>2.11</version>
 		</dependency>
 
+		<!-- https://mvnrepository.com/artifact/org.biojava/biojava3-core -->
+		<dependency>
+			<groupId>org.biojava</groupId>
+			<artifactId>biojava3-core</artifactId>
+			<version>3.0</version>
+		</dependency>
 
+
 		<dependency>
 			<groupId>junit</groupId>
 			<artifactId>junit</artifactId>
Index: modules/dnet-core-components/trunk/src/main/resources/eu/dnetlib/cnr-default.properties
===================================================================
--- modules/dnet-core-components/trunk/src/main/resources/eu/dnetlib/cnr-default.properties	(revision 43901)
+++ modules/dnet-core-components/trunk/src/main/resources/eu/dnetlib/cnr-default.properties	(revision 43902)
@@ -71,7 +71,7 @@
 services.aggregator.name=Aggregator TEST
 services.aggregator.host=driver33.isti.cnr.it
 services.aggregator.port=9000
-services.aggregator.country=DE
+services.aggregator.country=EU
 services.aggregator.ui.address=http://${services.aggregator.host}:${services.aggregator.port}/cgi-bin/ASmanager.pl
 services.aggregator.ws.endpoint=http://${services.aggregator.host}:${services.aggregator.port}/cgi-bin/SoapDriver.cgi
 
Index: modules/dnet-msro-service/trunk/src/main/java/eu/dnetlib/msro/workflows/nodes/oai/SyncOAIStoreJobNode.java
===================================================================
--- modules/dnet-msro-service/trunk/src/main/java/eu/dnetlib/msro/workflows/nodes/oai/SyncOAIStoreJobNode.java	(revision 43901)
+++ modules/dnet-msro-service/trunk/src/main/java/eu/dnetlib/msro/workflows/nodes/oai/SyncOAIStoreJobNode.java	(revision 43902)
@@ -1,9 +1,5 @@
 package eu.dnetlib.msro.workflows.nodes.oai;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-
 import eu.dnetlib.enabling.resultset.client.ResultSetClient;
 import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
 import eu.dnetlib.msro.workflows.procs.Token;
@@ -10,6 +6,9 @@
 import eu.dnetlib.msro.workflows.util.ResultsetProgressProvider;
 import eu.dnetlib.rmi.common.ResultSet;
 import eu.dnetlib.rmi.common.ResultSetException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 
 public class SyncOAIStoreJobNode extends AbstractOAIJobNode {
 
@@ -20,7 +19,7 @@
 	@Autowired
 	private ResultSetClient resultSetClient;
 
-	private String formatParam, layoutParam, interpretationParam, oai_dbName;
+	private String oai_dbName;
 
 	private boolean alwaysNewRecord = false;
 
@@ -34,9 +33,9 @@
 		job.setAction("SYNC");
 		job.getParameters().put("oai_syncEpr", rs.toJson());
 		job.getParameters().put("oai_recordSource", token.getEnv().getAttribute("oai_recordSource", String.class));
-		job.getParameters().put("oai_formatName", token.getEnv().getAttribute(this.formatParam, String.class));
-		job.getParameters().put("oai_formatLayout", token.getEnv().getAttribute(this.layoutParam, String.class));
-		job.getParameters().put("oai_formatInterpretation", token.getEnv().getAttribute(this.interpretationParam, String.class));
+		job.getParameters().put("oai_formatName", format);
+		job.getParameters().put("oai_formatLayout", layout);
+		job.getParameters().put("oai_formatInterpretation", interpretation);
 		job.getParameters().put("oai_dbName", getOai_dbName());
 		job.getParameters().put("oai_alwaysNewRecord", String.valueOf(this.alwaysNewRecord));
 		token.getEnv().setAttribute("oai_dbName", getOai_dbName());
@@ -52,30 +51,6 @@
 		this.eprParam = eprParam;
 	}
 
-	public String getFormatParam() {
-		return this.formatParam;
-	}
-
-	public void setFormatParam(final String formatParam) {
-		this.formatParam = formatParam;
-	}
-
-	public String getLayoutParam() {
-		return this.layoutParam;
-	}
-
-	public void setLayoutParam(final String layoutParam) {
-		this.layoutParam = layoutParam;
-	}
-
-	public String getInterpretationParam() {
-		return this.interpretationParam;
-	}
-
-	public void setInterpretationParam(final String interpretationParam) {
-		this.interpretationParam = interpretationParam;
-	}
-
 	public String getOai_dbName() {
 		return this.oai_dbName;
 	}
Index: modules/dnet-msro-service/trunk/src/main/java/eu/dnetlib/msro/workflows/nodes/oai/AbstractOAIJobNode.java
===================================================================
--- modules/dnet-msro-service/trunk/src/main/java/eu/dnetlib/msro/workflows/nodes/oai/AbstractOAIJobNode.java	(revision 43901)
+++ modules/dnet-msro-service/trunk/src/main/java/eu/dnetlib/msro/workflows/nodes/oai/AbstractOAIJobNode.java	(revision 43902)
@@ -6,13 +6,16 @@
 import eu.dnetlib.msro.workflows.procs.Token;
 import eu.dnetlib.rmi.common.ResultSetException;
 import eu.dnetlib.rmi.provision.OAIStoreService;
+import org.apache.commons.lang3.StringUtils;
 
 public abstract class AbstractOAIJobNode extends BlackboardJobNode {
 
-	private String dbName;
+	protected String dbName;
 
-	private String collectionName;
+	protected String collectionName;
 
+	protected String format, layout, interpretation;
+
 	@Override
 	protected String obtainServiceId(final Env env) {
 		return getServiceLocator().getServiceId(OAIStoreService.class);
@@ -36,10 +39,41 @@
 	}
 
 	public String getCollectionName() {
-		return collectionName;
+
+		if (!StringUtils.isBlank(collectionName))
+			return collectionName;
+		if (!StringUtils.isBlank(format) && !StringUtils.isBlank(layout) && !StringUtils.isBlank(interpretation)) {
+			return String.format("%s-%s-%s", format, layout, interpretation);
+		}
+		return null;
+
 	}
 
 	public void setCollectionName(final String collectionName) {
 		this.collectionName = collectionName;
 	}
+
+	public String getFormat() {
+		return format;
+	}
+
+	public void setFormat(final String format) {
+		this.format = format;
+	}
+
+	public String getLayout() {
+		return layout;
+	}
+
+	public void setLayout(final String layout) {
+		this.layout = layout;
+	}
+
+	public String getInterpretation() {
+		return interpretation;
+	}
+
+	public void setInterpretation(final String interpretation) {
+		this.interpretation = interpretation;
+	}
 }
Index: modules/dnet-msro-service/trunk/src/main/java/eu/dnetlib/msro/workflows/nodes/transform/MdBuilderJobNode.java
===================================================================
--- modules/dnet-msro-service/trunk/src/main/java/eu/dnetlib/msro/workflows/nodes/transform/MdBuilderJobNode.java	(revision 43901)
+++ modules/dnet-msro-service/trunk/src/main/java/eu/dnetlib/msro/workflows/nodes/transform/MdBuilderJobNode.java	(revision 43902)
@@ -4,23 +4,23 @@
 import java.net.URLEncoder;
 import java.util.List;
 
-import org.antlr.stringtemplate.StringTemplate;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Required;
-import org.springframework.core.io.Resource;
-
 import eu.dnetlib.enabling.locators.UniqueServiceLocator;
 import eu.dnetlib.enabling.resultset.factory.ResultSetFactory;
 import eu.dnetlib.msro.workflows.graph.Arc;
 import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
 import eu.dnetlib.msro.workflows.procs.Env;
+import eu.dnetlib.msro.workflows.util.WorkflowsConstants;
 import eu.dnetlib.rmi.common.ResultSet;
 import eu.dnetlib.rmi.enabling.ISLookUpException;
 import eu.dnetlib.rmi.enabling.ISLookUpService;
 import eu.dnetlib.rmi.manager.MSROException;
+import org.antlr.stringtemplate.StringTemplate;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Required;
+import org.springframework.core.io.Resource;
 
 public class MdBuilderJobNode extends SimpleJobNode {
 
@@ -48,38 +48,23 @@
 		try {
 			st = new StringTemplate(IOUtils.toString(getMdBuilderTemplateXslt().getInputStream()));
 			st.setAttribute("datasourceId", this.datasourceId);
-			st.setAttribute("xpath", getMetadataIdentifierPath());
+			st.setAttribute("xpath", getMetadataIdentifierPath().replace("\"", "'"));
 			st.setAttribute("baseurl", URLEncoder.encode(getBaseUrl(), "UTF-8"));
 			st.setAttribute("metadatanamespace", getMetadataNamespace());
-
-			/*
-			 * If namespacePrefix has been already pushed to env by some custom JobNode e.g. ObtainOpenaireDataSourceParamsJobNode then push
-			 * it to ST. Else: a) try to get it from EXTRAFIELDS of the datasource b) try to get it from DATASOURCE_ORIGINAL_ID of the
-			 * datasource c) if any of the is present, then push to ST the datasourceId
-			 */
-			if (env.hasAttribute("namespacePrefix")) {
-				st.setAttribute("namespacePrefix", env.getAttribute("namespacePrefix"));
-			} else {
-				List<String> namespacePrefix;
-				String xQuery = "/*[.//RESOURCE_IDENTIFIER/@value='" + this.datasourceId + "']//EXTRA_FIELDS/FIELD/value[../key='NamespacePrefix']/string()";
-				namespacePrefix = this.serviceLocator.getService(ISLookUpService.class).quickSearchProfile(xQuery);
-				if (namespacePrefix.size() != 0) {
-					st.setAttribute("namespacePrefix", namespacePrefix.get(0));
-				} else {
-					xQuery = "/*[.//RESOURCE_IDENTIFIER/@value='" + this.datasourceId + "']//DATASOURCE_ORIGINAL_ID/string()";
-					namespacePrefix = this.serviceLocator.getService(ISLookUpService.class).quickSearchProfile(xQuery);
-					if (namespacePrefix.size() != 0) {
-						st.setAttribute("namespacePrefix", namespacePrefix.get(0));
-					} else {
-						st.setAttribute("namespacePrefix", this.datasourceId);
-					}
-				}
+			List<String> namespacePrefix;
+			String xQuery = "/*[.//RESOURCE_IDENTIFIER/@value='" + this.datasourceId + "']//EXTRA_FIELDS/FIELD/value[../key='NamespacePrefix']/string()";
+			namespacePrefix = this.serviceLocator.getService(ISLookUpService.class).quickSearchProfile(xQuery);
+			if (namespacePrefix != null && namespacePrefix.size() != 0) {
+				st.setAttribute("namespacePrefix", namespacePrefix.get(0));
 			}
-
 			final ResultSet<String> rsOut = this.resultSetFactory.xsltMap(rsIn, st.toString());
 
 			env.setAttribute(this.outputEprParam, rsOut);
 
+			if (datasourceInterface != null) {
+				env.setAttribute(WorkflowsConstants.LOG_DATASOURCE_INTERFACE, this.datasourceInterface);
+			}
+
 			return Arc.DEFAULT_ARC;
 		} catch (final ISLookUpException e) {
 			throw new MSROException("Error while initializing mdBuilder template (" + getMdBuilderTemplateXslt().getFilename() + ") for datasource "
Index: modules/dnet-msro-service/trunk/src/main/java/eu/dnetlib/msro/workflows/nodes/mdstore/FetchMDStoreRecordsJobNode.java
===================================================================
--- modules/dnet-msro-service/trunk/src/main/java/eu/dnetlib/msro/workflows/nodes/mdstore/FetchMDStoreRecordsJobNode.java	(revision 43901)
+++ modules/dnet-msro-service/trunk/src/main/java/eu/dnetlib/msro/workflows/nodes/mdstore/FetchMDStoreRecordsJobNode.java	(revision 43902)
@@ -19,7 +19,7 @@
 	private UniqueServiceLocator serviceLocator;
 
 	private String mdId;
-	private String mdFormat;
+
 	private String eprParam;
 
 	@Override
@@ -27,10 +27,6 @@
 		if (getMdId() == null) {
 			setMdId(env.getAttribute("mdId", String.class));
 		}
-		if (getMdFormat() == null) {
-			setMdFormat(env.getAttribute("mdFormat", String.class));
-		}
-
 		log.info("getting MDRecords from: " + getMdId());
 		final ResultSet<String> rs = this.serviceLocator.getService(MDStoreService.class, getMdId()).deliverMDRecords(getMdId(), "", "", "");
 		if (rs == null) { throw new MSROException("unable to read MDRecords from: " + getMdId()); }
@@ -46,14 +42,6 @@
 		this.mdId = mdId;
 	}
 
-	public String getMdFormat() {
-		return this.mdFormat;
-	}
-
-	public void setMdFormat(final String mdFormat) {
-		this.mdFormat = mdFormat;
-	}
-
 	public String getEprParam() {
 		return this.eprParam;
 	}
