You are on page 1of 17

Verifikasi Implementasi Extended-Open Archives Initiatives

(X-OAI) : Metadata Harvesting and Posting Protocol menggunakan


Promela/Spin

Donny Fauzan [13298109]


Student of Electrical Engineering Department, Labtek VIII ITB and
Member of Knowledge Management Research Group, ITB Central Library
Institute of Technology Bandung
Jl. Ganesha 10
Bandung 40132

Abstrak

Open Archives Initiatives (OAI) Metadata Harvesting Protocol dikembangkan untuk


menyebarkan dan mempromosikan suatu kerangka kerja yang application-independent
untuk menyelesaikan masalah-masalah interoperabilitas pada digital library. Pada
paper ini, kami melakukan analisis Verifikasi terhadap kerangka kerja/mekanisme OAI
Protocol yang telah di-extend dengan feature metadata posting menurut kebutuhan
Digital Library di negara-negara dunia ketiga khususnya Indonesia. Kasus
implementasi diambil dari Indonesian Digital Library Network (IDLN) yang pada saat
ini mengintegrasikan lebih dari 30 digital library node di seluruh Indonesia. Sebagian
besar di antar mereka menggunakan koneksi internet dial-up yang mana memiliki
bandwidth sangat kecil, yang mengakibatkan perlunya sinkronisasi metadata dua
arah, harvesting dan posting.Verifikasi dilakukan menggunakan bahasa CSP dengan
tool Promela/Spin.

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

Client Service Provider Data Provider

Data Provider

Protokol OAI-PMH didesain untuk reliable-high speed-low latency-dedicated network,


di mana data provider memiliki koneksi 24 jam dan dapat kapan saja di harvest oleh
service provider. Namun di negara dunia ketiga, di mana akses institusi akademis
terhadap internet masih kurang sekali diakibatkan masih mahalnya biaya dedicated
connection dan kurang luasnya community service perusahaan-perusahaan
telekomunikasi (sekalipun pemerintah) berupa sponsorship dedicated internet
connection kepada institusi akademis mengakibatkan OAI-PMH tidak lagi relevan. Masih
banyak institusi akademis yang tergantung pada dial-up connection ke internet,
bahkan lebih banyak lagi yang sama sekali tidak memiliki akses internet.

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.

2. Deskripsi Protokol OAI PMH


Protokol OAI PMH (Protocol for Metadata Harvesting) adalah protocol yang sederhana
dan bersifat pasif. Artinya bahwa aktifitas distribusi data bersifat harvesting, di mana
service provider ‘meminta’ metadata dari data provider. Data provider secara pasif
merespon permintaan metadata, sebagaimana halnya pada protokol HTTP untuk web.

Diagram 2-1 Protokol OAI PMP (Harvesting)

Daftar perintah client (dalam hal ini service provider)


GetRecord : Query untuk mengambil metadata & filenya jika
diinginkan
Identify : Mengambil info tentang repository (data provider)
ListIdentifiers : Seperti ListREcords, tapi mengambil daftar headernya
saja.
ListMetadataFormats : Mendaftar format metadata apa saja yang disupport
oleh repository.
ListRecords : Perintah untuk mengambil/mengharvest record
ListSets : Perintah untuk mengambil suatu set dari sebuah
repository, baik untuk selective harvesting.

3. Deskripsi Protokol OAI PMP


Pada tulisan ini, kami memfokuskan pada use case protokol ekstensi OAI PMH, yaitu
OAI PMP (Protocol for Metadata Posting). Ekstensi protokol OAI untuk Indonesia DLN ini
berupa satu set perintah client (metadata publisher) terhadap data provider yang
terdiri dari perintah-perintah sebagai berikut:

Connect : Perintah untuk autentikasi pada service profider. Ini


dilakukan untuk menghidari abuse terhadap server.
Disconnect : Perintah untuk disconnect dari server
PutRecord : Perintah menaruh record
PutListRecords : Perintah menaruh beberapa record
PutFileFragment : Perintah menaruh satu potongan file, karena ada batasan
besar penaruhan file (max_upload_filesize).
MergeFileFragments : Perintah menggabungkan beberapa fragmen file
DeleteRecord : Perintah menghapus record
UpdateRecord : Perintah mengupdate record

4. Permodelan menggunakan UML


Validasi protokol ini diawali dengan pemodelan. Di sini pertama-tama digunakan class
diagram yang merupakan salah satu diagram UML (Unified Modelling Language).

