package edu.unc.ils.mrc.hive2.api; import java.util.ArrayList; import java.util.List; import java.util.Set; import javax.xml.namespace.QName; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openrdf.elmo.Entity; import org.openrdf.concepts.skos.core.Concept; /** * This class represents a HIVE Concept. HIVE concepts are simplified versions of SKOS concepts. * * @author cwillis * */ public class HiveConcept { private static final Log logger = LogFactory.getLog(HiveConcept.class); /* SKOS predicates */ public static final String CONCEPT = "http://www.w3.org/2004/02/skos/core#Concept"; public static final String PREFLABEL = "http://www.w3.org/2004/02/skos/core#prefLabel"; public static final String ALTLABEL = "http://www.w3.org/2004/02/skos/core#altLabel"; public static final String BROADER = "http://www.w3.org/2004/02/skos/core#broader"; public static final String NARROWER = "http://www.w3.org/2004/02/skos/core#narrower"; public static final String RELATED = "http://www.w3.org/2004/02/skos/core#related"; public static final String SCOPENOTE = "http://www.w3.org/2004/02/skos/core#scopeNote"; /* Qname of concept */ QName qname = null; /* Preferred label of concept */ String prefLabel = null; /* Alternate labels for concept */ List<String> altLabels = new ArrayList<String>(); /* Broader concepts (represented by URIs) */ List<String> broaderConcepts = new ArrayList<String>(); /* Narrower concepts (represented by URIs) */ List<String> narrowerConcepts = new ArrayList<String>(); /* Related concepts (represented by URIs) */ List<String> relatedConcepts = new ArrayList<String>(); /* Scope notes */ List<String> scopeNotes = new ArrayList<String>(); /* Is this concept a top concept? */ boolean isTopConcept = false; /* Is this concept a leaf node? */ boolean isLeaf = false; // Default constructor public HiveConcept() { } /** * Constructs a HiveConcept based on an Elmo concept. * @param c */ public HiveConcept(Concept c) { this.qname = c.getQName(); this.prefLabel = c.getSkosPrefLabel(); Set<Concept> broaders = c.getSkosBroaders(); try { for (Entity b: broaders) { QName qname = b.getQName(); String uri = qname.getNamespaceURI() + qname.getLocalPart(); broaderConcepts.add(uri); } } catch (Exception e) { logger.warn(e); } try { Set<Concept> narrowers = c.getSkosNarrowers(); for (Entity n: narrowers) { QName qname = n.getQName(); String uri = qname.getNamespaceURI() + qname.getLocalPart(); narrowerConcepts.add(uri); } } catch (Exception e) { logger.warn(e); } try { Set<Concept> relateds = c.getSkosRelated(); for (Entity r: relateds) { QName qname = r.getQName(); String uri = qname.getNamespaceURI() + qname.getLocalPart(); relatedConcepts.add(uri); } } catch (Exception e) { logger.warn(e); } Set<String> alts = c.getSkosAltLabels(); for (String a : alts) { altLabels.add(a); } Set<Object> notes = c.getSkosScopeNotes(); for (Object n : notes) { scopeNotes.add((String)n); } // Other values available from the Elmo Concept implementation: /* c.getRdfsComment(); c.getRdfsIsDefinedBy(); c.getRdfsLabel(); c.getRdfsMembers(); c.getRdfsSeeAlso(); c.getRdfTypes(); c.getRdfValues(); c.getSkosAltSymbols(); c.getSkosChangeNotes(); c.getSkosDefinitions(); c.getSkosEditorialNotes(); c.getSkosExamples(); c.getSkosHiddenLabels(); c.getSkosHistoryNotes(); c.getSkosInSchemes(); c.getSkosIsPrimarySubjectOfs(); c.getSkosIsSubjectOfs(); c.getSkosNotes(); c.getSkosPrefSymbols(); c.getSkosPrimarySubjects(); c.getSkosScopeNotes(); c.getSkosSemanticRelations(); c.getSkosSubjectIndicators(); c.getSkosSubjects(); c.getSkosSymbols(); */ } /** * Returns the Qname for this concept * @return */ public QName getQName() { return qname; } /** * Sets the Qname for this concept * @param qname */ public void setQName(QName qname) { this.qname = qname; } /** * Returns the preferred label for this concept. * @return */ public String getPrefLabel() { return prefLabel; } /** * Sets the preferred label for this concept * @param prefLabel */ public void setPrefLabel(String prefLabel) { this.prefLabel = prefLabel; } /** * Returns the list of alternate labels for this concept * @return */ public List<String> getAltLabels() { return altLabels; } /** * Sets the alternate labels for this concept * @param altLabels */ public void setAltLabels(List<String> altLabels) { this.altLabels = altLabels; } /** * Returns the list of broader concept URIs * @return */ public List<String> getBroaderConcepts() { return broaderConcepts; } /** * Sets the broader concept URIs for this concept * @param broaderConcepts */ public void setBroaderConcepts(List<String> broaderConcepts) { this.broaderConcepts = broaderConcepts; } /** * Returns narrower concept URIs for this concept * @return */ public List<String> getNarrowerConcepts() { return narrowerConcepts; } /** * Returns the scope notes for this concept * @return */ public List<String> getScopeNotes() { return scopeNotes; } /** * Sets the narrower concept URIs for this concept * @param narrowerConcepts */ public void setNarrowerConcepts(List<String> narrowerConcepts) { this.narrowerConcepts = narrowerConcepts; } /** * Returns the related concept URIs for this concept * @return */ public List<String> getRelatedConcepts() { return relatedConcepts; } /** * Sets the related concept URIs for this concept * @param relatedConcepts */ public void setRelatedConcepts(List<String> relatedConcepts) { this.relatedConcepts = relatedConcepts; } /** * Sets the scope notes for this concept * @param scopeNotes */ public void setScopeNotes(List<String> scopeNotes) { this.scopeNotes = scopeNotes; } /** * Adds a broader concept URI * @param uri */ public void addBroaderConcept(String uri) { this.broaderConcepts.add(uri); } /** * Adds a narrower concept URI * @param uri */ public void addNarrowerConcept(String uri) { this.narrowerConcepts.add(uri); } /** * Adds a related concept URI * @param uri */ public void addRelatedConcept(String uri) { this.relatedConcepts.add(uri); } /** * Adds a scope note * @param note */ public void addScopeNote(String note) { this.scopeNotes.add(note); } /** * Returns true if this is a top concept * @return */ public boolean isTopConcept() { return isTopConcept; } /** * Sets whether this is a top concept; * @param isTopConcept */ public void setTopConcept(boolean isTopConcept) { this.isTopConcept = isTopConcept; } /** * Returns true if this is a leaf node. * @return */ public boolean isLeaf() { return isLeaf; } /** * Sets whether this is a leaf node. * @param isLeaf */ public void setLeaf(boolean isLeaf) { this.isLeaf = isLeaf; } }