MarkLogic 8 对象到文档节点

MarkLogic 8 object to document-node

这是我以前遇到过很多次的问题。将数据加载到 MarkLogic 时,我无法掌握类型。

函数source.createSource需要:

  $title as xs:string,
  $dataset as xs:string?,
  $content as document-node()*

typeof(input) 表明它是一个对象。所以我需要从这个对象转到文档节点。

数据

{   "id": "123",
    "something": "yes"
}

错误

2015-08-19 09:26:35.150 Info: vriend: Status 500: JS-JAVASCRIPT: sourceId = source.createSource(title, dataset, source); -- Error running JavaScript request: TypeError: undefined is not a function

脚本

/**
 * @name vriendingest 
 * This REST extension provides SOAP service for the shipment data
 */

//declareUpdate();

var eput   = require("/MarkLogic/rest-api/lib/endpoint-util.xqy");
var link   = require("/ext/obi/lib/link-lib.xqy");
var object = require("/ext/obi/lib/object-service-lib.xqy", "/ext/obi/lib/object-lib.xqy");
var source = require("/ext/obi/lib/source-lib.xqy");

function put(context, params, input) {
   xdmp.log('input ' + typeof(input));

   var data = input.toObject();

   xdmp.log('data ' + typeof(data));
   xdmp.log(data.length);

   testing  = source.buildUri('takethisuri');
   title    = 'test';
   source   = data;
   dataset  = "cswifi";

   sourceId = source.createSource(title, dataset, source);

   xdmp.log(sourceId);

   response = '{success: "or something"}';
   context.outputTypes = ["application/xml"];
   context.outputStatus = [200, "OK"];

   return response;
}

// Main
exports.PUT = put;

我认为这一行隐藏了您之前对 source 的定义:

source   = data;

我建议将 var 放在应该是函数局部变量的前面。使用带有此类额外变量的 JSHint 验证您的代码,并在函数内部使用 'use strict'; 告诉我 source 正在重新定义。我不认为你想用 data..

的值隐藏对 source-lib 的要求

HTH!