ServiceProvider
Reads
Client Network
+sendResult()
+GetRecord()
+query() +send()
+Identify()
* +ListIdentifiers() +receive()
 Harvests +ListMetadataFormats()
+ListRecords() 1
+ListSets()

1
DataProvider Contains
Posts

+connect() 1..* Transferred Via


+disconnect() *
+putRecord()
+putListRecord() Metadata
1 Contains1..*
+putFileFragment() -id
+mergeFileFragments() -attributes 1..*
+deleteRecord() -file
+updateRecord()

Diagram 4-2 OAI Extended Class Diagram

Tahap selanjutnya adalah membuat sequence diagramnya. Sequence diagram juga


termasuk UML diagram. Analisis dilakukan dengan membagi 2 kasus yaitu proses
storing/upload yang diidentifikasi oleh perintah PutRecord dan PutFile. Sedangkan
yang satu lagi adalah proses update yang diidentifikasi delete Di bawah ini sequence
diagram untuk proses-proses yang terjadi pada data provider.

I. Proses Storing dan Upload


Untuk proses storing dan upload yang diidentifikasi oleh keyword put, terjadi
suatu sequence proses di kedua sisi data provider maupun service provider. Data
provider bersikap aktif untuk menginisiasi koneksi untuk selanjutnya mengirimkan
perintah yang dibungkus dalam HTTP Post protocol. Perintah ini terdiri dari keyword
POST + URL berisikan URI & parameternya, diikuti header pengiriman data file HTTP
berupa XML file. Untuk proses upload, yang mengikutinya adalah binary file hasil
concatenation sebelum dikirim di sisi data provider.
Proses storing dan upload tersebut diuraikan dalam sequence diagram berikut
ini :
DataProvider Network ServiceProvider

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(..)

Diagram 4-3 OAI Extended Sequence Diagram


Dari Sequence diagram, kita buat state machinenya.

S0 S4

PutRecord

S1 S2 S3 S7

Connect Send Receive

S5

PutRecord

PutFileFragment

S6

Diagram 4-4 State Machine DataProvider

S2

SaveRecord

S1 S4 S3 S7

Receive BufferFileFragment Send

S5

MergeFileFragments

S6

Closing

Diagram 4-5 State Machine Service Provider

II. Proses Update / Delete


Proses update pelaksanaannya mirip dan serupa dengan proses storing/upload.
Perintah berupa keyword POST diikuti URI dengan argumen yang menunjukkan record
yang akan diupdate baik metadatanya (berupa XML file) maupun filenya (berupa file
fragments).
5. Permodelan dalam bahasa Promela

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

Permodelan dalam bahasa promelanya adalah sebagai berikut.

/* Promela program for the OAI PMP protocol */


#define false 0
#define true 1

mtype={CONNECT,DISCONNECT,PUTRECORD,PUTFILEFRAGMENT,MERGEFILEFRAGMENTS,
OK,FAIL,ACK};
chan myNetwork=[0] of {mtype, short, short, short};

proctype DataProvider(short recid, attribs, fragnum)


{
bool connected=false;

mtype cmd;
mtype rsp;

short state=0;
bool sent=false, received=false, changestate=false;

short arg1, arg2;


short sessid, frag=0;

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;

/* only 8 session available and */


/* database of 16 records each have 1 file. */
short session[8], data[16], file[16];
/* network arguments */
short sessid,arg1,arg2;
/* points the last session available */
short lastsess = 15, yoursess;

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();
}
}

6. Verifikasi menggunakan X-Spin

Verifikasi yang dilakukan menggunakan Xspin-4.0.2 di atas platform RedHat Linux 7.2.
Parameter simulasi yang digunakan adalah sebagai berikut :

Hasil verifikasi adalah sebagai berikut :


File ada 3 segmen
timeout
#processes: 3
211: proc 2 (ServiceProvider)
line 99 "ta_final" (state 13)
211: proc 1 (DataProvider)
line 41 "ta_final" (state 25)
211: proc 0 (:init:) line 153
"ta_final" (state 4) <valid
endstate>
3 processes created

7. Kesimpulan dan Saran

Kesimpulan dari verifikasi ini adalah sebagai berikut:


