www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit 37427363634cd0c0abdab0d36be7a1239e37c2a9
parent 113a3d8ef289fa565b8342826ec982ecee391570
Author: aurimasv <aurimas.dev@gmail.com>
Date:   Thu, 26 Apr 2012 23:56:08 -0500

Use shorthand notation for rdf:type and some other constructs.

Diffstat:
Mchrome/content/zotero/xpcom/rdf/serialize.js | 69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 61 insertions(+), 8 deletions(-)

diff --git a/chrome/content/zotero/xpcom/rdf/serialize.js b/chrome/content/zotero/xpcom/rdf/serialize.js @@ -669,19 +669,72 @@ __Serializer.prototype.statementsToXML = function(sts) { // The tree for a subject function subjectXMLTree(subject, stats) { - var start + const liPrefix = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#_'; + var results = []; + var type = null, t, st; + var sts = stats.subjects[sz.toStr(subject)]; // relevant statements + sts.sort(); + for (var i=0; i<sts.length; i++) { + st = sts[i]; + if(st.predicate.uri == 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' && !type && st.object.termType == "symbol") { + // look for a type + type = st.object; + sts.splice(i,1); + i--; + continue; + } else { + // see whether predicate can be replaced with "li" + if(st.predicate.uri.substr(0, liPrefix.length) == liPrefix) { + var number = st.predicate.uri.substr(liPrefix.length); + // make sure these are actually numeric list items + var intNumber = parseInt(number); + if(number == intNumber.toString()) { + // was numeric; don't need to worry about ordering since we've already + // sorted the statements + st.predicate = $rdf.Symbol('http://www.w3.org/1999/02/22-rdf-syntax-ns#li'); + } + } + t = qname(st.predicate); + switch (st.object.termType) { + case 'bnode': + results = results.concat(['<'+ t +'>', + subjectXMLTree(st.object, stats), + '</'+ t +'>']); + break; + case 'symbol': + results = results.concat(['<'+ t +' rdf:resource="' + + relURI(st.object)+'"/>']); + break; + case 'literal': + results = results.concat(['<'+ t + + (st.object.dt ? ' rdf:datatype="'+escapeForXML(st.object.dt.uri)+'"' : '') + + (st.object.lang ? ' xml:lang="'+st.object.lang+'"' : '') + + '>' + escapeForXML(st.object.value) + + '</'+ t +'>']); + break; + case 'collection': + results = results.concat(['<'+ t +' rdf:parseType="Collection">', + collectionXMLTree(st.object, stats), + '</'+ t +'>']); + break; + default: + throw "Can't serialize object of type "+st.object.termType +" into XML"; + } // switch + } + } + + var tag = type ? qname(type) : 'rdf:Description'; + + var attrs = ''; if (subject.termType == 'bnode') { - if (!stats.incoming[subject]) { // anonymous bnode - var start = '<rdf:Description>'; - } else { - var start = '<rdf:Description rdf:nodeID="'+subject.toNT().slice(2)+'">'; + if(sz.incoming[subject].length != 1) { // not an anonymous bnode + attrs = ' rdf:ID="'+subject.toNT().slice(2)+'"'; } } else { - var start = '<rdf:Description rdf:about="'+ relURI(subject)+'">'; + attrs = ' rdf:about="'+ relURI(subject)+'"'; } - return [ start ].concat( - [propertyXMLTree(subject, stats)]).concat(["</rdf:Description>"]); + return [ '<' + tag + attrs + '>' ].concat([results]).concat(["</"+ tag +">"]); } function collectionXMLTree(subject, stats) { var res = []