RdfStore.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:6k
源码类别:

OA系统

开发平台:

Java

  1. /*
  2. Copyright (c) 2004-2006, The Dojo Foundation
  3. All Rights Reserved.
  4. Licensed under the Academic Free License version 2.1 or above OR the
  5. modified BSD license. For more information on Dojo licensing, see:
  6. http://dojotoolkit.org/community/licensing.shtml
  7. */
  8. dojo.provide("dojo.data.RdfStore");
  9. dojo.provide("dojo.data.RhizomeStore");
  10. dojo.require("dojo.lang.declare");
  11. dojo.require("dojo.data.core.RemoteStore");
  12. dojo.require("dojo.experimental");
  13. dojo.data.RdfDatatypeSerializer = function (type, convertFunc, uri) {
  14. this.type = type;
  15. this._converter = convertFunc;
  16. this.uri = uri;
  17. this.serialize = function (value) {
  18. return this._converter.call(value, value);
  19. };
  20. };
  21. dojo.declare("dojo.data.RdfStore", dojo.data.core.RemoteStore, {_datatypeMap:{literal:function (value) {
  22. var literal = value.value;
  23. if (value["xml:lang"]) {
  24. literal.lang = value["xml:lang"];
  25. }
  26. return literal;
  27. }, uri:function (value) {
  28. return {id:value.value};
  29. }, bnode:function (value) {
  30. return {id:"_:" + value.value};
  31. }, "http://www.w3.org/2001/XMLSchema#int":function (value) {
  32. return parseInt(value.value);
  33. }, "http://www.w3.org/2001/XMLSchema#integer":function (value) {
  34. return parseInt(value.value);
  35. }, "http://www.w3.org/2001/XMLSchema#long":function (value) {
  36. return parseInt(value.value);
  37. }, "http://www.w3.org/2001/XMLSchema#float":function (value) {
  38. return parseFloat(value.value);
  39. }, "http://www.w3.org/2001/XMLSchema#double":function (value) {
  40. return parseFloat(value.value);
  41. }, "http://www.w3.org/2001/XMLSchema#boolean":function (value) {
  42. return !value || value == "false" || value == "0" ? false : true;
  43. }}, _datatypeSerializers:[new dojo.data.RdfDatatypeSerializer(Number, Number.toString, "http://www.w3.org/2001/XMLSchema#float"), new dojo.data.RdfDatatypeSerializer(Boolean, Boolean.toString, "http://www.w3.org/2001/XMLSchema#boolean")], _findDatatypeSerializer:function (value) {
  44. var length = this._datatypeSerializers.length;
  45. for (var i = 0; i < length; i++) {
  46. var datatype = this._datatypeSerializers[i];
  47. if (value instanceof datatype.type) {
  48. return datatype;
  49. }
  50. }
  51. }, _toRDFValue:function (value) {
  52. var rdfvalue = {};
  53. if (value.id) {
  54. if (value.id.slice(0, 2) == "_:") {
  55. rdfvalue.type = "bnode";
  56. rdfvalue.value = value.id.substring(2);
  57. } else {
  58. rdfvalue.type = "uri";
  59. rdfvalue.value = value.id;
  60. }
  61. } else {
  62. if (typeof value == "string" || value instanceof String) {
  63. rdfvalue.type = "literal";
  64. rdfvalue.value = value;
  65. if (value.lang) {
  66. rdfvalue["xml:lang"] = value.lang;
  67. }
  68. } else {
  69. if (typeof value == "number") {
  70. value = new Number(value);
  71. } else {
  72. if (typeof value == "boolean") {
  73. value = new Boolean(value);
  74. }
  75. }
  76. var datatype = this._findDatatypeSerializer(value);
  77. if (datatype) {
  78. rdfvalue = {"type":"typed-literal", "datatype":datatype.uri, "value":value.toString()};
  79. } else {
  80. rdfvalue = {"type":"literal", "value":value.toString()};
  81. }
  82. }
  83. }
  84. return rdfvalue;
  85. }, _setupSaveRequest:function (saveKeywordArgs, requestKw) {
  86. var rdfResult = {"head":{"vars":["s", "p", "o"]}, "results":{"bindings":[]}};
  87. var resources = [];
  88. for (var key in this._deleted) {
  89. resources.push(key);
  90. }
  91. rdfResult.results.deleted = resources;
  92. for (key in this._changed) {
  93. var subject = this._toRDFValue(this.getIdentity(key));
  94. var attributes = this._changed[key];
  95. for (var attr in attributes) {
  96. var predicate = {type:"uri", value:attr};
  97. var values = attributes[attr];
  98. if (!values.length) {
  99. continue;
  100. }
  101. var rdfvalues = [];
  102. for (var i = 0; i < values.length; i++) {
  103. var rdfvalue = this._toRDFValue(values[i]);
  104. rdfResult.results.bindings.push({s:subject, p:predicate, o:rdfvalue});
  105. }
  106. }
  107. }
  108. var oldRegistry = dojo.json.jsonRegistry;
  109. dojo.json.jsonRegistry = this._jsonRegistry;
  110. var jsonString = dojo.json.serialize(rdfResult);
  111. dojo.json.jsonRegistry = oldRegistry;
  112. requestKw.postContent = jsonString;
  113. }, _resultToQueryMetadata:function (json) {
  114. return json.head;
  115. }, _resultToQueryData:function (json) {
  116. var items = {};
  117. var stmts = json.results.bindings;
  118. for (var i = 0; i < stmts.length; i++) {
  119. var stmt = stmts[i];
  120. var subject = stmt.s.value;
  121. if (stmt.s.type == "bnode") {
  122. subject = "_:" + subject;
  123. }
  124. var attributes = data[subject];
  125. if (!attributes) {
  126. attributes = {};
  127. data[stmt.s] = attributes;
  128. }
  129. var attr = attributes[stmt.p.value];
  130. if (!attr) {
  131. attributes[stmt.p.value] = [stmt.o];
  132. } else {
  133. attr.push(stmt.o);
  134. }
  135. }
  136. return items;
  137. }});
  138. dojo.declare("dojo.data.RhizomeStore", dojo.data.RdfStore, {initializer:function (kwArgs) {
  139. this._serverQueryUrl = kwArgs.baseUrl + "search?view=json&searchType=RxPath&search=";
  140. this._serverSaveUrl = kwArgs.baseUrl + "save-metadata";
  141. }, _resultToQueryMetadata:function (json) {
  142. return json;
  143. }, _resultToQueryData:function (json) {
  144. return json;
  145. }, _setupSaveRequest:function (saveKeywordArgs, requestKw) {
  146. requestKw.url = this._serverSaveUrl;
  147. requestKw.method = "post";
  148. requestKw.mimetype = "text/plain";
  149. var resources = [];
  150. for (var key in this._deleted) {
  151. resources.push(key);
  152. }
  153. var changes = {};
  154. for (key in this._changed) {
  155. if (!this._added[key]) {
  156. resources.push(key);
  157. }
  158. var attributes = this._changed[key];
  159. var rdfattributes = {};
  160. for (var attr in attributes) {
  161. var values = attributes[attr];
  162. if (!values.length) {
  163. continue;
  164. }
  165. var rdfvalues = [];
  166. for (var i = 0; i < values.length; i++) {
  167. var rdfvalue = this._toRDFValue(values[i]);
  168. rdfvalues.push(rdfvalue);
  169. }
  170. rdfattributes[attr] = rdfvalues;
  171. }
  172. changes[key] = rdfattributes;
  173. }
  174. var oldRegistry = dojo.json.jsonRegistry;
  175. dojo.json.jsonRegistry = this._jsonRegistry;
  176. var jsonString = dojo.json.serialize(changes);
  177. dojo.json.jsonRegistry = oldRegistry;
  178. requestKw.content = {rdfFormat:"json", resource:resources, metadata:jsonString};
  179. }});