XQuery/Wikibook 代码链接列表
外观
< XQuery
本维基教科书包含指向在大学服务器上执行的代码示例的链接。我们需要跟踪所有链接,以确保它们保持活动状态,以便所有链接都可以由测试平台执行,并支持目录结构或文件名更改。
该脚本类似于开头处的索引脚本,用于获取书籍中的页面列表。然后它获取每个页面并提取其中 href 包含“.xq” 的锚点标签。这有点宽泛,包括一些误报。维基教科书页面链接来自页面标题,实际 URL 列出在页面标题下方。
xquery version "1.0";
import module namespace httpclient = "http://exist-db.org/xquery/httpclient";
declare option exist:serialize "method=xhtml media-type=text/html";
let $book:= request:get-parameter("book","XQuery")
let $base := "https://wikibooks.cn"
let $indexPage :=httpclient:get(xs:anyURI(concat($base,"/wiki/Category:",$book,"?x")),false(),())/httpclient:body/*
let $pages := $indexPage//div[@class="mw-category"]//li
return
<html>
<head>
<title>Index of {$book} code samples</title>
</head>
<body>
<h1>Index of {$book} code samples</h1>
<ul>
{
for $letter in distinct-values($pages/upper-case(substring(substring-after(.,'/'),1,1)))[string-length(.) = 1]
for $page in $pages[starts-with(upper-case(substring-after(.,'/')),$letter)]
let $title := string($page)
let $url := concat($base,$page/a/@href)
let $refs := httpclient:get(xs:anyURI($url),false(),())/httpclient:body//a[contains(@href,".xq")]
order by $title
return
if (exists($refs))
then
<div>
<li><a href="{$url}">{$title}</a>
<ul>
{for $ref in $refs
return
<li> {string( $ref /@href)} </li>
}
</ul>
</li>
</div>
else ()
}
</ul>
</body>
</html>