研究報告
 
 
[資料的匯入與匯出]

資料匯入方法


當資料庫建立完畢並且開始使用之後,可以發現資料庫裡面的資料越來越多,基於安全的考量,這時就需要將資料轉入及轉出進行備份動作。當然我們不可能一筆筆去將資料用手動輸入或手動輸出,而且有的時候還需要與不同資料庫做資料同步的動作或資料轉移的動作,因此我們必須了解如何進行資料的匯入與匯出動作。

資料匯入的方法有很多種,其中最常用的就是 Bulk Copy Protocol(BCP),可以很快速地將那些文字檔儲存的資料轉入現行資料庫中,最著名的應該是MS SQL Server和Sybase Adaptive Server。

另一種資料轉入的方法為透過轉換程式來轉換不同檔案格式的資料庫檔案,這種方式可將資料庫透過轉換程式,轉入新的資料庫中,MS Access 就是此類最典型的例子,我們可以透過 Access 的資料匯入精靈,將資料匯入 Access 的 mdb 檔案中。例如早期的 Dbase的 dbf 檔案就可以此種方式匯入Access檔案中。

還有一種方式是將資料匯出,使其成為其它資料庫可接受之特定格式的檔案,然後再到新的資料庫系統中將資料匯入,最常見到的方式就是將資料匯出成為一個文字檔,檔案中的欄位用逗號或空白分隔開,然後在新的資料庫系統將此文字檔資料匯入。

最新的資料轉換方式是透過XML敘述展現資料庫中的資料。XML語言提供比HTML語言更高的彈性,例如我們無法自訂HTML的標籤(tag),但是在XML中,卻可以依照自已的需求來訂定XML的標籤,這樣就可以將資料庫中的資料以更有效率及彈性的方式展現出來,而不需要只為了取得一些資料,就得先建立一堆的資料庫連結及宣告。目前一般常見的RDBMS幾乎都有以XML輸出入資料的功能。

 

MySQL資料匯入的方法


以批次模式匯入資料
要增加資料至資料庫必須先進入MySQL monitor,然後執行INSERT敘述來插入資料,現在學另一種方式來加入資料,是以批次模式輸入資料。
首先,要執行之插入資料的SQL敘述存成一個文字檔。
USE Meet_A_Geek;
INSERT INTO Customers (Customer_ID, Last_Name)
VALUSE(NULL,"Block");
INSERT INTO Customers (Customer_ID, Last_Name)
VALUSE(NULL,"Newton");
INSERT INTO Customers (Customer_ID, Last_Name)
VALUSE(NULL,"Simmons");

然後儲存至New_Data.sql這個檔案中,接著切換至mysql目錄中,然後輸入下面指令:
'bin/mysql –p < /home/mark/New_Data.sql'
可將位於/home/mark/目錄下的 New_ Data.sql 這個儲存一連串SQL敘述的檔案,送給MySQL去執行,比 MySQL monitor 一筆筆輸入來的方便。

利用mysqlimport
在mysql/bin目錄下有一個程式檔名為 mysqlimport,它是一命令列模式下的工具程式,經由設定相關的選項,可以將特定格式的文字檔資料匯入指定的資料表中。其語法敘述為:
mysqlimport (option1 option2…………)
這個工具是使用文字檔名作為資料表名稱,文字檔中的資料型別及欄位數目也要跟要預備匯入的資料表數量相符,否則會發生錯誤而造成無法匯入資料的情形。所以用 mysqlimport 匯入資料之前一定要確定文字檔內的資料格式是正確無誤的。
範例:
假設現在要從試算表軟體中匯出資料至一個逗號分隔的文字檔案中,且文字檔中每個欄位的資料要求必須以雙引號框起來,而每個欄位資料之間則以逗號分隔開,
bin/mysqlimport –prl –fields-enclosed-by="-fields-terminiated-by=, Meet_A_Geek Orders.text
選項 p是要求你先通過 MySQL 登入帳號及密碼的認證。選項 r 會令MySQL在匯入文字檔中的資料和要匯入資瞪表中資料相同,則以前者取代後者;若欲設定這個選項你要先確定文字檔中的為最新資料。而選項 l 則是告訴 MySQL 在轉入資前,先鎖定資料表以防止資料匯入過程中,有人來修改資料。
[SUMO Ontology]

SUMO 是Suggested Upper Merged Ontology的縮寫,這個ontology是IEEE Standard Upper Ontology Working Group所創造的
發展這個omtology的目的:
The goal of this Working Group is to develop a standard upper ontology that will promote data interoperability, information search and retrieval, automated inferencing, and natural language processing.
ontology的用途:
An ontology is similar to a dictionary or glossary, but with greater detail and structure that enables computers to process its content.
ontology的組成:
An ontology consists of a set of concepts, relations, and axioms that formalize a field of interest.
upper ontology的用途:
An upper ontology is limited to concepts that are meta, generic, abstract or philosophical, and hence are general enough to address (at a high level) a broad range of domain areas.