1. Permodelan dapat dilaksanakan lebih mudah dengan terlebih dahulu
mendefinisikan diagram-diagram UML mulai dari class diagram, sequence dan state
diagram, sehingga penulisan modelnya dalam bahasa promela cukup membaca dari
diagram state tersebut.
2. Protokol OAI untuk posting (PMP) untuk proses postingnya dapat dikatakan
cukup sederhana dan telah diverifikasi tanpa ada masalah.

Sedangkan saran-saran yang dapat penulis berikan adalah sebagai berikut :


1. Untuk melakukan verifikasi khususnya untuk protokol di layer tingkat tinggi dan
lebih banyak bersifat software disarankan memanfaatkan diagram-diagram
permodelan lain khususnya UML, yang dapat membantu.
2. Verifikasi protokol OAI-PMP ini hanya pada sebagian proses yang ada pada protokol.
Verifikasi lebih lanjut dapat dikembangkan untuk memodelkan seluruh protokol
termasuk extensi pada bagian update dan deletenya, dan kombinasi dengan
protokol lama (OAI-PMH).
Referensi

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.

Adam D. Bradley, Safe Composition of Web Communication Protocols for Extensible


Edge Services, Computer Science Department - Boston University, 2002. As available at
http://www.cs.bu.edu/techreports/pdf/2002-017-http-safe-compositions.pdf

Kung, David, MODELING AND VALIDATION OF SECURITY PROTOCOLS By using The


Object Oriented Framework and SPIN, Department of Computer Science and
Engineering University of Texas at Arlington, 2002. As available at
http://www.cse.uta.edu/Research/Publications/Downloads/CSE-2003-16.pdf
Lampiran : Protokol OAI PMP (2002)

a. Connect
Summary and Usage Notes
This verb is used to get authentication from the HUB server.

Arguments

• providerId a required argument that specifies the provider ID (registered


from IndonesiaDLN Hub servers).
• epochTime a required argiment that specifies the seconds since the epoch
when the request is generated.
• providerSerialNumber a required argument that specifies the encripted
serial number. Encription is using md5(providerSerialNumber-epochTime)
based on the md5 Message-Digest algorithm.

Error and Exception Conditions

• badArgument
• noRecordsMatch
• badSerialNumber
• badEpochTime
• systemError

Response Format
The response must include one instance of the following elements:

• sessionId - connection session Identifier for the client that is generated by


the Hub server.

Examples

Request

http://agri/OAI-PMP-script.php?

verb=Connect&providerId=JBPTITBPP&providerSerialNumber=28H3oIZETd
ASw
&epochTime=1031366328

Response

The provider ID or Serial Number is incorrect.


<?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>
<error code="noRecordsMatch">Incorrect ID or Serial Number</error>
</OAI-PMP>

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

• sessionId a required argument that specifies the connection session id.

Error and Exception Conditions

• 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

I.e provider ID or Serial Number is incorrect.

Currently is not implemented.

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

• sessionId a required argument that specifies the connection sessionId. The


sessionId is assigned when the last time server performs the Connect request.
• identifier a required argument that specifies the unique identifier of the
item in the repository from which the record must be disseminated.
• metadataPrefix a required argument that specifies the metadataPrefix of
the format that should be included in the metadata part of the returned record
.

Error and Exception Conditions

• 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

<?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">
<requestDate>2002-02-08T08:55:46Z</requestDate>
<PutRecord>
<record>
<header>
<identifier>jbptitbpp-agriknow-mmedia-2002</identifier>
<datestamp>2000-11-12</datestamp>
<setSpec>multimedia</setSpec>
</header>
<metadata>
<oai_dc:dc
xmlns="http://www.openarchives.org/OAI/2.0/oai_dc/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/
http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
<title>Using Structural Metadata to Localize Experience of
Digital Content</title>
<creator>Dushay, Naomi</creator>
<subject>Digital Libraries</subject>
<description>With the increasing technical sophistication of
both information consumers and providers, there is increasing
demand for more meaningful experiences of digital information.
We present a framework that separates digital object
experience, or rendering, from digital object storage and
manipulation, so the rendering can be tailored to particular

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

• PHPSESSID a required argument that specifies the connection sessionId. The


sessionId is assigned when the last time server performs the Connect request.
• countRecords a required argument that specifies the number of records that
will be posted.
• metadataPrefix a required argument that specifies the metadataPrefix of
the format that should be included in the metadata part of the returned
record.

Error and Exception Conditions

• 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

<?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">
<requestDate>2002-02-08T08:55:46Z</requestDate>
<PutListRecords>
<record>

You might also like