跳至內容

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://wikibook.tw"
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>


華夏公益教科書