[不是很了解]Concepts specific to particular domains are not included in an upper ontology, but such an ontology does provide a structure upon which ontologies for specific domains (e.g. medicine, finance, engineering, etc.) can be constructed.
ontology目的:
Ontologies describe a shared and common understanding of a domain that can be communicated between people and heterogeneous software tools.
發展並使用ontology的目標:
*To facilitate sharing/exchange of information and knowledge
*To support integration of tools
*To provide the same perspectives with collaborating teams and tools,
*To create a common vocabulary,
To describe unambiguous definitions that both computers and teams can understand.
ontology的描述語言
A number of ontology languages have been developed with a variety of expressivity and robustness, including KIF [Genesereth and Fikes, 1992], Ontolingua [Farquhar,Fikes, and Rice, 1997], and DAML+OIL [McGuinness etal., 2002]. DAML+OIL has its roots in description logic and has been proposed as starting point for the W3C Semantic Web Activity Ontology Web Language (OWL).
什麼是Upper Ontology:
Upper ontologies define top level concepts such as Processes,Objects, and Topological concepts from which more specific classes and relations are defined,including Physicochemical Processes, Substances(such as Material, Material Flows), Devices (such as Equipment Item, Equipment Connection), Organizational Tasks, Plant Operation.
[WHO,WHEN,WHAT,WHERE]

先將事情以這四個問句分類,建置這四個問句的資料,簡單的剖析詢問
假設只侷限於大同大學這個領域去討論,將問題作適度的歸類
我並沒有對中文句子最深入的剖析,只是根據WHO,WHEN,WHAT,WHERE的分類,取出前後的字句,將這些字句做簡單的比對
範例網址:
簡單的做法 
[使用prolog存取Triple]
 

目的:

我們打算使用Sesame的資料庫結構作為我們儲存大量資料所使用的資料庫,資料的匯入部分利用Sesame所提供的介面將資料存入資料庫,後端部分採prology的推理實作存取資料庫的資料

 

初步規劃:


資料表的分析,分析資料庫所具有的欄位,我使用tuple的方式表示
triples(id,subject,predicate,object,explicit).
subpropertyof(sub,super).
subclassof(id,namespace,localname).
resources(id,namespace,localname).
repinfo(infokey,infovalue).
rawtriples(id,subjNs,subLname,predLNs,predLname,objNs,objLname,objLang,objLabelKey,objLabel).
range(property,class).
property(id).
proper_instanceof(inst,class).
newtriples(id,subject,predicate,object,explicit).
newgroundedtriples(id).
namespaces(id,prefix,name,userDefined,export).
literals(id,datatype,language,labelkey,label).
instanceof(inst,class).
inferred(id,subject,predicate,object,explicit).
groundedtriples(id).
expiredtriples(id).
doman(property,class).
direct_subpropertyof(sub,super).
direct_subclassof(sub,super).
depend(id,dep1,dep2).
class(id).
allnewtriples(id,subject,predicate,object,explicit).
allinferred(id,subject,predicate,object,explicit).
addedtriples(id,subject,predicate,object,explicit).
共25個Table
[sesame問題簡化]

使用RQL為我們的標準查詢工具,套用sesame所提供的RQL功能到資料庫中取資料
例如下面這句RQL的語法,組成下面紅色的句法餵入sesame,藉由sesame找出答案
select X, @P
from {X} @P {Y}
where Y like 'Pablo'
X is the subject, @P the predicate, and Y the object.

http://140.129.25.117:8080/sesame/servlets/performRqlQuery?format=html&repository=rdbms-rdfs-db&query=select+X%2C+%40P+from+%7BX%7D+%40P+%7BY%7D+where+Y+like+%22Pablo%22

利用此法與prolog做結合,資料推理的部分交給prolog,最後要取出資料時使用此方式得到資料庫中的資料
為何如此做:
之前的做法本來是想利用prodata直接存取sesame資料庫中的資料,但是一直找不出它們之間的關係,唯一找出來的關係如下面粗體字所示:
資料表中的teiples資料表中的subject,predicate,和object所代表的數字都是指到resources這個資料表中的ID欄位,根據resources這個資料表中的ID欄位可以找到subject,predicate,和object的namespace,找resources.namespace=namespaces.Id,從namespaces這個資料表中可以得到所使用的namespace的名字,欄位為namespaces資料表中的localname。假若object的值為負,則要去找literals這個資料表的label欄位,去對應它的值
我大概將isa_slot改寫如下:
isa_slot(A,F,V):-
resources(Id,Namespace,A),
namespaces(Namespace,Prefix,_,_,_),
F=Prefix,assert(resId(Id))->
resId(Id),
retractall(resId),
triples(_,_,Id,Object,_),
literals(Object,_,_,V,_)
;V is 0.

