xcnbotXiayicidenglu Category Navigation roBOT)是一個添加和維護各類別分類樹導航的機器人,由User:下一次登錄操作,已於2007年5月6日被批准成為正式機器人。xcnbot分析維基百科的分類結構,並使用{{catnav}}模板在每一個類別頂端說明其母類別的分類樹,例如對Category:亞洲國家,顯示:

頁面分類 > 地理 > 國家 > Xcnbot
頁面分類 > 地理 > 大洲 > 亞洲 > Xcnbot

原理和程序

分兩步進行,首先是自上而下的添加,然後是自下而上的檢查和刪除。

  • 第一部分源代碼:/1 11:54 2007年3月31日 (UTC)更新
  • 第二部分源代碼:/2 11:54 2007年3月31日 (UTC)更新


自上而下

從根目錄:「頁面分類」開始,廣度優先的遍歷所有子類別,使用遞歸方式處理每一個類別:

  • 設定
    • 類別樹深度(「cDepth」)=5
    • 修改計數器(「cChange」)=0
  • 初始化
    • 當前類別名(「vCCName」)=「頁面分類」或任一類別(對其子類別進行處理)
    • 當前母類別陣列(「aCCTree[100]」)= NA
    • 母類別樹深度(「aCCDepth」)= 0
  • 遞歸
    • 輸入:vCCName,aCCMother,aCCDepth
    • 賦值:aCCTree[aCCDepth]=vCCName
    • 檢查是否有重複類別名,如果有,則報錯停止。
    • 所有子類別:
      • 連接並提取編輯內容,檢查是否有aCCTree[]的catnav導航,如果否:
        • 加入catnav
        • 修改計數器加1
    • 所有子類別:
      • vCCName=子類別名,調用遞歸。

自下而上

  1. 連結所有頁面中的category空間頁面: http://zh.wikipedia.org/w/index.php?title=Special%3AAllpages&from=&namespace=14
  2. 對每一個類別,統計{{catnav}}模板的個數
    1. 對於每一個{{catnav}}模板,從後到前檢查是否正確
      1. 如果正確,檢查下一個模板
      2. 如果錯誤,刪除該模板
  3. 下一個類別,如果超過三個模板,則刪除剩下的所有模板。

檢查模板的細節:

  1. 從後到前讀取{{catnav}}模板中的各類別名
  2. 檢查當前類別是否被分類於上一級類別中,如果沒有,則報錯結束。如果有,則進入上一級類別,然後重複。

進度和問題

  • 目前已經完成1.1部分。
    • 調試約500次編輯,尚未發現異常。11:13 2007年3月13日 (UTC)
  • 完成第二部分,並調試成功。正式申請機器人。11:53 2007年3月31日 (UTC)
  • 被批准。2007年5月6日 (日) 11:39 (UTC)
  • 發現循環分類bug,修改完成。2007年5月7日 (一) 12:32 (UTC)
  • 同一個類別使用catnav模板次數過多,已經有超過10個,影響美觀和實用性,計劃修改源代碼。2007年5月14日 (一) 04:13 (UTC)

日誌

  • 2007年5月7日 (一) 04:48 (UTC):運行第一部分。
    • 2007年5月7日 (一) 11:58 (UTC)停止運行,發現一個bug,在類別循環(「美國電視劇」「美國影集」循環)時不能跳出。