commit 8981bb4a75c94cac6fd068f2990168ea6e23ba40
parent f303db22e7a73419b1b887ab15ae04c9c3afabf9
Author: Matt Burton <mcburton@gmail.com>
Date: Tue, 28 Jul 2009 23:19:36 +0000
Created a translator for Defense Technical Information Center
Diffstat:
| A | translators/DTIC.js | | | 127 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 127 insertions(+), 0 deletions(-)
diff --git a/translators/DTIC.js b/translators/DTIC.js
@@ -0,0 +1,126 @@
+{
+ "translatorID":"99be9976-2ff9-40df-96e8-82edfa79d9f3",
+ "translatorType":4,
+ "label":"Defense Technical Information Center",
+ "creator":"Matt Burton",
+ "target":"http://oai\\.dtic\\.mil/oai/",
+ "minVersion":"1.0.0b3.r1",
+ "maxVersion":"",
+ "priority":100,
+ "inRepository":true,
+ "lastUpdated":"2009-07-28 18:10:00"
+}
+
+function detectWeb(doc, url) {
+ if(doc.title.indexOf("DTIC OAI Index for") != -1) {
+ return "multiple";
+ } else if (url.indexOf("verb=getRecord") != -1){
+ return "report";
+ }
+}
+
+function doWeb(doc, url) {
+ var namespace = doc.documentElement.namespaceURI;
+ var nsResolver = namespace ? function(prefix) {
+ if (prefix == 'x') return namespace; else return null;
+ } : null;
+
+ var newURIs = new Array();
+
+ if(detectWeb(doc,url) == "multiple"){
+ var links = doc.evaluate("//a/@href", doc, nsResolver, XPathResult.Abstract, null);
+ var titles = doc.evaluate("//a/preceding::text()[1]", doc, nsResolver, XPathResult.Abstract, null);
+ var items = new Object();
+ var link, title;
+ while( link = links.iterateNext(), title = titles.iterateNext()){
+ items[link.textContent.replace(/&metadataPrefix=html/, "&metadataPrefix=oai_dc")] = title.textContent;
+ }
+ items = Zotero.selectItems(items);
+ if(!items) {
+ return true;
+ }
+ for (url in items) {
+ newURIs.push(url);
+ Zotero.debug(url);
+ }
+ } else {
+ newURIs.push(url.replace(/&metadataPrefix=html/, "&metadataPrefix=oai_dc"))
+ }
+
+ // ripped the arXiv.org code, hence the funny var names.
+ Zotero.Utilities.HTTP.doGet(newURIs, function(text) {
+ var newItem = new Zotero.Item("report");
+ // remove header
+ text = text.replace(/<!DOCTYPE[^>]*>/, "").replace(/<\?xml[^>]*\?>/, "");
+ // fix non-compliant XML tags (colons)
+ text = text.replace(/<dc:/g, "<dc_").replace(/<\/dc:/g, "</dc_");
+ text = text.replace(/<oai_dc:dc/g, "<oai_dc_dc").replace(/<\/oai_dc:dc/g, "</oai_dc_dc");
+ text = text.replace(/<OAI-PMH[^>]*>/, "").replace(/<\/OAI-PMH[^>]*>/, "");
+ text = "<zotero>" + text + "</zotero>";
+ var xml = new XML(text);
+ var title;
+ var citation = xml.GetRecord.record.metadata.oai_dc_dc;
+ var test = xml..responseDate.text().toString();
+
+ if (citation.dc_title.length()){
+ title = Zotero.Utilities.trimInternal(citation.dc_title.text().toString());
+ newItem.title = title;
+ }
+ Zotero.debug("article title: " + title);
+ var type = "";
+ if(citation.dc_creator.length()) {
+ var authors = citation.dc_creator;
+ for(var j=0; j<authors.length(); j++) {
+ Zotero.debug("author: " + authors[j]);
+ newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[j].text().toString(),type,true));
+ }
+ }
+ if (citation.dc_date.length()) {
+ var dates = citation.dc_date;
+ newItem.date = Zotero.Utilities.cleanString(dates[0].text().toString());
+ }
+ if (citation.dc_description.length()) {
+ var descriptions = citation.dc_description;
+ for (var j=0; j<descriptions.length(); j++) {
+ var noteStr = Zotero.Utilities.cleanString(descriptions[j].text().toString());
+ newItem.notes.push({note:noteStr});
+ }
+ }
+ if (citation.dc_subject.length()) {
+ var subjects = citation.dc_subject;
+ for (var j=0; j<subjects.length(); j++) {
+ var subjectValue = Zotero.Utilities.cleanString(subjects[j].text().toString());
+ newItem.tags.push(subjectValue);
+ }
+ }
+ if (citation.dc_identifier.length()) {
+ var identifiers = citation.dc_identifier;
+ for (var j=0; j<identifiers.length(); j++) {
+ var identifier = Zotero.Utilities.cleanString(identifiers[j].text().toString());
+ if (identifier.substr(0, 4) == "doi:") {
+ newItem.DOI = identifier;
+ }
+ else if (identifier.substr(0, 7) == "http://") {
+ newItem.url = identifier;
+ }
+ else {
+ newItem.extra = identifier;
+ }
+ }
+ }
+ var articleID = "";
+ if (xml.GetRecord.record.header.identifier.length()) {
+ articleID = xml.GetRecord.record.header.identifier.text().toString();
+ articleID = articleID.substr(14);
+ newItem.publicationTitle = articleID;
+ }
+// TODO add "arXiv.org" to bib data?
+ newItem.attachments.push({url:newItem.url, title:"DTIC Snapshot", mimeType:"text/html"});
+ if (newItem.notes[0]['note']) {
+ newItem.abstractNote = newItem.notes[0]['note'];
+ newItem.notes = new Array();
+ }
+ newItem.complete();
+ }, function() {Zotero.done();}, null);
+ Zotero.wait();
+}
+\ No newline at end of file