Professional Documents
Culture Documents
Abstrak
1. Pendahuluan
Open Archives Initiative adalah suatu gerakan yang mengembangkan dan
mempromosikan suatu standar interoperabilitas yang bertujuan memfasilitasi
diseminasi content yang efisien. Open Archives Initiative berakar pada usahanya untuk
mempercepat akses pada arsip pracetak (e-print) yang bertujuan untuk memudahkan
availibilitas terhadap komunikasi akademis. Framework dan standar yang
dikembangkan untuk mendukung usaha ini tidak tergantung pada tipe content yang
ditawarkan maupun mekanisme ekonomis/bisnis yang terkait dengan content ini, dan
membuka akses yang luas terhadap material digital dalam bentuk apapun. Sebagai
hasil dari inisiatif ini adalah suatu protokol standard yang bertajuk OAI Protocol for
Metadata Harvesting (OAI-PMH). Protocol ini mendefinsikan suatu aturan komunikasi
untuk desimenasi content, di mana service provider harus mengikuti standar ini jika
ingin meng-harvest sejumlah metadata pada suatu data provider yang menyediakan
akses terhadap contentnya melalui protocol OAI-PMH. Sampai saat ini telah banyak
digital library yang membuka akses terhadap metadata mereka dengan menerapkan
data provider menggunakan protocol OAI-PMH.
Protokol OAI-PMH pada dasarnya terdiri dari dua bagian/peer, yaitu data provider dan
service provider. Data provider me-maintain satu atau lebih repository (web server)
yang mendukung protocol OAI sebagai fasilitas untuk meng-ekspos metadata tentang
content mereka. Sedangkan service provider melakukan OAI protocol request kepada
data providers dan menggunakan metadata tersebut untuk membangun suatu value-
added service. Client melakukan akses terhadap service provider (umumnya dengan
antar muka search) dan kemudian melakukan direct access kepada content yang
ditunjukkan oleh metadata yang bersangkutan.
Data Provider
Data Provider
Indonesia Digital Library Network, sebagai Digital Library Network yang pertama di
Indonesia, saat ini tengah mengembangkan implementasi OAI Protocol untuk
jaringannya. Dilatarbelakangi buruknya akses internet seperti diuraikan di atas, KMRG
sebagai inisiator IDLN mengembangkan suatu extension terhadap protocol OAI, yaitu X-
OAI, yang menambahkan support untuk me-lokalkan content dan Protocol for Metadata
Posting (OAI-PMP). Protokol ini pula memberikan tambahan support untuk offline
harvesting & posting, yaitu melalui CD.
Verifikasi terhadap protocol ini perlu dilakukan, mengingat bahwa pada distribusi
metadata dapat dimungkinkan adanya perubahan yang terjadi terhadap content,
apakah content tersebut pindah lokasi, diupdate ataupun dihapus. Untuk selalu
memberikan data yang actual mengenai content, dilakukan sinkronisasi antara data
provider dan service provider. Pada proses sinkronisasi tersebut, perlu dianalisis semua
kemungkinan yang terjadi khususnya apabila terjadi dua proses sinkronisasi yang
berlawanan arah (satu harvesting dan satunya lagi posting) berlangsung terhadap
metadata yang sama, sehingga tidak terjadi deadlock ataupun duplikasi metadata
pada service provider.
ServiceProvider
Reads
Client Network
+sendResult()
+GetRecord()
+query() +send()
+Identify()
* +ListIdentifiers() +receive()
Harvests +ListMetadataFormats()
+ListRecords() 1
+ListSets()
1
DataProvider Contains
Posts
createRequest(Connect)
Send(..)
Receive(..)
createRespond(OK)
Send(..)
Receive(..)
createRequest(PutRecord)
Send(..)
Receive(..)
createRespond(ACK)
Send(..)
Receive(..)
createRequest(PutFileFragments)
Send(..)
Receive(..)
createRespond(ACK)
Send(..)
Receive(..)
createRequest(disconnect)
Send(..)
Receive(..)
deleteSession
createRespond(OK)
Send(..)
Receive(..)
S0 S4
PutRecord
S1 S2 S3 S7
S5
PutRecord
PutFileFragment
S6
S2
SaveRecord
S1 S4 S3 S7
S5
MergeFileFragments
S6
Closing
Pada tugas ini, batasan masalah yang diverifikasi hanya pada 6 command yang sudah
didefinisikan (lihat lampiran). Keenam command tersebut adalah :
1. Connect
2. Disconnect
3. PutRecord
4. PutListRecords
5. PutFileFragment
6. MergeFileFragments
mtype={CONNECT,DISCONNECT,PUTRECORD,PUTFILEFRAGMENT,MERGEFILEFRAGMENTS,
OK,FAIL,ACK};
chan myNetwork=[0] of {mtype, short, short, short};
mtype cmd;
mtype rsp;
short state=0;
bool sent=false, received=false, changestate=false;
s1: cmd=CONNECT;
changestate=true;
goto s2;
s2: if
:: (sent==false) ->
sent=true;
received=false;
if
:: (state==0) -> myNetwork!cmd;
:: (state==1) -> myNetwork!cmd,sessid,arg1,arg2;
:: (state==2) -> myNetwork!cmd,sessid,arg1,arg2;
:: (state==3) -> myNetwork!cmd;
:: (state==4) -> myNetwork!cmd;
fi;
goto s3;
:: else ->
myNetwork!cmd;
goto s8;
fi;
s3: myNetwork?rsp,sessid,arg1,arg2;
if
:: (received==false) ->
received=true;
sent=false;
if
:: (changestate) -> state=state+1; changestate=false;
:: else -> skip;
fi;
if
:: (rsp==OK) ->
if
:: (state==1) -> goto s4;
:: (state==2) -> goto s5;
:: (state==3) -> goto s7;
fi;
:: (rsp==FAIL) -> goto s2;
fi;
:: else -> goto s8;
fi;
s4: cmd=PUTRECORD;
arg1=recid; arg2=attribs; frag=1;
changestate=true; goto s2;
s5: cmd=PUTFILEFRAGMENT;
arg1=recid; arg2=5;
if
:: (frag<=fragnum) -> frag=frag+1; goto s2;
:: else -> goto s6;
fi;
s6: cmd=MERGEFILEFRAGMENTS;
changestate=true;
goto s2;
s7: cmd=DISCONNECT;
changestate=true;
goto s2;
s8: skip;
}
proctype ServiceProvider()
{
bool sent=false, received=false;
mtype cmd, rsp;
s1: myNetwork?cmd,sessid,arg1,arg2;
if
:: (received==false) ->
received=true;
sent=false;
if
:: (cmd==CONNECT) ->
goto s2;
:: (cmd==PUTRECORD) ->
goto s4;
:: (cmd==PUTFILEFRAGMENT) ->
goto s5;
:: (cmd==MERGEFILEFRAGMENTS) ->
goto s6;
fi;
goto s2;
:: else -> goto s8;
fi;
s2: rsp=OK;
yoursess=lastsess;
/* change next session available */
lastsess=lastsess+1;
/* empty attributes, not needed yet */
arg1=0; arg2=0;
goto s3;
s3: if
:: (sent==false) ->
received=false;
sent=true;
myNetwork!rsp,yoursess,arg1,arg2;
goto s1;
:: else ->
myNetwork!rsp,yoursess,arg1,arg2;
goto s8;
fi;
s4: /* enters the data w/ unix id in the database */
data[arg1]=arg2;
file[arg1]=0;
rsp=OK; goto s3;
yoursess=sessid;
s5: /* ceritanya upload file segments, counter ajah */
file[arg1]=file[arg1]+1;
rsp=OK; goto s3;
s6: /* merge files */
printf ("\nFile ada %d segmen\n", file[arg1]);
rsp=OK; goto s3;
s7: /* disconnect */
rsp=OK; goto s3;
s8: skip;
}
init
{
atomic
{
/* metadata id 10, attr 13, 5 segments */
run DataProvider(10,13,3);
run ServiceProvider();
}
}
Verifikasi yang dilakukan menggunakan Xspin-4.0.2 di atas platform RedHat Linux 7.2.
Parameter simulasi yang digunakan adalah sebagai berikut :
Fahmi, Ismail, OAI-PMP: Open Archives Initiative - Protocol for Metadata Posting
(Designed for IndonesiaDLN) Protocol Version: 1.0-Beta of 2002-09-07,
http://www.indonesiadln.org, Knowledge Management Research Group – ITB, 2002.
a. Connect
Summary and Usage Notes
This verb is used to get authentication from the HUB server.
Arguments
• badArgument
• noRecordsMatch
• badSerialNumber
• badEpochTime
• systemError
Response Format
The response must include one instance of the following elements:
Examples
Request
http://agri/OAI-PMP-script.php?
verb=Connect&providerId=JBPTITBPP&providerSerialNumber=28H3oIZETd
ASw
&epochTime=1031366328
Response
The provider ID and Serial Number are correct and connection session is
created.
<?xml version="1.0" encoding="UTF-8"?>
<OAI-PMP xmlns="http://www.indonesiadln.org/OAI/1.0/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.indonesiadln.org/OAI/1.0/
http://www.indonesiadln.org/OAI/1.0/OAI-PMP.xsd">
<responseDate>2002-02-08T08:55:46Z</responseDate>
<request verb="Connect"
providerId="JBPTITBPP"
providerSerialNumber="28H3oIZETdASw"
epochTime="1031366328">http://agri/OAI-PMP-script.php</request>
<Connect>
<sessionId>ca612fe33acc768d4aa2f5940238c8ae</sessionId>
</Connect>
</OAI-PMP>
b. Disconnect
Summary and Usage Notes
This verb is used to disconnect from the HUB server.
Arguments
• badArgument
• noSessionsMatch
Response Format
The response must include one instance of the following elements:
• status - connection session Identifier for the client that is generated by the
Hub server.
Examples
Request
http://agri/OAI-PMP-script.php?
verb=Disconnect&sessionId=ca612fe33acc768d4aa2f5940238c8ae
Response
c. 4. PutRecord
Summary and Usage Notes
This verb is used to post a record. The record could contain metadata of the digital
archives, discussion message, provider information, or member information.
Arguments
• badArgument -
Response Format
The response must include one instance of the following elements:
• status - connection session Identifier for the client that is generated by the
Hub server.
Examples
Request
POST http://agri/OAI-PMP-script.php?
verb=PutRecord&sessionId=ca612fe33acc768d4aa2f5940238c8ae
&identifier=jbptitbpp-agriknow-mmedia-2002
&metadataPrefix=dc_etd HTTP/1.0 \r\n
Content-type: application/x-www-form-urlencoded\r\n
Content-length: 345\r\n\r\n
d. PutListRecords
Summary and Usage Notes
This verb is used to post a list of records. The records could contain metadata of the
digital archives, discussion message, provider information, or member information.
Arguments
• badArgument -
Response Format
The response must include one instance of the following elements:
• status - connection session Identifier for the client that is generated by the
Hub server.
Examples
Request
POST http://agri/OAI-PMP-script.php?
verb=PutListRecords&PHPSESSID=ca612fe33acc768d4aa2f5940238c8ae
&countRecords=2
&metadataPrefix=dc_etd HTTP/1.0 \r\n
Content-type: application/x-www-form-urlencoded\r\n
Content-length: 345\r\n\r\n