XQuery的。错误:未知功能

时间:2015-05-17 20:52:01

标签: function xquery

我有一个任务: 将dblp-excerpt的共同作者图G定义为将所有作者都作为节点的无向​​图,这样,当且仅当a和b一起编写出版物时,G中的作者a和作者b之间存在边缘。

将两个作者a和b之间的距离定义为G中a和b之间最短路径的长度。因此,一起出版的作者距离为1.

此外,如果a和b没有一起发表但是它们都与c一起发布,那么a和b之间的距离是2。编写一个XQuery程序,为每对作者计算x和y 6 = x距离 使用以下输出格式在x和y之间。

我写了一段代码,但它没有用。我确定,这是一个非常简单的错误,但我无法找到它。

我有一个错误:错误:

  

停在C:/Users/Zhanna/Desktop/Test/test_3.xq,28/44:[XPST0017]   未知功能' local:getAvailablePathSizes'。

它强调了第28行中参数列表的开头,即:

///////////////////////  IMAGESLOADED & SHUFFLE  //////////////////////

var ImageLoad = (function( $, imagesLoaded ) {

  var $shuffle = $('.masonry-gallery'),
      $filterOptions = $('.filter-list'),
      $imgs = $shuffle.find('.gallery-photo img'),
      $loader = $('#loader'),
      sizer = document.getElementById('#shuffle-sizer'),
      imgLoad,

  init = function() {

      // None of these need to be executed synchronously
    setTimeout(function() {
      setupSorting();
    }, 10);

    // Create a new imagesLoaded instance
    imgLoad = new imagesLoaded( $imgs.get() );

    // Listen for when all images are done
    // will be executed even if some images fail
    imgLoad.on( 'always', onAllImagesFinished );
  },

  onAllImagesFinished = function( instance ) {

    if ( window.console && window.console.log ) {
      console.log( instance );
    }

    // Hide loader
    $loader.addClass('hidden');

    // Adds visibility: visible;
    $shuffle.addClass('images-loaded');

    // Initialize shuffle
    $shuffle.shuffle({
      sizer: sizer,
      itemSelector: '.gallery-photo'
    });
  },

       // Set up button clicks
  setupSorting = function() {
    var $btns = $filterOptions.children();
    $btns.on('click', function() {
      var $this = $(this),
          isActive = $this.hasClass( 'active' ),
          group = isActive ? 'all' : $this.data('group');

      // Hide current label, show current label in title
      if ( !isActive ) {
        $('.filter-list .active').removeClass('active');
      }

      $this.toggleClass('active');

      // Filter elements
      $shuffle.shuffle( 'shuffle', group );
    });

    $btns = null;
  };

  return {
    init: init
  };
}( jQuery, window.imagesLoaded ));

$(document).ready(function() {
    ImageLoad.init();
}); 

我也使用Saxon验证查询,它也提供了这样的消息:

  

错误XPST0008:未解析的变量$ count静态引用   查询中的错误

请帮我解决。

return
local:getAvailablePathSizes($graph,$current,$target,$visitedList,$count+1)

这是XML文件 http://www.filedropper.com/dblp

1 个答案:

答案 0 :(得分:0)

第一个问题是,你在<ee>元素内的XQuery代码周围省略了大括号,因此代码的大部分内容尚未被评估(而是被解释为文本)。这导致了一个几乎没有用的错误消息,指出了第二个问题:您必须在“普通”XQuery语句之前(在查询体中)在所谓的prolog中定义函数。

declare function local:getAvailablePathSizes
 ($graph, $start, $target, $visitedList, $count)
{
  let $cos:=$graph/node[@name=$start]/edge/@to return
  let $listOfDistances:=(
    for $current in $cos
    return
    if($current=$target) then $count+1 else
      if (empty(visitedList[.=$current])) then(
        let $visitedList:=insert-before(data($current), 0, $visitedList)
        return local:getAvailablePathSizes($graph,$current,$target,$visitedList,$count+1)
      ) else()
  )
  return $listOfDistances
};

<ee>{
let $graph:=(
  <graph>{
    for $a in distinct-values(//author)
    let $publications:=/dblp/*[author=$a]
    order by $a
    return
    <node name="{$a}">
    {
      let $co:=$publications/author[(.)!=$a] return
      for $distinctCo in distinct-values($co) return
      <edge from="{$a}" to="{$distinctCo}"/>
    }
    </node>
  }</graph>
 ) return

<distances>
{
  for $node in $graph/node return
  for $to in $graph/node[@name!=$node/@name]
    let $dist:=min(local:getAvailablePathSizes($graph, $node/@name, $to/@name, null, 0))
    return
    if($dist>0) then(
      <distance
        author1="{$node/@name}"
        author2="{$to/@name}"
        distance="{$dist}"/>)
        else()
}
</distances>
}
</ee>