commit 3f9e9d0cf4d1fb1953a85df1f1fcebe8b91b16f1
parent d21494ad2dfff17b64c618a4f28b6b473504ac91
Author: Dan Stillman <dstillman@zotero.org>
Date: Wed, 27 May 2009 08:07:16 +0000
Look for explicit Dublin Core prefix, in the unlikely event that any pages don't use "DC."
Diffstat:
1 file changed, 36 insertions(+), 9 deletions(-)
diff --git a/translators/Embedded RDF.js b/translators/Embedded RDF.js
@@ -8,15 +8,42 @@
"maxVersion":"",
"priority":400,
"inRepository":true,
- "lastUpdated":"2009-05-27 05:25:00"
+ "lastUpdated":"2009-05-27 08:06:05"
+}
+
+var _prefix;
+var _dc = "http://purl.org/dc/elements/1.1/";
+
+function getDCPrefix(doc) {
+ if(_prefix) {
+ return _prefix;
+ }
+
+ var links = doc.getElementsByTagName("link");
+ for(var i=0; i<links.length; i++) {
+ if(links[i].getAttribute("href") == _dc) {
+ var rel = links[i].getAttribute("rel");
+ var matches = rel.match(/^schema\.([a-zA-Z]+)/);
+ if(matches) {
+ _prefix = matches[1].toLowerCase() + ".";
+ }
+ break;
+ }
+ }
+ if(!_prefix) {
+ _prefix = "dc.";
+ }
+ return _prefix;
}
function detectWeb(doc, url) {
+ var prefix = getDCPrefix(doc);
+
if (url.indexOf("reprint") != -1) return false;
var metaTags = doc.getElementsByTagName("meta");
for(var i=0; i<metaTags.length; i++) {
var tag = metaTags[i].getAttribute("name");
- if(tag && tag.substr(0, 3).toLowerCase() == "dc.") {
+ if(tag && tag.substr(0, 3).toLowerCase() == prefix) {
return "webpage";
}
}
@@ -25,8 +52,8 @@ function detectWeb(doc, url) {
}
function doWeb(doc, url) {
- var dc = "http://purl.org/dc/elements/1.1/";
-
+ var prefix = getDCPrefix(doc);
+
// load RDF translator, so that we don't need to replicate import code
var translator = Zotero.loadTranslator("import");
translator.setTranslator("5e3ad958-ac79-463d-812b-a86a9235c28f");
@@ -46,20 +73,20 @@ function doWeb(doc, url) {
for(var i=0; i<metaTags.length; i++) {
var tag = metaTags[i].getAttribute("name");
var value = metaTags[i].getAttribute("content");
- if(tag && value && tag.substr(0, 3).toLowerCase() == "dc.") {
+ if(tag && value && tag.substr(0, 3).toLowerCase() == prefix) {
if(tag == "dc.title") {
foundTitle = true;
}
- rdf.Zotero.RDF.addStatement(url, dc + tag.substr(3).toLowerCase(), value, true);
+ rdf.Zotero.RDF.addStatement(url, _dc + tag.substr(3).toLowerCase(), value, true);
} else if(tag && value && (tag == "author" || tag == "author-personal")) {
- rdf.Zotero.RDF.addStatement(url, dc + "creator", value, true);
+ rdf.Zotero.RDF.addStatement(url, _dc + "creator", value, true);
} else if(tag && value && tag == "author-corporate") {
- rdf.Zotero.RDF.addStatement(url, dc + "creator", value, true);
+ rdf.Zotero.RDF.addStatement(url, _dc + "creator", value, true);
}
}
if (!foundTitle) {
- rdf.Zotero.RDF.addStatement(url, dc + "title", doc.title, true);
+ rdf.Zotero.RDF.addStatement(url, _dc + "title", doc.title, true);
}
rdf.defaultUnknownType = "webpage";
rdf.doImport();