commit 139d39d30e97a426238b49d3aefe87ba957cdeee
parent 269a58eddc420c955fd67c9b012a85b59fffce8a
Author: Simon Kornblith <simon@simonster.com>
Date: Tue, 20 Apr 2010 23:03:23 +0000
- correct BIBO schema URI
- use Common Tag Ontology for tags
Diffstat:
1 file changed, 42 insertions(+), 6 deletions(-)
diff --git a/translators/Bibliontology RDF.js b/translators/Bibliontology RDF.js
@@ -7,8 +7,8 @@
"minVersion":"2.0",
"maxVersion":"",
"priority":50,
- "inRepository":true,
- "lastUpdated":"2010-03-27 01:02:54"
+ "inRepository":false,
+ "lastUpdated":"2010-04-20 23:02:43"
}
Zotero.configure("getCollections", true);
@@ -18,7 +18,8 @@ Zotero.addOption("exportFileData", false);
var n = {
address:"http://schemas.talis.com/2005/address/schema#", // could also use vcard?
- bibo:"http://purl.org/ontology/biblio/",
+ bibo:"http://purl.org/ontology/bibo/",
+ ctag:"http://commontag.org/ns#",
dcterms:"http://purl.org/dc/terms/",
doap:"http://usefulinc.com/ns/doap#",
foaf:"http://xmlns.com/foaf/0.1/",
@@ -384,7 +385,6 @@ Type.prototype.getMatchScore = function(node) {
Type.prototype._scoreNodeRelationship = function(node, definition, score) {
var subNode = null;
if(definition) {
- Zotero.debug(definition);
statements = Zotero.RDF.getStatementsMatching(node, definition.predicate, null);
if(statements) {
var bestScore = -9999;
@@ -899,11 +899,34 @@ function doImport() {
var creatorLists = {};
var creatorsAdded = {};
for(var i in nodes) {
+ // take DC subjects as tags
var statements = Zotero.RDF.getStatementsMatching(nodes[i], n.dcterms+"subject", null);
for each(var stmt in statements) {
+ // if attached to the user item, it's a user tag; otherwise, an automatic tag
newItem.tags.push({tag:stmt[2], type:(i == USERITEM ? 0 : 1)});
}
+ // also take ctags as tags
+ var statements = Zotero.RDF.getStatementsMatching(nodes[i], n.ctag+"tagged", null);
+ for each(var stmt in statements) {
+ var tag = {type:0};
+
+ // AutoTags are automatic tags
+ var types = Zotero.RDF.getStatementsMatching(stmt[2], n.rdf+"type", null);
+ for each(var type in types) {
+ var uri = Zotero.RDF.getResourceURI(type[2]);
+ if([n.ctag+"AutoTag", n.ctag+"AuthorTag"].indexOf(uri) != -1) tag.type = 1;
+ break;
+ }
+
+ // labels are tag content
+ var labels = Zotero.RDF.getStatementsMatching(stmt[2], n.ctag+"label", null);
+ if(labels.length) {
+ tag.tag = labels[0][2];
+ newItem.tags.push(tag);
+ }
+ }
+
for(var j in CREATOR_LISTS) {
var statements = Zotero.RDF.getStatementsMatching(nodes[i], CREATOR_LISTS[j], null);
for each(var stmt in statements) {
@@ -963,6 +986,8 @@ function doExport() {
while(item = Zotero.nextItem()) {
items[item.itemID] = item;
}
+ var autoTags = {};
+ var userTags = {};
// now that we've collected our items, start building the RDF
for each(var item in items) {
@@ -990,8 +1015,19 @@ function doExport() {
// add tags
for each(var tag in item.tags) {
- var tagNode = (tag.type == 0 ? nodes[USERITEM] : nodes[ITEM]);
- Zotero.RDF.addStatement(tagNode, n.dcterms+"subject", tag.tag, true);
+ var tagCollection = tag.type == 0 ? userTags : autoTags;
+
+ if(tagCollection[tag.tag]) {
+ var tagNode = tagCollection[tag.tag];
+ } else {
+ var tagNode = Zotero.RDF.newResource();
+ Zotero.RDF.addStatement(tagNode, n.rdf+"type",
+ (tag.type == 0 ? n.ctag+"UserTag" : n.ctag+"AutoTag"), false);
+ Zotero.RDF.addStatement(tagNode, n.ctag+"label", tag.tag, true);
+ tagCollection[tag.tag] = tagNode;
+ }
+
+ Zotero.RDF.addStatement(nodes[USERITEM], n.ctag+"tagged", tagNode, false);
}
type.addNodeRelations(nodes);