public class NameMatchingCombinedResult{
private List<NameMatchingExactResult> exactMatches = new ArrayList<>();
- private List<NameMatchingCandidateResult> closestMatches = new ArrayList<>();
- private List<NameMatchingOtherCandidateResult> otherCandidates = new ArrayList<>();
+ private List<NameMatchingCandidateResult> candidates = new ArrayList<>();
public List<NameMatchingExactResult> getExactMatches() {
return exactMatches;
this.exactMatches = exactMatches;
}
- public List<NameMatchingCandidateResult> getClosestMatches() {
- return closestMatches;
+ public List<NameMatchingCandidateResult> getCandidates() {
+ return candidates;
}
- public void setClosestMatches(List<NameMatchingCandidateResult> closestMatches) {
- this.closestMatches = closestMatches;
- }
- public List<NameMatchingOtherCandidateResult> getOtherCandidates() {
- return otherCandidates;
- }
- public void setOtherCandidates(List<NameMatchingOtherCandidateResult> otherCandidates) {
- this.otherCandidates = otherCandidates;
+ public void setCandidates(List<NameMatchingCandidateResult> candidates) {
+ this.candidates = candidates;
}
}
\ No newline at end of file
StringBuilder hql = new StringBuilder();
hql.append("select new eu.etaxonomy.cdm.persistence.dto.NameMatchingParts(n.id, n.uuid, n.titleCache, n.authorshipCache, "
- + "n.genusOrUninomial, n.infraGenericEpithet, n.specificEpithet, n.infraSpecificEpithet, n.nameCache)");
+ + "n.genusOrUninomial, n.infraGenericEpithet, n.specificEpithet, n.infraSpecificEpithet, n.nameCache, n.rank)");
hql.append(" from TaxonName n ");
hql.append("where 1 = 1 ");
hql.append("and n."+column+ " in (");
import java.util.UUID;
+import eu.etaxonomy.cdm.model.name.Rank;
+
/**
* @author andreabee90
*/
private String nameCache;
+ private Rank rank;
+
//************ CONSTRUCTOR ***********************/
public NameMatchingParts() {
}
public NameMatchingParts(Integer taxonNameId, UUID taxonNameUuid, String titleCache, String authorshipCache,
- String genusOrUninomial, String infraGenericEpithet, String specificEpithet, String infraSpecificEpithet, String nameCache) {
+ String genusOrUninomial, String infraGenericEpithet, String specificEpithet, String infraSpecificEpithet, String nameCache, Rank rank) {
this.taxonNameId = taxonNameId;
this.taxonNameUuid = taxonNameUuid;
this.specificEpithet = specificEpithet;
this.infraSpecificEpithet = infraSpecificEpithet;
this.nameCache = nameCache;
+ this.rank = rank;
}
//***************** GETTER / SETTER ********************************/
+
public Integer getTaxonNameId() {
return taxonNameId;
}
this.nameCache = nameCache;
}
+ public Rank getRank() {
+ return rank;
+ }
+
+ public void setRank(Rank rank) {
+ this.rank = rank;
+ }
+
+
// ************************** TO STRING *************************************/
@Override
public String toString() {
return "NameMatchingParts [taxonNameId=" + taxonNameId + ", genusOrUninomial=" + genusOrUninomial
+ ", infraGenericEpithet=" + infraGenericEpithet + ", specificEpithet=" + specificEpithet
- + ", infraSpecificEpithet=" + infraSpecificEpithet + ", nameCache=" + nameCache + "]";
+ + ", infraSpecificEpithet=" + infraSpecificEpithet + ", nameCache=" + nameCache + ", rank=" + rank + "]";
}
}
\ No newline at end of file
import eu.etaxonomy.cdm.api.nameMatching.NameMatchingCandidateResult;
import eu.etaxonomy.cdm.api.nameMatching.NameMatchingCombinedResult;
import eu.etaxonomy.cdm.api.nameMatching.NameMatchingExactResult;
-import eu.etaxonomy.cdm.api.nameMatching.NameMatchingOtherCandidateResult;
import eu.etaxonomy.cdm.api.service.INameMatchingService;
import eu.etaxonomy.cdm.api.service.NameMatchingServiceImpl.NameMatchingResult;
import eu.etaxonomy.cdm.api.service.NameMatchingServiceImpl.SingleNameMatchingResult;
method = RequestMethod.GET)
public NameMatchingCombinedResult doGetNameMatching(
@RequestParam(value="namecache", required = true) String nameCache,
- @RequestParam(value="author", required = false) boolean compareAuthor,
- @RequestParam(value="distance", required = false) int distance,
- @RequestParam(value="relaxedsearch", required = false) boolean relaxedSearch,
- @RequestParam(value="othercandidates", required = false) boolean otherCandidates,
+ @RequestParam(value="compareauthor", required = false) boolean compareAuthor,
+ @RequestParam(value="distance", required = false) Integer distance,
HttpServletRequest request,
@SuppressWarnings("unused") HttpServletResponse response) {
logger.info("doGetNameMatching()" + request.getRequestURI());
- NameMatchingResult result;
+ NameMatchingResult result = nameMatchingservice.listShaping(nameCache, compareAuthor, distance);
- result = nameMatchingservice.wrapperResults(nameCache, compareAuthor, distance, relaxedSearch, otherCandidates);
return NameMatchingAdapter.invoke(result);
}
private static class NameMatchingAdapter {
- private static NameMatchingCombinedResult invoke(NameMatchingResult nameMatchingResult) {
+ private static NameMatchingCombinedResult invoke(NameMatchingResult innerResult) {
NameMatchingCombinedResult result = new NameMatchingCombinedResult();
- result.setExactMatches(loadResultListFromPartsList(nameMatchingResult.getExactResults()));
- result.setClosestMatches(loadCandiateResultListFromPartsList(nameMatchingResult.getClosestResults()));
- result.setOtherCandidates(loadOtherCandiateResultListFromPartsList(nameMatchingResult.getOtherCandidatesResults()));
+ result.setExactMatches(loadResultListFromPartsList(innerResult.getExactResults()));
+ result.setCandidates(loadCandiateResultListFromPartsList(innerResult.getBestResults()));
return result;
}
return partsList.stream().map(p->loadCandidateResultFromParts(p)).collect(Collectors.toList());
}
- private static List<NameMatchingOtherCandidateResult> loadOtherCandiateResultListFromPartsList(List<SingleNameMatchingResult> partsList) {
- return partsList.stream().map(p->loadOtherCandidateResultFromParts(p)).collect(Collectors.toList());
- }
-
private static NameMatchingExactResult loadResultFromParts(NameMatchingParts parts) {
return loadResultFromParts(parts, new NameMatchingExactResult());
}
return result;
}
- private static NameMatchingOtherCandidateResult loadOtherCandidateResultFromParts(SingleNameMatchingResult parts) {
- NameMatchingOtherCandidateResult result = new NameMatchingOtherCandidateResult();
- loadResultFromParts(parts, result);
- result.setDistance(parts.getDistance());
- return result;
- }
-
private static NameMatchingExactResult loadResultFromParts(NameMatchingParts parts, NameMatchingExactResult result) {
result.setTaxonNameId(parts.getTaxonNameId());
result.setTaxonNameUuid(parts.getTaxonNameUuid());
@Override
public JSONObject processBeanSecondStep(NameMatchingCombinedResult bean, JSONObject json, JsonConfig jsonConfig) {
json.element("exactMatches", bean.getExactMatches(), jsonConfig);
- json.element("candidates", bean.getClosestMatches(), jsonConfig);
+ json.element("candidates", bean.getCandidates(), jsonConfig);
return json;
}
}
\ No newline at end of file
*/
package eu.etaxonomy.cdm.api.service;
+import java.util.List;
+
import eu.etaxonomy.cdm.api.service.NameMatchingServiceImpl.NameMatchingResult;
+import eu.etaxonomy.cdm.api.service.NameMatchingServiceImpl.SingleNameMatchingResult;
import eu.etaxonomy.cdm.api.service.config.NameMatchingConfigurator;
/**
*/
public interface INameMatchingService {
- public NameMatchingResult findMatchingNames(String taxonName, NameMatchingConfigurator config, boolean compareAuthor, Integer inputDistance);
-
- public NameMatchingResult listShaping(String nameCache, boolean compareAuthor, Integer distance);
+ public List<SingleNameMatchingResult> findMatchingNames(String taxonName, NameMatchingConfigurator config, boolean compareAuthor, Integer inputDistance);
- public NameMatchingResult wrapperResults(String nameCache, boolean compareAuthor, Integer distance, boolean relaxedSearch, boolean otherCandidates);
+ public NameMatchingResult listShaping(String nameCache, boolean compareAuthor, Integer distance);
// public Map<String, List<SingleNameMatchingResult>> compareTaxonListNameCache(List<String> input);
//
import eu.etaxonomy.cdm.api.service.config.NameMatchingConfigurator;
import eu.etaxonomy.cdm.common.NameMatchingUtils;
+import eu.etaxonomy.cdm.model.name.Rank;
import eu.etaxonomy.cdm.model.name.TaxonName;
import eu.etaxonomy.cdm.persistence.dao.initializer.IBeanInitializer;
import eu.etaxonomy.cdm.persistence.dao.name.INameMatchingDao;
public SingleNameMatchingResult(NameMatchingParts parts, Integer distance) {
super(parts.getTaxonNameId(), parts.getTaxonNameUuid(), parts.getTitleCache(),
parts.getAuthorshipCache(), parts.getGenusOrUninomial(),
- parts.getInfraGenericEpithet(), parts.getSpecificEpithet(), parts.getInfraSpecificEpithet(), parts.getNameCache());
+ parts.getInfraGenericEpithet(), parts.getSpecificEpithet(), parts.getInfraSpecificEpithet(), parts.getNameCache(), parts.getRank());
this.distance = distance;
}
public class NameMatchingResult{
List<SingleNameMatchingResult> exactResults = new ArrayList<>();
- List<SingleNameMatchingResult> closestResults = new ArrayList<>();
- List<SingleNameMatchingResult> otherCandidatesResults = new ArrayList<>();
+ List<SingleNameMatchingResult> bestResults = new ArrayList<>();
+ //List<SingleNameMatchingResult> otherCandidatesResults = new ArrayList<>();
public List<SingleNameMatchingResult> getExactResults() {
return exactResults;
public void setExactResults(List<SingleNameMatchingResult> exactResults) {
this.exactResults = exactResults;
}
- public List<SingleNameMatchingResult> getClosestResults() {
- return closestResults;
- }
- public void setClosestResults(List<SingleNameMatchingResult> closestResults) {
- this.closestResults = closestResults;
+ public List<SingleNameMatchingResult> getBestResults() {
+ return bestResults;
}
- public List<SingleNameMatchingResult> getOtherCandidatesResults() {
- return otherCandidatesResults;
- }
- public void setOtherCandidtaesResults(List<SingleNameMatchingResult> otherCandidatesResults) {
- this.otherCandidatesResults = otherCandidatesResults;
+ public void setBestResults(List<SingleNameMatchingResult> bestResults) {
+ this.bestResults = bestResults;
}
}
// return result;
// }
- /**This method shapes the result object comprised of three distinct lists.
- * The "exact result list" comprises all entries that perfectly match the input name.
- * The "closest result list" is returned when the "relaxed search" parameter is enabled.
- * Here, each component of the input name is individually compared to find the closest matching name.
- * The "other candidates" results list comprises all potential names deviating from the input name
- * by a maximum threshold of allowable variations.
- *
- * i.e., if the input name is Abies alba var. alba, the exact results list might have Abies alba var. alba
- * the closest results list might have Abies alba subsp. alba with a distance of 0
- * (no differences found among both names)
- * the other candidates result list might have other names i.e. Abies albatros
- */
-
- @Override
- public NameMatchingResult wrapperResults(String nameCache, boolean compareAuthor, Integer distance,
- boolean relaxedSearch, boolean otherCandidates) {
- NameMatchingResult result = new NameMatchingResult();
- result = listShaping(nameCache, compareAuthor, distance);
- if (relaxedSearch == false) {
- result.closestResults = new ArrayList<>();
- }
- if (otherCandidates == false) {
- result.otherCandidatesResults = new ArrayList<>();
- }
- return result;
- }
@Override
public NameMatchingResult listShaping(String nameCache, boolean compareAuthor, Integer distance) {
+
NameMatchingResult result = new NameMatchingResult();
- result = findMatchingNames(nameCache, null, compareAuthor, distance);
- List<SingleNameMatchingResult> closestResultsTemp = new ArrayList<>();
- for (SingleNameMatchingResult part : result.getClosestResults()) {
- String titleCache = part.getTitleCache();
- if (compareAuthor && titleCache.equals(nameCache)) {
- closestResultsTemp.add(part);
- } else if (compareAuthor == false && titleCache.contains(nameCache)) {
- closestResultsTemp.add(part);
- }
- }
- result.setExactResults(closestResultsTemp);
- for (SingleNameMatchingResult part: result.getClosestResults()) {
- for (SingleNameMatchingResult part2 : result.getExactResults()) {
- if (part.getTaxonNameUuid().equals(part2.getTaxonNameUuid())) {
- result.closestResults.remove(part2);
+
+ List<SingleNameMatchingResult> resultInput = findMatchingNames(nameCache, null, compareAuthor, distance);
+
+ for (SingleNameMatchingResult part : resultInput) {
+ if (compareAuthor) {
+ if (part.getDistance() == 0 && part.getTitleCache().equals(nameCache)) {
+ result.exactResults.add(part);
+ } else {
+ result.bestResults.add(part);
+ }
+ } else if (compareAuthor == false) {
+ if (part.getDistance() == 0 && nameCache.contains(part.getNameCache())){
+ result.exactResults.add(part);
+ } else {
+ result.bestResults.add(part);
}
}
}
* @return list of exact matching names (distance = 0), or list of best matches if exact matches are not found.
*/
@Override
- public NameMatchingResult findMatchingNames(String taxonName, NameMatchingConfigurator config, boolean compareAuthor, Integer inputDistance) {
+ public List<SingleNameMatchingResult> findMatchingNames(String taxonName, NameMatchingConfigurator config, boolean compareAuthor, Integer inputDistance) {
- NameMatchingResult result = new NameMatchingResult();
+ List<SingleNameMatchingResult> result = new ArrayList<>();
// 0. Normalizing and parsing input name
taxonName = normalizeInput(taxonName);
String infraGenericQuery = name.getInfraGenericEpithet();
String infraSpecificQuery = name.getInfraSpecificEpithet();
String authorshipCacheQuery = name.getAuthorshipCache();
-// Rank rank = name.getRank();
+ Rank rank = name.getRank();
if (name.getCombinationAuthorship() != null) {
authorshipCacheQuery = name.getCombinationAuthorship().getNomenclaturalTitleCache();
filterMatchingMonomialFromResultSet(taxonNamePartsWithDistance, resultSetOnlyGenusOrUninominal);
Collections.sort(resultSetOnlyGenusOrUninominal,
(o1, o2) -> o1.getDistance().compareTo(o2.getDistance()));
- result.closestResults = closestResults(resultSetOnlyGenusOrUninominal);
- result.otherCandidatesResults = otherCandidatesResults(resultSetOnlyGenusOrUninominal, maxDistance);
+ result = candidatesResults(resultSetOnlyGenusOrUninominal, maxDistance);
if (compareAuthor) {
- authorMatch(result, authorshipCacheQuery, maxDistance);
+ result = authorMatch(result, authorshipCacheQuery, maxDistance);
}
return result;
} else if (infraGenericQuery != null) {
Collections.sort(resultSetInfraGenericListWithDist, (o1,o2) ->
o1.getDistance().compareTo(o2.getDistance()));
- result.closestResults = closestResults(resultSetInfraGenericListWithDist);
- result.otherCandidatesResults = otherCandidatesResults(resultSetInfraGenericListWithDist, maxDistance);
+ result = candidatesResults(resultSetInfraGenericListWithDist, maxDistance);
if (compareAuthor) {
- authorMatch(result, authorshipCacheQuery, maxDistance);
+ result = authorMatch(result, authorshipCacheQuery, maxDistance);
}
return result;
} else if (specificEpithetQuery != null && infraSpecificQuery == null){
// 7. Result shaping
Collections.sort(resultSetEpithetListWithDist, (o1, o2) -> o1.getDistance().compareTo(o2.getDistance()));
- result.closestResults = closestResults(resultSetEpithetListWithDist);
- result.otherCandidatesResults = otherCandidatesResults(resultSetEpithetListWithDist, maxDistance);
+ result = candidatesResults(resultSetEpithetListWithDist, maxDistance);
if (compareAuthor) {
- authorMatch(result, authorshipCacheQuery, maxDistance);
+ result = authorMatch(result, authorshipCacheQuery, maxDistance);
}
return result;
} else if (infraSpecificQuery != null) {
List<SingleNameMatchingResult> resultSetInfraSpecificListWithDist = compareInfraSpecific(
- specificEpithetQuery, infraSpecificQuery, maxDistance, taxonNamePartsWithDistance);
+ specificEpithetQuery, infraSpecificQuery, maxDistance, taxonNamePartsWithDistance, rank);
// 7. Result shaping
Collections.sort(resultSetInfraSpecificListWithDist, (o1, o2) -> o1.getDistance().compareTo(o2.getDistance()));
- result.closestResults = closestResults(resultSetInfraSpecificListWithDist);
- result.otherCandidatesResults = otherCandidatesResults(resultSetInfraSpecificListWithDist, maxDistance);
+ result = candidatesResults(resultSetInfraSpecificListWithDist, maxDistance);
if (compareAuthor) {
- authorMatch(result, authorshipCacheQuery, maxDistance);
+ result = authorMatch(result, authorshipCacheQuery, maxDistance);
}
return result;
} else {
* @return
*/
private List<SingleNameMatchingResult> compareInfraSpecific(String specificEpithetQuery, String infraSpecificQuery,
- Integer maxDistance, List<SingleNameMatchingResult> taxonNamePartsWithDistance) {
+ Integer maxDistance, List<SingleNameMatchingResult> taxonNamePartsWithDistance, Rank rank) {
String normalizedInfraSpecificQuery = NameMatchingUtils.normalize(infraSpecificQuery);
String phoneticNormalizedInfraSpecificQuery = NameMatchingUtils.nearMatch(normalizedInfraSpecificQuery);
// 5. comparison of infra specific
infraSpecificComputedDistance = nameMatchingComputeDistance(phoneticNormalizedInfraSpecificQuery ,
phoneticNormalizedInfraSpecificNameInDB);
+
+ boolean rankEquals = infraSpecific.getRank().equals(rank);
+ if (!rankEquals) {
+ infraSpecificComputedDistance++;
+ }
int totalDist = infraSpecific.getDistance() + infraSpecificComputedDistance;
infraSpecific.setDistance(totalDist);
}
}
- private static NameMatchingResult authorMatch(NameMatchingResult results, String authorshipQuery, Integer maxDistance) {
+ private static List<SingleNameMatchingResult> authorMatch(List<SingleNameMatchingResult> results, String authorshipQuery, Integer maxDistance) {
try {
- try {
- results.closestResults = AuthorMatch.compareAuthor(results.closestResults, authorshipQuery, maxDistance);
- } catch (NullPointerException ex) {
- return null;
- }
- try {
- results.otherCandidatesResults = AuthorMatch.compareAuthor(results.otherCandidatesResults, authorshipQuery, maxDistance);
- } catch (NullPointerException ex) {
- return null;
- }
+ results = AuthorMatch.compareAuthor(results, authorshipQuery, maxDistance);
} catch (NullPointerException ex) {
return null;
}
}
}
- public static List<SingleNameMatchingResult> closestResults(
- List<SingleNameMatchingResult> resultShapingList) {
- List<SingleNameMatchingResult> exactResults = new ArrayList<>();
- for (SingleNameMatchingResult exactResult : resultShapingList) {
- if (exactResult.getDistance() == 0) {
- exactResults.add(exactResult);
- }
- }
- return exactResults;
- }
-
- public static List<SingleNameMatchingResult> otherCandidatesResults(
+ public static List<SingleNameMatchingResult> candidatesResults(
List<SingleNameMatchingResult> list, int maxDistance) {
List<SingleNameMatchingResult> bestResults = new ArrayList<>();
for (SingleNameMatchingResult best : list) {
int calculatedDistance = best.getDistance();
- if (calculatedDistance != 0 && calculatedDistance <= maxDistance) {
+ if (calculatedDistance <= maxDistance) {
bestResults.add(best);
}
}
// exact match
inputName = "Nectandra";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, false, null);
- matchResult = matchResults.getClosestResults();
+ matchResults = nameMatchingService.listShaping(inputName, false, null);
+ matchResult = matchResults.getExactResults();
Assert.assertEquals(1, matchResult.size());
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
// not exact match
inputName = "Nextondra";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, false, null);
- matchResult = matchResults.getOtherCandidatesResults();
+ matchResults = nameMatchingService.listShaping(inputName, false, null);
+ matchResult = matchResults.getBestResults();
Assert.assertEquals(2, matchResult.size());
matchRes = matchResult.get(0);
// exact match
inputName = "Nectandra magnoliifolia";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, false, null);
- matchResult = matchResults.getClosestResults();
+ matchResults = nameMatchingService.listShaping(inputName, false, null);
+ matchResult = matchResults.getExactResults();
Assert.assertEquals(1, matchResult.size());
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
*/
inputName = "Nectandra surinamensis";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, false, null);
- matchResult = matchResults.getClosestResults();
+ matchResults = nameMatchingService.listShaping(inputName, false, null);
+ matchResult = matchResults.getExactResults();
Assert.assertEquals(2, matchResult.size());
matchRes = matchResult.get(0);
// not exact match
inputName = "Nectendra nigre";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, false, null);
- matchResult = matchResults.getOtherCandidatesResults();
+ matchResults = nameMatchingService.listShaping(inputName, false, null);
+ matchResult = matchResults.getBestResults();
Assert.assertEquals(2, matchResult.size());
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
Assert.assertEquals(4,(int) matchRes.getDistance());
inputName = "Bectendra nigri";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, false, null);
- matchResult = matchResults.getOtherCandidatesResults();
+ matchResults = nameMatchingService.listShaping(inputName, false, null);
+ matchResult = matchResults.getBestResults();
Assert.assertEquals(2, matchResult.size());
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
// exact match
inputName = "Nectandra subgen. Nectrina";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, false, null);
- matchResult = matchResults.getClosestResults();
- Assert.assertEquals(1, matchResult.size());
- matchRes = matchResult.get(0);
- Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
- Assert.assertEquals("Nectrina", matchRes.getInfraGenericEpithet());
- Assert.assertEquals(UUID_NAME_NECTRINA, matchRes.getTaxonNameUuid());
- Assert.assertEquals(0,(int) matchRes.getDistance());
+ matchResults = nameMatchingService.listShaping(inputName, false, null);
+ matchResult = matchResults.getExactResults();
+ Assert.assertEquals(0, matchResult.size());
// not exact match
inputName = "Nectandra subgen. Nextrina";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, false, null);
- matchResult = matchResults.getOtherCandidatesResults();
+ matchResults = nameMatchingService.listShaping(inputName, false, null);
+ matchResult = matchResults.getBestResults();
Assert.assertEquals(2, matchResult.size());
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
// exact match
inputName = "Nectandra mollis subsp. laurel";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, false, null);
- matchResult = matchResults.getClosestResults();
+ matchResults = nameMatchingService.listShaping(inputName, false, null);
+ matchResult = matchResults.getExactResults();
Assert.assertEquals(1, matchResult.size());
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
// not exact match
inputName = "Nectandra mollis var. laurol";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, false, null);
- matchResult = matchResults.getOtherCandidatesResults();
+ matchResults = nameMatchingService.listShaping(inputName, false, null);
+ matchResult = matchResults.getBestResults();
Assert.assertEquals(2, matchResult.size());
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
Assert.assertEquals("mollis", matchRes.getSpecificEpithet());
Assert.assertEquals("laurel", matchRes.getInfraSpecificEpithet());
Assert.assertEquals(UUID_NAME_LAUREL, matchRes.getTaxonNameUuid());
- Assert.assertEquals(1,(int) matchRes.getDistance());
+ Assert.assertEquals(2,(int) matchRes.getDistance());
matchRes = matchResult.get(1);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
Assert.assertEquals("mollis", matchRes.getSpecificEpithet());
Assert.assertEquals("laureli", matchRes.getInfraSpecificEpithet());
Assert.assertEquals(UUID_NAME_LAURELI, matchRes.getTaxonNameUuid());
- Assert.assertEquals(2,(int) matchRes.getDistance());
+ Assert.assertEquals(3,(int) matchRes.getDistance());
}
@Test
SingleNameMatchingResult matchRes;
inputName = "Nectandra Turm.";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, true, null);
- matchResult = matchResults.getClosestResults();
+ matchResults = nameMatchingService.listShaping(inputName, true, null);
+ matchResult = matchResults.getBestResults();
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
Assert.assertEquals("Turl.", matchRes.getAuthorshipCache());
Assert.assertEquals(1,(int) matchRes.getDistance());
inputName = "Nectindra Turm.";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, true, null);
- matchResult = matchResults.getOtherCandidatesResults();
+ matchResults = nameMatchingService.listShaping(inputName, true, null);
+ matchResult = matchResults.getBestResults();
matchRes = matchResult.get(0);
Assert.assertEquals("Nectondra", matchRes.getGenusOrUninomial());
Assert.assertEquals("Turl.", matchRes.getAuthorshipCache());
// the exact match results show all species names that retrieve a distance of 0
// EXCLUDING the authorship
inputName = "Nectandra laevis Turm.";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, true, null);
- matchResult = matchResults.getClosestResults();
+ matchResults = nameMatchingService.listShaping(inputName, true, null);
+ matchResult = matchResults.getBestResults();
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
Assert.assertEquals("laevis", matchRes.getSpecificEpithet());
Assert.assertEquals(1,(int) matchRes.getDistance());
inputName = "Nectindra levis Turm.";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, true, null);
- matchResult = matchResults.getOtherCandidatesResults();
+ matchResults = nameMatchingService.listShaping(inputName, true, null);
+ matchResult = matchResults.getBestResults();
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
Assert.assertEquals("laevis", matchRes.getSpecificEpithet());
Assert.assertEquals(2,(int) matchRes.getDistance());
inputName = "Nectindra cinnamomoides Turm. & Kilian";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, true, null);
- matchResult = matchResults.getOtherCandidatesResults();
+ matchResults = nameMatchingService.listShaping(inputName, true, null);
+ matchResult = matchResults.getBestResults();
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
Assert.assertEquals("cinnamomoides", matchRes.getSpecificEpithet());
//TODO matching non-parsable names is still an open issue (#10178)
inputName = "Nectindra cinnamomoides Turm. and Kilian";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, true, null);
- matchResult = matchResults.getOtherCandidatesResults();
+ matchResults = nameMatchingService.listShaping(inputName, true, null);
+ matchResult = matchResults.getBestResults();
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
Assert.assertEquals("cinnamomoides", matchRes.getSpecificEpithet());
// exact match
inputName = "Nectandra (Kilian) Turm.";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, true, null);
- matchResult = matchResults.getClosestResults();
+ matchResults = nameMatchingService.listShaping(inputName, true, null);
+ matchResult = matchResults.getBestResults();
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
Assert.assertEquals("Turl.", matchRes.getAuthorshipCache());
Assert.assertEquals(1,(int) matchRes.getDistance());
inputName = "Nectandra (Kilian ex Turm.) Kilian ex Turm.";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, true, null);
- matchResult = matchResults.getClosestResults();
+ matchResults = nameMatchingService.listShaping(inputName, true, null);
+ matchResult = matchResults.getBestResults();
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
Assert.assertEquals("Turl.", matchRes.getAuthorshipCache());
// exact match
inputName = "Nectandra laevis (Kilian) Turm.";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, true, null);
- matchResult = matchResults.getClosestResults();
+ matchResults = nameMatchingService.listShaping(inputName, true, null);
+ matchResult = matchResults.getBestResults();
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
Assert.assertEquals("laevis", matchRes.getSpecificEpithet());
Assert.assertEquals(1,(int) matchRes.getDistance());
inputName = "Nectandra laevis (Kilian ex Turm.) Kilian ex Turm.";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, true, null);
- matchResult = matchResults.getClosestResults();
+ matchResults = nameMatchingService.listShaping(inputName, true, null);
+ matchResult = matchResults.getBestResults();
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
Assert.assertEquals("laevis", matchRes.getSpecificEpithet());
// not exact match
inputName = "Mectandra laevis (Kilian) Turm.";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, true, null);
- matchResult = matchResults.getOtherCandidatesResults();
+ matchResults = nameMatchingService.listShaping(inputName, true, null);
+ matchResult = matchResults.getBestResults();
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
Assert.assertEquals("laevis", matchRes.getSpecificEpithet());
Assert.assertEquals(2,(int) matchRes.getDistance());
inputName = "Mectandra laevis (Kilian ex Turm.) Kilian ex Turm.";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, true, null);
- matchResult = matchResults.getOtherCandidatesResults();
+ matchResults = nameMatchingService.listShaping(inputName, true, null);
+ matchResult = matchResults.getBestResults();
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
Assert.assertEquals("laevis", matchRes.getSpecificEpithet());
// exact match
inputName = "Nectandra mollis subsp. laurel Kilian ex Turm.";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, true, null);
- matchResult = matchResults.getClosestResults();
- Assert.assertEquals(1, matchResult.size());
+ matchResults = nameMatchingService.listShaping(inputName, true, null);
+ matchResult = matchResults.getBestResults();
+ Assert.assertEquals(2, matchResult.size());
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
Assert.assertEquals("mollis", matchRes.getSpecificEpithet());
// not exact match
inputName = "Nectandra mollis var. laurol (Kilian) Turm.";
- matchResults = nameMatchingService.findMatchingNames(inputName, null, true, null);
- matchResult = matchResults.getOtherCandidatesResults();
+ matchResults = nameMatchingService.listShaping(inputName, true, null);
+ matchResult = matchResults.getBestResults();
Assert.assertEquals(2, matchResult.size());
matchRes = matchResult.get(0);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
Assert.assertEquals("laurel", matchRes.getInfraSpecificEpithet());
Assert.assertEquals(UUID_NAME_LAUREL, matchRes.getTaxonNameUuid());
Assert.assertEquals("Turl.", matchRes.getAuthorshipCache());
- Assert.assertEquals(2,(int) matchRes.getDistance());
+ Assert.assertEquals(3,(int) matchRes.getDistance());
matchRes = matchResult.get(1);
Assert.assertEquals("Nectandra", matchRes.getGenusOrUninomial());
Assert.assertEquals("laureli", matchRes.getInfraSpecificEpithet());
Assert.assertEquals(UUID_NAME_LAURELI, matchRes.getTaxonNameUuid());
Assert.assertEquals("Turl.", matchRes.getAuthorshipCache());
- Assert.assertEquals(3,(int) matchRes.getDistance());
+ Assert.assertEquals(4,(int) matchRes.getDistance());
}
@Test
matchResult = matchResults.getExactResults();
Assert.assertEquals(0, matchResult.size());
- matchResult = matchResults.getOtherCandidatesResults();
+ matchResult = matchResults.getBestResults();
Assert.assertEquals(2, matchResult.size());
matchRes = matchResult.get(0);
Assert.assertEquals("Yucca", matchRes.getGenusOrUninomial());
matchResult = matchResults.getExactResults();
Assert.assertEquals(0, matchResult.size());
- matchResult = matchResults.getOtherCandidatesResults();
+ matchResult = matchResults.getBestResults();
Assert.assertEquals(2, matchResult.size());
matchRes = matchResult.get(0);
Assert.assertEquals("Yucca", matchRes.getGenusOrUninomial());
matchResults = nameMatchingService.listShaping(nameCache, true, null);
matchResult = matchResults.getExactResults();
Assert.assertEquals(0, matchResult.size());
- matchResult = matchResults.getClosestResults();
+ matchResult = matchResults.getBestResults();
Assert.assertEquals(2, matchResult.size());
matchRes = matchResult.get(0);
Assert.assertEquals("Yucca", matchRes.getGenusOrUninomial());
matchResults = nameMatchingService.listShaping(nameCache, true, null);
matchResult = matchResults.getExactResults();
Assert.assertEquals(0, matchResult.size());
- matchResult = matchResults.getClosestResults();
+ matchResult = matchResults.getBestResults();
Assert.assertEquals(2, matchResult.size());
matchRes = matchResult.get(0);
Assert.assertEquals("Yucca", matchRes.getGenusOrUninomial());
matchResults = nameMatchingService.listShaping(nameCache, false, 10);
matchResult = matchResults.getExactResults();
Assert.assertEquals(2, matchResult.size());
- matchResult = matchResults.getOtherCandidatesResults();
+ matchResult = matchResults.getBestResults();
Assert.assertEquals(11, matchResult.size());
nameCache = "Yucca filamentosa Len.";
matchResults = nameMatchingService.listShaping(nameCache, true, 10);
- matchResult = matchResults.getClosestResults();
- Assert.assertEquals(2, matchResult.size());
- matchResult = matchResults.getOtherCandidatesResults();
- Assert.assertEquals(4, matchResult.size());
+ matchResult = matchResults.getBestResults();
+ Assert.assertEquals(6, matchResult.size());
-}
- @Test
- @DataSet(loadStrategy = CleanSweepInsertLoadStrategy.class, value = "NameMatchingServiceImplTest.testFindMatchingNames.xml")
- public void testWrapperResults() {
- String nameCache;
- NameMatchingResult matchResults;
- List<SingleNameMatchingResult> matchResult;
- SingleNameMatchingResult matchRes;
-
- nameCache = "Yucca gloriosa subsp. gloriosa";
-
- // output exact results + relaxed results + other candidates
- matchResults = nameMatchingService.wrapperResults(nameCache, false, 10, true, true);
-
- matchResult = matchResults.getExactResults();
- Assert.assertEquals(0, matchResult.size());
- //when relaxed search is set to true, the "closest results" should include all names that matched
- //each component of the name individually. The rank is not included in the distance, hence
- // the distance is 0 (perfect match)
-
- /**TODO
- * Discuss the value of the distance for a not-matching rank.
- */
-
- matchResult = matchResults.getClosestResults();
- matchRes = matchResult.get(0);
-
- Assert.assertEquals(1, matchResult.size());
- Assert.assertEquals("Yucca gloriosa L. var. gloriosa", matchRes.getTitleCache());
- Assert.assertEquals(0, (int)matchRes.getDistance());
-
- matchResult = matchResults.getOtherCandidatesResults();
- Assert.assertEquals(2, matchResult.size());
- matchRes = matchResult.get(0);
- Assert.assertEquals("Yucca gloriosa f. genuina Engelm.", matchRes.getTitleCache());
- Assert.assertEquals(5, (int)matchRes.getDistance());
-
- }
+}
@Override
public void createTestDataSet() throws FileNotFoundException {}
<?xml version='1.0' encoding='UTF-8'?>
<dataset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../database/schema/dataset.xsd">
- <TAXONNAME NAMETYPE="ICNAFP" ID="33" UUID="0e16e411-e472-48ab-8b32-da9d3968092c" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectandra" GENUSORUNINOMIAL="Nectandra" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="34" UUID="6c4464cc-fc2c-4907-9125-97715a798e0d" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectondra" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectondra" GENUSORUNINOMIAL="Nectondra" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="35" UUID="afdcdff3-8e8f-4296-aed2-2ad39c1b6bee" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nextandra" AUTHORSHIPCACHE="Turl." NAMECACHE="Nextandra" GENUSORUNINOMIAL="Nextandra" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="36" UUID="e53a569a-d635-4c47-bded-ad539632593e" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nxctwsdra" AUTHORSHIPCACHE="Turl." NAMECACHE="Nxctwsdra" GENUSORUNINOMIAL="Nxctwsdra" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="37" UUID="d4b9325f-ad24-4062-8e80-6d7af41b27c0" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectwsdrx" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectwsdrx" GENUSORUNINOMIAL="Nectwsdrx" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="39" UUID="bd892f7b-5bff-40fe-88ef-3bcf6103a3dd" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Philodendron subgen. Nectande" AUTHORSHIPCACHE="Turl." NAMECACHE="Philodendron subgen. Nectande" GENUSORUNINOMIAL="Philodendron" INFRAGENERICEPITHET="Nectande" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="775"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="41" UUID="08ab2653-a4da-4c9b-8330-1bf4268cab88" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra (Nectrina)" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectandra (Nectrina)" GENUSORUNINOMIAL="Nectandra" INFRAGENERICEPITHET="Nectrina" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="true" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="775"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="42" UUID="c955a8ab-8501-421a-bfa3-5748237e8942" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra nothosubg. Nexxxina" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectandra nothosubg. Nexxxina" GENUSORUNINOMIAL="Nectandra" INFRAGENERICEPITHET="Nexxxina" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="true" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="775"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="43" UUID="e0b28207-8f09-48a2-8da3-94a56405d854" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectxndra subgen. Nectande" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectxndra subgen. Nectande" GENUSORUNINOMIAL="Nectxndra" INFRAGENERICEPITHET="Nectande" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="true" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="775"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="33" UUID="0e16e411-e472-48ab-8b32-da9d3968092c" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectandra" GENUSORUNINOMIAL="Nectandra" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="774"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="34" UUID="6c4464cc-fc2c-4907-9125-97715a798e0d" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectondra" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectondra" GENUSORUNINOMIAL="Nectondra" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="774"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="35" UUID="afdcdff3-8e8f-4296-aed2-2ad39c1b6bee" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nextandra" AUTHORSHIPCACHE="Turl." NAMECACHE="Nextandra" GENUSORUNINOMIAL="Nextandra" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="774"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="36" UUID="e53a569a-d635-4c47-bded-ad539632593e" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nxctwsdra" AUTHORSHIPCACHE="Turl." NAMECACHE="Nxctwsdra" GENUSORUNINOMIAL="Nxctwsdra" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="774"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="37" UUID="d4b9325f-ad24-4062-8e80-6d7af41b27c0" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectwsdrx" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectwsdrx" GENUSORUNINOMIAL="Nectwsdrx" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="774"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="39" UUID="bd892f7b-5bff-40fe-88ef-3bcf6103a3dd" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Philodendron subgen. Nectande" AUTHORSHIPCACHE="Turl." NAMECACHE="Philodendron subgen. Nectande" GENUSORUNINOMIAL="Philodendron" INFRAGENERICEPITHET="Nectande" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="773"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="41" UUID="08ab2653-a4da-4c9b-8330-1bf4268cab88" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra (Nectrina)" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectandra (Nectrina)" GENUSORUNINOMIAL="Nectandra" INFRAGENERICEPITHET="Nectrina" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="true" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="773"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="42" UUID="c955a8ab-8501-421a-bfa3-5748237e8942" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra nothosubg. Nexxxina" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectandra nothosubg. Nexxxina" GENUSORUNINOMIAL="Nectandra" INFRAGENERICEPITHET="Nexxxina" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="true" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="773"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="43" UUID="e0b28207-8f09-48a2-8da3-94a56405d854" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectxndra subgen. Nectande" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectxndra subgen. Nectande" GENUSORUNINOMIAL="Nectxndra" INFRAGENERICEPITHET="Nectande" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="true" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="773"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="10" UUID="6dbd41d1-fe13-4d9c-bb58-31f051c2c384" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra abortiens" AUTHORSHIPCACHE="" NAMECACHE="Nectandra abortiens" GENUSORUNINOMIAL="Nectandra" INFRAGENERICEPITHET="" SPECIFICEPITHET="abortiens" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="11" UUID="f9e9c13f-5fa5-48d3-88cf-712c921a099e" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra acuminata" AUTHORSHIPCACHE="[null]" NAMECACHE="Nectandra acuminata" GENUSORUNINOMIAL="Nectandra" INFRAGENERICEPITHET="" SPECIFICEPITHET="acuminata" INFRASPECIFICEPITHET="" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="12" UUID="e1e66264-f16a-4df9-80fd-6ab5028a3c28" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra acutangula" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectandra acutangula" GENUSORUNINOMIAL="Nectandra" INFRAGENERICEPITHET="" SPECIFICEPITHET="acutangula" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="38" UUID="21f9c0de-aeb8-47a9-9e2c-2b91414f91c9" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Philodendron aristeguietae" AUTHORSHIPCACHE="Turl." NAMECACHE="Philodendron aristeguietae" GENUSORUNINOMIAL="Philodendron" INFRAGENERICEPITHET="" SPECIFICEPITHET="aristeguietae" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="51" UUID="b3415bba-9a5c-442f-997e-95a8e214bd2c" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Philodendron magnoliifolia" AUTHORSHIPCACHE="Turl." NAMECACHE="Philodendron magnoliifolia" GENUSORUNINOMIAL="Philodendron" INFRAGENERICEPITHET="" SPECIFICEPITHET="magnoliifolia" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="53" UUID="43bcd836-9268-4ca0-a29b-3ba6bb399a8b" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra membranacea subsp. cuspidata" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectandra membranacea subsp. cuspidata" INFRAGENERICEPITHET="" GENUSORUNINOMIAL="Nectandra" INFRASPECIFICEPITHET="cuspidata" SPECIFICEPITHET="membranacea" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="763"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="54" UUID="6ece548d-ba0d-4988-97a1-4d79c611d6f8" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra mollis var. attenuata" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectandra mollis var. attenuata" INFRAGENERICEPITHET="" GENUSORUNINOMIAL="Nectandra" INFRASPECIFICEPITHET="attenuata" SPECIFICEPITHET="mollis" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="763"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="54" UUID="6ece548d-ba0d-4988-97a1-4d79c611d6f8" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra mollis var. attenuata" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectandra mollis var. attenuata" INFRAGENERICEPITHET="" GENUSORUNINOMIAL="Nectandra" INFRASPECIFICEPITHET="attenuata" SPECIFICEPITHET="mollis" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="761"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="55" UUID="25296c78-f62b-4dfa-9cd1-813bc9d1d777" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra mollis subsp. laurel" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectandra mollis subsp. laurel" INFRAGENERICEPITHET="" GENUSORUNINOMIAL="Nectandra" INFRASPECIFICEPITHET="laurel" SPECIFICEPITHET="mollis" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="763"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="56" UUID="3598ffca-d444-4b7e-a373-7e8d90dfd215" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra mollis subsp. oppositifolia" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectandra mollis subsp. oppositifolia" INFRAGENERICEPITHET="" GENUSORUNINOMIAL="Nectandra" INFRASPECIFICEPITHET="oppositifolia" SPECIFICEPITHET="mollis" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="763"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="57" UUID="6c19c4d3-3faa-4280-981c-d515daf4c347" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra membranacea fo. floribunda" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectandra membranacea fo. floribunda" INFRAGENERICEPITHET="" GENUSORUNINOMIAL="Nectandra" INFRASPECIFICEPITHET="floribunda" SPECIFICEPITHET="membranacea" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="763"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="57" UUID="6c19c4d3-3faa-4280-981c-d515daf4c347" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra membranacea fo. floribunda" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectandra membranacea fo. floribunda" INFRAGENERICEPITHET="" GENUSORUNINOMIAL="Nectandra" INFRASPECIFICEPITHET="floribunda" SPECIFICEPITHET="membranacea" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="58" UUID="a598ab3f-b33b-4b4b-b237-d616fcb6b5b1" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra mollis subsp. laureli" AUTHORSHIPCACHE="Turl." NAMECACHE="Nectandra mollis subsp. laureli" INFRAGENERICEPITHET="" GENUSORUNINOMIAL="Nectandra" INFRASPECIFICEPITHET="laureli" SPECIFICEPITHET="mollis" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="763"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="60" UUID="80dda188-c7f4-4319-9f30-3596c2540705" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yermoloffia Bél." AUTHORSHIPCACHE="Bél." NAMECACHE="Yermoloffia" GENUSORUNINOMIAL="Yermoloffia" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="61" UUID="61e322a4-d6d9-4e18-ab51-ab55c6b8841a" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yervamora Kuntze" AUTHORSHIPCACHE="Kuntze" NAMECACHE="Yervamora" GENUSORUNINOMIAL="Yervamora" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="60" UUID="80dda188-c7f4-4319-9f30-3596c2540705" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yermoloffia Bél." AUTHORSHIPCACHE="Bél." NAMECACHE="Yermoloffia" GENUSORUNINOMIAL="Yermoloffia" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="774"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="61" UUID="61e322a4-d6d9-4e18-ab51-ab55c6b8841a" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yervamora Kuntze" AUTHORSHIPCACHE="Kuntze" NAMECACHE="Yervamora" GENUSORUNINOMIAL="Yervamora" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="774"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="62" UUID="c77cf87f-c87a-4b33-9c6a-3feb83a067c2" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yervamora canariensis Kuntze" AUTHORSHIPCACHE="Kuntze" NAMECACHE="Yervamora canariensis" GENUSORUNINOMIAL="Yervamora" INFRAGENERICEPITHET="" SPECIFICEPITHET="canariensis" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="63" UUID="73030192-ed9d-404d-ac96-6aa77f996f24" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yildirimlia pacis (Güzel, Kayıkçı & S. Yıldız) Kılıç" AUTHORSHIPCACHE="(Güzel, Kayıkçı & S. Yıldız) Kılıç" NAMECACHE="Yildirimlia pacis" GENUSORUNINOMIAL="Yildirimlia" INFRAGENERICEPITHET="" SPECIFICEPITHET="pacis" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="64" UUID="00c83e21-9dec-4132-ae09-c1bc2225ee4b" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Youngia Cass." AUTHORSHIPCACHE="Cass." NAMECACHE="Youngia" GENUSORUNINOMIAL="Youngia" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="64" UUID="00c83e21-9dec-4132-ae09-c1bc2225ee4b" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Youngia Cass." AUTHORSHIPCACHE="Cass." NAMECACHE="Youngia" GENUSORUNINOMIAL="Youngia" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="774"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="65" UUID="84400145-c775-4856-a737-6cc2e93d60a8" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Youngia dentata (Thunb.) DC." AUTHORSHIPCACHE="(Thunb.) DC." NAMECACHE="Youngia dentata" GENUSORUNINOMIAL="Youngia" INFRAGENERICEPITHET="" SPECIFICEPITHET="dentata" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="66" UUID="c3f72fa2-4368-4cb6-a15f-a2f7d4667396" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Youngia japonica (L.) DC." AUTHORSHIPCACHE="(L.) DC." NAMECACHE="Youngia japonica" GENUSORUNINOMIAL="Youngia" INFRAGENERICEPITHET="" SPECIFICEPITHET="japonica" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="67" UUID="d3875b99-1a9d-446f-a543-f7042a6422ac" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca L." AUTHORSHIPCACHE="L." NAMECACHE="Yucca" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="67" UUID="d3875b99-1a9d-446f-a543-f7042a6422ac" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca L." AUTHORSHIPCACHE="L." NAMECACHE="Yucca" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="774"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="68" UUID="3dc99ff0-182b-4143-9f8c-3cf3b985b81b" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca acuminata Sweet" AUTHORSHIPCACHE="Sweet" NAMECACHE="Yucca acuminata" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="acuminata" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="69" UUID="7b3f8a62-7dde-4280-9aca-07a86b2e9040" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca aloifolia L." AUTHORSHIPCACHE="L." NAMECACHE="Yucca aloifolia" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="aloifolia" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="70" UUID="9ba460a4-0130-446d-9fec-671a3e949ba6" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca ensifolia Groenl." AUTHORSHIPCACHE="Groenl." NAMECACHE="Yucca ensifolia" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="ensifolia" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="71" UUID="56c1c33e-5447-497d-86bb-1eef72ae5a1b" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca filamentosa L." AUTHORSHIPCACHE="L." NAMECACHE="Yucca filamentosa" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="filamentosa" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="72" UUID="0da37b94-2667-4ad6-aff7-6f6ecb46c061" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca filamentosa L." AUTHORSHIPCACHE="L." NAMECACHE="Yucca filamentosa" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="filamentosa" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="73" UUID="c5865725-efa6-443b-9492-55887e58246e" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca filamentosa f. genuina Engelm." AUTHORSHIPCACHE="Engelm." NAMECACHE="Yucca filamentosa f. genuina" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="filamentosa" INFRASPECIFICEPITHET="genuina" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="73" UUID="c5865725-efa6-443b-9492-55887e58246e" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca filamentosa f. genuina Engelm." AUTHORSHIPCACHE="Engelm." NAMECACHE="Yucca filamentosa f. genuina" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="filamentosa" INFRASPECIFICEPITHET="genuina" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="755"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="74" UUID="484401f1-3480-480b-be3f-47cc95646e7c" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca gigantea Lem." AUTHORSHIPCACHE="Lem." NAMECACHE="Yucca gigantea" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="gigantea" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="75" UUID="588ae1cc-2e21-47b5-b303-b07df0fe845f" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca gloriosa L." AUTHORSHIPCACHE="L." NAMECACHE="Yucca gloriosa" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="gloriosa" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="76" UUID="136c5d50-e54c-458c-aae0-58c3cbd39168" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca gloriosa L." AUTHORSHIPCACHE="L." NAMECACHE="Yucca gloriosa" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="gloriosa" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="77" UUID="297fe18b-6158-418a-ad8d-905ef5f66693" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca gloriosa f. genuina Engelm." AUTHORSHIPCACHE="Engelm." NAMECACHE="Yucca gloriosa f. genuina" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="gloriosa" INFRASPECIFICEPITHET="genuina" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="78" UUID="07cef315-2e29-4f12-9355-c62eb08d71ad" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca gloriosa L. var. gloriosa" AUTHORSHIPCACHE="L." NAMECACHE="Yucca gloriosa var. gloriosa" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="gloriosa" INFRASPECIFICEPITHET="gloriosa" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="79" UUID="756d75db-4992-44eb-847f-275986e4544d" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca gloriosa var. plicata Carrière" AUTHORSHIPCACHE="Carrière" NAMECACHE="Yucca gloriosa var. plicata" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="gloriosa" INFRASPECIFICEPITHET="plicata" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="80" UUID="f7cb46e3-b2a2-4ecf-bf7d-763806238660" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca gloriosa var. superba Baker" AUTHORSHIPCACHE="Baker" NAMECACHE="Yucca gloriosa var. superba" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="gloriosa" INFRASPECIFICEPITHET="superba" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="77" UUID="297fe18b-6158-418a-ad8d-905ef5f66693" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca gloriosa f. genuina Engelm." AUTHORSHIPCACHE="Engelm." NAMECACHE="Yucca gloriosa f. genuina" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="gloriosa" INFRASPECIFICEPITHET="genuina" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="755"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="78" UUID="07cef315-2e29-4f12-9355-c62eb08d71ad" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca gloriosa L. var. gloriosa" AUTHORSHIPCACHE="L." NAMECACHE="Yucca gloriosa var. gloriosa" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="gloriosa" INFRASPECIFICEPITHET="gloriosa" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="761"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="79" UUID="756d75db-4992-44eb-847f-275986e4544d" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca gloriosa var. plicata Carrière" AUTHORSHIPCACHE="Carrière" NAMECACHE="Yucca gloriosa var. plicata" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="gloriosa" INFRASPECIFICEPITHET="plicata" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="761"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="80" UUID="f7cb46e3-b2a2-4ecf-bf7d-763806238660" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca gloriosa var. superba Baker" AUTHORSHIPCACHE="Baker" NAMECACHE="Yucca gloriosa var. superba" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="gloriosa" INFRASPECIFICEPITHET="superba" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="761"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="81" UUID="d2645642-f645-46a1-baa9-3a4077d419f2" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca parmentieri Roezl" AUTHORSHIPCACHE="Roezl" NAMECACHE="Yucca parmentieri" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="parmentieri" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="82" UUID="606a35da-79c3-4383-a47a-de33e35e330f" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca patens André" AUTHORSHIPCACHE="André" NAMECACHE="Yucca patens" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="patens" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="83" UUID="1c647536-edcc-4f27-8842-3e5076b1b183" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca pruinosa Baker" AUTHORSHIPCACHE="Baker" NAMECACHE="Yucca pruinosa" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="pruinosa" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="84" UUID="80378f23-0405-48f4-abca-7217612798c0" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca recurvifolia Salisb." AUTHORSHIPCACHE="Salisb." NAMECACHE="Yucca recurvifolia" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="recurvifolia" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="85" UUID="bc6467e7-65e7-4db6-93be-a6f0b7fb7a23" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yucca superba Roxb." AUTHORSHIPCACHE="Roxb." NAMECACHE="Yucca superba" GENUSORUNINOMIAL="Yucca" INFRAGENERICEPITHET="" SPECIFICEPITHET="superba" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
- <TAXONNAME NAMETYPE="ICNAFP" ID="86" UUID="328aef66-f30e-4acf-afba-0f45e311d327" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yushania Keng f." AUTHORSHIPCACHE="Keng f." NAMECACHE="Yushania" GENUSORUNINOMIAL="Yushania" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
+ <TAXONNAME NAMETYPE="ICNAFP" ID="86" UUID="328aef66-f30e-4acf-afba-0f45e311d327" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yushania Keng f." AUTHORSHIPCACHE="Keng f." NAMECACHE="Yushania" GENUSORUNINOMIAL="Yushania" INFRAGENERICEPITHET="" SPECIFICEPITHET="" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="774"/>
<TAXONNAME NAMETYPE="ICNAFP" ID="87" UUID="399acb17-80d3-4470-983b-92ff4d1ec883" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Yushania anceps (Mitford) W. C. Lin" AUTHORSHIPCACHE="(Mitford) W. C. Lin" NAMECACHE="Yushania anceps" GENUSORUNINOMIAL="Yushania" INFRAGENERICEPITHET="" SPECIFICEPITHET="anceps" INFRASPECIFICEPITHET="" COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
<AGENTBASE DTYPE="Person" ID="1" UUID="a598ab3f-b33b-4b4b-b237-d616fcb6b5b1" TITLECACHE="Turland, N.J." PROTECTEDTITLECACHE="true" NOMENCLATURALTITLE="Turl." FAMILYNAME="Turland" INITIALS="N.J." />