跳至内容

XQuery/Wikibook 代码链接列表

来自维基教科书,为开放世界提供开放书籍

本维基教科书包含指向在大学服务器上执行的代码示例的链接。我们需要跟踪所有链接,以确保它们保持活动状态,以便所有链接都可以由测试平台执行,并支持目录结构或文件名更改。

该脚本类似于开头处的索引脚本,用于获取书籍中的页面列表。然后它获取每个页面并提取其中 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>


华夏公益教科书