專案程序-20090419
功能性規格
故事1:「要能夠辨識登入的帳號跟人名啊!」
故事2:「這個帳號要跟主系統相同,不需要再登入了。」
故事3:「選擇的標註要能儲存並顯示。」
繼之前的前端介面,加入一些跟資料庫相關的功能。之後再慢慢加上其他功能吧,如果物件導向架構寫得好的話,是不怕多一個屬性或少一個屬性的!
技術性規格
你有一個標註工具了!這個標註工具能夠得知「現在的網域(host)」、「這個網址(uri)」、「使用者的帳號(String userID)」、「使用者的名字(String userName)」、「選擇標註的範圍(Array highlightScope)」,但他還不能跟資料庫互動。
首先我們要先訂出資料庫中的架構。每個資料表前面應該都要有prefix_name,只是我們此時先省略。
使用者權限相關的資料表:
host
(主機名+網域,區隔權限的重要根據)
SERIAL id (PrimaryKey, IndexKey)
text host NOT NULL
預設的值
array(0, "*")
user
(使用者,要注意到不同主機上可以有相同名稱的使用者,還好他們不會因此搞混。)
預設的值
array(0, 0, "root", "KALS ROOT", "kalsroot", 0) //管理者
role
(設定可以執行的角色)
預設的值
array(0, "root") //可以作設定所有人的權限
array(1, "administrator") //可以設定相同主機使用者的權限
array(2, "user") //只能發言
array(3, "guest") //連發言都不行了
group
(使用者的群組)
user2group
(使用者與群組的關聯)
policy
(權限設定,根據網域、)
SERIAL id (PrimaryKey)
int resource_type DEFAULT 0 //0=groud.id; 1=user.id
int resource_id (ForeignKey 依據上面的規則決定)
text privilege DEFAULT ""
int action DEFAULT 0
//0=不可讀取其他人的annotation
//1=不可寫入,但是可以讀取annotation
//2=不可寫入也不可讀取……也就是暫時鎖定某些頁面
boolean enable DEFAULT TRUE
(待新增)
與anntation相關的資料表:
annotation
(記錄一筆一筆的標註)
annotation_scope
(記錄每筆標註的範圍)
SERIAL id (PrimaryKey)
int annotation_id (ForeignKey annotation.id) NOT NULL
int start NOT NULL
int end NOT NULL
annotation_class
(標註的類型)
SERIAL id (PrimaryKey)
text class NOT NULL
預設的值
array(0, highlight)
(其他要新增什麼……請看設定檔!)
annotation_uri
(標註的網址)
annotation_search
(全文檢索用,詳細設定參考此網頁)
SERIAL id (PrimaryKey) (ForeignKey annotation.id)
tsvector comment_fti //評論的內文
(待新增)
(尚未完成,以下只是草稿!)
你會有一個網頁,網頁內只有特定部份需要進行標註。你可以輸入DOM指定物件來選擇要標註的範圍。
範圍內每一個字都成為標註的單位,註明位置的ID編號,除了空格之外。
承上,但是英文的話則必須以空格切割,一個單字是一個標註的單位。
選擇取完之後,選取範圍最後一個字下方會顯示一個選單,可供讀者選擇接下來的動作。
請設計一個「Highlight」的按鈕,讀者按下去之後會對伺服器送出讀者選擇的範圍,也就是起始的ID位置跟結束的ID位置,請以二維陣列的方式送出,以供未來可以支援多範圍的選取。
JavaScript的檔案將以PHP寫成,以便支援後端的操作。
JavaScript必須實作一個測試的機制,像是PHPUnit那樣的統一測試工具。PHPUnit的功能在書中有詳述。 (未完成)
設計階段
本階段以功能實做為主,介面設計待之後專案程序再進行。
建構階段
準備一個測試用的網頁。參考來源:2009/04/10 中華副刊。
建構階段中參考的網址如下:
PostgreSQL China:PostgreSQL 8.3 以上的中文全文索引使用介绍
(其他待補)
待辦事項 (皆完成
研讀極致軟體製程(eXtreme Programming)
把KALSJS的每個tag的class設計成具有統一的prefix吧!
來作個JavaScript的測試環境吧。由於測試方式沒辦法由程式來主動進行,所以必需要由系統指示使用者操作,然後看操作成果是否能成功。我們來寫一個簡單的範例來測測看之前的成品,看它能不能顯示出正確的座標位置吧。
結案
很遺憾的是這次比較趕著把大部分功能做完,這次階段說明並沒有很完整的文件。看完極致軟體製程之後,其實覺得這麼仔細地寫專案說明好像也頗多餘,還是用測試案例來溝通吧!
以下附件附上這次的製作成果,可以參考看看!