範例:isa_slot('last_name','cult',A).
但是我不知匯入的資料如何建立他們的架構,class的表格中並沒有出現任何資料,所以不知frame的類別應該對應到哪個class,所以暫時將得到的namespace當成frame,但是應該不正確,但我又找不到設的欄位,有待解決

所以就先去研究RQL的語法看看到底在做什麼,並去了解語法(目前還不太清楚),但是發現一件事,好像我們可以利用網址的方式將循位的問句送入sesame中,假設這已經是使用者最終想要的到的答案,所以不需再去考慮prolog之後還要做什麼動作,直接將網頁叫起來將參數傳入之後就沒事了。
本來要去了解一堆雜亂不易看懂的數字,現在應該只要設法了解RQL就行了(至少RQL的語法可以找到文章,總比自己摸索不熟悉的資料庫快的多),因為這個表格是sesame自己產生出來的東西,並不容易瞭解其中的關聯,RQL的文章比較容易被找到
所以目前所要做的只是如何將適當的問句丟給sesame,使用RQL的語法

select X,@P,Y 選擇你所要查詢的資料
from {X}@P{Y} 從這三個關係中挑出(X is the subject, @P the predicate, and Y the object.)
[Chimaera心得筆記]

資料來源http://www.ksl.stanford.edu/software/chimaera/
Chimaera是一個系統軟體,可以讓使用者創造和維護分散在網路上的ontology,它有兩個功能,將多個ontology合併在一起,診斷個別或復合性的ontology  
[指標函數的使用]

#include

int addN(int,int);
int mulN(int,int);
void Show(int (*)(int,int),int);

void main(int argc,char *argv[])
{
Show(addN,6);
Show(mulN,6);
}

int addN(int p,int q){

return p+q;
}

int mulN(int p,int q){

return p*q;
}

void Show(int (*l)(int,int),int v){
printf("%d",l(v,v));
}

上面是一個簡單的範例,其中show函數的第一個函數使用到指標的方式,使用指標的方式指定要使用哪一個函數
[使用遞迴方式撰寫程式的優缺點]

大部分的專家系統程式都喜歡使用遞迴的方式去定義自己的規則,Prolog就是一個這樣的程式。一般使用遞回的方式撰寫出來的程式會比單純使用迴圈所撰寫出來的程式需要更多的電腦資源,因為使用遞迴的方式撰寫程式需要使用到大量的堆疊空間,也會嚴重使用CPU,所以效能上並不是很好。
在正常情況之下使用單純的迴圈來寫程式會比使用遞迴的方式執行速度快一些,但是使用迴圈所撰寫出來的程式沒有使用遞迴方式來的簡潔而易懂,這也就是專家系統程式要使用遞迴的方式去處理問題。
或許使用prolog來撰寫程式會比不上一般程式執行的速度,原因是Prolog是採用遞迴的方式來完成程式設計,所以執行時間要花的較長較久這似乎也是不容懷疑的事實。
現在所要考慮的事情只剩兩點,根據這兩點來決定是否使用Prolog來完成
1.從設計者的角度:假設我們希望快速且的完成,那麼我們可以繼續使用prolog,因為我們只要指派適當的規則與資料,prolog就會將這些資料以這些規則加以處理,而這些規則的處理是用遞迴的方式來對資料作處理,所以這些規則容易撰寫,程式碼不多但可以達到預期的效果。
2.從使用者的角度:使用者當然希望程式執行的速度越快越好,不然為什麼他們要把機器的等級提昇,一部486的機器或許就能把程式執行的很好,或許執行的時間比較久一點,如果從使用的觀點來看,我們是不是應該把所有的遞迴式都取消掉改成迴圈,來增加執行速度。
或許一般人都常常會拿執行時間和所佔的程式空間拿來做比較,一般執行速度較快者都需要比較多的空間(執行程式時所需的記憶體空間),以空間換取時間(執行時間)。但是到底是執行時間重要還是程式設計的時間重要,是程式碼所佔的大小重要還是執行程式時所使用的空間重要,這也是我們該確定的因素之一。
經過以上的考慮之後,再決定你該怎麼做

    全站熱搜

    CJY0503 發表在 痞客邦 留言(0) 人氣()