- added config option to choose mapping of ABCD UnitID
authorPatric Plitzner <p.plitzner@bgbm.org>
Wed, 4 Mar 2015 07:46:33 +0000 (07:46 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Wed, 4 Mar 2015 07:46:33 +0000 (07:46 +0000)
 - added config option to ignore authorship when matching taxa
 - added first draft of ggbn extension parsing

.gitattributes
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/Abcd206Import.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/Abcd206ImportConfigurator.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/Abcd206XMLFieldGetter.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/abcd21/ggbn/AbcdGgbnParser.java [new file with mode: 0644]
cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/AbcdGgbnImportTest.java [new file with mode: 0644]
cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/abcd206/in/campanula_abietina_subspecies.xml [moved from cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/abcd206/in/camapanula_abietina_subspecies.xml with 100% similarity]
cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/abcd206/in/db6.xml [new file with mode: 0644]

index 08b2e6b85d6f7e1c454ace3897835950ad109f25..69a01c048ec6eaf6ec55a473738e5689d8e51285 100644 (file)
@@ -445,6 +445,7 @@ cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/Abcd206ImportRep
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/Abcd206ImportState.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/Abcd206XMLFieldGetter.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/Identification.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/abcd21/ggbn/AbcdGgbnParser.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/ExtensionTypeExcelImport.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/NamedAreaLevelExcelImport.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/NamedAreaLevellRow.java -text
@@ -567,6 +568,7 @@ cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/sdd/in/SDDImportExportTest.java -tex
 cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/sdd/in/SDDImportTest.java -text
 cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/sdd/out/SDDCdmExporterTest.java -text
 cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/ABCDImportConfiguratorTestNonEmptyDB.java -text
+cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/AbcdGgbnImportTest.java -text
 cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/SpecimenImportConfiguratorTest.java -text
 cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelImportConfiguratorTest.java -text
 cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelSpecimenImportExampleTest.java -text
@@ -647,7 +649,8 @@ cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/abcd206/in/Campanula_A
 cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/abcd206/in/SpecimenImportConfiguratorTest-input.xml -text
 cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/abcd206/in/SpecimenImportConfiguratorTest.doInvoke2.xml -text
 cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/abcd206/in/SpecimenImportConfiguratorTest.xml -text
-cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/abcd206/in/camapanula_abietina_subspecies.xml -text
+cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/abcd206/in/campanula_abietina_subspecies.xml -text
+cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/abcd206/in/db6.xml -text
 cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelImportConfiguratorTest-input.xls -text
 cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelSpecimenImportExampleTest-input.xls -text
 cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelSpecimenImportExampleTest-input.xlsx -text
index 474fc59a68268928f1631ca59af18057772f1a91..f4e68925ef542ac60e2baa19520fe086fc2afee5 100644 (file)
@@ -38,6 +38,7 @@ import eu.etaxonomy.cdm.io.specimen.SpecimenImportBase;
 import eu.etaxonomy.cdm.io.specimen.SpecimenUserInteraction;
 import eu.etaxonomy.cdm.io.specimen.UnitsGatheringArea;
 import eu.etaxonomy.cdm.io.specimen.UnitsGatheringEvent;
+import eu.etaxonomy.cdm.io.specimen.abcd21.ggbn.AbcdGgbnParser;
 import eu.etaxonomy.cdm.model.agent.AgentBase;
 import eu.etaxonomy.cdm.model.agent.Institution;
 import eu.etaxonomy.cdm.model.agent.Person;
@@ -277,6 +278,8 @@ public class Abcd206Import extends SpecimenImportBase<Abcd206ImportConfigurator,
             for (int i = 0; i < unitsList.getLength(); i++) {
                 System.out.println("------------------------------------------------------------------------------------------");
 
+                checkForUnitExtensions((Element) unitsList.item(i));
+
                 this.setUnitPropertiesXML( (Element) unitsList.item(i), abcdFieldGetter);
                 //                             refreshTransaction(state);
                 this.handleSingleUnit(state);
@@ -299,6 +302,23 @@ public class Abcd206Import extends SpecimenImportBase<Abcd206ImportConfigurator,
         return;
     }
 
+    /**
+     * @param item
+     */
+    private void checkForUnitExtensions(Element item) {
+        NodeList unitExtensions = item.getElementsByTagName(prefix+"UnitExtension");
+        for(int i=0;i<unitExtensions.getLength();i++){
+            if(unitExtensions.item(i) instanceof Element){
+                Element unitExtension = (Element) unitExtensions.item(i);
+                NodeList ggbn = unitExtension.getElementsByTagName("ggbn:GGBN");
+                if(unitExtension.getTagName().equals("ggbn:GGBN")){
+                    AbcdGgbnParser ggbnParser = new AbcdGgbnParser();
+                    ggbnParser.parse(ggbn);
+                }
+            }
+        }
+    }
+
     protected NodeList getUnitsNodeList(URI source) {
         try {
             InputStream is = UriUtils.getInputStream(source);
@@ -327,6 +347,10 @@ public class Abcd206Import extends SpecimenImportBase<Abcd206ImportConfigurator,
                 unitList = root.getElementsByTagName("abcd:Unit");
                 prefix = "abcd:";
             }
+            if (unitList.getLength() == 0) {
+                unitList = root.getElementsByTagName("abcd21:Unit");
+                prefix = "abcd21:";
+            }
         } catch (Exception e) {
             logger.warn(e);
         }
@@ -695,9 +719,20 @@ public class Abcd206Import extends SpecimenImportBase<Abcd206ImportConfigurator,
      * @param state
      */
     private void setCollectionData(Abcd206ImportState state, DerivedUnitFacade derivedUnitFacade) {
-        // set catalogue number (unitID)
-        derivedUnitFacade.setCatalogNumber(NB(dataHolder.unitID));
-        derivedUnitFacade.setAccessionNumber(NB(dataHolder.accessionNumber));
+        Abcd206ImportConfigurator config = state.getConfig();
+        if(config.isMapUnitIdToCatalogNumber()){
+            // set catalogue number (unitID)
+            derivedUnitFacade.setCatalogNumber(NB(dataHolder.unitID));
+        }
+        if(config.isMapUnitIdToAccessionNumber()){
+            derivedUnitFacade.setAccessionNumber(NB(dataHolder.unitID));
+        }
+        else{
+            derivedUnitFacade.setAccessionNumber(NB(dataHolder.accessionNumber));
+        }
+        if(config.isMapUnitIdToBarcode()){
+            derivedUnitFacade.setCatalogNumber(NB(dataHolder.unitID));
+        }
         // derivedUnitFacade.setCollectorsNumber(NB(dataHolder.collectorsNumber));
 
         /*
index a2be4778d9f15957c181ea0b857fbd9e940e1435..911cdd3140fd1a6babe673cdb745862ae0e99a73 100644 (file)
@@ -55,6 +55,9 @@ public class Abcd206ImportConfigurator extends ImportConfiguratorBase<Abcd206Imp
     private boolean deduplicateClassifications = false;\r
     private boolean ignoreAuthorship = false;\r
 \r
+    private boolean mapUnitIdToCatalogNumber = true;\r
+    private boolean mapUnitIdToAccessionNumber = false;\r
+    private boolean mapUnitIdToBarcode = false;\r
 \r
     private final SpecimenUserInteraction specimenUserInteraction = new SpecimenUserInteraction();\r
 \r
@@ -381,4 +384,28 @@ public class Abcd206ImportConfigurator extends ImportConfiguratorBase<Abcd206Imp
         return ignoreAuthorship;\r
     }\r
 \r
+    public boolean isMapUnitIdToAccessionNumber() {\r
+        return mapUnitIdToAccessionNumber;\r
+    }\r
+\r
+    public boolean isMapUnitIdToBarcode() {\r
+        return mapUnitIdToBarcode;\r
+    }\r
+\r
+    public boolean isMapUnitIdToCatalogNumber() {\r
+        return mapUnitIdToCatalogNumber;\r
+    }\r
+\r
+    public void setMapUnitIdToAccessionNumber(boolean mapUnitIdToAccessionNumber) {\r
+        this.mapUnitIdToAccessionNumber = mapUnitIdToAccessionNumber;\r
+    }\r
+\r
+    public void setMapUnitIdToBarcode(boolean mapUnitIdToBarcode) {\r
+        this.mapUnitIdToBarcode = mapUnitIdToBarcode;\r
+    }\r
+\r
+    public void setMapUnitIdToCatalogNumber(boolean mapUnitIdToCatalogNumber) {\r
+        this.mapUnitIdToCatalogNumber = mapUnitIdToCatalogNumber;\r
+    }\r
+\r
 }\r
index 4ad3d92959c52e0576103c2aa331e2afa7b24edb..fb2e33858872b11727bd52c1cecac6cd7c2c7084 100644 (file)
@@ -2,6 +2,7 @@ package eu.etaxonomy.cdm.io.specimen.abcd206.in;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 
 import org.apache.log4j.Logger;
 import org.w3c.dom.Element;
@@ -565,6 +566,13 @@ public class Abcd206XMLFieldGetter {
         } catch (NullPointerException e) {
             dataHolder.namedAreaList = new ArrayList<String>();
         }
+
+        //FIXME: temporary hack for Campanula import #4677
+        dataHolder.locality.replace(dataHolder.country, "");
+        List<String> namedAreaList = dataHolder.namedAreaList;
+        for (String namedArea : namedAreaList) {
+            dataHolder.locality.replace(namedArea, "");
+        }
     }
 
     /**
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/abcd21/ggbn/AbcdGgbnParser.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/abcd21/ggbn/AbcdGgbnParser.java
new file mode 100644 (file)
index 0000000..f6438a9
--- /dev/null
@@ -0,0 +1,101 @@
+// $Id$
+/**
+* Copyright (C) 2015 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.cdm.io.specimen.abcd21.ggbn;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import eu.etaxonomy.cdm.model.molecular.DnaQuality;
+import eu.etaxonomy.cdm.model.molecular.DnaSample;
+
+/**
+ * @author pplitzner
+ * @date Mar 4, 2015
+ *
+ */
+public class AbcdGgbnParser {
+
+    private final String prefix = "ggbn:";
+
+    /**
+     * @param ggbn
+     */
+    public void parse(NodeList ggbn) {
+        DnaSample dnaSample = DnaSample.NewInstance();
+
+        for(int i=0;i<ggbn.getLength();i++){
+            Node item = ggbn.item(i);
+            if(item instanceof Element){
+                Element element = (Element) item;
+                NodeList methodDeterminationConcentrationAndRatiosList = element.getElementsByTagName(prefix+"methodDeterminationConcentrationAndRatios");
+                NodeList volumeList = element.getElementsByTagName(prefix+"volume");
+                NodeList weightList = element.getElementsByTagName(prefix+"weight");
+                NodeList methodDeterminationWeightList = element.getElementsByTagName(prefix+"methodDeterminationWeight");
+                NodeList DNADNAHybridizationList = element.getElementsByTagName(prefix+"DNADNAHybridization");
+                NodeList DNAMeltingPointList = element.getElementsByTagName(prefix+"DNAMeltingPoint");
+                NodeList estimatedSizeList = element.getElementsByTagName(prefix+"estimated_size");
+                NodeList poolDnaExtractsList = element.getElementsByTagName(prefix+"pool_dna_extracts");
+                NodeList gelImageList = element.getElementsByTagName(prefix+"gelImage");
+                NodeList amplificationsList = element.getElementsByTagName(prefix+"Amplifications");
+
+                parseDnaQuality(element);
+
+                parseGelImage(gelImageList);
+                parseAmplification(amplificationsList);
+            }
+        }
+
+    }
+
+    /**
+     * @param element
+     */
+    private void parseDnaQuality(Element element) {
+        DnaQuality dnaQuality = DnaQuality.NewInstance();
+
+        NodeList purificationMethodList = element.getElementsByTagName(prefix+"purificationMethod");
+        NodeList concentrationList = element.getElementsByTagName(prefix+"concentration");
+        NodeList ratioOfAbsorbance260_280List = element.getElementsByTagName(prefix+"ratioOfAbsorbance260_280");
+        if(ratioOfAbsorbance260_280List.getLength()>0){
+            Node ratioOfAbsorbance260_280 = ratioOfAbsorbance260_280List.item(0);
+        }
+        NodeList ratioOfAbsorbance260_230List = element.getElementsByTagName(prefix+"ratioOfAbsorbance260_230");
+        NodeList qualityCheckDateList = element.getElementsByTagName(prefix+"qualityCheckDate");
+        NodeList qualityList = element.getElementsByTagName(prefix+"quality");
+        NodeList qualityRemarksList = element.getElementsByTagName(prefix+"qualityRemarks");
+
+//        dnaQuality.setPurificationMethod(purificationMethod)
+//        dnaQuality.setConcentration(concentration)
+//        dnaQuality.setRatioOfAbsorbance260_280(ratioOfAbsorbance260_280)
+//        dnaQuality.setRatioOfAbsorbance260_230(ratioOfAbsorbance260_230)
+//        dnaQuality.setQualityCheckDate(qualityCheckDate)
+//        dnaQuality.setQualityTerm(qualityTerm)
+//        dnaQuality.setConcentrationUnit(concentrationUnit)
+
+    }
+
+    /**
+     * @param amplificationsList
+     */
+    private void parseAmplification(NodeList amplificationsList) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /**
+     * @param gelImageList
+     */
+    private void parseGelImage(NodeList gelImageList) {
+        // TODO Auto-generated method stub
+
+    }
+
+}
diff --git a/cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/AbcdGgbnImportTest.java b/cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/AbcdGgbnImportTest.java
new file mode 100644 (file)
index 0000000..56b5776
--- /dev/null
@@ -0,0 +1,104 @@
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy\r
+* http://www.e-taxonomy.eu\r
+*\r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.cdm.io.specimen.abcd206.in;\r
+\r
+import static org.junit.Assert.assertNotNull;\r
+import static org.junit.Assert.assertTrue;\r
+\r
+import java.io.FileNotFoundException;\r
+import java.net.URISyntaxException;\r
+import java.net.URL;\r
+\r
+import org.junit.Assert;\r
+import org.junit.Test;\r
+import org.unitils.dbunit.annotation.DataSet;\r
+import org.unitils.spring.annotation.SpringBeanByName;\r
+import org.unitils.spring.annotation.SpringBeanByType;\r
+\r
+import eu.etaxonomy.cdm.api.service.IAgentService;\r
+import eu.etaxonomy.cdm.api.service.ICommonService;\r
+import eu.etaxonomy.cdm.api.service.INameService;\r
+import eu.etaxonomy.cdm.api.service.IOccurrenceService;\r
+import eu.etaxonomy.cdm.api.service.IReferenceService;\r
+import eu.etaxonomy.cdm.api.service.ITaxonNodeService;\r
+import eu.etaxonomy.cdm.api.service.ITermService;\r
+import eu.etaxonomy.cdm.io.common.CdmApplicationAwareDefaultImport;\r
+import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;\r
+import eu.etaxonomy.cdm.test.unitils.CleanSweepInsertLoadStrategy;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 29.01.2009\r
+ */\r
+public class AbcdGgbnImportTest extends CdmTransactionalIntegrationTest {\r
+\r
+       @SpringBeanByName\r
+       private CdmApplicationAwareDefaultImport<?> defaultImport;\r
+\r
+       @SpringBeanByType\r
+       private INameService nameService;\r
+\r
+       @SpringBeanByType\r
+       private IOccurrenceService occurrenceService;\r
+\r
+       @SpringBeanByType\r
+       private ITermService termService;\r
+\r
+       @SpringBeanByType\r
+       private ICommonService commonService;\r
+\r
+       @SpringBeanByType\r
+       private ITaxonNodeService taxonNodeService;\r
+\r
+       @SpringBeanByType\r
+       private IAgentService agentService;\r
+\r
+       @SpringBeanByType\r
+       private IReferenceService referenceService;\r
+\r
+\r
+       @Test\r
+    @DataSet( value="../../../BlankDataSet.xml", loadStrategy=CleanSweepInsertLoadStrategy.class)\r
+    public void testImportGgbn() {\r
+        String inputFile = "/eu/etaxonomy/cdm/io/specimen/abcd206/in/db6.xml";\r
+        URL url = this.getClass().getResource(inputFile);\r
+        assertNotNull("URL for the test file '" + inputFile + "' does not exist", url);\r
+\r
+        Abcd206ImportConfigurator importConfigurator = null;\r
+        try {\r
+            importConfigurator = Abcd206ImportConfigurator.NewInstance(url.toURI(), null,false);\r
+        } catch (URISyntaxException e) {\r
+            e.printStackTrace();\r
+            Assert.fail();\r
+        }\r
+        assertNotNull("Configurator could not be created", importConfigurator);\r
+\r
+        boolean result = defaultImport.invoke(importConfigurator);\r
+        assertTrue("Return value for import.invoke should be true", result);\r
+//        assertEquals("Number of TaxonNames is incorrect", 3, nameService.count(TaxonNameBase.class));\r
+//        /*\r
+//         * Classification\r
+//         * - Campanula\r
+//         *   - Campanula patula\r
+//         *      - Campanula patula subsp. abietina\r
+//         */\r
+//        assertEquals("Number of TaxonNodes is incorrect", 4, taxonNodeService.count(TaxonNode.class));\r
+       }\r
+\r
+    /* (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.test.integration.CdmIntegrationTest#createTestData()\r
+     */\r
+    @Override\r
+    public void createTestDataSet() throws FileNotFoundException {\r
+        // TODO Auto-generated method stub\r
+\r
+    }\r
+\r
+}\r
diff --git a/cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/abcd206/in/db6.xml b/cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/abcd206/in/db6.xml
new file mode 100644 (file)
index 0000000..644a1fc
--- /dev/null
@@ -0,0 +1,212 @@
+<?xml version='1.0' encoding='UTF-8'?>\r
+<biocase:response xmlns:abcd21="http://www.tdwg.org/schemas/abcd/2.1" xmlns:biocase="http://www.biocase.org/schemas/protocol/1.3" xmlns:ggbn="http://data.ggbn.org/schemas/ggbn/terms" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.biocase.org/schemas/protocol/1.3 http://www.bgbm.org/biodivinf/schema/protocol_1_31.xsd">\r
+  <!--XML generated by BioCASE PyWrapper software version 3.5.3. Made in Berlin.-->\r
+  <biocase:header>\r
+    <biocase:version software="os">nt</biocase:version>\r
+    <biocase:version software="python">2.7 (r27:82525, Jul  4 2010, 07:43:08) [MSC v.1500 64 bit (AMD64)]</biocase:version>\r
+    <biocase:version software="pywrapper">3.5.3</biocase:version>\r
+    <biocase:version software="dbmod">mySQL DB module v0.51 using MySQLdb 1.2.5</biocase:version>\r
+    <biocase:sendTime>2015-03-02T16:14:29.017000</biocase:sendTime>\r
+    <biocase:source>DNA_Bank@ww3.bgbm.org</biocase:source>\r
+    <biocase:destination>87.77.72.162</biocase:destination>\r
+    <biocase:type>search</biocase:type>\r
+  </biocase:header>\r
+  <biocase:content recordCount="1" recordDropped="0" recordStart="0" totalSearchHits="1">\r
+    <abcd21:DataSets>\r
+      <abcd21:DataSet>\r
+        <abcd21:TechnicalContacts>\r
+          <abcd21:TechnicalContact>\r
+            <abcd21:Name>Gabriele Droege</abcd21:Name>\r
+            <abcd21:Email>g.droege@bgbm.org</abcd21:Email>\r
+            <abcd21:Address>Königin-Luise-Str.6-8, 14195 Berlin, Germany</abcd21:Address>\r
+          </abcd21:TechnicalContact>\r
+        </abcd21:TechnicalContacts>\r
+        <abcd21:ContentContacts>\r
+          <abcd21:ContentContact>\r
+            <abcd21:Name>Gabriele Droege</abcd21:Name>\r
+            <abcd21:Email>g.droege@bgbm.org</abcd21:Email>\r
+            <abcd21:Address>Königin-Luise-Str.6-8, 14195 Berlin, Germany</abcd21:Address>\r
+          </abcd21:ContentContact>\r
+        </abcd21:ContentContacts>\r
+        <abcd21:Metadata>\r
+          <abcd21:Description>\r
+            <abcd21:Representation abcd21:language="en">\r
+              <abcd21:Title>DNA Bank of the Herbarium Berolinense</abcd21:Title>\r
+              <abcd21:Details>The DNA bank of the Botanic Garden and Botanical Museum Berlin-Dahlem holds currently a collection of 8200 plant DNA and tissue samples growing constantly. Its core collection focuses on the flora of the Berlin and Brandenburg but it also preserves DNA from the Alps, the Mediterranean and the Altai Mountains. The DNA bank is part of the DNA Bank Network which was established in spring 2007 and is currently funded by the DFG. The network was initiated by GBIF Germany and provides a technically optimized DNA collection service facility for all biological research accessible via one central web portal. The network promotes deposition of well documented reference DNA samples after project completion or data publication from scientists of other universities and institutions.</abcd21:Details>\r
+            </abcd21:Representation>\r
+          </abcd21:Description>\r
+          <abcd21:IconURI>http://www.bgbm.org/BGBM/icons/bgbmlogo.gif</abcd21:IconURI>\r
+          <abcd21:RevisionData>\r
+            <abcd21:DateModified>2009-04-07T00:00:00</abcd21:DateModified>\r
+          </abcd21:RevisionData>\r
+          <abcd21:Owners>\r
+            <abcd21:Owner>\r
+              <abcd21:Organisation>\r
+                <abcd21:Name>\r
+                  <abcd21:Representation abcd21:language="en">\r
+                    <abcd21:Text>Botanic Garden an Botanical Museum Berlin-Dahlem (Freie Universität Berlin)</abcd21:Text>\r
+                  </abcd21:Representation>\r
+                </abcd21:Name>\r
+              </abcd21:Organisation>\r
+              <abcd21:Addresses>\r
+                <abcd21:Address>Königin-Luise-Str. 6-8, 14195 Berlin, Germany</abcd21:Address>\r
+              </abcd21:Addresses>\r
+              <abcd21:URIs>\r
+                <abcd21:URL>http://www.bgbm.org</abcd21:URL>\r
+              </abcd21:URIs>\r
+            </abcd21:Owner>\r
+          </abcd21:Owners>\r
+          <abcd21:IPRStatements>\r
+            <abcd21:Copyrights>\r
+              <abcd21:Copyright abcd21:language="en">\r
+                <abcd21:Text>The copyright for any material created by the DNA bank of the BGBM is reserved. The duplication or use of information and data such as texts or images is only permitted with the indication of the source or with prior approval by the BGBM.</abcd21:Text>\r
+              </abcd21:Copyright>\r
+            </abcd21:Copyrights>\r
+            <abcd21:TermsOfUseStatements>\r
+              <abcd21:TermsOfUse abcd21:language="en">\r
+                <abcd21:Text>The use of the data is allowed only for non-profit scientific use and for non-profit nature conservation purpose. The data bases or part of it may only be used or copied by the written permission from the legal owner.</abcd21:Text>\r
+              </abcd21:TermsOfUse>\r
+            </abcd21:TermsOfUseStatements>\r
+            <abcd21:Citations>\r
+              <abcd21:Citation abcd21:language="en">\r
+                <abcd21:Text>Droege, G. (Ed.) 2008 - (continuously updated): DNA samples of the Berlin-Dahlem DNA bank at the BGBM (Botanic Garden and Botanical Museum Berlin-Dahlem).</abcd21:Text>\r
+              </abcd21:Citation>\r
+            </abcd21:Citations>\r
+          </abcd21:IPRStatements>\r
+        </abcd21:Metadata>\r
+        <abcd21:Units>\r
+          <abcd21:Unit>\r
+            <abcd21:SourceInstitutionID>BGBM</abcd21:SourceInstitutionID>\r
+            <abcd21:SourceID>DNA Bank</abcd21:SourceID>\r
+            <abcd21:UnitID>DB 6</abcd21:UnitID>\r
+            <abcd21:Identifications>\r
+              <abcd21:Identification>\r
+                <abcd21:Result>\r
+                  <abcd21:TaxonIdentified>\r
+                    <abcd21:HigherTaxa>\r
+                      <abcd21:HigherTaxon>\r
+                        <abcd21:HigherTaxonName>COMPOSITAE</abcd21:HigherTaxonName>\r
+                        <abcd21:HigherTaxonRank>familia</abcd21:HigherTaxonRank>\r
+                      </abcd21:HigherTaxon>\r
+                    </abcd21:HigherTaxa>\r
+                    <abcd21:ScientificName>\r
+                      <abcd21:FullScientificNameString>Cichorium intybus L.</abcd21:FullScientificNameString>\r
+                      <abcd21:NameAtomised>\r
+                        <abcd21:Botanical>\r
+                          <abcd21:GenusOrMonomial>Cichorium</abcd21:GenusOrMonomial>\r
+                          <abcd21:FirstEpithet>intybus</abcd21:FirstEpithet>\r
+                        </abcd21:Botanical>\r
+                      </abcd21:NameAtomised>\r
+                    </abcd21:ScientificName>\r
+                  </abcd21:TaxonIdentified>\r
+                </abcd21:Result>\r
+                <abcd21:PreferredFlag>1</abcd21:PreferredFlag>\r
+              </abcd21:Identification>\r
+            </abcd21:Identifications>\r
+            <abcd21:RecordBasis>MaterialSample</abcd21:RecordBasis>\r
+            <abcd21:KindOfUnit>DNA</abcd21:KindOfUnit>\r
+            <abcd21:SpecimenUnit>\r
+              <abcd21:Preparations>\r
+                <abcd21:preparation>\r
+                  <abcd21:preparationType>gDNA</abcd21:preparationType>\r
+                  <abcd21:preparationMaterials>DNeasy Plant Mini Spin Kit Qiagen</abcd21:preparationMaterials>\r
+                  <abcd21:preparationAgent>\r
+                    <abcd21:Person>\r
+                      <abcd21:FullName>Bansemer, Jana</abcd21:FullName>\r
+                    </abcd21:Person>\r
+                  </abcd21:preparationAgent>\r
+                  <abcd21:preparationDate>2002-08-13T00:00:00</abcd21:preparationDate>\r
+                </abcd21:preparation>\r
+              </abcd21:Preparations>\r
+              <abcd21:Preservations>\r
+                <abcd21:preservation>\r
+                  <abcd21:preservationType>TE buffer</abcd21:preservationType>\r
+                  <abcd21:preservationTemperature>-80</abcd21:preservationTemperature>\r
+                </abcd21:preservation>\r
+              </abcd21:Preservations>\r
+            </abcd21:SpecimenUnit>\r
+            <abcd21:MultiMediaObjects>\r
+              <abcd21:MultiMediaObject>\r
+                <abcd21:fileURI>http://ww2.bgbm.org/herbarium/view_biocase.cfm?SpecimenPK=7475</abcd21:fileURI>\r
+              </abcd21:MultiMediaObject>\r
+              <abcd21:MultiMediaObject>\r
+                <abcd21:fileURI>http://ww2.bgbm.org/herbarium/images/B/10/00/66/57/thumbs/B_10_0066577.jpg</abcd21:fileURI>\r
+              </abcd21:MultiMediaObject>\r
+            </abcd21:MultiMediaObjects>\r
+            <abcd21:Associations>\r
+              <abcd21:UnitAssociation>\r
+                <abcd21:SourceInstitutionCode>BGBM</abcd21:SourceInstitutionCode>\r
+                <abcd21:SourceName>Herbarium Berolinense</abcd21:SourceName>\r
+                <abcd21:UnitID>B 10 0066577</abcd21:UnitID>\r
+                <abcd21:AssociationType>DNA and specimen from the same population</abcd21:AssociationType>\r
+                <abcd21:DatasetAccessPoint>http://ww3.bgbm.org/biocase/pywrapper.cgi?dsa=Herbar_BiNHum</abcd21:DatasetAccessPoint>\r
+              </abcd21:UnitAssociation>\r
+            </abcd21:Associations>\r
+            <abcd21:Gathering>\r
+              <abcd21:Agents>\r
+                <abcd21:GatheringAgent>\r
+                  <abcd21:Person>\r
+                    <abcd21:FullName>B. Valdés, S. Talavera, G. Alziar, D. Jeanmonod, N. Galland, U. Matthäs, V. Stevanovic, P. Minissale, S. Fici, B. Foggi, M. Watson, P. Hinz &amp; J. M. Romero</abcd21:FullName>\r
+                  </abcd21:Person>\r
+                </abcd21:GatheringAgent>\r
+              </abcd21:Agents>\r
+              <abcd21:LocalityText>Bailén Prov. Jaen.</abcd21:LocalityText>\r
+              <abcd21:Country>\r
+                <abcd21:Name>Spain</abcd21:Name>\r
+                <abcd21:ISO3166Code>ES</abcd21:ISO3166Code>\r
+              </abcd21:Country>\r
+              <abcd21:NamedAreas>\r
+                <abcd21:NamedArea>\r
+                  <abcd21:AreaName language="en">Europe</abcd21:AreaName>\r
+                </abcd21:NamedArea>\r
+              </abcd21:NamedAreas>\r
+            </abcd21:Gathering>\r
+            <abcd21:CollectorsFieldNumber>Rec.It2993/88</abcd21:CollectorsFieldNumber>\r
+            <abcd21:UnitExtensions>\r
+              <abcd21:UnitExtension>\r
+                <ggbn:GGBN>\r
+                  <ggbn:ratioOfAbsorbance260_280>1,38</ggbn:ratioOfAbsorbance260_280>\r
+                  <ggbn:ratioOfAbsorbance260_230>0,77</ggbn:ratioOfAbsorbance260_230>\r
+                  <ggbn:concentration Unit="ng/µl">17,14</ggbn:concentration>\r
+                  <ggbn:qualityCheckDate>2008-04-15T00:00:00</ggbn:qualityCheckDate>\r
+                  <ggbn:Amplifications>\r
+                    <ggbn:amplification>\r
+                      <ggbn:marker>ITS (ITS1, 5.8S rRNA, ITS2)</ggbn:marker>\r
+                      <ggbn:Sequencings>\r
+                        <ggbn:sequencing>\r
+                          <ggbn:geneticAccession>\r
+                            <ggbn:geneticAccessionNumber>AJ746397</ggbn:geneticAccessionNumber>\r
+                            <ggbn:geneticAccessionNumberURI>http://www.ncbi.nlm.nih.gov/nuccore/56310613</ggbn:geneticAccessionNumberURI>\r
+                          </ggbn:geneticAccession>\r
+                          <ggbn:References>\r
+                            <ggbn:Reference>\r
+                              <ggbn:ReferenceCitation>Gemeinholzer,B., Bachmann,K. (2005): Examining morphological and molecular diagnostic character states in Cichorium intybus L. (Asteraceae) and Cichorium spinosum L. Plant Systematics and Evolution 253 (1-3):  105-123.</ggbn:ReferenceCitation>\r
+                            </ggbn:Reference>\r
+                          </ggbn:References>\r
+                        </ggbn:sequencing>\r
+                      </ggbn:Sequencings>\r
+                    </ggbn:amplification>\r
+                  </ggbn:Amplifications>\r
+                </ggbn:GGBN>\r
+              </abcd21:UnitExtension>\r
+            </abcd21:UnitExtensions>\r
+          </abcd21:Unit>\r
+        </abcd21:Units>\r
+      </abcd21:DataSet>\r
+    </abcd21:DataSets>\r
+  </biocase:content>\r
+  <biocase:diagnostics>\r
+    <biocase:diagnostic severity="INFO">Datasource wrapper DNA_Bank requested</biocase:diagnostic>\r
+    <biocase:diagnostic severity="INFO">Reading PSF from C:\bps2\config\datasources\DNA_Bank\provider_setup_file.xml</biocase:diagnostic>\r
+    <biocase:diagnostic severity="INFO">BioCASe protocol used.</biocase:diagnostic>\r
+    <biocase:diagnostic severity="INFO">HTTP parameter 'query' used for building the request.</biocase:diagnostic>\r
+    <biocase:diagnostic severity="INFO">Try to get CMF for namespace http://www.tdwg.org/schemas/abcd/2.1</biocase:diagnostic>\r
+    <biocase:diagnostic severity="INFO">Load CMFile 'C:\bps2\config\datasources\DNA_Bank\cmf_ABCDGGBN_2.1.xml'</biocase:diagnostic>\r
+    <biocase:diagnostic severity="INFO">Executing SQL: 'SELECT DISTINCT dnabanknumbers.ID_DNA FROM wrapper_view_dna AS dnabanknumbers WHERE (dnabanknumbers.DNA_Bank_Number LIKE 'DB 6' ) ORDER BY dnabanknumbers.ID_DNA LIMIT 11'</biocase:diagnostic>\r
+    <biocase:diagnostic severity="INFO">Hits: 1</biocase:diagnostic>\r
+    <biocase:diagnostic severity="INFO">Executing SQL: 'SELECT dnabanknumbers.ID_DNA, metadata.TechnicalContactName, metadata.TechnicalContactEmail, metadata.TechnicalContactAddress, metadata.ContentContactName, metadata.ContentContactEmail, metadata.ContentContactAddress, metadata.DatasetTitle, metadata.DatasetDetails, metadata.OwnerLogoURI, metadata.DateModified, metadata.OwnerOrganizationName, metadata.OwnerAddress, metadata.OwnerEmail, metadata.OwnerURI, metadata.CopyrightText, metadata.TermsOfUseText, metadata.CitationsText, dnabanknumbers.GUID, metadata.SourceInstitutionID, metadata.SourceID, dnabanknumbers.DNA_Bank_Number, specimencachehighertaxa.HigherTaxon, specimencachehighertaxa.TaxonRank, specimencachetaxonidentified.NameAuthorYear, specimencachetaxonidentified.Genus, specimencachetaxonidentified.FirstEpithet, specimencachetaxonidentified.SecondEpithet, specimencachetaxonidentified.Rank, specimencachetaxonidentified.PreferredFlag, dnabanknumbers.Block_Until, dnabanknumbers.Provided_By, dnabanknumbers.Type, dnabanknumbers.Extraction_Method, dnabanknumbers.Extraction_Company, dnabanknumbers.Extraction_Staff, dnabanknumbers.Extraction_Date, dnabanknumbers.AccessionNumber, specimencache.TypeStatus, specimencacheimages.Images, specimencache.InstitutionCode_Specimen, specimencache.CollectionCode_Specimen, specimencache.UnitID_Specimen, dnabanknumbers.RelationDNA_Voucher, providers.Provider, specimencache.CollectionDate, specimencache.Collectors, specimencache.Locality, specimencache.CountryName, specimencache.CountryISO2, specimencache.ContinentOrOcean, specimencache.Longitude, specimencache.Latitude, specimencache.Altitude, specimencache.CollectorsNo, dnabanknumbers.Notes, dnabanknumbers.Purification_Method, dnabanknumbers.Purification_Company, dnabanknumbers.Absorbance280, dnabanknumbers.Absorbance230, dnabanknumbers.Concentration, dnabanknumbers.Quality_Check_Date, dnabanknumbers.Quality, amplifications.Amplification_Date, amplifications.GeneticLocus, amplifications.GenBankNumber, amplifications.GenBankLink, molecular_publications.Paper_Cache, molecular_publications.Link, metadata.MetadataID, dnabanknumbers.ID_DNA, specimencachehighertaxa.ID_HigherTaxon, specimencachetaxonidentified.ID_TaxonIdentified, specimencache.ID_Cache, specimencacheimages.ID_Images, providers.ID_Dataset, amplifications.ID_Amplification, molecular_publications.ID_Pub_Amp FROM abcdmetadata AS metadata, wrapper_view_dna AS dnabanknumbers LEFT JOIN cachecollection AS specimencache ON (specimencache.ID_Cache = dnabanknumbers.ID_Cache) LEFT JOIN wrapper_view_amplifications AS amplifications ON (amplifications.ID_DNA = dnabanknumbers.ID_DNA) LEFT JOIN cachetaxonidentified AS specimencachetaxonidentified ON (specimencachetaxonidentified.ID_Cache = specimencache.ID_Cache) LEFT JOIN cacheimages AS specimencacheimages ON (specimencacheimages.ID_Cache = specimencache.ID_Cache) LEFT JOIN wrapper_view_providers AS providers ON (providers.ID_Dataset = specimencache.ID_Dataset_Specimen) LEFT JOIN wrapper_view_publications_dna AS molecular_publications ON (molecular_publications.ID_Amplification = amplifications.ID_Amplification) LEFT JOIN cachehighertaxa AS specimencachehighertaxa ON (specimencachehighertaxa.ID_CacheTaxonIdentified = specimencachetaxonidentified.ID_TaxonIdentified) WHERE (dnabanknumbers.ID_DNA IN (112)) ORDER BY dnabanknumbers.ID_DNA'</biocase:diagnostic>\r
+    <biocase:diagnostic severity="INFO">Hits: 2</biocase:diagnostic>\r
+    <biocase:diagnostic severity="WARNING">The DB value '°C' is not contained in the vocabulary of the XML element 'scale'. Element was dropped.</biocase:diagnostic>\r
+    <biocase:diagnostic severity="INFO">time to execute request is 0.125</biocase:diagnostic>\r
+  </biocase:diagnostics>\r
+</biocase:response>
\ No newline at end of file