minor changes to TcsRdf import
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / tcsrdf / TcsRdfTaxonNameImport.java
index 4f563bbeee4836cf894ef94bb9939c10f12db587..cabfd1e31f75285e018ed5548c3446e4a1e7c22b 100644 (file)
-/**\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.tcsrdf;\r
-\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.util.List;\r
-import java.util.Set;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.jdom.Attribute;\r
-import org.jdom.Element;\r
-import org.jdom.Namespace;\r
-import org.springframework.stereotype.Component;\r
-\r
-import com.hp.hpl.jena.rdf.model.Model;\r
-import com.hp.hpl.jena.rdf.model.ModelFactory;\r
-import com.hp.hpl.jena.rdf.model.RDFNode;\r
-import com.hp.hpl.jena.rdf.model.ResIterator;\r
-import com.hp.hpl.jena.rdf.model.Resource;\r
-import com.hp.hpl.jena.rdf.model.Selector;\r
-import com.hp.hpl.jena.rdf.model.SimpleSelector;\r
-import com.hp.hpl.jena.rdf.model.Statement;\r
-import com.hp.hpl.jena.rdf.model.StmtIterator;\r
-import com.hp.hpl.jena.vocabulary.*;\r
-import com.hp.hpl.jena.rdf.model.Property;\r
-\r
-import org.apache.commons.io.IOUtils;\r
-import org.apache.jena.iri.IRIFactory;\r
-\r
-import eu.etaxonomy.cdm.common.XmlHelp;\r
-import eu.etaxonomy.cdm.io.common.ICdmIO;\r
-import eu.etaxonomy.cdm.io.common.ImportHelper;\r
-import eu.etaxonomy.cdm.io.common.MapWrapper;\r
-import eu.etaxonomy.cdm.model.agent.INomenclaturalAuthor;\r
-import eu.etaxonomy.cdm.model.agent.Team;\r
-import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;\r
-import eu.etaxonomy.cdm.model.common.Marker;\r
-import eu.etaxonomy.cdm.model.common.MarkerType;\r
-import eu.etaxonomy.cdm.model.common.TimePeriod;\r
-import eu.etaxonomy.cdm.model.name.NomenclaturalCode;\r
-import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;\r
-import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;\r
-import eu.etaxonomy.cdm.model.name.NonViralName;\r
-import eu.etaxonomy.cdm.model.name.Rank;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.name.ViralName;\r
-import eu.etaxonomy.cdm.model.reference.IGeneric;\r
-import eu.etaxonomy.cdm.model.reference.Reference;\r
-import eu.etaxonomy.cdm.model.reference.ReferenceFactory;\r
-import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;\r
-\r
-/**\r
- * @author a.mueller\r
- * @created 29.05.2008\r
- * @version 1.0\r
- */\r
-@Component\r
-public class TcsRdfTaxonNameImport  extends TcsRdfImportBase implements ICdmIO<TcsRdfImportState> {\r
-       private static final Logger logger = Logger.getLogger(TcsRdfTaxonNameImport.class);\r
-\r
-       private static int modCount = 5000;\r
-\r
-       public TcsRdfTaxonNameImport(){\r
-               super();\r
-       }\r
-\r
-       @Override\r
-       public boolean doCheck(TcsRdfImportState config){\r
-               boolean result = true;\r
-               logger.warn("BasionymRelations not yet implemented");\r
-               logger.warn("Checking for TaxonNames not yet implemented");\r
-               //result &= checkArticlesWithoutJournal(tcsConfig);\r
-               //result &= checkPartOfJournal(tcsConfig);\r
-\r
-               return result;\r
-       }\r
-\r
-       protected static CdmSingleAttributeRDFMapperBase[] standardMappers = new CdmSingleAttributeRDFMapperBase[]{\r
-               new CdmTextElementMapper("genusPart", "genusOrUninomial")\r
-               , new CdmTextElementMapper("uninomial", "genusOrUninomial")  //TODO make it a more specific Mapper for both attributes\r
-               , new CdmTextElementMapper("specificEpithet", "specificEpithet")\r
-               , new CdmTextElementMapper("infraspecificEpithet", "infraSpecificEpithet")\r
-               , new CdmTextElementMapper("infragenericEpithet", "infraGenericEpithet")\r
-               , new CdmTextElementMapper("microReference", nsTcom, "nomenclaturalMicroReference")\r
-\r
-       };\r
-\r
-       protected static CdmSingleAttributeRDFMapperBase[] operationalMappers = new CdmSingleAttributeRDFMapperBase[]{\r
-               new CdmUnclearMapper("basionymAuthorship")\r
-               , new CdmUnclearMapper("combinationAuthorship")\r
-               , new CdmUnclearMapper("hasAnnotation")\r
-               , new CdmUnclearMapper("rank")\r
-               , new CdmUnclearMapper("nomenclaturalCode")\r
-               , new CdmUnclearMapper("publishedIn", nsTcom)\r
-               , new CdmUnclearMapper("year")\r
-       };\r
-\r
-       protected static CdmSingleAttributeRDFMapperBase[] unclearMappers = new CdmSingleAttributeRDFMapperBase[]{\r
-               new CdmUnclearMapper("authorship")\r
-               , new CdmUnclearMapper("rankString")\r
-               , new CdmUnclearMapper("nameComplete")\r
-               , new CdmUnclearMapper("hasBasionym")\r
-               , new CdmUnclearMapper("dateOfEntry", nsTpalm)\r
-       };\r
-\r
-       @Override\r
-       protected void doInvoke(TcsRdfImportState state){\r
-\r
-               MapWrapper<TaxonNameBase> taxonNameMap = (MapWrapper<TaxonNameBase>)state.getStore(ICdmIO.TAXONNAME_STORE);\r
-               MapWrapper<Reference> referenceMap = (MapWrapper<Reference>)state.getStore(ICdmIO.REFERENCE_STORE);\r
-               MapWrapper<TeamOrPersonBase> authorMap = (MapWrapper<TeamOrPersonBase>)state.getStore(ICdmIO.TEAM_STORE);\r
-\r
-               String tcsElementName;\r
-               Namespace tcsNamespace;\r
-               String value;\r
-\r
-               logger.info("start makeTaxonNames ...");\r
-               TcsRdfImportConfigurator config = state.getConfig();\r
-               Model root = config.getSourceRoot();\r
-\r
-               String rdfNamespace = config.getRdfNamespaceURIString();\r
-               String taxonNameNamespace = config.getTnNamespaceURIString();\r
-\r
-               String idNamespace = "TaxonName";\r
-\r
-               Resource elTaxonName = root.getResource(taxonNameNamespace);\r
-\r
-               int i = 0;\r
-               \r
-               TaxonNameBase name;\r
-               Property property = root.getProperty(taxonNameNamespace+"authorship");\r
-               \r
-               ResIterator iterator = root.listSubjectsWithProperty(property, (RDFNode) null);\r
-               String id ;\r
-               while (iterator.hasNext()){\r
-                       \r
-                       Resource resource = iterator.next();\r
-                       \r
-                       name = handleNameResource(resource, config);\r
-                       id = resource.getNameSpace();\r
-                       taxonNameMap.put(id, name);\r
-               }\r
-               \r
-               logger.info(i + " names handled");\r
-               getNameService().save(taxonNameMap.objects());\r
-//             makeNameSpecificData(nameMap);\r
-               logger.info("end makeTaxonNames ...");\r
-               return;\r
-\r
-       }\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
-        */\r
-       @Override\r
-    protected boolean isIgnore(TcsRdfImportState state){\r
-               return ! state.getConfig().isDoTaxonNames();\r
-       }\r
-       \r
-       protected TaxonNameBase handleNameModel(Model model, TcsRdfImportConfigurator config, MapWrapper<TaxonNameBase> taxonNameMap, String uri){\r
-               Resource nameAbout = model.getResource(uri);\r
-               TaxonNameBase result = handleNameResource(nameAbout, config);\r
-               taxonNameMap.put(uri, result);\r
-               return result;\r
-               \r
-       }\r
-       \r
-       private TaxonNameBase handleNameResource(Resource nameAbout, TcsRdfImportConfigurator config){\r
-               String idNamespace = "TaxonName";\r
-                               \r
-               StmtIterator stmts = nameAbout.listProperties();\r
-               \r
-               Property prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"nomenclaturalCode");\r
-               Statement stateNomenclaturalCode = nameAbout.getProperty(prop);\r
-               String strNomenclaturalCode = stateNomenclaturalCode.getObject().toString();\r
-               //Rank\r
-               prop =  nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"rankString");\r
-               String strRank = nameAbout.getProperty(prop).getString();\r
-               \r
-               \r
-               \r
-               try {\r
-                       \r
-                       Rank rank = TcsRdfTransformer.rankString2Rank(strRank);\r
-                       NomenclaturalCode nomCode;\r
-                       if (strNomenclaturalCode != null){\r
-                               nomCode = TcsRdfTransformer.nomCodeString2NomCode(strNomenclaturalCode);\r
-                       }else{\r
-                               nomCode = NomenclaturalCode.ICNAFP;\r
-                       }\r
-                               \r
-                       TaxonNameBase<?,?> nameBase = nomCode.getNewTaxonNameInstance(rank);\r
-\r
-                       Set<String> omitAttributes = null;\r
-                       //makeStandardMapper(nameAbout, nameBase, omitAttributes, standardMappers);\r
-                       \r
-                       prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"nameComplete");\r
-                       String strNameComplete = nameAbout.getProperty(prop).getString();\r
-                       nameBase.setTitleCache(strNameComplete, true);\r
-                       \r
-                       prop =  nameAbout.getModel().getProperty(config.getCommonNamespaceURIString()+"publishedIn");\r
-                       String strPublishedIn = nameAbout.getProperty(prop).getString();\r
-                       if (strPublishedIn != null && strPublishedIn != ""){\r
-                               IGeneric nomRef = ReferenceFactory.newGeneric(); //TODO\r
-                               nomRef.setTitleCache(strPublishedIn, true);\r
-                               nameBase.setNomenclaturalReference(nomRef);\r
-                               try{\r
-                               prop =  nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"year");\r
-                               String strYear = nameAbout.getProperty(prop).getString();\r
-                               Integer year = null;\r
-                               if (strYear != null){\r
-                                       try {\r
-                                               year = Integer.valueOf(strYear);\r
-                                               TimePeriod timeP = TimePeriod.NewInstance(year);\r
-                                               nomRef.setDatePublished(timeP);\r
-                                       } catch (RuntimeException e) {\r
-                                               logger.warn("year could not be parsed");\r
-                                       }\r
-                               }\r
-                               }catch(NullPointerException e){\r
-                               }\r
-                               if (config.isPublishReferences()){\r
-                                       ((Reference<?>)nomRef).addMarker(Marker.NewInstance(MarkerType.PUBLISH(), false));\r
-                               }\r
-                       }\r
-                       \r
-                       if (nameBase instanceof NonViralName){\r
-                               NonViralName<?> nonViralName = (NonViralName<?>)nameBase;\r
-                               prop =  nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"genusPart");\r
-                               String strGenusPart;\r
-                               try{\r
-                                       strGenusPart = nameAbout.getProperty(prop).getString();\r
-                               }catch(NullPointerException e){\r
-                                       prop =  nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"uninomial");\r
-                                       strGenusPart = nameAbout.getProperty(prop).getString();\r
-                               }\r
-                               \r
-                               nonViralName.setGenusOrUninomial(strGenusPart);\r
-                               \r
-                               prop =  nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"infragenericEpithet");\r
-                               try{\r
-                                       String strInfragenericEpithet = nameAbout.getProperty(prop).getString();\r
-                                       nonViralName.setInfraGenericEpithet(strInfragenericEpithet);\r
-                               }catch(NullPointerException e){\r
-                                       \r
-                               }\r
-                               try {\r
-                                       prop =  nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"specificEpithet");\r
-                                       String strSpecificEpithet = nameAbout.getProperty(prop).getString();\r
-                                       nonViralName.setSpecificEpithet(strSpecificEpithet);\r
-                               }catch(NullPointerException e){\r
-                                       \r
-                               }\r
-                               try{\r
-                               prop =  nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"infraspecificEpithet");\r
-                               String strInfraspecificEpithet = nameAbout.getProperty(prop).getString();\r
-                               nonViralName.setInfraSpecificEpithet(strInfraspecificEpithet);\r
-                               }catch(NullPointerException e){\r
-                                       \r
-                               }\r
-                               //AuthorTeams\r
-                               //TODO\r
-                               prop =  nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"authorship");\r
-                               Statement stateAuthorship = nameAbout.getProperty(prop);\r
-                               prop =  nameAbout.getModel().getProperty(config.getTeamNamespaceURIString()+"name");\r
-                               Team authorTeam = new Team();\r
-                               authorTeam.setTitleCache(stateAuthorship.getObject().toString(), true);\r
-                               prop =  nameAbout.getModel().getProperty(config.getTeamNamespaceURIString()+"hasMember");\r
-                               //String strTeamMember = nameAbout.getProperty(prop).getString();\r
-                               nonViralName.setCombinationAuthorTeam(authorTeam);\r
-                               \r
-                               //Annotations:\r
-                               /*\r
-                                * <tn:hasAnnotation>\r
-            <tn:NomenclaturalNote>\r
-                <tn:noteType rdf:resource="http://rs.tdwg.org/ontology/voc/TaxonName#replacementNameFor"/>\r
-                <tn:objectTaxonName rdf:resource="urn:lsid:ipni.org:names:151538-1"/>\r
-            </tn:NomenclaturalNote>\r
-        </tn:hasAnnotation>   \r
-                                */\r
-                               /*\r
-                               String strInfraspecificEpithet = nameAbout.getProperty(prop).getString();\r
-                               tcsElementName = "basionymAuthorship";\r
-                               String basionymAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);\r
-                               if (basionymAuthorValue != null){\r
-                                       TeamOrPersonBase<?> basionymAuthor = Team.NewInstance();\r
-                                       basionymAuthor.setNomenclaturalTitle(basionymAuthorValue);\r
-                                       nonViralName.setBasionymAuthorTeam(basionymAuthor);\r
-                               }\r
-\r
-                               //TODO\r
-                               tcsElementName = "combinationAuthorship";\r
-                               String combinationAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);\r
-                               if (combinationAuthorValue != null){\r
-                                       TeamOrPersonBase<?> combinationAuthor = Team.NewInstance();\r
-                                       combinationAuthor.setNomenclaturalTitle(combinationAuthorValue);\r
-                                       nonViralName.setCombinationAuthorTeam(combinationAuthor);\r
-                               }\r
-\r
-                               //set the authorshipCache\r
-                               tcsElementName = "authorship";\r
-                               String authorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);\r
-                               String cache = nonViralName.getAuthorshipCache();\r
-                               if ( authorValue != null){\r
-                                       //compare existing authorship cache with new one and check if it is necessary to\r
-                                       //make cache protected  //TODO refinement\r
-                                       if (cache == null){\r
-                                               nonViralName.setAuthorshipCache(authorValue);\r
-                                       }else{\r
-                                               cache = basionymAuthorValue == null ? cache : cache.replace(basionymAuthorValue, "");\r
-                                               cache = combinationAuthorValue == null ? cache : cache.replace(combinationAuthorValue, "");\r
-                                               cache = cache.replace("\\(|\\)", "");\r
-                                               cache = cache.trim();\r
-                                               if (! cache.equals("")){\r
-                                                       nonViralName.setAuthorshipCache(authorValue);\r
-                                               }\r
-                                       }\r
-                               }*/\r
-                       }\r
-                       //ImportHelper.setOriginalSource(nameBase, config.getSourceReference(), nameAbout, idNamespace);\r
-\r
-                       //checkAdditionalContents(elTaxonName, standardMappers, operationalMappers, unclearMappers);\r
-                       \r
-                       return nameBase;\r
-                               \r
-                       }catch(Exception e){\r
-                       e.printStackTrace();\r
-                       return null;\r
-               }\r
-                       /*\r
-                       //name\r
-                       String strNameComplete = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "nameComplete", rdfNamespace);\r
-                       nameBase.setTitleCache(strNameComplete, true);\r
-                       \r
-                       //Reference\r
-                       //TODO\r
-                       String tcsElementName = "publishedIn";\r
-                       Namespace tcsNamespace = config.getCommonNamespaceURIString();\r
-                       String value = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, tcsNamespace);\r
-                       if (value != null && value != ""){\r
-                               IGeneric nomRef = ReferenceFactory.newGeneric(); //TODO\r
-                               nomRef.setTitleCache(value, true);\r
-                               nameBase.setNomenclaturalReference(nomRef);\r
-\r
-                               //TODO\r
-                               tcsElementName = "year";\r
-                               tcsNamespace = taxonNameNamespace;\r
-                               Integer year = null;\r
-                               value = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, tcsNamespace);\r
-                               if (value != null){\r
-                                       try {\r
-                                               year = Integer.valueOf(value);\r
-                                               TimePeriod timeP = TimePeriod.NewInstance(year);\r
-                                               nomRef.setDatePublished(timeP);\r
-                                       } catch (RuntimeException e) {\r
-                                               logger.warn("year could not be parsed");\r
-                                       }\r
-                               }\r
-                               if (config.isPublishReferences()){\r
-                                       ((Reference<?>)nomRef).addMarker(Marker.NewInstance(MarkerType.PUBLISH(), false));\r
-                               }\r
-                       }\r
-\r
-                       //Status\r
-                       tcsNamespace = taxonNameNamespace;\r
-                       Element elAnnotation = elTaxonName.getChild("hasAnnotation", tcsNamespace);\r
-                       if (elAnnotation != null){\r
-                               Element elNomenclaturalNote = elAnnotation.getChild("NomenclaturalNote", tcsNamespace);\r
-                               if (elNomenclaturalNote != null){\r
-                                       String statusValue = (String)ImportHelper.getXmlInputValue(elNomenclaturalNote, "note", tcsNamespace);\r
-                                       String type = XmlHelp.getChildAttributeValue(elNomenclaturalNote, "type", tcsNamespace, "resource", rdfNamespace);\r
-                                       String tdwgType = "http://rs.tdwg.org/ontology/voc/TaxonName#PublicationStatus";\r
-                                       if (tdwgType.equalsIgnoreCase(type)){\r
-                                               try {\r
-                                                       NomenclaturalStatusType statusType = TcsRdfTransformer.nomStatusString2NomStatus(statusValue);\r
-                                                       //NomenclaturalStatusType statusType = NomenclaturalStatusType.getNomenclaturalStatusTypeByAbbreviation(statusValue);\r
-                                                       if (statusType != null){\r
-                                                               nameBase.addStatus(NomenclaturalStatus.NewInstance(statusType));\r
-                                                       }\r
-                                               } catch (UnknownCdmTypeException e) {\r
-                                                       if (! statusValue.equals("valid")){\r
-                                                               logger.warn("Unknown NomenclaturalStatusType: " +  statusValue);\r
-                                                       }\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       if (nameBase instanceof NonViralName){\r
-                               NonViralName<?> nonViralName = (NonViralName<?>)nameBase;\r
-                               String strGenusPart =  XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "genusPart", rdfNamespace);\r
-                               \r
-                               //for names of rank genus the uninomial property should be used\r
-                               if (strGenusPart == null){\r
-                                       strGenusPart =  XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "uninomial", rdfNamespace);\r
-                               }\r
-                               nonViralName.setGenusOrUninomial(strGenusPart);\r
-                               \r
-                               String strInfragenericEpithet =  XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "infragenericEpithet", rdfNamespace);\r
-                               nonViralName.setGenusOrUninomial(strInfragenericEpithet);\r
-                               \r
-                               \r
-                               \r
-                               String strSpecificEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "specificEpithet", rdfNamespace);\r
-                               nonViralName.setSpecificEpithet(strSpecificEpithet);\r
-                               \r
-                               String strInfraspecificEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "infraspecificEpithet", rdfNamespace);\r
-                               nonViralName.setInfraSpecificEpithet(strInfraspecificEpithet);\r
-                               //AuthorTeams\r
-                               //TODO\r
-                               tcsElementName = "basionymAuthorship";\r
-                               String basionymAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);\r
-                               if (basionymAuthorValue != null){\r
-                                       TeamOrPersonBase<?> basionymAuthor = Team.NewInstance();\r
-                                       basionymAuthor.setNomenclaturalTitle(basionymAuthorValue);\r
-                                       nonViralName.setBasionymAuthorTeam(basionymAuthor);\r
-                               }\r
-\r
-                               //TODO\r
-                               tcsElementName = "combinationAuthorship";\r
-                               String combinationAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);\r
-                               if (combinationAuthorValue != null){\r
-                                       TeamOrPersonBase<?> combinationAuthor = Team.NewInstance();\r
-                                       combinationAuthor.setNomenclaturalTitle(combinationAuthorValue);\r
-                                       nonViralName.setCombinationAuthorTeam(combinationAuthor);\r
-                               }\r
-\r
-                               //set the authorshipCache\r
-                               tcsElementName = "authorship";\r
-                               String authorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);\r
-                               String cache = nonViralName.getAuthorshipCache();\r
-                               if ( authorValue != null){\r
-                                       //compare existing authorship cache with new one and check if it is necessary to\r
-                                       //make cache protected  //TODO refinement\r
-                                       if (cache == null){\r
-                                               nonViralName.setAuthorshipCache(authorValue);\r
-                                       }else{\r
-                                               cache = basionymAuthorValue == null ? cache : cache.replace(basionymAuthorValue, "");\r
-                                               cache = combinationAuthorValue == null ? cache : cache.replace(combinationAuthorValue, "");\r
-                                               cache = cache.replace("\\(|\\)", "");\r
-                                               cache = cache.trim();\r
-                                               if (! cache.equals("")){\r
-                                                       nonViralName.setAuthorshipCache(authorValue);\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-                       ImportHelper.setOriginalSource(nameBase, config.getSourceReference(), nameAbout, idNamespace);\r
-\r
-                       checkAdditionalContents(elTaxonName, standardMappers, operationalMappers, unclearMappers);\r
-\r
-                       //nameId\r
-                       //TODO\r
-                       //ImportHelper.setOriginalSource(nameBase, tcsConfig.getSourceReference(), nameId);\r
-                       //taxonNameMap.put(nameAbout, nameBase);\r
-                       return nameBase;\r
-               }catch(UnknownCdmTypeException e){\r
-                       e.printStackTrace();\r
-               }\r
-               return null;*/\r
-       }\r
-       \r
-       protected TaxonNameBase handleNameElement(Element elTaxonName, Namespace rdfNamespace, Namespace taxonNameNamespace, TcsRdfImportConfigurator config, MapWrapper<TaxonNameBase> taxonNameMap){\r
-               String idNamespace = "TaxonName";\r
-               Attribute about = elTaxonName.getAttribute("about", rdfNamespace);\r
-               \r
-               //create TaxonName element\r
-               \r
-       \r
-               String nameAbout = elTaxonName.getAttributeValue("about", rdfNamespace);\r
-               if (nameAbout == null){\r
-                       nameAbout = XmlHelp.getChildAttributeValue(elTaxonName, "TaxonName", taxonNameNamespace, "about", rdfNamespace);\r
-               }\r
-               \r
-               \r
-               String strRank = XmlHelp.getChildAttributeValue(elTaxonName, "rankString", taxonNameNamespace, "rankString", rdfNamespace);\r
-               if (strRank == null){\r
-                       strRank = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "rankString", rdfNamespace);\r
-                       \r
-               }\r
-               \r
-               if (strRank == null){\r
-                       strRank = XmlHelp.getChildAttributeValue(elTaxonName, "rank", taxonNameNamespace, "resource", rdfNamespace);\r
-                       \r
-               }\r
-               \r
-               String strNomenclaturalCode = XmlHelp.getChildContentAttributeValue(elTaxonName, "TaxonName", taxonNameNamespace, "nomenclaturalCode", rdfNamespace);\r
-               if (strNomenclaturalCode == null){\r
-                       strNomenclaturalCode = XmlHelp.getChildAttributeValue(elTaxonName, "nomenclaturalCode", taxonNameNamespace, "resource", rdfNamespace);\r
-                       \r
-               }\r
-               try {\r
-                       \r
-                       Rank rank = TcsRdfTransformer.rankString2Rank(strRank);\r
-                       NomenclaturalCode nomCode;\r
-                       if (strNomenclaturalCode != null){\r
-                               nomCode = TcsRdfTransformer.nomCodeString2NomCode(strNomenclaturalCode);\r
-                       }else{\r
-                               nomCode = NomenclaturalCode.ICNAFP;\r
-                       }\r
-                               \r
-                       TaxonNameBase<?,?> nameBase = nomCode.getNewTaxonNameInstance(rank);\r
-\r
-                       Set<String> omitAttributes = null;\r
-                       //makeStandardMapper(elTaxonName, nameBase, omitAttributes, standardMappers);\r
-                       \r
-                       //name\r
-                       String strNameComplete = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "nameComplete", rdfNamespace);\r
-                       nameBase.setTitleCache(strNameComplete, true);\r
-                       \r
-                       //Reference\r
-                       //TODO\r
-                       String tcsElementName = "publishedIn";\r
-                       String tcsNamespace = config.getCommonNamespaceURIString();\r
-                       /*String value = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, tcsNamespace);\r
-                       if (value != null && value != ""){\r
-                               IGeneric nomRef = ReferenceFactory.newGeneric(); //TODO\r
-                               nomRef.setTitleCache(value, true);\r
-                               nameBase.setNomenclaturalReference(nomRef);\r
-\r
-                               //TODO\r
-                               tcsElementName = "year";\r
-                               tcsNamespace = taxonNameNamespace;\r
-                               Integer year = null;\r
-                               value = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, tcsNamespace);\r
-                               if (value != null){\r
-                                       try {\r
-                                               year = Integer.valueOf(value);\r
-                                               TimePeriod timeP = TimePeriod.NewInstance(year);\r
-                                               nomRef.setDatePublished(timeP);\r
-                                       } catch (RuntimeException e) {\r
-                                               logger.warn("year could not be parsed");\r
-                                       }\r
-                               }\r
-                               if (config.isPublishReferences()){\r
-                                       ((Reference<?>)nomRef).addMarker(Marker.NewInstance(MarkerType.PUBLISH(), false));\r
-                               }\r
-                       }\r
-\r
-                       //Status\r
-                       tcsNamespace = taxonNameNamespace;\r
-                       Element elAnnotation = elTaxonName.getChild("hasAnnotation", tcsNamespace);\r
-                       if (elAnnotation != null){\r
-                               Element elNomenclaturalNote = elAnnotation.getChild("NomenclaturalNote", tcsNamespace);\r
-                               if (elNomenclaturalNote != null){\r
-                                       String statusValue = (String)ImportHelper.getXmlInputValue(elNomenclaturalNote, "note", tcsNamespace);\r
-                                       String type = XmlHelp.getChildAttributeValue(elNomenclaturalNote, "type", tcsNamespace, "resource", rdfNamespace);\r
-                                       String tdwgType = "http://rs.tdwg.org/ontology/voc/TaxonName#PublicationStatus";\r
-                                       if (tdwgType.equalsIgnoreCase(type)){\r
-                                               try {\r
-                                                       NomenclaturalStatusType statusType = TcsRdfTransformer.nomStatusString2NomStatus(statusValue);\r
-                                                       //NomenclaturalStatusType statusType = NomenclaturalStatusType.getNomenclaturalStatusTypeByAbbreviation(statusValue);\r
-                                                       if (statusType != null){\r
-                                                               nameBase.addStatus(NomenclaturalStatus.NewInstance(statusType));\r
-                                                       }\r
-                                               } catch (UnknownCdmTypeException e) {\r
-                                                       if (! statusValue.equals("valid")){\r
-                                                               logger.warn("Unknown NomenclaturalStatusType: " +  statusValue);\r
-                                                       }\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       if (nameBase instanceof NonViralName){\r
-                               NonViralName<?> nonViralName = (NonViralName<?>)nameBase;\r
-                               String strGenusPart =  XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "genusPart", rdfNamespace);\r
-                               \r
-                               //for names of rank genus the uninomial property should be used\r
-                               if (strGenusPart == null){\r
-                                       strGenusPart =  XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "uninomial", rdfNamespace);\r
-                               }\r
-                               nonViralName.setGenusOrUninomial(strGenusPart);\r
-                               \r
-                               String strInfragenericEpithet =  XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "infragenericEpithet", rdfNamespace);\r
-                               nonViralName.setGenusOrUninomial(strInfragenericEpithet);\r
-                               \r
-                               \r
-                               \r
-                               String strSpecificEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "specificEpithet", rdfNamespace);\r
-                               nonViralName.setSpecificEpithet(strSpecificEpithet);\r
-                               \r
-                               String strInfraspecificEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "infraspecificEpithet", rdfNamespace);\r
-                               nonViralName.setInfraSpecificEpithet(strInfraspecificEpithet);\r
-                               //AuthorTeams\r
-                               //TODO\r
-                               tcsElementName = "basionymAuthorship";\r
-                               String basionymAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);\r
-                               if (basionymAuthorValue != null){\r
-                                       TeamOrPersonBase<?> basionymAuthor = Team.NewInstance();\r
-                                       basionymAuthor.setNomenclaturalTitle(basionymAuthorValue);\r
-                                       nonViralName.setBasionymAuthorTeam(basionymAuthor);\r
-                               }\r
-\r
-                               //TODO\r
-                               tcsElementName = "combinationAuthorship";\r
-                               String combinationAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);\r
-                               if (combinationAuthorValue != null){\r
-                                       TeamOrPersonBase<?> combinationAuthor = Team.NewInstance();\r
-                                       combinationAuthor.setNomenclaturalTitle(combinationAuthorValue);\r
-                                       nonViralName.setCombinationAuthorTeam(combinationAuthor);\r
-                               }\r
-\r
-                               //set the authorshipCache\r
-                               tcsElementName = "authorship";\r
-                               String authorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);\r
-                               String cache = nonViralName.getAuthorshipCache();\r
-                               if ( authorValue != null){\r
-                                       //compare existing authorship cache with new one and check if it is necessary to\r
-                                       //make cache protected  //TODO refinement\r
-                                       if (cache == null){\r
-                                               nonViralName.setAuthorshipCache(authorValue);\r
-                                       }else{\r
-                                               cache = basionymAuthorValue == null ? cache : cache.replace(basionymAuthorValue, "");\r
-                                               cache = combinationAuthorValue == null ? cache : cache.replace(combinationAuthorValue, "");\r
-                                               cache = cache.replace("\\(|\\)", "");\r
-                                               cache = cache.trim();\r
-                                               if (! cache.equals("")){\r
-                                                       nonViralName.setAuthorshipCache(authorValue);\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-                       ImportHelper.setOriginalSource(nameBase, config.getSourceReference(), nameAbout, idNamespace);\r
-\r
-                       checkAdditionalContents(elTaxonName, standardMappers, operationalMappers, unclearMappers);\r
-\r
-                       //nameId\r
-                       //TODO\r
-                       //ImportHelper.setOriginalSource(nameBase, tcsConfig.getSourceReference(), nameId);\r
-                       //taxonNameMap.put(nameAbout, nameBase);\r
-                       return nameBase;\r
-               */}catch(UnknownCdmTypeException e){\r
-                       e.printStackTrace();\r
-               }\r
-               return null;\r
-       }\r
-\r
-       public TaxonNameBase handleRdfElementFromStream(InputStream is, TcsRdfImportConfigurator config, MapWrapper<TaxonNameBase> taxonNameMap, String uri){\r
-               Model model = ModelFactory.createDefaultModel();\r
-               try{\r
-                       model.read(is, null);\r
-                       \r
-                       config.makeNamespaces(model);\r
-                       \r
-                       String rdfNamespace = config.getRdfNamespaceURIString();\r
-                       String taxonNameNamespace = config.getTnNamespaceURIString();\r
-                       return handleNameModel(model, config, taxonNameMap, uri);\r
-                       \r
-                       \r
-               }catch(com.hp.hpl.jena.shared.JenaException e){\r
-                       logger.debug("The file was no valid rdf file");\r
-               }\r
-               \r
-               \r
-               \r
-               return null;\r
-       }\r
-       \r
-}\r
+/**
+* Copyright (C) 2007 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.tcsrdf;
+
+import java.io.InputStream;
+import java.util.Set;
+
+import org.apache.log4j.Logger;
+import org.jdom.Attribute;
+import org.jdom.Element;
+import org.jdom.Namespace;
+import org.springframework.stereotype.Component;
+
+import com.hp.hpl.jena.rdf.model.Model;
+import com.hp.hpl.jena.rdf.model.ModelFactory;
+import com.hp.hpl.jena.rdf.model.Property;
+import com.hp.hpl.jena.rdf.model.RDFNode;
+import com.hp.hpl.jena.rdf.model.ResIterator;
+import com.hp.hpl.jena.rdf.model.Resource;
+import com.hp.hpl.jena.rdf.model.Statement;
+import com.hp.hpl.jena.rdf.model.StmtIterator;
+
+import eu.etaxonomy.cdm.common.XmlHelp;
+import eu.etaxonomy.cdm.io.common.ICdmIO;
+import eu.etaxonomy.cdm.io.common.MapWrapper;
+import eu.etaxonomy.cdm.model.agent.Person;
+import eu.etaxonomy.cdm.model.agent.Team;
+import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
+import eu.etaxonomy.cdm.model.common.Marker;
+import eu.etaxonomy.cdm.model.common.MarkerType;
+import eu.etaxonomy.cdm.model.common.TimePeriod;
+import eu.etaxonomy.cdm.model.name.INonViralName;
+import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
+import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.model.name.TaxonName;
+import eu.etaxonomy.cdm.model.reference.IGeneric;
+import eu.etaxonomy.cdm.model.reference.Reference;
+import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
+import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;
+
+/**
+ * @author a.mueller
+ * @created 29.05.2008
+ */
+@Component
+public class TcsRdfTaxonNameImport  extends TcsRdfImportBase implements ICdmIO<TcsRdfImportState> {
+    private static final long serialVersionUID = -2547422867292051979L;
+
+    private static final Logger logger = Logger.getLogger(TcsRdfTaxonNameImport.class);
+
+       private static int modCount = 5000;
+
+       public TcsRdfTaxonNameImport(){
+               super();
+       }
+
+       @Override
+       public boolean doCheck(TcsRdfImportState config){
+               boolean result = true;
+               logger.warn("BasionymRelations not yet implemented");
+               logger.warn("Checking for TaxonNames not yet implemented");
+               //result &= checkArticlesWithoutJournal(tcsConfig);
+               //result &= checkPartOfJournal(tcsConfig);
+
+               return result;
+       }
+
+       protected static CdmSingleAttributeRDFMapperBase[] standardMappers = new CdmSingleAttributeRDFMapperBase[]{
+               new CdmTextElementMapper("genusPart", "genusOrUninomial")
+               , new CdmTextElementMapper("uninomial", "genusOrUninomial")  //TODO make it a more specific Mapper for both attributes
+               , new CdmTextElementMapper("specificEpithet", "specificEpithet")
+               , new CdmTextElementMapper("infraspecificEpithet", "infraSpecificEpithet")
+               , new CdmTextElementMapper("infragenericEpithet", "infraGenericEpithet")
+               , new CdmTextElementMapper("microReference", nsTcom, "nomenclaturalMicroReference")
+
+       };
+
+       protected static CdmSingleAttributeRDFMapperBase[] operationalMappers = new CdmSingleAttributeRDFMapperBase[]{
+               new CdmUnclearMapper("basionymAuthorship")
+               , new CdmUnclearMapper("combinationAuthorship")
+               , new CdmUnclearMapper("hasAnnotation")
+               , new CdmUnclearMapper("rank")
+               , new CdmUnclearMapper("nomenclaturalCode")
+               , new CdmUnclearMapper("publishedIn", nsTcom)
+               , new CdmUnclearMapper("year")
+       };
+
+       protected static CdmSingleAttributeRDFMapperBase[] unclearMappers = new CdmSingleAttributeRDFMapperBase[]{
+               new CdmUnclearMapper("authorship")
+               , new CdmUnclearMapper("rankString")
+               , new CdmUnclearMapper("nameComplete")
+               , new CdmUnclearMapper("hasBasionym")
+               , new CdmUnclearMapper("dateOfEntry", nsTpalm)
+       };
+
+       @Override
+       protected void doInvoke(TcsRdfImportState state){
+
+               MapWrapper<TaxonName> taxonNameMap = (MapWrapper<TaxonName>)state.getStore(ICdmIO.TAXONNAME_STORE);
+               MapWrapper<Reference> referenceMap = (MapWrapper<Reference>)state.getStore(ICdmIO.REFERENCE_STORE);
+               MapWrapper<TeamOrPersonBase> authorMap = (MapWrapper<TeamOrPersonBase>)state.getStore(ICdmIO.TEAM_STORE);
+
+               String tcsElementName;
+               Namespace tcsNamespace;
+               String value;
+
+               logger.info("start makeTaxonNames ...");
+               TcsRdfImportConfigurator config = state.getConfig();
+               Model root = config.getSourceRoot();
+
+               String rdfNamespace = config.getRdfNamespaceURIString();
+               String taxonNameNamespace = config.getTnNamespaceURIString();
+
+               String idNamespace = "TaxonName";
+
+               Resource elTaxonName = root.getResource(taxonNameNamespace);
+
+               int i = 0;
+
+               TaxonName name;
+               Property property = root.getProperty(taxonNameNamespace+"authorship");
+
+               ResIterator iterator = root.listSubjectsWithProperty(property, (RDFNode) null);
+               String id ;
+               while (iterator.hasNext()){
+
+                       Resource resource = iterator.next();
+
+                       name = handleNameResource(resource, config);
+                       id = resource.getNameSpace();
+                       taxonNameMap.put(id, name);
+               }
+
+               logger.info(i + " names handled");
+               getNameService().save(taxonNameMap.objects());
+//             makeNameSpecificData(nameMap);
+               logger.info("end makeTaxonNames ...");
+               return;
+
+       }
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
+        */
+       @Override
+    protected boolean isIgnore(TcsRdfImportState state){
+               return ! state.getConfig().isDoTaxonNames();
+       }
+
+       protected TaxonName handleNameModel(Model model, TcsRdfImportConfigurator config, MapWrapper<TaxonName> taxonNameMap, String uri){
+               Resource nameAbout = model.getResource(uri);
+               TaxonName result = handleNameResource(nameAbout, config);
+               taxonNameMap.put(uri, result);
+               return result;
+
+       }
+
+       private TaxonName handleNameResource(Resource nameAbout, TcsRdfImportConfigurator config){
+               String idNamespace = "TaxonName";
+
+//             StmtIterator stmts = nameAbout.listProperties();
+//             while(stmts.hasNext()){
+//                     System.out.println(stmts.next().getPredicate().toString());
+//             }
+
+               Property prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"nomenclaturalCode");
+               Statement stateNomenclaturalCode = nameAbout.getProperty(prop);
+               String strNomenclaturalCode = stateNomenclaturalCode.getObject().toString();
+               //Rank
+               prop =  nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"rankString");
+               String strRank = nameAbout.getProperty(prop).getString();
+
+
+
+               try {
+
+                       Rank rank = TcsRdfTransformer.rankString2Rank(strRank);
+                       NomenclaturalCode nomCode;
+                       if (strNomenclaturalCode != null){
+                               nomCode = TcsRdfTransformer.nomCodeString2NomCode(strNomenclaturalCode);
+                       }else{
+                               nomCode = NomenclaturalCode.ICNAFP;
+                       }
+
+                       TaxonName nameBase = nomCode.getNewTaxonNameInstance(rank);
+
+                       Set<String> omitAttributes = null;
+                       //makeStandardMapper(nameAbout, nameBase, omitAttributes, standardMappers);
+
+                       prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"nameComplete");
+                       String strNameComplete = nameAbout.getProperty(prop).getString();
+                       nameBase.setTitleCache(strNameComplete, true);
+
+                       prop =  nameAbout.getModel().getProperty(config.getCommonNamespaceURIString()+"publishedIn");
+                       String strPublishedIn = nameAbout.getProperty(prop).getString();
+                       if (strPublishedIn != null && strPublishedIn != ""){
+                               IGeneric nomRef = ReferenceFactory.newGeneric(); //TODO
+                               nomRef.setTitleCache(strPublishedIn, true);
+                               nameBase.setNomenclaturalReference(nomRef);
+                               try{
+                               prop =  nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"year");
+                               String strYear = nameAbout.getProperty(prop).getString();
+                               Integer year = null;
+                               if (strYear != null){
+                                       try {
+                                               year = Integer.valueOf(strYear);
+                                               TimePeriod timeP = TimePeriod.NewInstance(year);
+                                               nomRef.setDatePublished(timeP);
+                                       } catch (RuntimeException e) {
+                                               logger.warn("year could not be parsed");
+                                       }
+                               }
+                               }catch(NullPointerException e){
+                               }
+                               if (config.isPublishReferences()){
+                                       ((Reference)nomRef).addMarker(Marker.NewInstance(MarkerType.PUBLISH(), false));
+                               }
+                       }
+
+                       if (nameBase.isNonViral()){
+                               INonViralName nonViralName = nameBase;
+                               prop =  nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"genusPart");
+                               String strGenusPart;
+                               try{
+                                       strGenusPart = nameAbout.getProperty(prop).getString();
+                               }catch(NullPointerException e){
+                                       prop =  nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"uninomial");
+                                       strGenusPart = nameAbout.getProperty(prop).getString();
+                               }
+
+                               nonViralName.setGenusOrUninomial(strGenusPart);
+
+                               prop =  nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"infragenericEpithet");
+                               try{
+                                       String strInfragenericEpithet = nameAbout.getProperty(prop).getString();
+                                       nonViralName.setInfraGenericEpithet(strInfragenericEpithet);
+                               }catch(NullPointerException e){
+
+                               }
+                               try {
+                                       prop =  nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"specificEpithet");
+                                       String strSpecificEpithet = nameAbout.getProperty(prop).getString();
+                                       nonViralName.setSpecificEpithet(strSpecificEpithet);
+                               }catch(NullPointerException e){
+
+                               }
+                               try{
+                               prop =  nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"infraspecificEpithet");
+                               String strInfraspecificEpithet = nameAbout.getProperty(prop).getString();
+                               nonViralName.setInfraSpecificEpithet(strInfraspecificEpithet);
+                               }catch(NullPointerException e){
+
+                               }
+                               //Authorships
+                               //TODO
+                               /*
+                                * <tn:authorteam>
+                                               <tm:Team>
+                                                       <tm:name>(Raf.) Fernald</tm:name>
+                                                       <tm:hasMember rdf:resource="urn:lsid:ipni.org:authors:2691-1"
+                                                               tm:index="1"
+                                                               tm:role="Combination Author"/>
+                                                       <tm:hasMember rdf:resource="urn:lsid:ipni.org:authors:8096-1"
+                                                               tm:index="1"
+                                                               tm:role="Basionym Author"/>
+                                               </tm:Team>
+                                       </tn:authorteam>
+                                */
+                               prop =  nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"authorship");
+                               Statement stateAuthorship = nameAbout.getProperty(prop);
+                               prop =  nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"authorteam");
+                               Statement stateAuthorTeam = nameAbout.getProperty(prop);
+                               Team authorTeam = new Team();
+                               authorTeam.setTitleCache(stateAuthorship.getObject().toString(), true);
+                               Statement stateAutorTeamTeam = null;
+                               Statement stateAutorTeamName = null;
+                               StmtIterator stateTeamMember = null;
+                               if (stateAuthorTeam != null){
+                                       prop =  stateAuthorTeam.getModel().getProperty(config.getTeamNamespaceURIString()+"Team");
+                                       try{
+                                               stateAutorTeamTeam = stateAuthorTeam.getProperty(prop);
+                                       }catch(Exception e){
+
+                                       }
+                                       try{
+                                               prop =  stateAuthorTeam.getModel().getProperty(config.getTeamNamespaceURIString()+"name");
+                                               stateAutorTeamName = stateAuthorTeam.getProperty(prop);
+                                       }catch(Exception e){
+
+                                       }
+                                       try{
+                                               prop =  nameAbout.getModel().getProperty(config.getTeamNamespaceURIString()+"hasMember");
+                                               stateTeamMember = ((Resource)stateAuthorTeam.getObject()).listProperties(prop);
+                                               String memberString = null;
+                                               Person person;
+                                               for (Statement statement :stateTeamMember.toList()){
+                                                       memberString =statement.getObject().toString();
+                                                       if (memberString != null){
+                                                               person = Person.NewTitledInstance(memberString);
+                                                               authorTeam.addTeamMember(person);
+                                                       }
+                                               }
+                                       }catch(Exception e){
+                                               System.err.println(e.getMessage());
+                                       }
+                               }
+
+
+
+                               nonViralName.setCombinationAuthorship(authorTeam);
+
+                               //Annotations:
+                               /*
+                                * <tn:hasAnnotation>
+            <tn:NomenclaturalNote>
+                <tn:noteType rdf:resource="http://rs.tdwg.org/ontology/voc/TaxonName#replacementNameFor"/>
+                <tn:objectTaxonName rdf:resource="urn:lsid:ipni.org:names:151538-1"/>
+            </tn:NomenclaturalNote>
+        </tn:hasAnnotation>
+                                */
+                               /*
+                               String strInfraspecificEpithet = nameAbout.getProperty(prop).getString();
+                               tcsElementName = "basionymAuthorship";
+                               String basionymAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);
+                               if (basionymAuthorValue != null){
+                                       TeamOrPersonBase<?> basionymAuthor = Team.NewInstance();
+                                       basionymAuthor.setNomenclaturalTitle(basionymAuthorValue);
+                                       nonViralName.setBasionymAuthorship(basionymAuthor);
+                               }
+
+                               //TODO
+                               tcsElementName = "combinationAuthorship";
+                               String combinationAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);
+                               if (combinationAuthorValue != null){
+                                       TeamOrPersonBase<?> combinationAuthor = Team.NewInstance();
+                                       combinationAuthor.setNomenclaturalTitle(combinationAuthorValue);
+                                       nonViralName.setCombinationAuthorship(combinationAuthor);
+                               }
+
+                               //set the authorshipCache
+                               tcsElementName = "authorship";
+                               String authorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);
+                               String cache = nonViralName.getAuthorshipCache();
+                               if ( authorValue != null){
+                                       //compare existing authorship cache with new one and check if it is necessary to
+                                       //make cache protected  //TODO refinement
+                                       if (cache == null){
+                                               nonViralName.setAuthorshipCache(authorValue);
+                                       }else{
+                                               cache = basionymAuthorValue == null ? cache : cache.replace(basionymAuthorValue, "");
+                                               cache = combinationAuthorValue == null ? cache : cache.replace(combinationAuthorValue, "");
+                                               cache = cache.replace("\\(|\\)", "");
+                                               cache = cache.trim();
+                                               if (! cache.equals("")){
+                                                       nonViralName.setAuthorshipCache(authorValue);
+                                               }
+                                       }
+                               }*/
+                       }
+                       //ImportHelper.setOriginalSource(nameBase, config.getSourceReference(), nameAbout, idNamespace);
+
+                       //checkAdditionalContents(elTaxonName, standardMappers, operationalMappers, unclearMappers);
+
+                       return nameBase;
+
+                       }catch(Exception e){
+                       e.printStackTrace();
+                       return null;
+               }
+                       /*
+                       //name
+                       String strNameComplete = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "nameComplete", rdfNamespace);
+                       nameBase.setTitleCache(strNameComplete, true);
+
+                       //Reference
+                       //TODO
+                       String tcsElementName = "publishedIn";
+                       Namespace tcsNamespace = config.getCommonNamespaceURIString();
+                       String value = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, tcsNamespace);
+                       if (value != null && value != ""){
+                               IGeneric nomRef = ReferenceFactory.newGeneric(); //TODO
+                               nomRef.setTitleCache(value, true);
+                               nameBase.setNomenclaturalReference(nomRef);
+
+                               //TODO
+                               tcsElementName = "year";
+                               tcsNamespace = taxonNameNamespace;
+                               Integer year = null;
+                               value = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, tcsNamespace);
+                               if (value != null){
+                                       try {
+                                               year = Integer.valueOf(value);
+                                               TimePeriod timeP = TimePeriod.NewInstance(year);
+                                               nomRef.setDatePublished(timeP);
+                                       } catch (RuntimeException e) {
+                                               logger.warn("year could not be parsed");
+                                       }
+                               }
+                               if (config.isPublishReferences()){
+                                       ((Reference)nomRef).addMarker(Marker.NewInstance(MarkerType.PUBLISH(), false));
+                               }
+                       }
+
+                       //Status
+                       tcsNamespace = taxonNameNamespace;
+                       Element elAnnotation = elTaxonName.getChild("hasAnnotation", tcsNamespace);
+                       if (elAnnotation != null){
+                               Element elNomenclaturalNote = elAnnotation.getChild("NomenclaturalNote", tcsNamespace);
+                               if (elNomenclaturalNote != null){
+                                       String statusValue = (String)ImportHelper.getXmlInputValue(elNomenclaturalNote, "note", tcsNamespace);
+                                       String type = XmlHelp.getChildAttributeValue(elNomenclaturalNote, "type", tcsNamespace, "resource", rdfNamespace);
+                                       String tdwgType = "http://rs.tdwg.org/ontology/voc/TaxonName#PublicationStatus";
+                                       if (tdwgType.equalsIgnoreCase(type)){
+                                               try {
+                                                       NomenclaturalStatusType statusType = TcsRdfTransformer.nomStatusString2NomStatus(statusValue);
+                                                       //NomenclaturalStatusType statusType = NomenclaturalStatusType.getNomenclaturalStatusTypeByAbbreviation(statusValue);
+                                                       if (statusType != null){
+                                                               nameBase.addStatus(NomenclaturalStatus.NewInstance(statusType));
+                                                       }
+                                               } catch (UnknownCdmTypeException e) {
+                                                       if (! statusValue.equals("valid")){
+                                                               logger.warn("Unknown NomenclaturalStatusType: " +  statusValue);
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+
+                       if (nameBase instanceof NonViralName){
+                               INonViralName nonViralName = nameBase;
+                               String strGenusPart =  XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "genusPart", rdfNamespace);
+
+                               //for names of rank genus the uninomial property should be used
+                               if (strGenusPart == null){
+                                       strGenusPart =  XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "uninomial", rdfNamespace);
+                               }
+                               nonViralName.setGenusOrUninomial(strGenusPart);
+
+                               String strInfragenericEpithet =  XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "infragenericEpithet", rdfNamespace);
+                               nonViralName.setGenusOrUninomial(strInfragenericEpithet);
+
+
+
+                               String strSpecificEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "specificEpithet", rdfNamespace);
+                               nonViralName.setSpecificEpithet(strSpecificEpithet);
+
+                               String strInfraspecificEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "infraspecificEpithet", rdfNamespace);
+                               nonViralName.setInfraSpecificEpithet(strInfraspecificEpithet);
+                               //AuthorTeams
+                               //TODO
+                               tcsElementName = "basionymAuthorship";
+                               String basionymAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);
+                               if (basionymAuthorValue != null){
+                                       TeamOrPersonBase<?> basionymAuthor = Team.NewInstance();
+                                       basionymAuthor.setNomenclaturalTitle(basionymAuthorValue);
+                                       nonViralName.setBasionymAuthorship(basionymAuthor);
+                               }
+
+                               //TODO
+                               tcsElementName = "combinationAuthorship";
+                               String combinationAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);
+                               if (combinationAuthorValue != null){
+                                       TeamOrPersonBase<?> combinationAuthor = Team.NewInstance();
+                                       combinationAuthor.setNomenclaturalTitle(combinationAuthorValue);
+                                       nonViralName.setCombinationAuthorship(combinationAuthor);
+                               }
+
+                               //set the authorshipCache
+                               tcsElementName = "authorship";
+                               String authorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);
+                               String cache = nonViralName.getAuthorshipCache();
+                               if ( authorValue != null){
+                                       //compare existing authorship cache with new one and check if it is necessary to
+                                       //make cache protected  //TODO refinement
+                                       if (cache == null){
+                                               nonViralName.setAuthorshipCache(authorValue);
+                                       }else{
+                                               cache = basionymAuthorValue == null ? cache : cache.replace(basionymAuthorValue, "");
+                                               cache = combinationAuthorValue == null ? cache : cache.replace(combinationAuthorValue, "");
+                                               cache = cache.replace("\\(|\\)", "");
+                                               cache = cache.trim();
+                                               if (! cache.equals("")){
+                                                       nonViralName.setAuthorshipCache(authorValue);
+                                               }
+                                       }
+                               }
+                       }
+                       ImportHelper.setOriginalSource(nameBase, config.getSourceReference(), nameAbout, idNamespace);
+
+                       checkAdditionalContents(elTaxonName, standardMappers, operationalMappers, unclearMappers);
+
+                       //nameId
+                       //TODO
+                       //ImportHelper.setOriginalSource(nameBase, tcsConfig.getSourceReference(), nameId);
+                       //taxonNameMap.put(nameAbout, nameBase);
+                       return nameBase;
+               }catch(UnknownCdmTypeException e){
+                       e.printStackTrace();
+               }
+               return null;*/
+       }
+
+       protected TaxonName handleNameElement(Element elTaxonName, Namespace rdfNamespace, Namespace taxonNameNamespace, TcsRdfImportConfigurator config, MapWrapper<TaxonName> taxonNameMap){
+               String idNamespace = "TaxonName";
+               Attribute about = elTaxonName.getAttribute("about", rdfNamespace);
+
+               //create TaxonName element
+
+
+               String nameAbout = elTaxonName.getAttributeValue("about", rdfNamespace);
+               if (nameAbout == null){
+                       nameAbout = XmlHelp.getChildAttributeValue(elTaxonName, "TaxonName", taxonNameNamespace, "about", rdfNamespace);
+               }
+
+
+               String strRank = XmlHelp.getChildAttributeValue(elTaxonName, "rankString", taxonNameNamespace, "rankString", rdfNamespace);
+               if (strRank == null){
+                       strRank = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "rankString", rdfNamespace);
+
+               }
+
+               if (strRank == null){
+                       strRank = XmlHelp.getChildAttributeValue(elTaxonName, "rank", taxonNameNamespace, "resource", rdfNamespace);
+
+               }
+
+               String strNomenclaturalCode = XmlHelp.getChildContentAttributeValue(elTaxonName, "TaxonName", taxonNameNamespace, "nomenclaturalCode", rdfNamespace);
+               if (strNomenclaturalCode == null){
+                       strNomenclaturalCode = XmlHelp.getChildAttributeValue(elTaxonName, "nomenclaturalCode", taxonNameNamespace, "resource", rdfNamespace);
+
+               }
+               try {
+
+                       Rank rank = TcsRdfTransformer.rankString2Rank(strRank);
+                       NomenclaturalCode nomCode;
+                       if (strNomenclaturalCode != null){
+                               nomCode = TcsRdfTransformer.nomCodeString2NomCode(strNomenclaturalCode);
+                       }else{
+                               nomCode = NomenclaturalCode.ICNAFP;
+                       }
+
+                       TaxonName nameBase = nomCode.getNewTaxonNameInstance(rank);
+
+                       Set<String> omitAttributes = null;
+                       //makeStandardMapper(elTaxonName, nameBase, omitAttributes, standardMappers);
+
+                       //name
+                       String strNameComplete = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "nameComplete", rdfNamespace);
+                       nameBase.setTitleCache(strNameComplete, true);
+
+                       //Reference
+                       //TODO
+                       String tcsElementName = "publishedIn";
+                       String tcsNamespace = config.getCommonNamespaceURIString();
+                       /*String value = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, tcsNamespace);
+                       if (value != null && value != ""){
+                               IGeneric nomRef = ReferenceFactory.newGeneric(); //TODO
+                               nomRef.setTitleCache(value, true);
+                               nameBase.setNomenclaturalReference(nomRef);
+
+                               //TODO
+                               tcsElementName = "year";
+                               tcsNamespace = taxonNameNamespace;
+                               Integer year = null;
+                               value = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, tcsNamespace);
+                               if (value != null){
+                                       try {
+                                               year = Integer.valueOf(value);
+                                               TimePeriod timeP = TimePeriod.NewInstance(year);
+                                               nomRef.setDatePublished(timeP);
+                                       } catch (RuntimeException e) {
+                                               logger.warn("year could not be parsed");
+                                       }
+                               }
+                               if (config.isPublishReferences()){
+                                       ((Reference)nomRef).addMarker(Marker.NewInstance(MarkerType.PUBLISH(), false));
+                               }
+                       }
+
+                       //Status
+                       tcsNamespace = taxonNameNamespace;
+                       Element elAnnotation = elTaxonName.getChild("hasAnnotation", tcsNamespace);
+                       if (elAnnotation != null){
+                               Element elNomenclaturalNote = elAnnotation.getChild("NomenclaturalNote", tcsNamespace);
+                               if (elNomenclaturalNote != null){
+                                       String statusValue = (String)ImportHelper.getXmlInputValue(elNomenclaturalNote, "note", tcsNamespace);
+                                       String type = XmlHelp.getChildAttributeValue(elNomenclaturalNote, "type", tcsNamespace, "resource", rdfNamespace);
+                                       String tdwgType = "http://rs.tdwg.org/ontology/voc/TaxonName#PublicationStatus";
+                                       if (tdwgType.equalsIgnoreCase(type)){
+                                               try {
+                                                       NomenclaturalStatusType statusType = TcsRdfTransformer.nomStatusString2NomStatus(statusValue);
+                                                       //NomenclaturalStatusType statusType = NomenclaturalStatusType.getNomenclaturalStatusTypeByAbbreviation(statusValue);
+                                                       if (statusType != null){
+                                                               nameBase.addStatus(NomenclaturalStatus.NewInstance(statusType));
+                                                       }
+                                               } catch (UnknownCdmTypeException e) {
+                                                       if (! statusValue.equals("valid")){
+                                                               logger.warn("Unknown NomenclaturalStatusType: " +  statusValue);
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+
+                       if (nameBase instanceof NonViralName){
+                               INonViralName nonViralName = nameBase;
+                               String strGenusPart =  XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "genusPart", rdfNamespace);
+
+                               //for names of rank genus the uninomial property should be used
+                               if (strGenusPart == null){
+                                       strGenusPart =  XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "uninomial", rdfNamespace);
+                               }
+                               nonViralName.setGenusOrUninomial(strGenusPart);
+
+                               String strInfragenericEpithet =  XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "infragenericEpithet", rdfNamespace);
+                               nonViralName.setGenusOrUninomial(strInfragenericEpithet);
+
+
+
+                               String strSpecificEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "specificEpithet", rdfNamespace);
+                               nonViralName.setSpecificEpithet(strSpecificEpithet);
+
+                               String strInfraspecificEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "infraspecificEpithet", rdfNamespace);
+                               nonViralName.setInfraSpecificEpithet(strInfraspecificEpithet);
+                               //AuthorTeams
+                               //TODO
+                               tcsElementName = "basionymAuthorship";
+                               String basionymAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);
+                               if (basionymAuthorValue != null){
+                                       TeamOrPersonBase<?> basionymAuthor = Team.NewInstance();
+                                       basionymAuthor.setNomenclaturalTitle(basionymAuthorValue);
+                                       nonViralName.setBasionymAuthorship(basionymAuthor);
+                               }
+
+                               //TODO
+                               tcsElementName = "combinationAuthorship";
+                               String combinationAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);
+                               if (combinationAuthorValue != null){
+                                       TeamOrPersonBase<?> combinationAuthor = Team.NewInstance();
+                                       combinationAuthor.setNomenclaturalTitle(combinationAuthorValue);
+                                       nonViralName.setCombinationAuthorship(combinationAuthor);
+                               }
+
+                               //set the authorshipCache
+                               tcsElementName = "authorship";
+                               String authorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);
+                               String cache = nonViralName.getAuthorshipCache();
+                               if ( authorValue != null){
+                                       //compare existing authorship cache with new one and check if it is necessary to
+                                       //make cache protected  //TODO refinement
+                                       if (cache == null){
+                                               nonViralName.setAuthorshipCache(authorValue);
+                                       }else{
+                                               cache = basionymAuthorValue == null ? cache : cache.replace(basionymAuthorValue, "");
+                                               cache = combinationAuthorValue == null ? cache : cache.replace(combinationAuthorValue, "");
+                                               cache = cache.replace("\\(|\\)", "");
+                                               cache = cache.trim();
+                                               if (! cache.equals("")){
+                                                       nonViralName.setAuthorshipCache(authorValue);
+                                               }
+                                       }
+                               }
+                       }
+                       ImportHelper.setOriginalSource(nameBase, config.getSourceReference(), nameAbout, idNamespace);
+
+                       checkAdditionalContents(elTaxonName, standardMappers, operationalMappers, unclearMappers);
+
+                       //nameId
+                       //TODO
+                       //ImportHelper.setOriginalSource(nameBase, tcsConfig.getSourceReference(), nameId);
+                       //taxonNameMap.put(nameAbout, nameBase);
+                       return nameBase;
+               */}catch(UnknownCdmTypeException e){
+                       e.printStackTrace();
+               }
+               return null;
+       }
+
+       public TaxonName handleRdfElementFromStream(InputStream is, TcsRdfImportConfigurator config, MapWrapper<TaxonName> taxonNameMap, String uri){
+       Model model = ModelFactory.createDefaultModel();
+               try{
+                       model.read(is, null);
+
+                       config.makeNamespaces(model);
+
+                       String rdfNamespace = config.getRdfNamespaceURIString();
+                       String taxonNameNamespace = config.getTnNamespaceURIString();
+                       return handleNameModel(model, config, taxonNameMap, uri);
+
+
+               }catch(Exception e){
+                       logger.debug("The file was no valid rdf file");
+               }
+
+
+
+               return null;
+       }
+
+}