我有一个任务: 将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
答案 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>