From 61bb52d55c085589062ae1a94915d0f70ef23cff Mon Sep 17 00:00:00 2001 From: Michael Peter Christen Date: Tue, 12 Jun 2012 14:23:51 +0200 Subject: [PATCH] - using http://purl.org/dc/terms/references to refer from an auto-annotated document to a 'pseudo-linked' document which has an url created with an object-prefix as defined in the vocabulary file --- source/net/yacy/cora/lod/JenaTripleStore.java | 2 + source/net/yacy/cora/lod/Vocabulary.java | 4 +- .../cora/lod/vocabulary/CreativeCommons.java | 4 +- .../net/yacy/cora/lod/vocabulary/DCTerms.java | 44 +++++++++++++++++++ .../yacy/cora/lod/vocabulary/DublinCore.java | 4 +- source/net/yacy/cora/lod/vocabulary/Foaf.java | 4 +- source/net/yacy/cora/lod/vocabulary/Geo.java | 4 +- .../yacy/cora/lod/vocabulary/HttpHeader.java | 4 +- source/net/yacy/cora/lod/vocabulary/Owl.java | 4 +- source/net/yacy/cora/lod/vocabulary/Rdf.java | 4 +- .../net/yacy/cora/lod/vocabulary/Tagging.java | 30 +++++++------ .../cora/lod/vocabulary/YaCyMetadata.java | 8 ++-- source/net/yacy/document/Document.java | 9 +++- source/net/yacy/document/LibraryProvider.java | 3 +- .../data/meta/MetadataVocabulary.java | 4 +- 15 files changed, 93 insertions(+), 39 deletions(-) create mode 100644 source/net/yacy/cora/lod/vocabulary/DCTerms.java diff --git a/source/net/yacy/cora/lod/JenaTripleStore.java b/source/net/yacy/cora/lod/JenaTripleStore.java index bef08108a..2926fc145 100644 --- a/source/net/yacy/cora/lod/JenaTripleStore.java +++ b/source/net/yacy/cora/lod/JenaTripleStore.java @@ -12,6 +12,7 @@ import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; import net.yacy.cora.document.UTF8; +import net.yacy.cora.lod.vocabulary.DCTerms; import net.yacy.cora.lod.vocabulary.Geo; import net.yacy.cora.lod.vocabulary.HttpHeader; import net.yacy.cora.lod.vocabulary.Tagging; @@ -40,6 +41,7 @@ public class JenaTripleStore { model.setNsPrefix(HttpHeader.PREFIX, HttpHeader.NAMESPACE); model.setNsPrefix(Geo.PREFIX, Geo.NAMESPACE); model.setNsPrefix("pnd", "http://dbpedia.org/ontology/individualisedPnd"); + model.setNsPrefix(DCTerms.PREFIX, DCTerms.NAMESPACE); } public static ConcurrentHashMap privatestorage = null; diff --git a/source/net/yacy/cora/lod/Vocabulary.java b/source/net/yacy/cora/lod/Vocabulary.java index 282091a3b..0bf05a3cf 100644 --- a/source/net/yacy/cora/lod/Vocabulary.java +++ b/source/net/yacy/cora/lod/Vocabulary.java @@ -41,13 +41,13 @@ public interface Vocabulary { * get the RDF identifier as an URL stub * @return */ - public String getURLStub(); + public String getNamespace(); /** * get the prefix for the predicates of this vocabulary * @return */ - public String getShortName(); + public String getNamespacePrefix(); /** * get the predicate name which already contains the prefix url stub diff --git a/source/net/yacy/cora/lod/vocabulary/CreativeCommons.java b/source/net/yacy/cora/lod/vocabulary/CreativeCommons.java index d688c0c96..344ed9b22 100644 --- a/source/net/yacy/cora/lod/vocabulary/CreativeCommons.java +++ b/source/net/yacy/cora/lod/vocabulary/CreativeCommons.java @@ -186,12 +186,12 @@ public enum CreativeCommons implements Vocabulary { } @Override - public String getURLStub() { + public String getNamespace() { return IDENTIFIER; } @Override - public String getShortName() { + public String getNamespacePrefix() { return PREFIX; } diff --git a/source/net/yacy/cora/lod/vocabulary/DCTerms.java b/source/net/yacy/cora/lod/vocabulary/DCTerms.java new file mode 100644 index 000000000..52be7ddfe --- /dev/null +++ b/source/net/yacy/cora/lod/vocabulary/DCTerms.java @@ -0,0 +1,44 @@ +package net.yacy.cora.lod.vocabulary; + +import java.util.Set; + +import net.yacy.cora.lod.Literal; +import net.yacy.cora.lod.Vocabulary; + +public enum DCTerms implements Vocabulary { + + references; + + public final static String NAMESPACE = "http://purl.org/dc/terms/"; + public final static String PREFIX = "dcterms"; + + private final String predicate; + + private DCTerms() { + this.predicate = NAMESPACE + this.name().toLowerCase(); + } + + private DCTerms(String name) { + this.predicate = NAMESPACE + name; + } + + @Override + public String getNamespace() { + return NAMESPACE; + } + + @Override + public String getNamespacePrefix() { + return PREFIX; + } + + @Override + public Set getLiterals() { + return null; + } + + @Override + public String getPredicate() { + return this.predicate; + } +} diff --git a/source/net/yacy/cora/lod/vocabulary/DublinCore.java b/source/net/yacy/cora/lod/vocabulary/DublinCore.java index c693b6df0..cd870942d 100644 --- a/source/net/yacy/cora/lod/vocabulary/DublinCore.java +++ b/source/net/yacy/cora/lod/vocabulary/DublinCore.java @@ -58,12 +58,12 @@ public enum DublinCore implements Vocabulary { } @Override - public String getURLStub() { + public String getNamespace() { return IDENTIFIER; } @Override - public String getShortName() { + public String getNamespacePrefix() { return PREFIX; } diff --git a/source/net/yacy/cora/lod/vocabulary/Foaf.java b/source/net/yacy/cora/lod/vocabulary/Foaf.java index 2484b5063..20c9a9458 100644 --- a/source/net/yacy/cora/lod/vocabulary/Foaf.java +++ b/source/net/yacy/cora/lod/vocabulary/Foaf.java @@ -37,13 +37,13 @@ public enum Foaf implements Vocabulary { ; @Override - public String getURLStub() { + public String getNamespace() { // TODO Auto-generated method stub return null; } @Override - public String getShortName() { + public String getNamespacePrefix() { // TODO Auto-generated method stub return null; } diff --git a/source/net/yacy/cora/lod/vocabulary/Geo.java b/source/net/yacy/cora/lod/vocabulary/Geo.java index 8bae85a7a..a820e3052 100644 --- a/source/net/yacy/cora/lod/vocabulary/Geo.java +++ b/source/net/yacy/cora/lod/vocabulary/Geo.java @@ -44,12 +44,12 @@ public enum Geo implements Vocabulary { } @Override - public String getURLStub() { + public String getNamespace() { return NAMESPACE; } @Override - public String getShortName() { + public String getNamespacePrefix() { return PREFIX; } diff --git a/source/net/yacy/cora/lod/vocabulary/HttpHeader.java b/source/net/yacy/cora/lod/vocabulary/HttpHeader.java index ea44d1663..b50f05c56 100644 --- a/source/net/yacy/cora/lod/vocabulary/HttpHeader.java +++ b/source/net/yacy/cora/lod/vocabulary/HttpHeader.java @@ -96,12 +96,12 @@ public enum HttpHeader implements Vocabulary { } @Override - public String getURLStub() { + public String getNamespace() { return NAMESPACE; } @Override - public String getShortName() { + public String getNamespacePrefix() { return PREFIX; } diff --git a/source/net/yacy/cora/lod/vocabulary/Owl.java b/source/net/yacy/cora/lod/vocabulary/Owl.java index ae66f4a5b..c85003804 100644 --- a/source/net/yacy/cora/lod/vocabulary/Owl.java +++ b/source/net/yacy/cora/lod/vocabulary/Owl.java @@ -43,12 +43,12 @@ public enum Owl implements Vocabulary { } @Override - public String getURLStub() { + public String getNamespace() { return IDENTIFIER; } @Override - public String getShortName() { + public String getNamespacePrefix() { return PREFIX; } diff --git a/source/net/yacy/cora/lod/vocabulary/Rdf.java b/source/net/yacy/cora/lod/vocabulary/Rdf.java index 7c2a57e56..812fa2507 100644 --- a/source/net/yacy/cora/lod/vocabulary/Rdf.java +++ b/source/net/yacy/cora/lod/vocabulary/Rdf.java @@ -47,12 +47,12 @@ public enum Rdf implements Vocabulary { } @Override - public String getURLStub() { + public String getNamespace() { return IDENTIFIER; } @Override - public String getShortName() { + public String getNamespacePrefix() { return PREFIX; } diff --git a/source/net/yacy/cora/lod/vocabulary/Tagging.java b/source/net/yacy/cora/lod/vocabulary/Tagging.java index 0e1d67ba7..9db5769a9 100644 --- a/source/net/yacy/cora/lod/vocabulary/Tagging.java +++ b/source/net/yacy/cora/lod/vocabulary/Tagging.java @@ -35,24 +35,24 @@ import net.yacy.document.geolocalization.Localization; public class Tagging { - public final static String DEFAULT_NAMESPACE= "http://yacy.net/tagging#"; - public final static String DEFAULT_PREFIX = "tag"; + public final static String DEFAULT_NAMESPACE= "http://yacy.net/autotagging#"; + public final static String DEFAULT_PREFIX = "tags"; private final String navigatorName; private final Map synonym2term; private final Map term2synonym; private final Map> synonym2synonyms; - private String predicate, predicatePrefix, objectPrefix; + private String predicate, namespace, objectspace; public Tagging(String name) { this.navigatorName = name; this.synonym2term = new ConcurrentHashMap(); this.term2synonym = new ConcurrentHashMap(); this.synonym2synonyms = new ConcurrentHashMap>(); - this.predicatePrefix = DEFAULT_NAMESPACE; - this.predicate = this.predicatePrefix + name; - this.objectPrefix = ""; + this.namespace = DEFAULT_NAMESPACE; + this.predicate = this.namespace + name; + this.objectspace = null; } public Tagging(String name, File propFile) throws IOException { @@ -68,14 +68,14 @@ public class Tagging { p = line.indexOf('#'); if (p >= 0) { String comment = line.substring(p + 1).trim(); - if (comment.startsWith("predicate-prefix:")) { - this.predicatePrefix = comment.substring(17).trim(); - if (!this.predicatePrefix.endsWith("/")) this.predicatePrefix += "/"; - this.predicate = this.predicatePrefix + name; + if (comment.startsWith("namespace:")) { + this.namespace = comment.substring(10).trim(); + if (!this.namespace.endsWith("/") && !this.namespace.endsWith("#")) this.namespace += "#"; + this.predicate = this.namespace + name; } - if (comment.startsWith("object-prefix:")) { - this.objectPrefix = comment.substring(14).trim(); - if (!this.objectPrefix.endsWith("/")) this.objectPrefix += "/"; + if (comment.startsWith("objectspace:")) { + this.objectspace = comment.substring(12).trim(); + if (!this.objectspace.endsWith("/") && !this.objectspace.endsWith("#")) this.objectspace += "#"; } line = line.substring(0, p).trim(); } @@ -150,6 +150,10 @@ public class Tagging { return this.predicate; } + public String getObjectspace() { + return this.objectspace; + } + private final String normalizeKey(String k) { k = k.trim(); k = k.replaceAll(" \\+", ", "); // remove symbols that are bad in a query attribute diff --git a/source/net/yacy/cora/lod/vocabulary/YaCyMetadata.java b/source/net/yacy/cora/lod/vocabulary/YaCyMetadata.java index 90038a6f8..df9d8ac3c 100644 --- a/source/net/yacy/cora/lod/vocabulary/YaCyMetadata.java +++ b/source/net/yacy/cora/lod/vocabulary/YaCyMetadata.java @@ -74,9 +74,9 @@ public enum YaCyMetadata implements Vocabulary { "Cardinal lapp-2 {b256}", // # of embedded links to applications */ - public final static byte[] HASH_PREFIX = ASCII.getBytes("http://yacy.net/hash#"); + public final static byte[] HASH_PREFIX = ASCII.getBytes("http://yacy.net/url#"); public final static int HASH_PREFIX_LENGTH = HASH_PREFIX.length; - public final static String NAMESPACE = "http://yacy.net/vocabularies/yacymetadata#"; + public final static String NAMESPACE = "http://yacy.net/md#"; public final static String PREFIX = "yacy"; private final String predicate; @@ -93,12 +93,12 @@ public enum YaCyMetadata implements Vocabulary { } @Override - public String getURLStub() { + public String getNamespace() { return NAMESPACE; } @Override - public String getShortName() { + public String getNamespacePrefix() { return PREFIX; } diff --git a/source/net/yacy/document/Document.java b/source/net/yacy/document/Document.java index c97685894..97c7cbeec 100644 --- a/source/net/yacy/document/Document.java +++ b/source/net/yacy/document/Document.java @@ -56,6 +56,7 @@ import net.yacy.cora.document.Classification; import net.yacy.cora.document.MultiProtocolURI; import net.yacy.cora.document.UTF8; import net.yacy.cora.lod.JenaTripleStore; +import net.yacy.cora.lod.vocabulary.DCTerms; import net.yacy.cora.lod.vocabulary.Owl; import net.yacy.cora.lod.vocabulary.Tagging; import net.yacy.cora.lod.vocabulary.YaCyMetadata; @@ -216,10 +217,13 @@ dc_rights * @param tags */ public void addMetatags(Map> tags) { + String subject = YaCyMetadata.hashURI(this.source.hash()); for (String s: this.keywords) { tags.remove(s); } for (Map.Entry> e: tags.entrySet()) { + Tagging vocabulary = LibraryProvider.autotagging.getVocabulary(e.getKey()); + String objectspace = vocabulary.getObjectspace(); StringBuilder sb = new StringBuilder(e.getValue().size() * 20); for (Tagging.Metatag s: e.getValue()) { String t = s.toString(); @@ -227,10 +231,11 @@ dc_rights this.keywords.add(t); } sb.append(',').append(s.getObject()); + if (objectspace != null) { + JenaTripleStore.addTriple(subject, DCTerms.references.getPredicate(), objectspace + s.getObject()); + } } // put to triplestore - String subject = YaCyMetadata.hashURI(this.source.hash()); - Tagging vocabulary = LibraryProvider.autotagging.getVocabulary(e.getKey()); JenaTripleStore.addTriple(subject, vocabulary.getPredicate(), sb.substring(1)); JenaTripleStore.addTriple(subject, Owl.SameAs.getPredicate(), this.source.toNormalform(true, false)); } diff --git a/source/net/yacy/document/LibraryProvider.java b/source/net/yacy/document/LibraryProvider.java index 54a597d75..d9311434c 100644 --- a/source/net/yacy/document/LibraryProvider.java +++ b/source/net/yacy/document/LibraryProvider.java @@ -46,8 +46,7 @@ import net.yacy.document.geolocalization.OverarchingLocalization; import net.yacy.kelondro.logging.Log; import net.yacy.kelondro.util.FileUtils; -public class LibraryProvider -{ +public class LibraryProvider { public static final char tagPrefix = '$'; public static final String path_to_source_dictionaries = "source"; diff --git a/source/net/yacy/kelondro/data/meta/MetadataVocabulary.java b/source/net/yacy/kelondro/data/meta/MetadataVocabulary.java index c8f6db43e..546eba1d6 100644 --- a/source/net/yacy/kelondro/data/meta/MetadataVocabulary.java +++ b/source/net/yacy/kelondro/data/meta/MetadataVocabulary.java @@ -41,12 +41,12 @@ public enum MetadataVocabulary implements Vocabulary { } @Override - public String getURLStub() { + public String getNamespace() { return IDENTIFIER; } @Override - public String getShortName() { + public String getNamespacePrefix() { return PREFIX; }