Ευχαριστίες Η πτυχιακή σηματοδοτεί το τέλος των σπουδών μου στο τμήμα και το ξεκίνημα μιας νέας περιόδου, κλείνοντας λοιπόν αυτό το κεφάλαιο της ζωής μου θέλω να ευχαριστήσω την οικογένεια μου για την υποστήριξη που μου παρείχαν όλα αυτά τα χρόνια, τους φίλους όπου στάθηκαν στο πλάι μου, τους δασκάλους και καθηγητές και φυσικά τον φίλο και συνάδελφο Παναγιώτη Βελισσάριο για την συνεργασία που είχαμε τόσο για την πτυχιακή όσο και για την περίοδο που εργαζόμασταν στο εργαστήριο Πρότυπων Εφαρμογών Υλικού και Λογισμικού Υπολογιστικών Συστημάτων του τμήματος Τηλεπληροφορικής και Διοίκησης. Βασίλειος Κομιανός Ευχαριστώ την οικογένειά μου για την ηθική υποστήριξή της. Επίσης ευχαριστώ το συνάδελφο Κομιανό Βασίλη για την ουσιαστική συνεργασία σε όλους τους τομείς της εργασίας. Τέλος, θέλω να ευχαριστήσω φίλους και γνωστούς για το κουράγιο που μου έδωσαν ώστε να συνεχίζω κάθε φορά. Παναγιώτης Βελισσάριος Τελευταίους άλλα όχι λιγότερο σημαντικούς, θα θέλαμε να ευχαριστήσουμε από κοινού τον κ. Ευρυπίδη Γλαβά, αντιπρόεδρο του Τ.Ε.Ι. Ηπείρου και υπεύθυνο του εργαστηρίου Πρότυπων Εφαρμογών Υλικού και Λογισμικού Υπολογιστικών Συστημάτων του τμήματος Τηλεπληροφορικής και Διοίκησης που η εμπιστοσύνη και η συνεργασία του μας τιμά ιδιαίτερα. Τους κ. Αριστείδη Αναγνωστάκη και κ. Φώτη Βαρτζιώτη επιστημονικούς συνεργάτες του Τ.Ε.Ι. Ηπείρου για την εμπιστοσύνη που μας έδειξαν, την βοήθεια που μας πρόσφεραν και για την διαμόρφωση των πολύ καλών συνθηκών εργασίας που απολαμβάνουμε, και τον κ. Παππά Άγγελο που μας μετέδωσε γνώσεις χωρίς τις οποίες αυτή η εργασία δεν θα είχε ολοκληρωθεί. Άρτα, 26 Ιανουαρίου 2009 Βασίλειος Κομιανός - Παναγιώτης Βελισσάριος
Περιεχόμενα Πρόλογος …………………………………………………………………………………4 Μέρος Α: Ανάλυση απαιτήσεων χρηστών και σχεδιασμός του συστήματος Κεφάλαιο 1: Ανάλυση απαιτήσεων χρηστών......................................................................7 1.1 Καθορισμός των χρηστών του e-GovLex και των αναγκών τους............................................................8 1.2 Σενάρια Χρήσης.................................................................................................................................9 Κεφάλαιο 2: Σχεδιασμός συστήματος .....................................................................................................13 2.1Τεχνική Προσέγγιση............................................................................................................................13 2.2. Επισκόπηση Συστήματος.......................................................................................................................14 Υπηρεσίες και Παρουσίαση Υποσυστημάτων.........................................................................................14 Κεφάλαιο 6: Διαδικτυακή υπηρεσία διάδοσης πληροφορίας – GetWebService.............41 6.1 Login..................................................................................................................42 6.2 GetUserProfile...................................................................................................43 6.3 GetNomous...............................................................................................................43 6.4 GetDhmousKoinothtes......................................................................................44 6.5 GetDiamerismata......................................................................................................44 6.6 GetOffices.................................................................................................................45 6.7 GetPublicServices.....................................................................................................45 6.8 getDocuments...........................................................................................................45 6.9 GetStatuaryBoard.....................................................................................................46 6.10 GetEnterprises.........................................................................................................46 6.11 GetChildEntities.....................................................................................................47 6.12 GetDocumentation..................................................................................................47 6.13 FreeTextSearchWithLENAME..............................................................................48 6.14 GetGraphv2.............................................................................................................48 6.15 FreeTextSearchAll..................................................................................................50 6.16 GetAllPropertiesFromConcept...............................................................................50 6.17 GetPropertyInstances..............................................................................................51 6.18 GetEntities..............................................................................................................52 6.19 GetParentConceptOfAnInstance.............................................................................52 6.20 GetOfficePublishingDocument...............................................................................53 6.21 GetNumberEntities.................................................................................................53 6.23 InformIfEntityIsConceptOrInstance.......................................................................54 6.24 URItoID..................................................................................................................54 6.25 IDtoURI..................................................................................................................55 6.26 GetPropertiesFromConcept....................................................................................55 6.27 GetLabels................................................................................................................55 6.28 GetPropertyInstancesAttributes..............................................................................56 6.29 GetPropertyInstancesRelations...............................................................................56 6.30 GetDocumentsAndOfficesThatPublishedByAMunicipality .…………………….57 Κεφάλαιο 7: Διαδικτυακή υπηρεσία καταγραφής και επικαιροποίησης – setwebservice 58 7.1 UpdateUserProfile....................................................................................................58 7.2 Set.............................................................................................................................59 7.3 Edit............................................................................................................................61 7.4 Delete........................................................................................................................63 Μέρος Δ: Εφαρμογές χρηστών του συστήματος - .NET web sites Κεφάλαιο 8: .NET web sites……………………………………………………………..66 8.1 Η τεχνολογία ASP....................................................................................................66
8.2 Η τεχνολογία .NET...................................................................................................66 8.2.1 .NET Common Language Runtime....................................................................68 8.2.2 .NET Framework Class Library.........................................................................69 Κεφάλαιο 9: Εφαρμογή διάδοσης………………………………………………………..71 9.1 Μηχανισμός αναζήτησης - Search.aspx...................................................................71 9.2 Οδηγός χρήστη - Guide.aspx....................................................................................72 9.3 Προβολή εγγράφων - ViewDocuments.aspx............................................................76 Κεφάλαιο 10: Εφαρμογή καταγραφής – επικαιροποίησης………………………………78 10.1 Είσοδος χρήστη – Login.aspx ................................................................................79 10.2 Καταγραφή και επικαιροποίηση – KatagrafhEpikairopoihsh.aspx........................80 10.2.1 Εισαγωγή οντοτήτων........................................................................................81 10.3 Επεξεργασία εννοιών – EditConcepts.aspx............................................................83 10.4 Επεξεργασία ιδιότητας – EditProperty.aspx...........................................................85 10.5 Επεξεργασία στιγμιότυπου – EditInstances.aspx...................................................85 10.6 Επεξεργασία σχέσεων – EditInstancesRelations.aspx............................................87 10.7 Ορισμός σχέσεων μεταξύ στιγμιότυπων – SetInstancesRelations.aspx.................88 Μέρος Ε: Υλοποίηση – κώδικας του συστήματος Κεφάλαιο 11: Υλοποίηση των διαδικτυακών υπηρεσιών.................................................92 11.1 Σύνδεση με την οντολογία......................................................................................92 11.2 Λειτουργίες καταγραφής και επικαιροποίησης......................................................93 11.2.1 Εισαγωγή έννοιας.............................................................................................93 11.2.2 Διαγραφή έννοιας.............................................................................................93 11.2.3 Εισαγωγή στιγμιότυπου έννοιας.......................................................................94 11.2.4 Διαγραφή στιγμιότυπου έννοιας.......................................................................94 11.2.5 Εισαγωγή ιδιότητας..........................................................................................94 11.2.6 Διαγραφή ιδιότητας..........................................................................................95 11.2.7 Εισαγωγή στιγμιότυπου ιδιότητας....................................................................95 11.2.8 Διαγραφή στιγμιότυπου ιδιότητας....................................................................95 11.2.9 Λεξικογραφική πληροφορία.............................................................................96 11.2.9.1 Εισαγωγή ονομάτων...................................................................................96 11.2.9.2 Εισαγωγή περιγραφής.................................................................................96 11.3 Λειτουργίες ανάκτησης..........................................................................................97 11.3.1 Ανάκτηση οντότητας με χρήση URI................................................................97 11.3.2 Ανάκτηση με χρήση ερωτήματος.....................................................................97 11.3.2.1 Αναζήτηση με χρήση ονόματος..................................................................97 11.3.2.2 Αναζήτηση με χρήση ιδιότητας .................................................................98 11.3.3 Ανάκτηση εννοιών ανάλογα με την ιεραρχία ..................................................98 11.3.4 Ανάκτηση στιγμιότυπων εννοιών ....................................................................98 11.3.5 Ανάκτηση στιγμιότυπων ιδιοτήτων .................................................................99 11.3.6 Ανάκτηση λεξικογραφικής πληροφορίας ........................................................99 11.3.6.1 Ανάκτηση ονόματος οντότητας .................................................................99 11.3.6.2 Ανάκτηση περιγραφής οντότητας ..............................................................99 Κεφάλαιο 12: Παρουσίαση υλοποίησης εφαρμογών χρήστη………………….……….100 12.1 Παρουσίαση εφαρμογής διάδοσης.......................................................................100 12.2 Παρουσίαση εφαρμογής καταγραφής και επικαιροποίησης................................105 Παράρτημα Επεξήγηση όρων..............................................................................................................107 Βιβλιογραφία...................................................................................................................109
Πρόλογος Το αντικείμενο της πτυχιακής αυτής είναι το σύστημα το οποίο υλοποιήθηκε στα πλαίσια του έργου “δημιουργία πλήρους πολυγλωσσικής ηλεκτρονικής λεξικογραφίας εννοιών διοίκησης”. Το έργο αυτό φιλοδοξεί να δημιουργήσει την πληροφορική υποδομή για την απρόσκοπτη ανταλλαγή πληροφορίας μεταξύ των πολιτών, των φορέων και των διοικητικών οργανισμών, δημιουργώντας ένα κοινό εννοιολογικό υπόβαθρο στο χώρο της δημόσιας διοίκησης. Η υλοποίηση που παρουσιάζεται στην εργασία αυτή και αναπτύχθηκε κατά την διάρκεια εκπόνησης της έχει ως σκοπό: την αποτύπωση της διοικητικής δομής της τοπικής αυτοδιοίκησης σε μια οντολογία, την δημιουργία μηχανισμών οι οποίοι θα επιτρέπουν αλλαγές στον σχεδιασμό της οντολογίας, επεξεργασία στοιχείων, εισαγωγή νέων και διαγραφή αυτών από εξουσιοδοτημένους χρήστες και μηχανισμούς που θα κάνουν δυνατή την ανάκτηση πληροφορίας από κάθε ενδιαφερόμενο. Στους μηχανισμούς αυτούς πρέπει να έχουν πρόσβαση με τον πλέον απλό τρόπο όλοι οι ενδιαφερόμενοι χρήστες για τον λόγο αυτό η διεπαφή χρήστη υλοποιείται από web site. Δημιουργήθηκαν δύο ASP .NET web sites, ένα για τους χρήστες οι οποίοι διαθέτουν την εξουσιοδότηση να επεξεργάζονται την οντολογία και ένα για τους απλούς χρήστες οι οποίοι επιθυμούν την ανάκτηση πληροφορίας. Η λειτουργικότητα του συστήματος έχει ενσωματωθεί σε web services έτσι ώστε να είναι δυνατή η ανάπτυξη εφαρμογών οι οποίες θα έχουν πρόσβαση στην οντολογία χωρίς οι εφαρμογές αυτές να χρειάζεται να μεριμνούν για το πώς αποθηκεύεται ή ανακτάται η πληροφορία, καθώς αυτά όπως και η ασφάλεια είναι μηχανισμοί οι οποίοι υλοποιούνται στα web services. Αναπτύχθηκαν δύο JAVA web services, ένα για την επεξεργασία της οντολογίας και ένα για την ανάκτηση στοιχείων της. Στο τελευταίο επίπεδο έχουμε την οντολογία η οποία αποθηκεύεται σε μια σχεσιακή βάση δεδομένων, στην ίδια βάση δεδομένων χωρίς όμως να υπάρχει άμεση σχέση μεταξύ τους αποθηκεύονται δεδομένα τα οποία αφορούν τους χρήστες – διαχειριστές του περιεχομένου της οντολογίας. Σκοπός της πτυχιακής αυτής είναι να αποτελέσει ένα εγχειρίδιο για την κατανόηση, την σχεδίαση και την ανάπτυξη οντολογιών και παράλληλα για την ανάπτυξη διαδικτυακών υπηρεσιών και δυναμικών ιστοχώρων που να εκμεταλλεύονται τις υπηρεσίες αυτές. Στα επόμενα κεφάλαια περιγράφονται οι λειτουργικές απαιτήσεις και οι λύσεις στις οποίες οδηγηθήκαμε.
ΜΕΡΟΣ Α ΑΝΑΛΥΣΗ ΑΠΑΙΤΗΣΕΩΝ ΧΡΗΣΤΩΝ ΚΑΙ ΣΧΕΔΙΑΣΜΟΣ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ Η ανάλυση απαιτήσεων είναι η πρώτη διαδικασία που λαμβάνει μέρος κατά την δημιουργία ενός συστήματος. Στόχος της διαδικασίας αυτής είναι να γίνουν γνωστές οι ανάγκες των χρηστών του συστήματος ώστε να είναι γνωστό στην ομάδα υλοποίησης τι ακριβώς πρέπει να κάνει το σύστημα. Μετά την ανάλυση απαιτήσεων σειρά έχει ο σχεδιασμός του συστήματος, κατά τον σχεδιασμό λαμβάνονται υπόψη οι λειτουργίες που το σύστημα πρέπει να εκτελεί καθώς και η σειρά τους.
Κεφάλαιο 1: Ανάλυση απαιτήσεων χρηστών Οι απαιτήσεις ενός συστήματος διαμορφώνονται ανάλογα με τους χρήστες που θα το χρησιμοποιήσουν για αυτό ξεκινάμε με την παρουσίαση των χρηστών. Οι χρήστες του συστήματος: Ορίζονται ως δυνητικοί χρήστες του συστήματος Πολυγλωσσικής Ηλεκτρονικής Λεξικογραφίας Εννοιών Διοίκησης ή αλλιώς e-GovLex, οι παρακάτω: •
Φορείς (ΟΤΑ Α, ΟΤΑ Β, Περιφέρειες, άλλοι δημόσιοι οργανισμοί, επιχειρήσεις),
•
Υπάλληλοι και στελέχη της διοίκησης,
•
Πολίτες,
•
Δευτερεύουσες εφαρμογές,
•
Τεχνικός Διαχειριστής Συστήματος.
1.1 Καθορισμός των χρηστών του e-GovLex και των αναγκών τους
Σχήμα 1: Οι βασικοί χρήστες του e-GovLex
Όπως απεικονίζεται στο προηγούμενο διάγραμμα, οι δυνητικοί χρήστες του e-GovLex συγκαταλέγονται στις παρακάτω κατηγορίες: •
Παροχείς γνώσης και πληροφορίας o Στελέχη της διοίκησης. Η γνώση έμπειρων στελεχών της διοίκησης τόσο από πλευράς περιεχομένου όσο και από πλευράς δομής και οργάνωσης της διοίκησης καταγράφεται συστηματικά και θα αναπαρίσταται με ευκρίνεια στο βασικό κορμό της οντολογίας του συστήματος. o Φορείς (ΟΤΑ Α, ΟΤΑ Β, Περιφέρειες, άλλοι δημόσιοι οργανισμοί, επιχειρήσεις). Οι φορείς της διοίκησης θα διατηρούν λογαριασμούς διαχείρισης με αυξημένα δικαιώματα. Θα μπορούν να διαχειρίζονται το τμήμα της οντολογίας που αντιστοιχεί στην πληροφορία που τους αφορά, να προσθέτουν και να επικαιροποιούν στοιχεία.
•
Καταναλωτές πληροφορίας o Υπάλληλοι της διοίκησης. Οι υπάλληλοι θα μπορούν να πλοηγηθούν με ευκολία και να ανακτήσουν πληροφορία δομής (τμήμα της οντολογίας) και περιεχομένου (ερμηνεία συγκεκριμένων εννοιών). o Πολίτες –Δημότες. Θα μπορούν να ανακτήσουν πληροφορία τόσο μέσα από το γράφο πλοήγησης, όσο και μέσω μηχανισμών αναζήτησης ελεύθερου κειμένου. o Δευτερεύουσες εφαρμογές. Με τη δημιουργία Ολοκληρωμένης Διεπαφής Λογισμικού (API) το σύνολο της πληροφορίας θα είναι προσβάσιμο και αξιοποιήσιμο από δευτερογενείς εφαρμογές και λογισμικό προστιθέμενης αξίας.
•
1.2
Διαχειριστής Συστήματος. Οι οντότητες του e-GovLex διακρίνονται σε δύο μεγάλες κατηγορίες: Στις οντότητες οι οποίες έχουν τη δυνατότητα αυτενέργειας και αντιπροσωπεύονται από κάποια κατηγορία χρηστών (π.χ. Δήμοι), και τις οντότητες οι οποίες δεν μπορούν να αυτενεργούν (π.χ. έγγραφα). Οι αρχικές αρμοδιότητες της πρώτης κατηγορίας σε ότι αφορά τη διαχείριση των οντοτήτων οι οποίες υπάγονται διαχειριστικά σε αυτές, καθώς και τα δικαιώματα κάθε νέας οντότητας της κατηγορίας αυτής θα ορίζονται ρητά από τον διαχειριστή του συστήματος.
Σενάρια Χρήσης
Σχήμα 1.2: Οι βασικές χρήσεις (use cases) του e-GovLex Στο παραπάνω διάγραμμα παρουσιάζονται οι βασικές περιπτώσεις χρήσης του συστήματος από τους δυνητικούς χρήστες. Περίπτωση Χρήσης 1 (Use Case 1): Ανάκτηση της πληροφορίας περιεχομένου Βήμα Εμπλεκόμενοι Ενέργεια Αποτέλεσμα Απαιτήσεις χρηστών Χρήστες 1 Πολίτης, Ο χρήστης To portal του e-GovLex • Πρόσβαση στο Δημότης, μπαίνει στο eπαρουσιάζει γενική Διαδίκτυο Υπάλληλος GovLex από τον πληροφορία • Φυλλομετρητής ΟΤΑ υπολογιστή του (disclaimer) και γενική Διαδικτύου περιγραφή της • Οργάνωση της πληροφορίας που πληροφορίας σε μπορεί να βρει ο γενικές κατηγορίες χρήστης μέσα από το (π.χ. «Πληροφορία για σύστημα. Επίσης Δημότες, Πληροφορία παρουσιάζεται λίστα για υπαλλήλους των επιλογών και προτροπή ΟΤΑ, κλπ.) για την εισαγωγή αναγνωριστικού και συνθηματικού. 2 Πολίτης, Ο χρήστης Το σύστημα προτρέπει • Φιλικό Γ.Π.Ε. Δημότης, ψάχνει για την αναζήτηση της • Υποστήριξη Υπάλληλος πληροφορία για πληροφορίας: πολυγλωσσικής
Βήμα
Εμπλεκόμενοι Χρήστες ΟΤΑ
3
Πολίτης, Δημότης, Υπάλληλος ΟΤΑ
4
Πολίτης, Δημότης, Υπάλληλος ΟΤΑ
Ενέργεια
Αποτέλεσμα
τη διαδικασία έκδοσης πιστοποιητικού γέννησης από το Δήμο Αρταίων
1. με πλοήγηση στο γράφο των οντοτήτων 2. με πλοήγηση στο δένδρο της ιεραρχικής Διοικητικής Υπαγωγής 3. μέσω αναζήτησης ελεύθερου κειμένου.
Απαιτήσεις χρηστών
αναζήτησης • Υποστήριξη πλοήγησης στην πληροφορία μέσα από το γράφο των οντοτήτων • Ευκρινής παρουσίαση της πληροφορίας • Διαθεσιμότητα πληροφορίας Ο χρήστης Το σύστημα • Δυνατότητα για βρίσκει τη επιστρέφει : εκτύπωση ή διαδικασία, τη Περιγραφή της ροής της κατέβασμα αρχείων ροή και διαδικασίας κειμένου συνδέσμους στη Πληροφορία πρόσβασης υποδειγμάτων σχετική (διευθύνσεις, τηλέφωνα) πληροφορία και Λίστα εγγράφων τα κείμενα των υποδειγμάτων υποδειγμάτων. Ο χρήστης πλέον μπορεί να χρησιμοποιήσει την πληροφορία ακολουθώντας την ισχύουσα γραφειοκρατική διαδικασία
Περίπτωση Χρήσης 2 (Use Case 2): Ανάκτηση της πληροφορίας δομής Βήμα Εμπλεκόμενοι Ενέργεια Αποτέλεσμα Απαιτήσεις χρηστών Χρήστες 1 Υπάλληλος Ο χρήστης To σύστημα • Πρόσβαση στο ΟΤΑ μπαίνει στο eπαρουσιάζει τη λίστα Διαδίκτυο GovLex από τον των επιλογών και • Φυλλομετρητής υπολογιστή του προτροπή για την Διαδικτύου εισαγωγή αναγνωριστικού και συνθηματικού. 2 Υπάλληλος Ο χρήστης Παρουσίαση • Φιλικό Γ.Π.Ε. ΟΤΑ ψάχνει εμπλεκόμενων • Υποστήριξη πληροφορία για οντοτήτων και των πλοήγησης στην τον κωδικό αντίστοιχων κωδικών πληροφορία μέσα από το συγκεκριμένων ετικετών (tags) eγράφο των οντοτήτων και οντοτήτων στο GovLex ελεύθερο κείμενο σύστημα (φορέων και εγγράφων) 3 Υπάλληλος Ο χρήστης Πίνακας Οντοτήτων • Δυνατότητα ΟΤΑ βρίσκει την ενδιαφέροντος και αντιγραφής ετικέτας, πληροφορία της ετικετών • Δυνατότητα προβολής ετικέτας (tag) των ετικετών στο
Βήμα
Εμπλεκόμενοι Χρήστες
Ενέργεια
Αποτέλεσμα
που αντιστοιχεί στην οντότητα που τον ενδιαφέρει
Απαιτήσεις χρηστών •
•
4
Υπάλληλος ΟΤΑ
γράφο της οντολογίας Δυνατότητα πολυγλωσσικής παρουσίασης της περιγραφής των οντοτήτων. Δυνατότητα παρουσίασης των οντοτήτων με βάση την ιεραρχική σχέση «Διοικητική Υπαγωγή»
Ο χρήστης πλέον μπορεί να εισάγει την πληροφορία στα νέα έγγραφα, και να επιτρέψει με τον τρόπο αυτό το μελλοντικό έλεγχο της ροής τους.
Περίπτωση Χρήσης 3 (Use Case 3): Ανάκτηση της πληροφορίας μέσω API Βήμα Εμπλεκόμενοι Ενέργεια Αποτέλεσμα Απαιτήσεις χρηστών Χρήστες 1 Εξωτερική Εξωτερική To σύστημα επιστρέφει • Γνώση των Εφαρμογή εφαρμογή ζητάει το τμήμα του γράφου παραμέτρων της στοιχεία δομής της οντολογίας που αλληλεπίδρασης του μέσω της καλά ανταποκρίνεται στο API και του XML ορισμένης εξωτερικό ερώτημα. σχήματος του eδιεπαφής Εάν οι κόμβοι του GovLex λογισμικού συνδέονται με την ιεραρχική σχέση «Διοικητική Υπαγωγή» το σύστημα επιστρέφει το δένδρο των οντοτήτων σε περίβλημα XML. 2 Εξωτερική Εξωτερική Το σύστημα απαντάει • Γνώση των Εφαρμογή εφαρμογή ζητάει στο αίτημα παραμέτρων της στοιχεία επιστρέφοντας το αλληλεπίδρασης του περιεχομένου έγγραφο ή σύνδεσμο για API και του XML (π.χ. υπόδειγμα το «κατέβασμα» μέσα σχήματος του eαίτησης) σε περίβλημα XML. GovLex 3
Εξωτερική Εφαρμογή
Εξωτερική Επιστροφή πίνακα εφαρμογή ζητάει οντοτήτων με στοιχεία περιγραφή στην
• Γνώση παραμέτρων αλληλεπίδρασης
των της του
Βήμα
Εμπλεκόμενοι Χρήστες
Ενέργεια
Αποτέλεσμα
Απαιτήσεις χρηστών
ετικέτας για μία ή περισσότερες οντότητες. 4
Εξωτερική Εφαρμογή
επιθυμητή γλώσσα και API και του XML των αντίστοιχων σχήματος του eκωδικών ετικετών (tags) GovLex e-GovLex με τη μορφή κειμένου XML. Διαπιστευμένη Το σύστημα επιτρέπει • Γνώση των κανόνων, Εξωτερική στην εφαρμογή να των δικαιωμάτων και εφαρμογή ζητάει επέμβει μόνο στο της πολιτικής να προσθέσει διαπιστευμένο τμήμα πρόσβασης του -τροποποιήσει της βάσης. Logging συστήματος στοιχεία του e- πληροφορία • Διαπίστευση για τμήμα GovLex επιστρέφεται σε της βάσης απάντηση κάθε • Γνώση των αιτήματος. παραμέτρων της αλληλεπίδρασης του API και του XML σχήματος του eGovLex
Περίπτωση Χρήσης 4 (Use Case 4): Ανάκτηση της πληροφορίας μέσω API Βήμα Εμπλεκόμενοι Ενέργεια Αποτέλεσμα Απαιτήσεις χρηστών Χρήστες 1 Φορέας Εξουσιοδοτημέν Το σύστημα τον • Εξουσιοδότηση από το ος από το φορέα αναγνωρίζει και του Δήμο και παροχή χρήστης μπαίνει επιτρέπει να πλοηγηθεί αναγνωριστικού και στο σύστημα στον υπογράφο του συνθηματικού από τον φορέα του. • Πρόσβαση στο υπολογιστή του διαδίκτυο και χρησιμοποιώντα φυλλομετρητής ς το προσωπικό • Γνώση των βασικών αναγνωριστικό – λειτουργιών του συνθηματικό συστήματος του 2 Φορέας Ο χρήστης Το σύστημα απαντάει • Γνώση των βασικών ζητάει να στο αίτημα λειτουργιών του προσθέσει / επικαιροποιώντας το συστήματος τροποποιήσει γράφο, ή αρνούμενο να • Γνώση της πολιτικής στοιχεία του ικανοποιήσει το αίτημα. για προσθήκη / Υπογράφου του Σε κάθε περίπτωση επικαιροποίηση των φορέα του δίνεται πληροφορία στοιχείων του ανάδρασης (feedback) συστήματος. και κρατιέται logging των δραστηριοτήτων
Κεφάλαιο 2: Σχεδιασμός συστήματος Ο σχεδιασμός του συστήματος έγινε λαμβάνοντας υπόψη την αρχιτεκτονική πελάτη – εξυπηρετητή (client - server) τριών επιπέδων (three tier). Στο πρώτο επίπεδο έχουμε τον πελάτη, στην παρούσα υλοποίηση πελάτης είναι ο φυλλομετρητής του χρήστη. Το επίπεδο εξυπηρετητή στην περίπτωση αυτή διαιρείται σε δυο επιμέρους επίπεδα, το ένα είναι υπεύθυνο για την λειτουργικότητα του συστήματος και το άλλο για την αποθήκευση της πληροφορίας. Στο επίπεδο της λειτουργικότητας συναντάμε τον εξυπηρετητή εφαρμογών (application server) ο οποίος αναλαμβάνει να απαλλάξει την εφαρμογή πελάτη από τα θέματα που έχουν να κάνουν με την βάση δεδομένων. Η λειτουργικότητα αυτή υλοποιείται από λογισμικό το οποίο συνήθως αποκαλείται μεσισμικό (middleware). Το τρίτο επίπεδο είναι το επίπεδο της βάσης δεδομένων, η βάση δεδομένων είναι κρυμμένη και άρα και ασφαλής από τα εξωτερικά αντικείμενα αφού μόνο το μεσισμικό μπορεί να την προσπελάσει. 2.1
Τεχνική Προσέγγιση
Το e-GovLex συνιστά μια καινοτόμα πληροφοριακή πλατφόρμα τόσο από την πλευρά του περιεχομένου, όσο και από την πλευρά των τεχνολογιών λογισμικού που υιοθετούνται. Το σύστημα αποτελείται από τέσσερα υποσυστήματα:
•
Το υποσύστημα της βάσης οντολογίας. Πρόκειται για τη σχεσιακή αναπαράσταση της οντολογίας του e-GovLex, η οποία αναμένεται να έχει τη μορφή γράφου, καθώς και την καταγραφή της σε ER DBMS.
•
Το υποσύστημα καταγραφής και επικαιροποίησης. Τόσο η αρχική καταγραφή όσο και η επικαιροποίηση του περιεχομένου θα γίνεται μέσα από απλές και λειτουργικές φόρμες. Μετά την αρχική καταγραφή και τη δημιουργία του κορμού και του βασικού συνόλου των εννοιών της οντολογίας, κάθε φορέας θα μπορεί να προβαίνει στην επικαιροποίηση του τμήματος της οντολογίας που αναφέρεται σε αυτόν. Με τον τρόπο αυτό, αν για παράδειγμα κάποιος Δήμος αποκτήσει νέα Δημοτική Επιχείρηση, τα στοιχεία της (όνομα, σύντομη περιγραφή αντικειμένου, ιδρυτικό καταστατικό) θα μπορούν να καταχωρούνται από τον αρμόδιο υπάλληλο στη βάση με ελάχιστη προσπάθεια. Στη συνέχεια, όλες οι εφαρμογές, δικτυακοί τόποι κλπ. οι οποίες αντλούν πληροφορία μέσω του API, θα είναι αυτομάτως ενημερωμένες, χωρίς να υπάρχει ανάγκη επανασχεδιασμού.
•
Το υποσύστημα διάδοσης της πληροφορίας. Πρόκειται για το υποσύστημα το οποίο μέσα από σύγχρονες φόρμες πλοήγησης, θα παρέχει πρόσβαση στο σύνολο της καταγεγραμμένης πληροφορίας σε όλους τους χρήστες (πολίτες, δημότες, υπαλλήλους, στελέχη των ΟΤΑ).
•
Το υποσύστημα διεπαφής λογισμικού. Το σύνολο της πληροφορίας αναμένεται να αποτελέσει σταθερή βάση για την παροχή δομικής διοικητικής πληροφορίας σε δευτερογενείς εφαρμογές. Για τη μορφολογικά ενιαία διάθεση του συσχετισμένου περιεχόμενου σε τρίτες εφαρμογές, προβλέπεται η υιοθέτηση πλήρως δομημένης διεπαφής λογισμικού (Application Programmable Interface). Για το λόγο αυτό θα δημιουργηθεί σύνολο δομημένων αυτοπεριγραφικών περιβλημάτων πληροφορίας (XML Information Wrappers). Επίσης θα αναπτυχθεί σύνολο webservices.
2.2. Επισκόπηση Συστήματος Υπηρεσίες και Παρουσίαση Υποσυστημάτων Το σχήμα ένα (1) που ακολουθεί περιγράφει σε γενικό πλαίσιο την λειτουργικότητα της πλατφόρμας eGovLex καθώς και τη λογική και φυσική τοποθέτηση των υποσυστημάτων της.
Σχήμα 1: Η πλατφόρμα e-GovLex Οι χρήστες, με διαφάνεια τόπου και χρόνου, έχουν την δυνατότητα πρόσβασης στην πλατφόρμα eGovLex μέσω ενός φυλλομετρητή ή μιας δευτερεύουσας εφαρμογής (Client-side Tier). Ανάλογα με τα δικαιώματα του χρήστη, η πλατφόρμα e-GovLex δημιουργεί μια διεπαφή που συνίσταται από ένα ασφαλές αλλά και ευέλικτο γραφικό περιβάλλον ικανό να εισάγει αποτελεσματικά τον χρήστη στις έννοιες και τους όρους της δημόσιας διοίκησης. Οι μηχανισμοί (Mid Tier) που αλληλεπιδρούν με τον φυλλομετρητή του χρήστη ή τη δευτερεύουσα εφαρμογή προβλέπεται να είναι εγκατεστημένοι στον Web Server. Η πληροφορία που παρουσιάζεται στον χρήστη όπως και τα δικαιώματα πρόσβασης των χρηστών θα είναι αποθηκευμένα σε σχεσιακές βάσεις δεδομένων (Data Sources Tier) οι οποίες με τη σειρά τους προβλέπεται να είναι εγκατεστημένες στον Database Server. Το Σχήμα δύο (2) απεικονίζει λεπτομερέστερα την πλατφόρμα e-GovLex και τα υποσυστήματά της.
Σχήμα 2: Η πλατφόρμα e-GovLex και τα υποσυστήματά της Διακρίνονται τα εξής υποσυστήματα: Μηχανισμός προφίλ χρήστη: Είναι υπεύθυνος για την διαχείριση των δικαιωμάτων πρόσβασης των χρηστών. Μηχανισμός Διαχείρισης Πληροφορίας: Είναι υπεύθυνος για την δημιουργία ενός ευέλικτου και εύχρηστου γραφικού περιβάλλοντος χρηστών. Επιπρόσθετα, επεξεργάζεται και αναλύει την διερχόμενη πληροφορία. Μηχανισμός Διαχείρισης Οντοτήτων και Μεταδεδομένων: Παρέχει την δυνατότητα στον Μηχανισμό Διαχείρισης της Πληροφορίας να επικοινωνεί απρόσκοπτα και αποτελεσματικά με τη Βάση Οντολογίας και Μεταδεδομένων μέσω web services. Ενσωματώνει την πλήρως δομημένη διεπαφή λογισμικού (Application Programmable Interface) e-GovLex. Παράλληλα, φροντίζει για την διαλειτουργικότητα της πλατφόρμας e-GovLex αναλύοντας και δημιουργώντας ένα σύνολο δομημένων αυτοπεριγραφικών περιβλημάτων πληροφορίας (XML Information Wrappers). Βάση Οντολογίας και Μεταδεδομένων: Ενσωματώνει το σχήμα της οντολογίας e-GovLex (οντότητες, σχέσεις οντοτήτων, ιδιότητες κτλ) και το σύνολο της πληροφορίας που συνδέεται με αυτή. Βάση Αποθήκευσης Δικαιωμάτων Χρηστών: Εμπεριέχει τα προφίλ χρήστη και γενικότερα τα δικαιώματα πρόσβασης των χρηστών στην πλατφόρμα e-GovLex. Μηχανισμός Ασφαλείας: Ενσωματώνει τους μηχανισμούς που επιτρέπουν την δημιουργία ενός ασφαλούς, αξιόπιστου περιβάλλοντος επικοινωνίας και ανταλλαγής πληροφοριών. Στο επόμενο κεφάλαιο θα λάβει χώρα λεπτομερής περιγραφή των υποσυστημάτων της πλατφόρμας eGovLex. Το σχήμα τρία (3) απεικονίζει την ροή της πληροφορίας στην πλατφόρμα e-GovLex.
Σχήμα 3: Η ροή της πληροφορίας στην πλατφόρμα e-GovLex.
ΜΕΡΟΣ Β Η ΟΝΤΟΛΟΓΙΑ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ Με τον όρο οντολογία εννοείται η μελέτη της φύσης των πραγμάτων, στην πληροφορική οντολογία είναι ένας τρόπος μοντελοποίησης ενός τμήματος του πραγματικού κόσμου ώστε να μπορεί να αναπαρασταθεί σε Η/Υ. Στο μέρος αυτό παρουσιάζεται η θεωρία της οντολογίας που χρησιμοποιήθηκε, ο σχεδιασμός του σχήματος οντολογίας του συστήματος και ο τρόπος όπου η οντολογία του συστήματος θα είναι προσβάσιμη από τα υπόλοιπα μέρη του.
Κεφάλαιο 3: Οντολογία Η οντολογία είναι η καρδιά του συστήματος, πρόκειται για έναν μηχανισμό αποθήκευσης και διαχείρισης της πληροφορίας ικανό να αναπαραστήσει την γνώση που περιέχεται στην πληροφορία αυτή. Η πληροφορία βρίσκεται σε μια βάση δεδομένων αλλά ο μηχανισμός της οντολογίας προσθέτει σημαντικά πλεονεκτήματα, κρύβοντας λεπτομέρειες και θέματα που άπτονται των βάσεων δεδομένων δημιουργείται μια συλλογή δεδομένων που προσεγγίζει καλύτερα τα προβλήματα του πραγματικού κόσμου. 3.1 Γενική περιγραφή και επεξήγηση οντολογίας 3.1.1 Κατηγορίες οντοτήτων Οντολογία είναι μια μέθοδος απεικόνισης ενός τμήματος του πραγματικού κόσμου και δομείται από οντότητες και μεταξύ τους σχέσεις. Οι οντότητες μπορούν να αναφέρονται σε οποιοδήποτε αντικείμενο ή κατάσταση και χωρίζονται σε κατηγορίες: Έννοιες Η έννοια είναι μια γενική περιγραφή ενός αντικειμένου, για παράδειγμα στην περίπτωση της διοικητικής οντολογίας που μελετάμε μια έννοια είναι ο δήμος. Η έννοια μπορεί να αναπαραστήσει και μια κατηγορία και να περιέχει υποκατηγορίες ή άλλε ςέννοιες. Στην προκειμένη περίπτωση ο δήμος είναι ένα αντικείμενο το οποίο ανήκει στην κατηγορία των Οργανισμών Τοπικής Αυτοδιοίκησης Ά Βαθμού (ΟΤΑ Α), δηλαδή η έννοια ΟΤΑ Α θεωρείται γονική της έννοιας δήμος. Ιδιότητες Οι ιδιότητες είναι στοιχεία τα οποία ορίζουν μια οντότητα και διαμορφώνουν τις σχέσεις της με τις άλλες. Οι ιδιότητες οι οποίες ορίζουν μια οντότητα αναφέρονται ως χαρακτηριστικά ενώ αυτές που διαμορφώνουν τις σχέσεις της με τις άλλες αναφέρονται ως σχέσεις. Μια ιδιότητα – χαρακτηριστικό θα μπορούσε να είναι η έκταση ενός δήμου και ιδιότητα - σχέση μια σχέση που να δηλώνει σε ποιον νομό ανήκει ένας δήμος. Όταν μια γονική έννοια έχει μια ιδιότητα είναι δυνατό να την κληροδοτεί στις υποέννοιες της αν αυτό χρειάζεται. Στιγμιότυπα Στιγμιότυπα είναι συγκεκριμένα αντικείμενα, για παράδειγμα ο δήμος Αρταίων και ακόμη πιο συγκεκριμένα πρόκειται για στιγμιότυπο έννοιας. Πέρα από τα στιγμιότυπα εννοιών υπάρχουν και τα στιγμιότυπα ιδιοτήτων π.χ. η έκταση του δήμου Αρταίων αν μιλάμε για χαρακτηριστικό ή ότι ο δήμος Αρταίων ανήκει στον νομό Άρτης αν πρόκειται για σχέση.
3.1.2 Μοντέλο ή σχήμα οντολογίας Μοντέλο ή σχήμα οντολογίας είναι ένα χώρος ενσωμάτωσης των εννοιών που αναπαριστά τμήμα του πραγματικού κόσμου. Σε ένα μοντέλο μπορούν να ενσωματώνονται όλοι οι παραπάνω τύποι εννοιών και οι μεταξύ τους σχέσεις ενώ δεν αποκλείεται ένα μοντέλο να περιέχει και άλλα μοντέλα. 3.2 Σχεδιασμός του σχήματος οντολογίας Σχεδιασμός ενός σχήματος οντολογίας είναι η μελέτη και η ανάλυση του συστήματος το οποίο θα αναπαρασταθεί και περιλαμβάνει τον διαχωρισμό των εννοιών, την εύρεση των υποεννοιών, των
χαρακτηριστικών τους και των σχέσεων μεταξύ τους. Στο κομμάτι αυτό παρουσιάζεται συνοπτικά ο σχεδιασμός του μοντέλου για την τοπική αυτοδιοίκηση ξεκινώντας από την παρουσίαση των πλέον βασικών εννοιών, των ιδιοτήτων τους και των χαρακτηριστικών τους. 3.2.1 Έννοιες του σχήματος eGovLex Ο σχεδιασμός της οντολογίας βασίζεται στην δομή της τοπικής αυτοδιοίκησης κατά την συγγραφή της παρούσας πτυχιακής και στην παρακάτω εικόνα (σχήμα 1) υπάρχει ένας γράφος που παρουσιάζει το υψηλότερο επίπεδο εννοιών του σχήματος της οντολογίας.
Σχήμα 1 Ο γράφος θα μπορούσε να παρομοιαστεί με ένα δέντρο του οποίου ο κορμός είναι η οντότητα – έννοια EGOVLEX0 και κάτω από την έννοια αυτή εντάσσονται οι υποέννοιες κάτω από τις οποίες βρίσκονται με την σειρά τους άλλες έννοιες επεκτείνοντας με αυτόν τον τρόπο το δέντρο. Στον παρακάτω πίνακα εμφανίζονται οι έννοιες των πρώτων δυο επιπέδων που είδαμε και στον γράφο. Γονική Έννοια (1ο επίπεδο του σχήματος)
EGOVLEX0
3.2.2 Σχέσεις του σχήματος eGovLex
Υποέννοιες (2ο επίπεδο) ADMINISTRATION LEVEL DOCUMENTS ENTERPRISE HUMAN RESOURCES LOCATION ENTITY OFFICE PUBLIC SERVICES
Όπως για τις οντότητες χρησιμοποιήσαμε για απλούστευση την παρομοίωση με το δέντρο έτσι μπορούμε να επεκτείνουμε το παράδειγμα αυτό και για τις ιδιότητες είτε είναι σχέσεις είτε χαρακτηριστικά. Όσον αφορά τις σχέσεις η πλέον κύρια σχέση, η οποία πηγάζει από την οντότητα EGOVLEX0 και κατά συνέπεια κληροδοτείται και στις υπόλοιπες οντότητες οι οποίες βρίσκονται κάτω από αυτήν, είναι η REPLACED BY. Προχωρώντας στο επόμενο επίπεδο για κάθε μια από τις οντότητες έχουμε άλλες σχέσεις που ξεκινούν από τις οντότητες αυτές και επεκτείνονται και στα επόμενα επίπεδα εάν αυτά υπάρχουν. Στον παρακάτω πίνακα φαίνονται αναλυτικά οι σχέσεις που πηγάζουν από κάθε οντότητα. Έννοια EGOVLEX0
ADMINISTRATION LEVEL
ENTERPRISE HUMAN RESOURCES LOCATION ENTITY OFFICE STATUARY BOARD
Σχέση REPLACED BY ADMINISTRATIVE SUBORDINATION EDUCATIONAL SUBORDINATION ESTABLISHED FINANCIAL SUBORDINATION HAS A LAW SUBORDINATION MANAGERIAL SUBORDINATION MEDICAL SUBORDINATION POLICE SUBORDINATION POSTAL SUBORDINATION RELIGIOUS SUBORDINATION OCCUPIES AS HAS ROLE REGISTERED IN VOTE GEOGRAPHICAL SUBORDINATION IS A HAS DEPARTMENT PUBLISH SERVE USE ADMINISTER MANAGES
Πέρα από αυτές τις σχέσεις στα επόμενα επίπεδα οντοτήτων υπάρχουν και περισσότερο εξειδικευμένες σχέσεις. Αυτές οι οποίες αναγράφονται εδώ είναι οι πιο σημαντικές και οι απολύτως απαραίτητες για την αρχική λειτουργία του συστήματος. Επιπλέον μπορούν να προστεθούν και άλλες από τους χρήστες οι οποίοι παρέχουν πληροφορία στην οντολογία. 3.2.3 Χαρακτηριστικά του σχήματος eGovLex Όπως και στον πραγματικό κόσμο έτσι και στις οντολογίες κάθε οντότητα έχει κάποια χαρακτηριστικά. Τα χαρακτηριστικά που εμφανίζονται στον παρακάτω πίνακα είναι βασικά για την παρούσα οντολογία και συναντώνται σε κάθε οντότητα της. Οντότητα Χαρακτηριστικό EGOVLEX0 ASSIGNED_CODE AVAILABILITY DESCRIPTION_EN
DESCRIPTION_EL DOMAIN LINK LOGS TAG Όπως και για τις σχέσεις ισχύει ότι οι χρήστες της οντολογίας μπορούν μέσω του συστήματος να προσθέσουν επιπλέον χαρακτηριστικά στις οντότητες σύμφωνα με την διαμόρφωση των αναγκών που αυτή καλείται να ικανοποιήσει.
Κεφάλαιο 4: Η πλατφόρμα KAON και η προγραμματιστική διαχείριση των σχημάτων οντολογίας Για τον σχεδιασμό και την διαχείριση της οντολογίας χρησιμοποιήθηκε η πλατφόρμα KAON (Karlsruhe Ontology). Πρόκειται για λογισμικό που δημιουργήθηκε στο πανεπιστήμιο της Καρλσρούης και στοχεύει στον σημασιολογικό ιστό (Semantic Web). Το ΚΑΟΝ Workbench είναι ένα γραφικό περιβάλλον διαχείρισης το οποίο δίνει την δυνατότητα προβολής της οντολογίας σε μορφή γράφου. Οποιαδήποτε επεξεργασία η οποία αφορά την δομή και το περιεχόμενο της οντολογίας μπορεί να πραγματοποιηθεί μέσα από τον γράφο. Το ΚΑΟΝ επίσης παρέχει και μια γλώσσα ερωτημάτων που προσφέρει την δυνατότητα εκτέλεσης ερωτημάτων για την επιστροφή αποτελεσμάτων. Όλες οι λειτουργίες της εφαρμογής αυτής είναι προσβάσιμες και στον προγραμματιστή μέσω του KAON API. Το API του KAON είναι βιβλιοθήκες σε γλώσσα προγραμματισμού JAVA. Η διεπαφή η οποία δημιουργείται από τις βιβλιοθήκες αυτές παρέχει στον προγραμματιστή μεθόδους με απλά και περιγραφικά ονόματα όπου με την χρήση των ανάλογων κάθε φορά ορισμάτων, πραγματοποιούν για αυτόν ένα μεγάλο σύνολο λειτουργιών που αφορούν την βάση δεδομένων στην οποία βρίσκεται αποθηκευμένη η οντολογία. Με τον τρόπο αυτό το KAON API προσθέτει ένα αφαιρετικό επίπεδο και επιτρέπει στον προγραμματιστή να ασχοληθεί περισσότερο με την καθαρή λογική του προβλήματος όπου έχει να λύσει και όχι με το να υλοποιήσει ο ίδιος την λογική μιας οντολογίας ή να διαχειριστεί την βάση δεδομένων. 4.1 Περισσότερα για το ΚΑΟΝ Όπως έχει ήδη αναφερθεί μια οντολογία αποτελείται από έννοιες (concepts), στιγμιότυπα εννοιών (concept instances ή πιο απλά instances) και κάποιες ιδιότητες (properties) οι οποίες θα είναι χαρακτηριστικά (attributes) ή σχέσεις και οι οποίες ιδιότητες επίσης μπορούν να έχουν στιγμιότυπα. Όλα αυτά τα δομικά στοιχεία μιας οντολογίας από μια περισσότερο αφαιρετική οπτική είναι απλά οντότητες (entities).
4.1.1 Έννοιες – Concepts Τα concepts έχουν την δυνατότητα να υπάρχουν είτε ανεξάρτητα σε μια οντολογία είτε εξαρτώμενα από άλλα. Η πιο συχνή περίπτωση είναι η δεύτερη στην οποία ένα αρχικό concept το οποίο λέγεται root αποτελεί τον κορμό του δέντρου της οντολογίας και κάτω από αυτό τοποθετούνται τα υπόλοιπα concepts. Πέρα από τον όρο concept το KAON χρησιμοποιεί και τους όρους superconcept και subconcept για ένα concept. Το αν ένα concept είναι superconcept ή subconcept εξαρτάται από την σκοπιά όπου το εξετάζουμε. Στο σχήμα 2 απεικονίζεται ένα τμήμα της οντολογίας, όλα τα αντικείμενα που εμφανίζονται σε αυτό είναι concepts, για το concept EGOVLEX0 όμως όλα τα υπόλοιπα είναι subconcepts και για αυτά το EGOVLEX0 είναι superconcept. Καθώς επεκτείνεται ο γράφος διακρίνεται η έννοια OFFICE η οποία εξακολουθεί να είναι subconcept του EGOVLEX0 και παράλληλα superconcept για τις έννοιες SECRETARIAT, LAW SERVICE, CITY HALL κ.ο.κ.
Σχήμα 2 4.1.2 Ιδιότητες - Properties Στον πραγματικό κόσμο η κάθε οντότητα διαφέρει από την άλλη και αυτό γίνεται αντιληπτό λόγω των διαφορετικών ιδιοτήτων ή χαρακτηριστικών που η κάθε μια έχει, κατά συνέπεια αν μια οντολογία πρέπει να τον αναπαραστήσει όσο κατά το δυνατόν πιστότερα θα πρέπει να μπορεί να αναπαραστήσει και τις ιδιότητες των οντοτήτων όπου τον συνθέτουν. Το KAON έχει για αυτό τον λόγο το δομικό στοιχείο property (ιδιότητα). Μια ιδιότητα του KAON μπορεί να είναι είτε χαρακτηριστικό είτε σχέση. Οι ιδιότητες-χαρακτηριστικά στο KAON ονομάζονται attributes. Στο σχήμα 3 απεικονίζεται μια έννοια και οι ιδιότητες όπου αυτή διαθέτει όπως εμφανίζεται στο KAON Workbench
Σχήμα 3 Όταν στο ΚΑΟΝ δημιουργείται κάποια ιδιότητα-σχέση πρέπει να ενταχθεί σε κάποια έννοια. Αν αυτή η έννοια διαθέτει υποέννοιες τότε κληρονομούν και αυτές την ιδιότητα, με αυτό τον τρόπο δημιουργείται ένας ιδεατός χώρος για την ιδιότητα ο οποίος λέγεται domain. Οποιαδήποτε οντότητα ανήκει στο domain μιας ιδιότητας μπορεί να έχει ένα στιγμιότυπο αυτής το οποίο θα την συνδέει με μια άλλη. Πέρα από την ένταξη μια ιδιότητας σε έναν χώρο εννοιών, όπως το domain, κατά την δημιουργία της πρέπει να γίνει ένταξη της και σε έναν άλλον χώρο ο οποίος αποκαλείται εύρος (range) της ιδιότητας. Το εύρος της ιδιότητας είναι ο χώρος προς τον οποίο μπορεί να δείχνει μια σχέση και το KAON επιτρέπει την δημιουργία στιγμιότυπων ιδιοτήτων που είναι σχέσεις μόνο μεταξύ του domain και του range.
Σχήμα 4 Για παράδειγμα στην οντολογία που αναπτύχθηκε και μελετάται εδώ έχουμε τις έννοιες ΓΡΑΦΕΙΑ και ΕΓΓΡΑΦΑ και την ιδιότητα ΕΚΔΙΔΕΙ η οποία είναι σχέση όπως φαίνονται στο σχήμα 4. Η ιδιότητα ανήκει στο domain της έννοιας ΓΡΑΦΕΙΑ και έχει range την ΕΓΓΡΑΦΑ, αυτό σημαίνει ότι κάθε γραφείο πιθανόν να εκδίδει ένα έγγραφο δεν μπορεί όμως σε καμία περίπτωση ένα γραφείο να εκδίδει ένα άλλο γραφείο ούτε φυσικά ένα έγγραφο να εκδίδει γραφεία. Οι δυνατότητα ορισμού σχέσεων μεταξύ των οντοτήτων επεκτείνει την λειτουργικότητα σε μεγάλο βαθμό, πόσο μάλλον όταν οι σχέσεις έχουν κάποιες επιπλέον ιδιότητες. Οι επιπλέον ιδιότητες που παρέχει το KAON στις σχέσεις φαίνονται παρακάτω: Συμμετρικές σχέσεις (Symmetric properties): για παράδειγμα αν η οντότητα Α έχει σχέση με την Β και είναι συμμετρική τότε ακριβώς την ίδια σχέση έχει και η οντότητα Β με την Α. Σχέσεις μετάβασης (Transitive properties): ο όρος μετάβαση χρησιμοποιείται για να δηλώσει την δυνατότητα μετάβασης από μια οντότητα σε άλλη ως εξής, έστω η σχέση Σ δίνει δυνατότητα μετάβασης, αν η Α σχετίζεται με την Β με την σχέση Σ, και η Β σχετίζεται με την Γ επίσης με την σχέση Σ, τότε το KAON συμπεραίνει ότι η οντότητα Α σχετίζεται με την Γ. Αντίθετες σχέσεις (Inverse properties): ας θεωρήσουμε δύο σχέσεις, την «είναι γονέας του» και την «είναι τέκνο του». Επίσης η «είναι τέκνο του» είναι αντίθετη της «είναι γονέας του». Σε αυτή την περίπτωση αν η οντότητα Α είναι γονέας της Β τότε το KAON εξάγει το συμπέρασμα ότι η οντότητα Β είναι τέκνο της οντότητας Α. 4.1.3 Κάποιες ακόμα δυνατότητες Ενσωμάτωση οντοτήτων από άλλες οντολογίες (Modularization): Μια οντολογία μπορεί να ενσωματώσει έννοιες και στιγμιότυπα από άλλες οντολογίες ή ακόμα και ολόκληρες οντολογίες.
Λεξικογραφική πληροφορία (Lexical layer): Το KAON δίνει την δυνατότητα αποθήκευσης λεξικογραφικής πληροφορίας για κάθε οντότητα. Αυτό σημαίνει χρήση ονομάτων, περιγραφών και πολλών ακόμα άλλων δεδομένων ανάλογα με τις απαιτήσεις που υπάρχουν. Πολλή σημαντική είναι η δυνατότητα πολυγλωσσικής υποστήριξης από το KAON, κάθε οντότητα μπορεί να έχει τόσα ονόματα ή περιγραφές όσες και οι γλώσσες που χρειάζονται. 4.2 Προγραμματιστική διαχείριση οντολογιών - KAON API Στο κομμάτι αυτό περιγράφεται η προγραμματιστική διεπαφή (API) του KAON, το KAON API περιέχεται σε ένα αρχείο το kaonapi.jar και περιλαμβάνεται στο πακέτο (package) edu.unika.aifb.kaon.api. Το πακέτο αυτό χωρίζεται σε τέσσερα υποπακέτα (subpackages). Τα οποία είναι: 1) oimodel (Ontology Instance Model): παρέχει τις διεπαφές για την αναπαράσταση οντοτήτων και μοντέλων οντολογιών. 2) change: περιέχει κλάσεις απαραίτητες για τις αλλαγές στην οντολογία και στις οντότητες. 3) util: περιέχει κλάσεις που εξυπηρετούν γενικές λειτουργίες σε μια οντολογία. 4) vocabulary: κλάσεις οι οποίες χρησιμοποιούνται για την ονοματοδοσία των οντοτήτων. Παρακάτω αναφέρονται μόνο οι πιο σημαντικές κλάσεις και οι μέθοδοι που χρησιμοποιήθηκαν περισσότερο καθώς μια εκτενής αναφορά ξεφεύγει από τον σκοπό αυτής της πτυχιακής, περισσότερες πληροφορίες για το KAON βρίσκονται στον δικτυακό τόπο http://kaon.semanticweb.org/ 4.2.1 oimodel Στο KAON η βασική μονάδα πληροφορίας είναι το OI-model (Ontology-instance model). Η βασική αυτή μονάδα πληροφορίας περιέχει τις έννοιες, τις ιδιότητες και τα στιγμιότυπα αυτών. Η αναπαράσταση ενός OI-model γίνεται μέσω της διεπαφής OI-model που παρέχει το API. Στην διεπαφή αυτή περιέχονται οι κλάσεις που περιγράφουν τα θεμελιώδη συστατικά μιας οντολογίας του KAON και μέθοδοι για την χρήση τους. Οι κλάσεις που ανήκουν στο oimodel και χρησιμοποιήθηκαν είναι οι: Concept, Entity, Instance, LexicalEntry, OIModel, Property, PropertyInstance και κάθε μια από αυτές αναπαριστά και το αντίστοιχο αντικείμενο μιας οντολογίας KAON. 4.2.1.1 Concept class Η κλάση Concept αναπαριστά την έννοια και περιέχει μεθόδους σχετικές με αυτήν. Οι μέθοδοι που χρησιμοποιήθηκαν δέχονται ως παράμετρο μια έννοια, η έννοια απεικονίζεται από τον τύπο δεδομένων edu.unika.aifb.kaon.api.oimodel.Concept που παρέχει το KAON API ενώ τα αποτελέσματα επιστρέφονται στον τύπο δεδομένων Java.util.Set που παρέχεται από την JAVA και μπορεί να περιέχει μια συλλογή αντικειμένων. Έχει τις παρακάτω μεθόδους: getAllInstances(): επιστρέφει τα στιγμιότυπα μιας έννοιας, συμπεριλαμβανομένων και αυτών των υποεννοιών (subconcepts). getAllPropertiesFromConcept(): επιστρέφει τις ιδιότητες μιας έννοιας και αυτές τις οποίες κληρονομεί από άλλες έννοιες. getAllPropertiesToConcept(): επιστρέφει όλες τις ιδιότητες – σχέσεις όπου έχουν την έννοια αυτή ορισμένη ως εύρος τους. Στις ιδιότητες αυτές συμπεριλαμβάνονται και αυτές που έχουν εύρος κάποια έννοια η οποία βρίσκεται σε υψηλότερο επίπεδο.
getAllSubConcepts(): επιστρέφει τις υποέννοιες μιας έννοιας καθώς και τις υποέννοιες που ανήκουν στις υποέννοιες της. getInstances(): Επιστρέφει τα στιγμιότυπα μιας έννοιας. getPropertiesFromConcept(): Επιστρέφει τις ιδιότητες που ορίζονται σε μια έννοια. getPropertiesToConcept(): Επιστρέφει τις ιδιότητες οι οποίες έχουν ως εύρος μια έννοια. getSubConcepts(): επιστρέφει τις υποέννοιες μιας έννοιας. getSuperConcepts(): επιστρέφει τις έννοιες του αμέσως υψηλότερου επιπέδου για τις οποίες είναι υποέννοια. 4.2.1.2 Entity class Η κλάση αυτή αναπαριστά κάθε οντότητα για αυτό και οι μέθοδοι είναι κοινές και για τις έννοιες, τις ιδιότητες καθώς και για τα στιγμιότυπα αυτών. Java.lang.String getLabel (java.lang.String): Επιστρέφει την ετικέτα (όνομα) μιας οντότητας. java.lang.String getLexicalAttribute(java.lang.String, java.lang.String, java.lang.String): επιστρέφει την λεξικογραφική αναφορά μιας οντότητας. edu.unika.aifb.kaon.api.oimodel.LexicalEntry getLexicalEntry(java.lang.String, επιστρέφει την λεξικογραφική αναφορά μιας οντότητας.
java.lang.String):
edu.unika.aifb.kaon.api.oimodel.Instance getSpanningInstance(): επιστρέφει ένα SpanningInstance το οποίο είναι για το KAON ένα απλό instance μόνο που σκοπός του είναι να επεκτείνει μια οντότητα και όχι να δημιουργήσει ένα στιγμιότυπο της. java.lang.String getURI(): επιστρέφει το URI μιας οντότητας. Το URI είναι η ταυτότητα μιας οντότητας στην οντολογία και είναι μοναδικό για την κάθε μια. boolean isInOIModel(): επιστρέφει true αν μια οντότητα υπάρχει στο μοντέλο της οντολογίας. 4.2.1.3 Instance class Αναπαριστά τα στιγμιότυπα και διαθέτει μεθόδους για τον χειρισμό τους. java.lang.Object getFromPropertyValue(edu.unika.aifb.kaon.api.oimodel.Property): συγκεκριμένο στιγμιότυπο την τιμή μιας συγκεκριμένης ιδιότητας του.
επιστρέφει
για
java.util.Set getFromPropertyInstances(): επιστρέφει τις ιδιότητες ενός στιγμιότυπου. java.util.Set getParentConcepts(): επιστρέφει τις έννοιες στις οποίες ανήκουν τα στιγμιότυπα. java.util.Set getToPropertyValues(): επιστρέφει τις ιδιότητες ενός άλλου στιγμιότυπου που δείχνουν προς αυτό.
4.2.1.4 LexicalEntry class Αναπαριστά τις λεξικογραφικές αναφορές. java.lang.String getValue(): επιστρέφει την τιμή μιας λεξικογραφικής αναφοράς. 4.2.1.5 OIModel class Η κλάση αυτή αναπαριστά το μοντέλο της οντολογίας. Χρησιμοποιήθηκαν οι παρακάτω μέθοδοι: void applyChanges(java.util.List): δέχεται ως παράμετρο ένα List το οποίο περιέχει τις αλλαγές που θα γίνουν στο μοντέλο. java.lang.String createNewURI(): δημιουργεί ένα καινούριο URI. java.util.Collection executeQuery(java.lang.String): εκτελεί ερωτήματα και επιστρέφει τα αποτελέσματα σε Collection. void refresh(): σε περίπτωση όπου έχουν συμβεί αλλαγές στο μοντέλο από όταν φορτώθηκε στην διεργασία αυτή χωρίς η ίδια να είναι ενήμερη και καλείται αυτή η μέθοδος το μοντέλο ενημερώνεται σύμφωνα με τις αλλαγές που έγιναν. void save(): η μέθοδος αυτή αποθηκεύει το μοντέλο στην οντολογία. 4.2.1.6. Property class Αναπαριστά την ιδιότητα και περιέχει μεθόδους που αναφέρονται σε αυτή. java.util.Set getPropertyInstances(): επιστρέφει τα στιγμιότυπα μίας ιδιότητας. java.util.Set getRangeConcepts(): επιστρέφει τις έννοιες στων οποίων τα στιγμιότυπα μπορεί να στοχεύει ένα στιγμιότυπο της ιδιότητας αυτής. boolean isAttribute(): επιστρέφει true αν μια ιδιότητα είναι χαρακτηριστικό (attribute), αν η ιδιότητα είναι σχέση επιστρέφει false. 4.2.1.7. PropertyInstance class Η κλάση αυτή αναφέρεται στο στιγμιότυπο της ιδιότητας. Οι μέθοδοι που χρησιμοποιήθηκαν είναι οι παρακάτω: edu.unika.aifb.kaon.api.oimodel.Property getProperty(): Επιστρέφει την ιδιότητα της οποίας είναι στιγμιότυπο. edu.unika.aifb.kaon.api.oimodel.Instance getSourceInstance(): Η μέθοδος αυτή για ένα δεδομένο στιγμιότυπο ιδιότητας επιστρέφει το στιγμιότυπο έννοιας στο οποίο ανήκει.
java.lang.Object getTargetValue(): Επιστρέφει την τιμή ενός στιγμιότυπου ιδιότητας, η τιμή αυτή μπορεί να είναι αλφαριθμητικό (String) ή στιγμιότυπο έννοιας (Instance). 4.2.2 change Στην διεπαφή change βρίσκονται όλες οι μέθοδοι οι οποίες μπορούν να επιφέρουν αλλαγές στην οντολογία. Με τον όρο αλλαγές εννοούνται λειτουργίες όπως προσθήκη μιας οντότητας στη οντολογία και καθορισμός αυτής ως έννοια, στιγμιότυπο ή ιδιότητα AddEntity class Η κλάση αυτή χρησιμοποιείται για την εισαγωγή μιας οντότητας στο σχήμα της οντολογίας. Διαθέτει ένα πεδίο την m_entity και για την εισαγωγή χρησιμοποιήθηκε η παρακάτω συνάρτηση δημιουργίας (constructor): AddEntity (Entity entity) AddInstanceOf class Χρησιμοποιείται για να προστεθεί ένα στιγμιότυπο σε μια έννοια. Έχει δυο πεδία, m_concept και m_instance, και για την εισαγωγή χρησιμοποιήθηκε η παρακάτω συνάρτηση δημιουργίας: AddInstanceOf(Concept concept, Instance instance) AddPropertyDomain class Χρησιμοποιείται για να ορίσει τον χώρο των οντοτήτων οι οποίες θα διαθέτουν μια ιδιότητα. Χρειάζεται δυο πεδία, ένα για την έννοια η οποία θα διαθέτει την ιδιότητα και ένα για την ιδιότητα, m_concept και m_property αντίστοιχα. Σημειωτέον ότι την ιδιότητα θα διαθέτει όχι μόνο η έννοια η οποία αναφέρεται αλλά και αυτές που ανήκουν σε αυτήν. Χρησιμοποιήθηκε η παρακάτω συνάρτηση: AddPropertyDomain(Property property, Concept concept) AddPropertyInstance class Χρησιμοποιείται για να προσθέσει σε ένα στιγμιότυπο (instance) ένα στιγμιότυπο ιδιότητας (property instance). Η συνάρτηση δημιουργίας που χρησιμοποιήθηκε είναι η AddPropertyInstance(PropertyInstance propertyInstance) AddPropertyRange class Η κλάση αυτή χρησιμοποιείται για να ορίσει το εύρος μιας ιδιότητας. Διαθέτει ένα πεδίο για την έννοια που θα ορίζει το εύρος και ένα για την ιδιότητα. Ισχύει και σε αυτή την περίπτωση ότι την ιδιότητα δεν την διαθέτει μόνο η αναφερόμενη έννοια αλλά και όσες ανήκουν σε αυτήν. Για τον ορισμό του εύρους χρησιμοποιείται η παρακάτω συνάρτηση: AddPropertyRange(Property property, Concept concept) AddSubCocnept.class Η κλάση αυτή χρησιμοποιείται για τον ορισμό μιας έννοιας ως υποέννοια μιας άλλης, κατά συνέπεια χρειάζεται δυο πεδία, m_subConcept για την υποέννοια και m_superConcept για την έννοια. Η συνάρτηση που χρησιμοποιήθηκε είναι η: AddSubConcept(Concept concept, Concept concept) RemoveEntity.class Η κλάση αυτή χρησιμοποιείται για την απομάκρυνση μιας οντότητας από το σχήμα της οντολογίας. Έχει ένα πεδίο, το m_Entity και χρησιμοποιήθηκε η συνάρτηση: RemoveEntity(Entity entity) RemoveInstanceOf.Class Η κλάση αυτή αφαιρεί ένα στιγμιότυπο από μια έννοια χωρίς το στιγμιότυπο να διαγράφεται όμως. Χρησιμοποιήθηκε η συνάρτηση: RemoveInstanceOf(Concept concept, Instance instance)
RemovePropertyDomain.class Η κλάση αυτή αφαιρεί μια έννοια από το domain μιας ιδιότητας. Χρησιμοποιήθηκε η συνάρτηση RemovePropertyDomain(Property property, Concept concept) RemovePropertyInstance.class Η κλάση αυτή αφαιρεί ένα στιγμιότυπο μιας ιδιότητας. Χρησιμοποιήθηκε η συνάρτηση: RemovePropertyInstance(PropertyInstance propertyInstance) RemovePropertyRange.class Η κλάση αυτή αφαιρεί μια έννοια από το εύρος (range) μιας ιδιότητας. Χρησιμοποιήθηκε η συνάρτηση: RemovePropertyRange(Property property, Concept concept) RemoveSubConcept.class Η κλάση αυτή χρησιμοποιείται για να απομακρύνει μια υποέννοια από μια έννοια. Χρησιμοποιήθηκε η συνάρτηση RemoveSubConcept(Concept superconcept, Concept subConcept) SetPropertyIsAttribute.class Όπως προαναφέρθηκε το KAON δίνει την δυνατότητα μια ιδιότητα να είναι χαρακτηριστικό ή σχέση, το τι από τα δυο θα είναι ορίζεται με την κλάση SetPropertyIsAttribute. Η συνάρτηση που χρησιμοποιήθηκε είναι: SetPropertyIsAttribute(Property property, boolean isAttribute). 4.2.3 util Η βιβλιοθήκη util περιέχει κλάσεις για γενικές λειτουργίες της οντολογίας. Από αυτές χρησιμοποιήθηκε η κλάση LexiconUtil.class η οποία υλοποιεί βασικές λειτουργίες που αφορούν τις λεξικογραφικές αναφορές. Από την κλάση αυτή χρησιμοποιήθηκε η παρακάτω μέθοδος: createLexicalEntry(LexicalEntry lexicalEntry, java.lang.String typeURI, java.lang.String value, Entity entity, java.util.List list).
java.lang.String languageURI,
Η μέθοδος αυτή χρησιμοποιείται για να δημιουργήσει μια λεξικογραφική αναφορά. Οι παράμετροι που χρειάζεται είναι με τη σειρά, ένα LexicalEntry αντικείμενο, του οποίου ο τύπος ορίζεται από την επόμενη παράμετρο που είναι τύπου String, ακολουθεί η τιμή της λεξικογραφικής αναφοράς σε μεταβλητή τύπου String, ενώ επίσης τον ίδιο τύπο έχει και η επόμενη παράμετρος η οποία ορίζει την γλώσσα της συγκεκριμένης λεξικογραφικής αναφοράς, ακολουθεί μια οντότητα στην οποία θα αποδοθεί η λεξικογραφική αναφορά και τέλος η λίστα. Στην λίστα τοποθετείται όλη η σχετική πληροφορία που χρειάζεται για την εισαγωγή του νέου στοιχείου.
4.2.4 vocabulary KAONVocabularyAdaptor.class: Περιέχει μεθόδους που χειρίζονται τους τύπους της λεξικογραφικής πληροφορίας και χρειάζονται σε λειτουργίες που αφορούν αυτού του είδους την πληροφορία. String getDocumentation(): το String που επιστρέφει περιέχει το URI του Documentation ως τύπου και όχι αυτό μιας συγκεκριμένης λεξικογραφικής αναφοράς. String getKAONLabel(): επιστρέφει το URI του τύπου Label.
String getLanguageURI(String language): δέχεται την γλώσσα για να επιστρέψει το URI της. Οι μέθοδοι που αναφέρθηκαν όταν καλούνται θα πρέπει να τοποθετούνται εντός try – catch blocks γιατί δημιουργούν (throws) εξαιρέσεις: edu.unika.aifb.kaon.api.KAONException.
ΜΕΡΟΣ Γ ΔΙΑΔΙΚΤΥΑΚΕΣ ΥΠΗΡΕΣΙΕΣ WEB SERVICES Διαδικτυακές υπηρεσίες ή web services είναι ειδική κατηγορία εφαρμογών που στόχο έχουν να προσφέρουν τις υπηρεσίες τους σε άλλες εφαρμογές του διαδικτύου. Πρόκειται για μια τεχνολογία η οποία έδωσε την δυνατότητα σε διάφορες εφαρμογές να χρησιμοποιούν δεδομένα από πληθώρα πηγών χωρίς να χρειάζεται να γνωρίζουν το που αυτά βρίσκονται. Το που βρίσκονται τα δεδομένα και πως θα ανακτηθούν είναι κάτι που αφορά την διαδικτυακή υπηρεσία, το μόνο που χρειάζεται να κάνει ο δημιουργός μιας εφαρμογής είναι να αξιοποιήσει την υπηρεσία που χρειάζεται. Στα κεφάλαια που ακολουθούν περιγράφεται η τεχνολογία στην οποία στηρίζονται οι διαδικτυακές υπηρεσίες, ο τρόπος λειτουργίας τους και ο σχεδιασμός των διαδικτυακών υπηρεσιών του συστήματος.
Κεφάλαιο 5: Web Services - Διαδικτυακές υπηρεσίες Όπως προαναφέρθηκε το σύστημα το οποίο παρουσιάζεται χρησιμοποιεί την αρχιτεκτονική πελάτηεξυπηρετητή τριών επιπέδων. Το 2ο επίπεδο το οποίο βρίσκεται ανάμεσα στον πελάτη και στην βάση δεδομένων είναι το επίπεδο του μεσισμικού το οποίο στην περίπτωση αυτή έχει υλοποιηθεί με JAVA Web Services. Web Services είναι μια τεχνολογία προσανατολισμένη στο διαδίκτυο που επιτρέπει στις εφαρμογές που την αξιοποιούν, ανεξαρτήτως πλατφόρμας και γλώσσας προγραμματισμού, να επικοινωνούν και να ανταλλάσσουν δεδομένα. Τα web services στοχεύουν στον χώρο των κατανεμημένων συστημάτων και έρχονται να αντικαταστήσουν παλαιότερες τεχνολογίες και να εξαλείψουν τα μειονεκτήματα αυτών. Μια εφαρμογή web service εκτελείται από μια εφαρμογή η οποία λέγεται εξυπηρετητής εφαρμογών (application server). Σκοπός του web service όπως προκύπτει και από το όνομα του είναι η παροχή υπηρεσιών όπως η αποθήκευση ή ανάκτηση δεδομένων ή η εκτέλεση πολύπλοκων υπολογισμών. Ένα Web service μπορεί να καλεί με την σειρά του ένα άλλο για να επεκτείνει τις δυνατότητες του κ.ο.κ.. Αν η οντολογία είναι η καρδιά του συστήματος που παρουσιάζουμε, τότε τα Web services είναι ο εγκέφαλος του. Το μεσισμικό είναι αυτό το οποίο έχει άμεση πρόσβαση στην οντολογία και μεσολαβεί ανάμεσα σε αυτήν και τα άλλα υποσυστήματα ή εφαρμογές που αξιοποιούν την οντολογία.
5.1 Η τεχνολογία των Web Services Η τεχνολογία των Web Services επιτρέπει την δημιουργία εφαρμογών που μπορούν να εκτελούνται σε έναν εξυπηρετητή και να είναι προσβάσιμες μέσω του διαδικτύου και πιο συγκεκριμένα μέσω του παγκόσμιου ιστού από οποιονδήποτε υπολογιστή – πελάτη, στηρίζεται κυρίως στο πρωτόκολλο HTTP και χρησιμοποιεί την αρχιτεκτονική πελάτη – εξυπηρετητή (client - server). Οι εφαρμογές web services είναι αυτό-περιγραφόμενες (self-describing) και μπορούν όχι μόνο να κληθούν μέσω του Internet αλλά και να δημοσιευθούν και να εντοπιστούν προσφέροντας την πληροφορία που απαιτείται για να χρησιμοποιηθούν σωστά. Η αρχιτεκτονική των web services χωρίζεται σε τρία μέρη: 1. Πάροχος της υπηρεσίας (service provider), παρέχει τις υπηρεσίες και διατηρεί ένα κατάλογο με αυτές. 2. Πελάτης (service requester), χρησιμοποιεί μια υπηρεσία που διατίθεται από έναν πάροχο για την εκτέλεση κάποιας εργασίας. 3. Μεσίτης (service broker), αναλαμβάνει την διαφήμιση της υπηρεσίας και βοηθά τον πελάτη να βρει την υπηρεσία που θα καλύψει τις ανάγκες του όπως φαίνεται και στο παρακάτω σχήμα. Η αρχιτεκτονική των web services βασίζεται σε ένα σύνολο τεχνολογιών οι οποίες χρησιμοποιούνται για την περιγραφή των εφαρμογών, για την δημοσίευση τους και για την επικοινωνία τους με τις εφαρμογές – πελάτες.
Αρχιτεκτονική των Web Services Ο παροχέας (service provider) διαθέτει τα web services τα οποία περιγράφονται με την τεχνολογία WSDL και τα δημοσιοποιεί μέσω του μεσίτη (service broker) ο οποίος χρησιμοποιεί την τεχνολογία UDDI. Ο πελάτης (service requester) αναζητά μέσω του μεσίτη την υπηρεσία που τον ενδιαφέρει και χρησιμοποιεί την τεχνολογία WSDL για να κατανοήσει την λειτουργία της. Τέλος η εφαρμογή πελάτης επικοινωνεί την εφαρμογή web service με σκοπό την αξιοποίηση της, η μεταξύ τους επικοινωνία γίνεται με την χρήση του πρωτοκόλλου SOAP και των μηνυμάτων αυτού. Οι τεχνολογίες από τις οποίες συντίθενται τα web services παρουσιάζονται παρακάτω. 5.2 XML XML (eXtensible Markup Language) είναι μια γλώσσα περιγραφής όπου με το, γενικό, συντακτικό της χρησιμοποιείται για την περιγραφή δεδομένων με απλό τρόπο και με την χρήση ετικετών (tags) ώστε να είναι εύκολο να συνταχθεί και να διαβαστεί ακόμα και με έναν επεξεργαστή κειμένου. Το συντακτικό της είναι γενικό ώστε να μπορεί να μπορεί να τροποποιηθεί ανάλογα με τις ανάγκες και να δημιουργηθούν ανάλογες ετικέτες περιγραφής δεδομένων. Στις παρακάτω γραμμές ακολουθεί ένα XML παράδειγμα στο οποίο περιγράφεται ένας δήμος, ο δήμος Αρταίων με ID=001 και ένα δημοτικό διαμέρισμα: <Municipality ID="001"> <name>Άρταίων</name> <MunicipalPart> <name>Αρταίων</name> </MunicipalPart> </Municipality> Στο παραπάνω παράδειγμα μπορούμε να δούμε την ευελιξία που έχουμε στο συντακτικό δημιουργώντας ετικέτες ανάλογα με τις ανάγκες. Λόγω αυτής της ευελιξίας όμως χρειάζεται ένας τρόπος να ελέγχεται από την εφαρμογή η ορθότητα του XML εγγράφου. Αρχικά προτάθηκε το DTD (Document Type Definition), σύμφωνα με αυτή την λύση σε κάθε XML έγγραφο υπάρχει ένα προοίμιο όπου σύμφωνα με τους κανόνες όπου το DTD θεσπίζει καθορίζονται οι ετικέτες που θα χρησιμοποιηθούν και περιγράφεται η δομή που θα ακολουθηθεί για την περιγραφή των δεδομένων. Οι προσπάθειες για περαιτέρω βελτίωση του ελέγχου ορθότητας οδήγησαν στο XML Schema. Λόγω της ευρείας χρήσης στης XML στο διαδίκτυο δημιουργείται συχνά η λανθασμένη εντύπωση ότι η XML είναι η διάδοχος της HTML αυτό όμως δεν ισχύει καθώς η XML χρησιμοποιείται για την οργάνωση και την μεταφορά των δεδομένων ενώ η HTML παραμένει υπεύθυνη για την μορφοποίηση τους και την προβολή στον χρήστη. Τα πλεονεκτήματα της XML είναι: •
Η εύκολη σύνταξη,
•
Η επεκτασιμότητα,
•
Η ανεξαρτησία από πλατφόρμα,
•
Η προτυποποίηση της από τον οργανισμό W3C (World Wide Web Consortium),
•
Η ευκολία στον διαμοιρασμό και μεταφορά δεδομένων,
•
Χάρη στην επεκτασιμότητα μπορεί εύκολα να αποτελέσει βάση για άλλες γλώσσες όπως: 1. 2. 3. 4. 5. 6.
XHTML, η τελευταία έκδοση της HTML, WSDL, περιγραφή web services, WAP και WML, γλώσσες μορφοποίησης για κινητά τηλέφωνα, RSS γλώσσες RDF και OWL για την περιγραφή πηγών και οντολογιών, SMIL για εφαρμογές πολυμέσων.
Η XML αποτελεί την πλέον χρησιμοποιούμενη τεχνολογία στα Web Services καθώς αποτελεί βάση των WSDL, SOAP και UDDI και με αυτήν περιγράφονται οι λειτουργίες τους και μορφοποιούνται τα μηνύματα τους.
5.3 WSDL Είναι μια γλώσσα που περιγράφει εφαρμογές web services (Web Services Description Language) βασιζόμενη στην γλώσσα XML. Ένα έγγραφο WSDL περιέχει όλη την πληροφορία που χρειάζεται για να γίνει χρήση εφαρμογής Web Service, από την διεύθυνση της μέχρι τα δεδομένα που ανταλλάσονται. Παρακάτω ακολουθεί ένα παράδειγμα WSDL: <?xml version="1.0" encoding="UTF-8" ?> <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:SetWebService/wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns2="urn:SetWebService/types" name="SetWebService" targetNamespace="urn:SetWebService/wsdl"> <types> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="urn:SetWebService/types" xmlns:soap11enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" targetNamespace="urn:SetWebService/types"> <complexType name="Set"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> <element name="String_3" type="string" nillable="true" /> <element name="arrayOfString_4" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType> <complexType name="SetResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> <element name="Set" type="tns:Set" /> <element name="SetResponse" type="tns:SetResponse" /> </schema> </types> <message name="SetWebServiceSEI_Set"> <part name="parameters" element="ns2:Set" /> </message>
<message name="SetWebServiceSEI_SetResponse"> <part name="result" element="ns2:SetResponse" /> </message> <portType name="SetWebServiceSEI"> <operation name="Set"> <input message="tns:SetWebServiceSEI_Set" /> <output message="tns:SetWebServiceSEI_SetResponse" /> </portType> <binding name="SetWebServiceSEIBinding" type="tns:SetWebServiceSEI"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> <operation name="Set"> <soap:operation soapAction="" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> </binding> <service name="SetWebService"> <port name="SetWebServiceSEIPort" binding="tns:SetWebServiceSEIBinding"> <soap:address location="http://host:8081/EgovLexBackend/SetWebService" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" /> </port> </service> </definitions>
Εκ πρώτης όψεως η WSDL περιγραφή φαίνεται μάλλον δυσνόητη αλλά κοιτώντας την λίγο προσεκτικότερα μπορούμε εύκολα να συμπεράνουμε τις λειτουργίες που περιγράφει. Κάθε μέθοδος του Web Service βρίσκεται ανάμεσα στις ετικέτες <complexType> </complexType>, η ετικέτα περιλαμβάνει την παράμετρο name, με την παράμετρο αυτή δηλώνεται το όνομα της μεθόδου. Ανάμεσα τους βρίσκεται η ετικέτα <sequence> </sequence>, μέσα στην οποία βρίσκεται η ετικέτα <element />. Κάθε ετικέτα <element /> αναπαριστά μια από τις παραμέτρους της μεθόδου και διαθέτει τις παραμέτρους name και type οι οποίες δηλώνουν το όνομα και τον τύπο αντίστοιχα της παραμέτρου αντίστοιχα. Το έγγραφο WSDL που συνοδεύει κάθε web service βρίσκεται στον ίδιο εξυπηρετητή με αυτό και είναι προσβάσιμο μέσω του πρωτοκόλλου HTTP επιτυγχάνοντας την αυτό-περιγραφή των εφαρμογών. 5.4 SOAP Είναι ένα πρωτόκολλο ανταλλαγής δεδομένων (Simple Object Access Protocol) που χρησιμοποιείται σε κατανεμημένα συστήματα και στηρίζεται στην τεχνολογία XML για την εκτέλεση απομακρυσμένων μεθόδων (Remote Procedure Call). Το πρωτόκολλο αποτελείται από τρία διακριτά τμήματα: 1. Αναλαμβάνει την γενική περιγραφή ενός μηνύματος. 2. Υλοποιεί κανόνες για την περιγραφή σύνθετων τύπων δεδομένων. 3. Ρυθμίζει την επικοινωνία μεταξύ των συνδιαλεγόμενων μερών. Τα τρία αυτά μέρη κατ’ αντιστοιχία συναντώνται και στα μηνύματα του πρωτοκόλλου αυτού. Το πρώτο τμήμα ουσιαστικά δημιουργεί την συσκευασία για τα δεδομένα που μεταφέρονται για αυτό και αναφέρεται ως Envelope (φάκελος), το δεύτερο δημιουργεί το κυρίως μέρος του μηνύματος που στόχο έχει να αναπαραστήσει τα δεδομένα που αποστέλλονται, όπου με την δυνατότητα περιγραφής σύνθετων τύπων δεδομένων δίνεται επεκτασιμότητα στο πρωτόκολλο. Το τρίτο ρυθμίζει θέματα όπως τις κλήσεις
RPC (Remote Procedure Call) και το πρωτόκολλο που θα υποστηρίξει το SOAP, συνήθως χρησιμοποιείται το HTTP, χωρίς όμως να αποκλείονται άλλα όπως το SMTP ή το FTP.
Το πρωτόκολλο SOAP διακρίνεται για μια σειρά από πλεονεκτήματα όπως: •
η απλότητα του που συνεισφέρει στην μείωση του κόστους και της δυσκολίας υλοποίησης,
•
ανεξαρτησία από πλατφόρμα και γλώσσα προγραμματισμού,
•
χρησιμοποιεί γνωστά πρωτόκολλα όπως το HTTP και το SMTP ως μέσα μεταφοράς οπότε μπορεί να χρησιμοποιηθεί στο διαδίκτυο παρακάμπτοντας τα τείχη προστασίας,
•
Το SOAP είναι επεκτάσιμο. Αν και δεν προσφέρει τόσες πολλές λειτουργίες όσο άλλες τεχνολογίες όπως το CORBA και το DCOM επιτρέπει σε άλλα πρότυπα να το επεκτείνουν.
5.5 UDDI Το πλήθος εφαρμογών web services δημιούργησε την ανάγκη ύπαρξης καταλόγων όπου όσοι παρέχουν εφαρμογές θα μπορούν να τις δημοσιοποιήσουν και όσοι ενδιαφέρονται για χρήση υπηρεσιών θα μπορούν να ψάξουν. Την ανάγκη αυτή καλύπτει το UDDI, πρόκειται για πρότυπο που αφορά τα μητρώα καταχώρησης εφαρμογών Web Services (Universal Description Discovery and Integration) το οποίο στηρίζεται στην γλώσσα XML και παρέχει πληροφορίες για τις υπηρεσίες που παρέχει κάθε εφαρμογή, ποιος παρέχει την εφαρμογή και πως αυτή μπορεί να χρησιμοποιηθεί καθώς παρέχει και τεχνικές λεπτομέρειες μιας εφαρμογής χρησιμοποιώντας την WSDL περιγραφή. Τα μητρώα καταχώρησης web services που ακολουθούν το πρότυπο UDDI μπορούν να διασυνδέονται όπως συμβαίνει στην περίπτωση του DNS αλλά υπάρχει η δυνατότητα δημιουργίας και ιδιωτικών μητρώων, χαρακτηριστικό ιδιαίτερα χρήσιμο σε επιχειρήσεις και οργανισμούς όπου ίσως χρειάζεται μια μέθοδος οργάνωσης των υπηρεσιών τους. Κάθε πάροχος ενός web service μπορεί να καταχωρήσει τρεις τύπους πληροφορίας όπου αντιστοιχούν στα παρακάτω στοιχεία του UDDI: 1. White pages: περιέχει πληροφορίες που αφορούν τον πάροχο, όπως όνομα, διεύθυνση, τηλέφωνο. 2. Yellow pages: περιέχει περισσότερες πληροφορίες που αφορούν τον πάροχο όπως οι υπηρεσίες που παρέχει. 3. Green pages: περιέχει τις τεχνικές πληροφορίες που ενδιαφέρουν τον πελάτη (service requestor) όπως τις διεπαφές, τις διευθύνσεις και τις υπόλοιπες που αφορούν την εκμετάλλευση ενός web service. Πρέπει να σημειωθεί ότι το UDDI δεν είναι μόνο για καταχώρηση web services που χρησιμοποιούν το πρωτόκολλο SOAP αλλά για οποιαδήποτε υπηρεσία όπως μια απλή ιστοσελίδα, μια διεύθυνση ηλεκτρονικού ταχυδρομείου ή άλλες υπηρεσίες όπως CORBA.
5.6 Πλεονεκτήματα των Web Services Τα σημαντικότερα πλεονεκτήματα των web services είναι: • ανεξαρτησία πλατφόρμας και γλώσσας προγραμματισμού, • εύκολη επικοινωνία μεταξύ των εφαρμογών, • εύκολος χειρισμός των δεδομένων,
•
γρήγορη ανάπτυξη κατανεμημένων συστημάτων.
Με την δημιουργία μιας εφαρμογής Web Service δημιουργείται μια διεπαφή λογισμικού προσβάσιμη από το διαδίκτυο μέσω πρωτοκόλλων όπως το HTTP, εν συνεχεία ο προγραμματιστής μιας άλλης εφαρμογής μπορεί εύκολα να συνδέσει την εφαρμογή του με μια εφαρμογή Web Service επεκτείνοντας τις δυνατότητες της. Αυτή η πρόοδος φέρνει στον τελικό χρήστη ολοκληρωμένες διαδικτυακές εφαρμογές υψηλού επιπέδου.
Κεφάλαιο 6: Διαδικτυακή υπηρεσία διάδοσης πληροφορίας - GetWebService
Στο σύστημα υλοποιήθηκαν δυο web services, ένα το οποίο ανακτά πληροφορία από την οντολογία και είναι τμήμα της εφαρμογής διάδοσης και ένα το οποίο χειρίζεται τις λειτουργίες εισαγωγής, επεξεργασίας και διαγραφής στοιχείων στην οντολογία και είναι τμήμα της εφαρμογής καταγραφής και επικαιροποίησης. Το πρώτο ονομάζεται GetWebService και το δεύτερο SetWebService. Στο κεφάλαιο αυτό μελετάται το GetWebService. To GetWebService περιέχει όλες τις μεθόδους που χρειάζονται για την ανάκτηση της πληροφορίας από την οντολογία. Οι μέθοδοι που απαρτίζουν το GetWebService είναι γενικές, οι οποίες μπορούν να λειτουργήσουν σε οποιαδήποτε οντολογία του KAON, αλλά και ειδικά σχεδιασμένες λαμβάνοντας υπόψη τις ιδιαιτερότητες του συγκεκριμένου σχήματος οντολογίας. Αποτελείται από 30 μεθόδους, τα ονόματα των οποίων καθώς και μια συνοπτική περιγραφή της λειτουργίας τους παρουσιάζονται στον παρακάτω πίνακα: Όνομα μεθόδου Λειτουργία Login Χρησιμοποιείται για να ελέγξει αν ο χρήστης είναι εξουσιοδοτημένος GetUserProfile Επιστρέφει τα στοιχεία του χρήστη GetNomous Ανακτά τους Νομούς που βρίσκονται στην οντολογία GetDhmousKoinothtes Ανακτά τους Δήμους και τις Κοινότητες GetDiamerismata Ανακτά τα δημοτικά και κοινοτικά διαμερίσματα GetOffices Ανακτά τα γραφεία των διαφόρων υπηρεσιών GetPublicServices Ανακτά τις δημόσιες υπηρεσίες getDocuments Ανακτά όλα τα έγγραφα GetStatuaryBoard Ανακτά όλα τα θεσμικά όργανα GetEnterprises Ανακτά τις επιχειρήσεις GetChildEntities Ιδιαίτερα εξειδικευμένη μέθοδος η οποία επιστρέφει αποτελέσματα τα οποία ανήκουν σε μια ορισμένη κάθε φορά κατηγορία λαμβάνοντας υπόψη και την γεωγραφική πληροφορία. GetDocumentation Επιστρέφει την περιγραφή συγκεκριμένης οντότητας FreeTextSearchWithLENAME Αναζήτηση με τοπωνύμιο GetGraphv2 Η μέθοδος η οποία χρησιμοποιείται από τον γράφο της εφαρμογής διάδοσης FreeTextSearchAll Μέθοδος αναζήτησης με ελεύθερο κείμενο GetAllPropertiesFromConcept Επιστρέφει όλες τις ιδιότητες μιας έννοιας GetPropertyInstances Ανακτά τα στιγμιότυπα ιδιοτήτων για ένα στιγμιότυπο GetEntities Ανακτά τις οντότητες που βρίσκονται κάτω από μία συγκεκριμένη οντότητα GetParentConceptOfAnInstance Βρίσκει την έννοια στην οποία ανήκει ένα στιγμιότυπο GetOfficePublishingDocument Όταν δίνεται ένα έγγραφο βρίσκει και επιστρέφει το γραφείο που το εκδίδει GetNumberOfEntities Επιστρέφει τον αριθμό των οντοτήτων που βρίσκονται κάτω από μια οντότητα
GetLabel InformIfEntityIsConceptOrInstance URItoID IDtoURI GetPropertiesFromConcept GetLabels GetPropertyInstancesAttributes GetPropertyInstancesRelations GetDocumentsAndOfficesThatPublishedB yAMunicipality
Επιστρέφει το όνομα μιας οντότητας Μέθοδος που εξετάζει αν μια οντότητα είναι έννοια ή στιγμιότυπο έννοιας Δέχεται το URI μιας οντότητας και επιστρέφει το ID της Δέχεται το ID μιας οντότητας και επιστρέφει το URI της Επιστρέφει τις ιδιότητες μιας έννοιας Επιστρέφει τα ονόματα πολλών εννοιών μαζί Επιστρέφει τα χαρακτηριστικά ενός στιγμιότυπου Επιστρέφει τις σχέσεις ενός στιγμιότυπου Με δεδομένο έναν δήμο επιστρέφει όλα τα έγγραφα που εκδίδονται σε αυτόν καθώς και από ποια γραφεία
6.1 Login Η μέθοδος Login δέχεται δυο παραμέτρους, το όνομα χρήστη και τον κωδικό, πρόκειται για τα στοιχεία που απαιτούνται για την ταυτοποίηση ενός χρήστη. Αν η ταυτοποίηση επιτευχθεί επιστρέφεται το SessionID το οποίο χρησιμοποιείται στην συνέχεια για οποιαδήποτε ενέργεια χρειάζεται ταυτοποίηση του χρήστη. Το όνομα χρήστη και ο κωδικός είναι τύπου String, ενώ ίδιου τύπου είναι και το SessionID. Το πρωτότυπο της μεθόδου είναι: public String Login(String username, String password) throws RemoteException. Παρακάτω ακολουθεί το κομμάτι WSDL που περιγράφει την μέθοδο: <complexType name="Login"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> </sequence> </complexType> <complexType name="LoginResponse"> <sequence> <element name="result" type="string" nillable="true" /> </sequence> </complexType>
6.2 GetUserProfile Η μέθοδος αυτή ανακτά τα στοιχεία του χρήστη που βρίσκονται αποθηκευμένα στην βάση δεδομένων. Για να συμβεί αυτό πρέπει να είναι γνωστό το SessionID. Επιστρέφει μια διάταξη (Array) τύπου String το οποίο περιέχει με την σειρά: τον κωδικό χρήστη, τον κωδικό γλώσσας του χρήστη, το όνομα του, το επώνυμο και το email του. Το πρωτότυπο της μεθόδου είναι: public String[] GetUserProfile(String sessionID) throws RemoteException και παρακάτω ακολουθεί η WDSL περιγραφή της: <complexType name="GetUserProfile"> <sequence> <element name="String_1" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetUserProfileResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence>
</complexType>
6.3 GetNomous Η μέθοδος GetNomous επιστρέφει τους νομούς που βρίσκονται αποθηκευμένοι στην οντολογία, δηλαδή όλα τα στιγμιότυπα της έννοιας νομός. Δέχεται μια παράμετρο, την γλώσσα η οποία είναι τύπου String και η τιμή της είναι “en” για την αγγλική γλώσσα και “el” για την ελληνική. Το αποτέλεσμα που επιστρέφει είναι μια διάταξη (Array) τύπου String όπου για κάθε νομό χρησιμοποιούνται δυο στοιχεία της διάταξης, σε κάθε μια από αυτές τις δυάδες το πρώτο στοιχείο περιέχει το όνομα του νομού και το δεύτερο το URI του. Το πρωτότυπο της μεθόδου είναι: public String[] GetNomous(String Language) throws RemoteException και παρακάτω είναι το κομμάτι του WSDL αρχείου που περιγράφει την μέθοδο: <complexType name="GetNomous"> <sequence> <element name="String_1" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetNomousResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.4 GetDhmousKoinothtes Η μέθοδος GetDhmousKoinothtes δέχεται το URI του νομού και επιστρέφει όλους του δήμους και τις κοινότητες που εντάσσονται σε αυτόν. Όπως και η GetNomous επιστρέφει τα αποτελέσματα σε μια διάταξη τύπου String όπου για κάθε δήμο ή κοινότητα χρησιμοποιούνται δυο στοιχεία της διάταξης, το πρώτο για το όνομα και το δεύτερο για το URI. Το πρωτότυπο της μεθόδου είναι: public String[] GetDhmousKoinothtes(String NomosURI, String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="GetDhmousKoinothtes"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetDhmousKoinothtesResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.5 GetDiamerismata Η μέθοδος GetDiamerismata ανακτά τα δημοτικά και κοινοτικά διαμερίσματα ενός δήμου ή μιας κοινότητας. Έχει δυο παραμέτρους, το URI του δήμου ή της κοινότητας και την γλώσσα, τύπου String.
Επιστρέφει μια διάταξη τύπου String που περιέχει για κάθε διαμέρισμα δύο στοιχεία, ένα για το όνομα και ένα για το URI. Το πρωτότυπο της μεθόδου είναι: public String[] GetDiamerismata(String DhmosKoinothtaURI, String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="GetDiamerismata"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetDiamerismataResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.6 GetOffices Ανακτά από την οντολογία τις κατηγορίες των γραφείων υπηρεσιών, οι κατηγορίες αυτές είναι υποέννοιες της έννοιας γραφείο και τα γραφεία, τα στιγμιότυπα δηλαδή βρίσκονται κάτω από τις κατηγορίες αυτές. Δέχεται μια παράμετρο, την γλώσσα και επιστρέφει μια διάταξη τύπου String η οποία για κάθε γραφείο έχει δυο στοιχεία, στο ένα είναι το όνομα του γραφείου και στο άλλο το URI. Το πρωτότυπο της μεθόδου είναι: public String[] GetOffices(String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="GetOffices"> <sequence> <element name="String_1" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetOfficesResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.7 GetPublicServices Η μέθοδος GetPublicServices ανακτά όλες τις κατηγορίες των δημόσιων υπηρεσιών που υπάρχουν στην οντολογία, οι κατηγορίες αυτές είναι έννοιες. Έχει μια παράμετρο την γλώσσα και επιστρέφει μια διάταξη τύπου String όπου για κάθε κατηγορία χρησιμοποιούνται δυο στοιχεία της, το πρώτο είναι για το όνομα της κατηγορίας και το δεύτερο για το URI. Το πρωτότυπο της μεθόδου είναι: public String[] GetPublicServices(String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="GetPublicServices"> <sequence> <element name="String_1" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetPublicServicesResponse"> <sequence>
<element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.8 getDocuments Η μέθοδος getDocuments ανακτά όλα τα έγγραφα που βρίσκονται αποθηκευμένα στην οντολογία. Δέχεται μια παράμετρο, την γλώσσα, και επιστρέφει μια διάταξη τύπου String στην οποία για κάθε γραφείο χρησιμοποιούνται δυο στοιχεία, το πρώτο για το όνομα του εγγράφου και το δεύτερο για το URI του. Το πρωτότυπο της μεθόδου είναι: public String[] getDocuments(String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="getDocuments"> <sequence> <element name="String_1" type="string" nillable="true" /> </sequence> </complexType> <complexType name="getDocumentsResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.9 GetStatuaryBoard Η μέθοδος GetStatuaryBoard ανακτά τις κατηγορίες των θεσμικών οργάνων που υπάρχουν, οι κατηγορίες είναι έννοιες. Έχει μια παράμετρο την γλώσσα και επιστρέφει μια διάταξη τύπου String στην οποία για κάθε κατηγορία δεσμεύονται δυο στοιχεία, ένα για το όνομα της κατηγορίας και ένα γα το URI. Το πρωτότυπο της μεθόδου είναι: public String[] GetStatuaryBoard(String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="GetStatuaryBoard"> <sequence> <element name="String_1" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetStatuaryBoardResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.10 GetEnterprises Η μέθοδος GetEnterprises επιστρέφει τις κατηγορίες των δημόσιων επιχειρήσεων. Έχει μια παράμετρο την γλώσσα και επιστρέφει μια διάταξη τύπου String η οποία έχει δυο στοιχεία για κάθε κατηγορία, το ένα χρησιμοποιείται για το όνομα και το δεύτερο για το URI. Το πρωτότυπο της μεθόδου είναι: public String[] GetEnterprises(String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="GetEnterprises"> <sequence> <element name="String_1" type="string" nillable="true" /> </sequence>
</complexType> <complexType name="GetEnterprisesResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.11 GetChildEntities Η μέθοδος GetChildEntities αναλαμβάνει να επιστρέψει τα στιγμιότυπα μιας έννοιας τα οποία επίσης σχετίζονται με συγκεκριμένο νομό, δήμο - κοινότητα ή δημοτικό – κοινοτικό διαμέρισμα. Έχει πέντε παραμέτρους, το URI της έννοιας για τα στιγμιότυπα της οποίας ενδιαφερόμαστε, το URI του νομού, το URI του δήμου ή της κοινότητας, το URI του δημοτικού ή του κοινοτικού διαμερίσματος και την γλώσσα. Επιστρέφει διάταξη τύπου String, το πρώτο στοιχείο της διάταξης δηλώνει αν τα στοιχεία που ακολουθούν είναι στιγμιότυπα ή έννοιες, για τα στιγμιότυπα χρησιμοποιείται η τιμή “Instances” ενώ για τις έννοιες η τιμή “Concepts”. Το πρωτότυπο της μεθόδου είναι: public String[] GetChildEntities(String ParentConceptURI, String NomosURI, String DhmosKoinothtaURI, String DiamerismaURI, String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="GetChildEntities"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> <element name="String_3" type="string" nillable="true" /> <element name="String_4" type="string" nillable="true" /> <element name="String_5" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetChildEntitiesResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.12 GetDocumentation Η μέθοδος GetDocumentation χρησιμοποιείται για την ανάκτηση της περιγραφής μιας οντότητας, χρειάζεται δυο στοιχεία το URI της οντότητας και την γλώσσα στην οποία θα επιστρέψει το αποτέλεσμα. Η περιγραφή επιστρέφεται σε μια μεταβλητή τύπου String. Το πρωτότυπο της μεθόδου είναι: public String GetDocumentation(String EntityURI, String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="GetDocumentation"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetDocumentationResponse"> <sequence> <element name="result" type="string" nillable="true" /> </sequence> </complexType>
6.13 FreeTextSearchWithLENAME Η μέθοδος αυτή χρησιμοποιείται για την αναζήτηση στην οντολογία με κριτήρια την γεωγραφική πληροφορία, συγκεκριμένα ψάχνει αν υπάρχει στην οντολογία τοπωνύμιο με όνομα ίδιο με αυτό που έδωσε ο χρήστης και επιστρέφει το τοπωνύμιο, το δημοτικό ή κοινοτικό διαμέρισμα στο οποίο υπάγεται, τον δήμο ή την κοινότητα και τον νομό. Έχει δυο παραμέτρους το όνομα με το οποίο γίνεται η αναζήτηση του τοπωνυμίου και την γλώσσα. Η μέθοδος επιστρέφει μια διάταξη τύπου String στην οποία βρίσκονται με την σειρά: το όνομα του τοπωνυμίου, το URI, το όνομα του δημοτικού ή κοινοτικού διαμερίσματος στο οποίο υπάγεται, ακολουθεί το URI, το όνομα του δήμου ή της κοινότητας, το URI, το όνομα του νομού και το URI του. Αν έχουν βρεθεί περισσότερα από ένα αποτελέσματα προστίθενται και αυτά στην διάταξη σύμφωνα πάντα με όσα προαναφέρθηκαν. Το πρωτότυπο της μεθόδου είναι: public String[] FreeTextSearchWithLENAME(String LocationEntityName, String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="FreeTextSearchWithLENAME"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> </sequence> </complexType> <complexType name="FreeTextSearchWithLENAMEResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.14 GetGraphv2 Η μέθοδος αυτή χρησιμοποιείται για να επιστρέψει πληροφορία στον γράφο του web site. Η πληροφορία που επιστρέφεται έχει να κάνει κυρίως με τις σχέσεις μεταξύ οντοτήτων η σχηματοποίηση των οποίων βοηθά τον χρήστη στην πλοήγηση στην οντολογία. Έχει πέντε παραμέτρους: το ID της οντότητας από την οποία ξεκινά ο χρήστης, το URI του νομού, του δήμου ή της κοινότητας και του διαμερίσματος και την γλώσσα. Το ID της οντότητας και η γλώσσα είναι απαραίτητη για την επιστροφή αποτελεσμάτων, η γεωγραφική πληροφορία είναι προαιρετική και χρησιμοποιείται για να περιορίσει τα αποτελέσματα σε αυτά που ενδεχομένως ενδιαφέρουν τον χρήστη. Το πρωτότυπο της μεθόδου είναι: public String[] GetGraphv2(String EntityID, String NomosURI, String DhmosURI, String DiamerismaURI, String Language) throws RemoteException. Η μέθοδος αυτή επιστρέφει μια διάταξη τύπου String όπου κάθε στοιχείο περιέχει τμήμα ενός xml συνόλου το οποίο χρησιμοποιείται για να περιγράψει στον γράφο τι θα παρουσιάσει. Παρακάτω ακολουθεί ένα τέτοιο παράδειγμα. <?xml version="1.0" encoding="utf-8"?> <node nodeid="110" nodetype="concept"> <nodeText> <![CDATA[Concept A]]> </nodeText> <connected> <node nodeid="111" nodetype="instance"/> <node nodeid="112" nodetype="instance"/> </connected> </node> <node nodeid="120" nodetype="concept">
<nodeText> <![CDATA[Concept B]]> </nodeText> <connected> <node nodeid="121" nodetype="concept"/> <node nodeid="122" nodetype="concept"/> <node nodeid="123" nodetype="concept"/> </connected> </node> <node nodeid="130" nodetype="concept"> <nodeText> <![CDATA[Concept C]]> </nodeText> <connected> </connected> </node> Η πρώτη γραμμή ενημερώνει για το περιεχόμενο και είναι συνηθισμένη σε κάθε xml αρχείο. Στην δεύτερη βλέπουμε μια ετικέτα με το χαρακτηριστικό node, η ετικέτα <node…></node> ενημερώνει ότι το στοιχείο το οποίο περιέχει συνδέεται άμεσα με την οντότητα την οποία ο χρήστης έχει επιλέξει. Μέσα στην <node> βρίσκεται η <nodeText></nodeText στην οποία περιέχεται το όνομα της οντότητας. Μετά σειρά έχει η ετικέτα <connected></connected> μέσα στην οποία ενσωματώνονται ετικέτες <node/>. Εδώ βρίσκονται οι οντότητες οι οποίες σχετίζονται με την οντότητα που περιγράφεται. Για να γίνει πιο κατανοητό το παραπάνω xml επεστράφη από την μέθοδο όταν ζητήθηκε πληροφορία σχετική με την έννοια με ID=100. Η έννοια με ID=100 σχετίζεται με τρεις έννοιες: την Concept A με ID=110 , την Concept B με ID=120 , την Concept C με ID=130. Η έννοια Concept A έχει δυο στιγμιότυπα με ID= 111 & 112, η Concept B έχει τρεις υποέννοιες ενώ η έννοια Concept C δεν σχετίζεται με κάποια άλλη οντότητα. Η WSDL περιγραφή της μεθόδου είναι: <complexType name="GetGraphv2"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> <element name="String_3" type="string" nillable="true" /> <element name="String_4" type="string" nillable="true" /> <element name="String_5" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetGraphv2Response"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.15 FreeTextSearchAll Η μέθοδος FreeTextSearchAll χρησιμοποιείται για την αναζήτηση οντοτήτων με χρήση ελεύθερου κειμένου. Κατά την αναζήτηση ελέγχονται τα ονόματα των οντοτήτων για τυχόν ομοιότητα με το κείμενο αναζήτησης που έδωσε ο χρήστης. Έχει δυο παραμέτρους, το κείμενο σύμφωνα με το οποίο γίνεται η αναζήτηση και την γλώσσα. Επιστρέφει διάταξη τύπου String, για κάθε οντότητα που πληροί τα κριτήρια της αναζήτησης και θα επιστραφεί χρησιμοποιούνται τρία στοιχεία της διάταξης. Το πρώτο στοιχείο
ενημερώνει για το αν η οντότητα είναι έννοια ή στιγμιότυπο, χρησιμοποιούνται, οι τιμές “Concept” ή “Instance” αντίστοιχα, το επόμενος στοιχείο περιέχει το όνομα της οντότητας στην επιλεγμένη από πριν γλώσσα και το τρίτο το URI. Το πρωτότυπο της μεθόδου είναι: public String[] FreeTextSearchAll(String QueryLabel, String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="FreeTextSearchAll"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> </sequence> </complexType> <complexType name="FreeTextSearchAllResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.16 GetAllPropertiesFromConcept Πρόκειται για μια γενική μέθοδο η οποία για μια δεδομένη έννοια επιστρέφει όλες τις ιδιότητες που αυτή έχει συμπεριλαμβανομένων και αυτών που κληρονομεί από μια έννοια υψηλότερου επιπέδου. Για να επιστρέψει αποτελέσματα χρειάζεται το URI της έννοιας και την γλώσσα στην οποία θα επιστρέψει τα αποτελέσματα. Τα αποτελέσματα επιστρέφονται σε μια διάταξη τύπου String όπου για από κάθε ιδιότητα που βρέθηκε καταλαμβάνονται τρία στοιχεία, το πρώτο για το όνομα, το δεύτερο γα το URI και το τρίτο για να ενημερώσει αν πρόκειται για χαρακτηριστικό ή για σχέση, αν είναι χαρακτηριστικό δίνεται η τιμή "IsAttribute" ενώ αν είναι σχέση το τρίτο στοιχείο περιέχει την τιμή "NoAttribute". Το πρωτότυπο της μεθόδου είναι: public String[] GetAllPropertiesFromConcept(String ConceptURI, String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="GetAllPropertiesFromConcept"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetAllPropertiesFromConceptResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.17 GetPropertyInstances Η μέθοδος GetPropertyInstances επιστρέφει τα χαρακτηριστικά και τις σχέσεις ενός στιγμιότυπου. Για την ακρίβεια πρόκειται για τα στιγμιότυπα των ιδιοτήτων τα οποία αναφέρονται και ως PropertyInstances. Χρειάζεται δυο παραμέτρους το URI του στιγμιότυπου και την γλώσσα και τα αποτελέσματα επιστρέφονται σε διάταξη τύπου String. Η διάταξη για κάθε ιδιότητα διαθέτει τέσσερα στοιχεία της. Στο πρώτο στοιχείο βρίσκεται το όνομα της ιδιότητας, στο δεύτερο το URI της, στο τρίτο η τιμή του συγκεκριμένου στιγμιότυπου ιδιότητας και στο τέταρτο η τιμή “IsAttribute” αν πρόκειται για χαρακτηριστικό ή “NoAttribute” αν πρόκειται για σχέση. Στην περίπτωση όπου το PropertyInstance είναι χαρακτηριστικό η τιμή του, η οποία βρίσκεται στο τρίτο στοιχείο της κάθε τετράδας, θα περιέχει κάποια πληροφορία σε μορφή κειμένου η οποία θα εμφανιστεί συνήθως άμεσα στον χρήστη. Στην αντίθετη περίπτωση όπου η ιδιότητα είναι σχέση η τιμή του PropertyInstance είναι ένα URI το οποίο δείχνει σε μια
οντότητα με την οποία υπάρχει σχέση. Το πρωτότυπο της μεθόδου είναι: public String[] GetPropertyInstances(String InstanceURI, String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="GetPropertyInstances"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetPropertyInstancesResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.18 GetEntities Η μέθοδος GetEntities ανακτά οντότητες η οποίες βρίσκονται ένα επίπεδο χαμηλότερα από την δεδομένη οντότητα η οποία πρέπει να είναι έννοια, δηλαδή επιστρέφει τις υποέννοιες της αν τυχόν υπάρχουν ή τα στιγμιότυπα της, για την ανάκτηση τους χρειάζεται το URI και η γλώσσα. Επιστρέφει μια διάταξη τύπου String, το πρώτο στοιχείο της διάταξης δηλώνει αν οι οντότητες που ακολουθούν είναι έννοιες ή στιγμιότυπα, χρησιμοποιούνται οι τιμές “Concepts” ή “Instances” αντίστοιχα. Συνέχεια έχουν οι οντότητες όπου για κάθε μια παραχωρούνται δυο στοιχεί της διάταξης, το πρώτο για το όνομα και το δεύτερο για το URI. Το πρωτότυπο της μεθόδου είναι: public String[] GetEntities(String EntityURI, String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="GetEntities"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetEntitiesResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.19 GetParentConceptOfAnInstance Η μέθοδος αυτή για ένα δεδομένο στιγμιότυπο βρίσκει την έννοια της οποίας είναι στιγμιότυπο. Δέχεται δυο παραμέτρους το URI του στιγμιότυπου και την γλώσσα. Τα αποτελέσματα επιστρέφονται σε διάταξη τύπου String η οποία αποτελείται από δυο στοιχεία, το πρώτο χρησιμοποιείται για το όνομα της έννοιας και το δεύτερο για το URI. Το πρωτότυπο της μεθόδου είναι: public String[] GetParentConceptOfAnInstance(String InstanceURI, String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="GetParentConceptOfAnInstance"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetParentConceptOfAnInstanceResponse"> <sequence>
<element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.20 GetOfficePublishingDocument Η μέθοδος GetOfficePublishingDocument για ένα δεδομένο έγγραφο βρίσκει και επιστρέφει το γραφείο από το οποίο εκδίδεται. Χρειάζεται το URI του εγγράφου και την γλώσσα. Επιστρέφει διάταξη τύπου String με τα πρώτο στοιχείο να χρησιμοποιείται για το όνομα του γραφείου και το δεύτερο για το URI. Το πρωτότυπο της μεθόδου είναι: public String[] GetOfficePublishingDocument(String DocumentURI, String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="GetOfficePublishingDocument"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetOfficePublishingDocumentResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.21 GetNumberOfEntities Η μέθοδος αυτή μετράει τις οντότητες, έννοιες και στιγμιότυπα, που βρίσκονται στο αμέσως χαμηλότερο επίπεδο από την δεδομένη οντότητα και επιστρέφει τον αριθμό αυτό, χρειάζεται δυο παραμέτρους το URI οντότητας και την γλώσσα. Το πρωτότυπο της μεθόδου είναι: public int GetNumberOfEntities(String EntityURI, String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="GetNumberOfEntities"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetNumberOfEntitiesResponse"> <sequence> <element name="result" type="int" /> </sequence> </complexType>
6.22 GetLabel Η μέθοδος GetLabel επιστρέφει το όνομα μιας οντότητας όταν είναι γνωστό το URI της. Έχει δυο παραμέτρους το URI της οντότητας και την γλώσσα. Επιστρέφει ένα String στο οποίο περιέχεται το όνομα. Το πρωτότυπο της μεθόδου είναι: public String GetLabel(String EntityURI, String Language) throws RemoteException και η WDSL περιγραφή: <complexType name="GetLabel"> <sequence> <element name="String_1" type="string" nillable="true" />
<element name="String_2" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetLabelResponse"> <sequence> <element name="result" type="string" nillable="true" /> </sequence> </complexType>
6.23 InformIfEntityIsConceptOrInstance Η InformIfEntityIsConceptOrInstance ενημερώνει για το αν μια οντότητα είναι έννοια ή στιγμιότυπο, το URI της οντότητας είναι η παράμετρος και το αποτέλεσμα είναι μια μεταβλητή τύπου String με τιμή “concept” αν πρόκειται για έννοια ή “instance” αν πρόκειται για στιγμιότυπο. Το πρωτότυπο της μεθόδου είναι: public String InformIfEntityIsConceptOrInstance(String EntityURI) throws RemoteException και η WSDL περιγραφή: <complexType name="InformIfEntityIsConceptOrInstance"> <sequence> <element name="String_1" type="string" nillable="true" /> </sequence> </complexType> <complexType name="InformIfEntityIsConceptOrInstanceResponse"> <sequence> <element name="result" type="string" nillable="true" /> </sequence> </complexType>
6.24 URItoID Η μέθοδος URItoID δέχεται μια παράμετρο, το URI μιας οντότητας, για να επιστρέψει το ID της, η παράμετρος και το αποτέλεσμα είναι τύπου String. Το πρωτότυπο τη μεθόδου είναι: public String URItoID(String EntityURI) throws RemoteException και η WSDL περιγραφή: <complexType name="URItoID"> <sequence> <element name="String_1" type="string" nillable="true" /> </sequence> </complexType> <complexType name="URItoIDResponse"> <sequence> <element name="result" type="string" nillable="true" /> </sequence> </complexType>
6.25 IDtoURI Η μέθοδος αυτή δέχεται το ID μιας οντότητας και επιστρέφει το URI της. Το πρωτότυπο της μεθόδου είναι: public String IDtoURI(String EntityID) throws RemoteException και η WSDL περιγραφή: <complexType name="IDtoURI"> <sequence> <element name="String_1" type="string" nillable="true" /> </sequence> </complexType> <complexType name="IDtoURIResponse"> <sequence>
<element name="result" type="string" nillable="true" /> </sequence> </complexType>
6.26 GetPropertiesFromConcept Η GetPropertiesFromConcept επιστρέφει τις ιδιότητες μιας έννοιας, η διαφορά της με την GetAllPropertiesFromConcept είναι ότι επιστρέφονται μόνο οι ιδιότητες οι οποίες ανήκουν άμεσα στην έννοια. Δέχεται το URI της έννοιας και την γλώσσα. Τα αποτελέσματα επιστρέφονται σε διάταξη τύπου String όπου για κάθε ιδιότητα χρησιμοποιούνται τρία στοιχεία. Το πρώτο είναι το όνομα, το δεύτερο το URI και το τρίτο προσδιορίζει αν η ιδιότητα είναι χαρακτηριστικό ή σχέση. Χρησιμοποιείται η τιμή "IsAttribute" για τα χαρακτηριστικά και "NoAttribute" για τις σχέσεις. Το πρωτότυπο της μεθόδου είναι: public String[] GetPropertiesFromConcept(String ConceptURI, String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="GetPropertiesFromConcept"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetPropertiesFromConceptResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.27 GetLabels Η μέθοδος GetLabels ανακτά τα ονόματα ενός πλήθους οντοτήτων, κάθε φορά που καλείται χρειάζεται να γνωρίζει τα URIs των οντοτήτων και την γλώσσα. Τα URIs δίνονται σε μια διάταξη τύπου String και η γλώσσα σε μια μεταβλητή τύπου String. Τα ονόματα επιστρέφονται επίσης σε μια διάταξη τύπου String με μέγεθος ίδιο με αυτό με της διάταξης που περιείχε τα URIs και βρίσκονται σε αυτή με την ίδια σειρά που ήταν τα URIs στην διάταξη τους. Το πρωτότυπο της μεθόδου είναι: public String[] GetLabels(String[] URIs, String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="GetLabels"> <sequence> <element name="arrayOfString_1" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> <element name="String_2" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetLabelsResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.28 GetPropertyInstancesAttributes Η μέθοδος GetPropertyInstancesAttributes ανακτά όλα τα χαρακτηριστικά ενός στιγμιότυπου. Οι παράμετροι που χρειάζεται είναι το URI του στιγμιότυπου και την γλώσσα στην οποία θα επιστρέψει τα
αποτελέσματα. Τα αποτελέσματα επιστρέφονται σε μια διάταξη τύπου String όπου για κάθε χαρακτηριστικό καταλαμβάνονται δυο στοιχεία της, ένα για το όνομα του χαρακτηριστικού και ένα για την τιμή του. Το πρωτότυπο της μεθόδου είναι: public String[] GetPropertyInstancesAttributes(String InstanceURI, String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="GetPropertyInstancesAttributes"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetPropertyInstancesAttributesResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.29 GetPropertyInstancesRelations Η μέθοδος αυτή ανακτά τις σχέσεις που έχει ένα στιγμιότυπο, χρειάζεται το URI του στιγμιότυπου και η γλώσσα. Τα αποτελέσματα επιστρέφονται σε διάταξη τύπου String όπου για κάθε σχέση καταλαμβάνονται τέσσερα στοιχεία της διάταξης, στο πρώτο αποθηκεύεται το όνομα της σχέσης, στο δεύτερο το URI της, στο τρίτο το URI της οντότητας προς την οποία δείχνει η σχέση και στο τέταρτο το όνομα αυτής της οντότητας. Το πρωτότυπο της μεθόδου είναι: public String[] GetPropertyInstancesRelations(String InstanceURI, String Language) throws RemoteException και η WSDL περιγραφή: <complexType name="GetPropertyInstancesRelations"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetPropertyInstancesRelationsResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
6.30 GetDocumentsAndOfficesThatPublishedByAMunicipality Εξειδικευμένη μέθοδος η οποία ανακτά τα έγγραφα που εκδίδονται σε έναν δήμο καθώς και τα γραφεία που τα εκδίδουν. Έχει δυο παραμέτρους, το URI του δήμου και την γλώσσα. Τα αποτελέσματα επιστρέφονται σε διάταξη τύπου String. Το πρώτο στοιχείο της διάταξης έχει την τιμή "NewRecord", το δεύτερο έχει το όνομα ενός γραφείου, το τρίτο το URI του και ακολουθούν τόσες δυάδες στοιχείων όσα και τα έγγραφα που εκδίδονται από κάθε γραφείο. Από τις δυάδες αυτές, το πρώτο στοιχείο έχει το όνομα του εγγράφου και το δεύτερο το URI του. Όταν για κάθε γραφείο καταχωρηθούν στην διάταξη όλα τα έγγραφα και αν ακολουθεί άλλο γραφείο τότε στο ανάμεσα τους στοιχείο καταχωρείται η τιμή "NewRecord". Το πρωτότυπο της μεθόδου είναι: public String[] GetDocumentsAndOfficesThatPublishesThemForAMunicipality(String MunicipalityURI, String Language) throws java.rmi.RemoteException και η WSDL περιγραφή: <complexType name="GetDocumentsAndOfficesThatPublishedByAMunicipality"> <sequence> <element name="String_1" type="string" nillable="true" />
<element name="String_2" type="string" nillable="true" /> </sequence> </complexType> <complexType name="GetDocumentsAndOfficesThatPublishedByAMunicipalityResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
Κεφάλαιο 7: Διαδικτυακή υπηρεσία καταγραφής και επικαιροποίησης - SetWebService Το SetWebService παρέχει όλες τις λειτουργίες που χρειάζονται για να μπορεί να προστεθεί πληροφορία στο σύστημα αλλά και τις λειτουργίες που χρειάζονται για να υπάρχει η δυνατότητα η πληροφορία αυτή να ενημερώνεται λαμβάνοντας υπόψη και θέματα ασφάλειας που αφορούν την οντολογία όπως ποιοι αλλά και πως θα έχουν πρόσβαση σε αυτή για τροποποίηση περιεχομένου. Το SetWebService διαθέτει τέσσερα operations (μεθόδους - λειτουργίες), UpdateUserProfile, Set, Edit και Delete. Όπως ίσως θα διαισθάνεστε και από τα ονόματα τους το πρώτο χρησιμοποιείται για την αλλαγή των στοιχείων του χρήστη, το δεύτερο για την εισαγωγή δεδομένων στη οντολογία, το τρίτο για τη επεξεργασία και το τέταρτο για την διαγραφή τους. Κάθε μια από τις μεθόδους λαμβάνει υπόψη τα δικαιώματα των χρηστών για τις λειτουργίες που ζητούν. 7.1 UpdateUserProfile Η μέθοδος αυτή χρησιμοποιείται για την αλλαγή των στοιχείων του χρήστη, τα στοιχεία αυτά είναι: το όνομα, το επώνυμο, ένας κωδικός για την γλώσσα του χρήστη, το email του και ο καινούριος κωδικός. Το όνομα, το επώνυμο, το email και ο κωδικός είναι τύπου String ενώ ο κωδικός της γλώσσας είναι τύπου int. Οι παράμετροι που δέχεται η μέθοδος αυτή είναι το SessionID και τα στοιχεία του χρήστη, όπως περιγράφηκαν στις αμέσως προηγούμενες γραμμές, η μέθοδος επιστρέφει μια λογική τιμή (boolean) η οποία θα είναι αληθής (true) αν η διαδικασία ήταν επιτυχής ή ψευδής (false) σε περίπτωση αποτυχίας. Η μέθοδος είναι: public boolean UpdateUserProfile(String sessionID, String Firstname, String Lastname, int LangID, String Email, String newPassword) Στις γραμμές που ακολουθούν παρουσιάζεται η WSDL περιγραφή της μεθόδου. <complexType name="UpdateUserProfile"> <sequence> <element name="String_1" type="string" nillable="true" <element name="String_2" type="string" nillable="true" <element name="String_3" type="string" nillable="true" <element name="int_4" type="int" /> <element name="String_5" type="string" nillable="true" <element name="String_6" type="string" nillable="true" </sequence> </complexType> <complexType name="UpdateUserProfileResponse"> <sequence> <element name="result" type="boolean" />
/> /> /> /> />
</sequence> </complexType>
Στην πρώτη γραμμή, βρίσκεται το στοιχείο complexType το οποίο χρησιμοποιείται για να δηλώσει μια μέθοδο με το όνομα UpdateUserProfile. Στο στοιχείο complexType βρίσκεται το στοιχείο sequence το οποίο περιέχει τα στοιχεία element με την σειρά του, κάθε στοιχείο element αντιστοιχεί και σε μια παράμετρο της μεθόδου. Η πρώτη παράμετρος είναι τύπου string, ονομάζεται String_1 και αντιστοιχεί στην παράμετρο SessionID η οποία χρησιμοποιείται για την ταυτοποίηση του χρήστη. Η δεύτερη είναι επίσης τύπου string, ονομάζεται String_2 και αντιστοιχεί στο όνομα του χρήστη. Η Τρίτη τύπου string και αυτή, ονομάζεται String_3 και αντιστοιχεί στην παράμετρο με το επώνυμο του χρήστη. Η τέταρτη στην σειρά παράμετρος είναι τύπου int, έχει όνομα int_4 και αντιστοιχεί στην παράμετρο LangID. Ακολουθεί η παράμετρος με όνομα String_5, η οποία είναι τύπου string και αντιστοιχεί στην παράμετρο που διατίθεται για το email του χρήστη. Τέλος, η έκτη παράμετρος με όνομα String_6, τύπου string η οποία αντιστοιχεί στην παράμετρο newPassword. Μετά την δήλωση των παραμέτρων κλείνει το στοιχείο complexType με όνομα UpdateUserProfile και ακολουθεί ένα άλλο με όνομα UpdateUserProfileResponse. Σε αυτό περιγράφεται ο τύπος δεδομένων που θα επιστραφεί από την μέθοδο που όπως βλέπουμε είναι τύπου boolean. Όσον αφορά την ασφάλεια ισχύει ότι κάθε χρήστης μπορεί να αλλάξει τα στοιχεία του και μόνον αυτά ενώ μόνο ο υπέρ-διαχειριστής της οντολογίας έχει πλήρη δικαιώματα στους λογαριασμούς των χρηστών. 7.2 Set Η μέθοδος αυτή υλοποιεί λειτουργίες για την εισαγωγή πληροφορίας στην οντολογία. Στις λειτουργίες αυτές ανήκουν η δημιουργία έννοιας, ιδιότητας καθώς και στιγμιότυπων αυτών. Απαραίτητα στοιχεία για την εισαγωγή νέων οντοτήτων στην οντολογία είναι το SessionID το οποίο παρέχει την εγγύηση για το ότι ο χρήστης έχει την εξουσιοδότηση για την λειτουργία την οποία ζήτησε, ένας κωδικός ο οποίος δηλώνει ποια από τις διαθέσιμες λειτουργίες θα εκτελεστεί, το URI της οντότητας με την οποία σχετίζεται η προς εισαγωγή οντότητα και ένα σύνολο από πληροφορίες για την νέα οντότητα. Συγκεκριμένα η μέθοδος είναι: public String[] Set(String SessionID, String ActionCode, String EntityURI, String[] NewEntityData). Όπως βλέπουμε η παράμετρος SessionID είναι τύπου String, η παράμετρος με όνομα ActionCode και τύπου String είναι αυτή η οποία παίρνει τον κωδικό λειτουργίας, η EntityURI τύπου String παίρνει το URI της οντότητας και ακολουθεί μια διάταξη τύπου String με όνομα NewEntityData η οποία θα περιέχει τις πληροφορίες που αφορούν την νέα οντότητα. Η παράμετρος ActionCode μπορεί να πάρει τις παρακάτω τιμές: 1, 2, 3, 4, 5. Η τιμή 1 χρησιμοποιείται όταν είναι επιθυμητή η εισαγωγή μιας έννοιας (concept). Η τιμή 2 χρησιμοποιείται όταν είναι επιθυμητή η εισαγωγή ενός στιγμιότυπου έννοιας(instance). Η τιμή 3 χρησιμοποιείται όταν είναι επιθυμητή η εισαγωγή μιας ιδιότητας (property). Η τιμή 4 χρησιμοποιείται όταν είναι επιθυμητή η εισαγωγή ενός στιγμιότυπου ιδιότητας η οποία είναι χαρακτηριστικό. Η τιμή 5 χρησιμοποιείται όταν είναι επιθυμητή η εισαγωγή ενός στιγμιότυπου ιδιότητας η οποία είναι σχέση. Όσον αφορά τα περιεχόμενα της παραμέτρου NewEntityData εξαρτώνται από την λειτουργία που επιθυμεί ο χρήστης. Στον παρακάτω πίνακα φαίνεται η σχέση μεταξύ ActionCode και NewEntityData. ActionCode 1
2
NewEntityData NewEntityData[0]=Αγγλική ετικέτα NewEntityData[1]=Ελληνική ετικέτα NewEntityData[2]=Αγγλική περιγραφή NewEntityData[3]=Ελληνική περιγραφή NewEntityData[0]=Αγγλική ετικέτα NewEntityData[1]=Ελληνική ετικέτα NewEntityData[2]=Αγγλική περιγραφή NewEntityData[3]=Ελληνική περιγραφή
3 4 5
NewEntityData[0]=Αγγλική ετικέτα NewEntityData[1]=Ελληνική ετικέτα NewEntityData[2]=Αγγλική περιγραφή NewEntityData[3]=Ελληνική περιγραφή NewEntityData[0]=URI ιδιότητας NewEntityData[1]=Τιμή για το στιγμιότυπο της ιδιότητας NewEntityData[0]=URI ιδιότητας NewEntityData[1]=URI οντότητας με την οποία υπάρχει σχέση
Στην περίπτωση όπου το ActionCode είναι ίσο με 1, 2 ή 3 η παράμετρος EntityURI περιέχει το URI μιας έννοιας, ενώ αν είναι ίσο με 4 ή 5 θα έχει το URI ενός στιγμιότυπου έννοιας, επιπρόσθετα αν το ActionCode είναι ίσο με 5 το δεύτερο στοιχείο της παραμέτρου NewEntityData θα έχει το URI ενός στιγμιότυπου. Στις γραμμές που ακολουθούν παρουσιάζεται η WSDL περιγραφή της μεθόδου. <complexType name="Set"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> <element name="String_3" type="string" nillable="true" /> <element name="arrayOfString_4" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType> <complexType name="SetResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
Η μέθοδος Set επιτρέπει την εισαγωγή στοιχείων στην οντολογία μόνο στον χώρο οντοτήτων για τον οποίο έχει δικαιώματα ο κάθε χρήστης και για κάθε οντότητα που δημιουργείται δικαιώματα έχει μόνο ο δημιουργός της. Αν ο χρήστης δεν είναι εξουσιοδοτημένος η εκτέλεση διακόπτεται και επιστρέφεται το μήνυμα “User not found”. Αν ο χρήστης είναι εξουσιοδοτημένος άλλα δεν έχει δικαίωμα εισαγωγής στοιχείων σε αυτή την οντότητα επιστρέφεται μήνυμα “User Rights Not Set”. 7.3 Edit Η μέθοδος Edit χρησιμοποιείται για την επεξεργασία των στοιχείων της οντολογίας, οι λειτουργίες που μπορεί να εκτελέσει η μέθοδος αυτή είναι: να αλλάξει τα ονόματα εννοιών, στιγμιότυπων και ιδιοτήτων, να αλλάξει την τιμή των χαρακτηριστικών ενός στιγμιότυπου καθώς και τις σχέσεις μεταξύ στιγμιότυπων. Οι παράμετροι που δέχεται είναι το SessionID, ο κωδικός της λειτουργίας (ActionCode), το URI της οντότητας προς επεξεργασία και μια διάταξη η οποία περιέχει τα νέα δεδομένα. Συγκεκριμένα η μέθοδος είναι: public String[] Edit(String SessionID, String ActionCode, String EntityURI, String[] EditEntityData). Παρακάτω παρατίθεται πίνακας των λειτουργιών, των κωδικών που τους αντιστοιχεί και των δεδομένων που θα πρέπει σε κάθε περίπτωση να περιέχει ο πίνακας NewEntityData. Τιμή
Περιεχόμενα NewEntityData
Λειτουργία
ActionCode 1
1.1 1.1.1 1.1.2 1.2
1.2.1 1.2.2 2
2.1 2.1.1 2.1.2 2.2 2.2.1 2.2.2 3
3.1 3.1.1 3.1.2 3.2
NewEntityData[0]=Αγγλική ετικέτα, Επεξεργασία έννοιας NewEntityData[1]=Ελληνική ετικέτα, NewEntityData[2]=Αγγλική περιγραφή, NewEntityData[3]=Ελληνική περιγραφή NewEntityData[0]=Αγγλική ετικέτα, Επεξεργασία ετικέτας NewEntityData[1]=Ελληνική ετικέτα, έννοιας (αγγλικής ελληνικής) NewEntityData[0]=Αγγλική ετικέτα, Επεξεργασία αγγλικής ετικέτας έννοιας NewEntityData[0]=Ελληνική ετικέτα, Επεξεργασία ελληνικής ετικέτας έννοιας NewEntityData[0]=Αγγλική περιγραφή, Επεξεργασία περιγραφής NewEntityData[1]=Ελληνική περιγραφή έννοιας (αγγλικής & ελληνικής) NewEntityData[0]=Αγγλική περιγραφή,
Επεξεργασία αγγλικής περιγραφής έννοιας NewEntityData[0]=Ελληνική περιγραφή Επεξεργασία ελληνικής περιγραφής έννοιας NewEntityData[0]=Αγγλική ετικέτα, Επεξεργασία στιγμιότυπου NewEntityData[1]=Ελληνική ετικέτα, NewEntityData[2]=Αγγλική περιγραφή, NewEntityData[3]=Ελληνική περιγραφή NewEntityData[0]=Αγγλική ετικέτα, Επεξεργασία ετικέτας NewEntityData[1]=Ελληνική ετικέτα, στιγμιότυπου (αγγλικής & ελληνικής) NewEntityData[0]=Αγγλική ετικέτα, Επεξεργασία αγγλικής ετικέτας στιγμιότυπου NewEntityData[0]=Ελληνική ετικέτα Επεξεργασία ελληνικής ετικέτας στιγμιότυπου NewEntityData[0]=Αγγλική περιγραφή, Επεξεργασία περιγραφής NewEntityData[1]=Ελληνική περιγραφή στιγμιότυπου (αγγλικής & ελληνικής) NewEntityData[0]=Αγγλική περιγραφή, Επεξεργασία αγγλικής περιγραφής στιγμιότυπου NewEntityData[0]=Ελληνική περιγραφή Επεξεργασία ελληνικής περιγραφής στιγμιότυπου NewEntityData[0]=Αγγλική ετικέτα, Επεξεργασία ιδιότητας NewEntityData[1]=Ελληνική ετικέτα, NewEntityData[2]=Αγγλική περιγραφή, NewEntityData[3]=Ελληνική περιγραφή NewEntityData[0]=Αγγλική ετικέτα, Επεξεργασία ετικέτας NewEntityData[1]=Ελληνική ετικέτα, ιδιότητας (αγγλικής & ελληνικής) NewEntityData[0]=Αγγλική ετικέτα, Επεξεργασία αγγλικής ετικέτας ιδιότητας NewEntityData[0]=Ελληνική ετικέτα, Επεξεργασία ελληνικής ετικέτας ιδιότητας NewEntityData[0]=Αγγλική περιγραφή, Επεξεργασία περιγραφής NewEntityData[1]=Ελληνική περιγραφή ιδιότητας (αγγλικής & ελληνικής)
3.2.1 3.2.2 4 5
NewEntityData[0]=Αγγλική περιγραφή
Επεξεργασία αγγλικής περιγραφής ιδιότητας NewEntityData[0]=Ελληνική περιγραφή Επεξεργασία ελληνικής περιγραφής ιδιότητας NewEntityData[0]=URI ιδιότητας Επεξεργασία τιμής NewEntityData[1]=Νέα τιμή στιγμιότυπου ιδιότητας NewEntityData[0]=URI ιδιότητας Επεξεργασία σχέσης NewEntityData[1]=URI οντότητας με την οποία θα δημιουργηθεί σχέση
Παρακάτω παρουσιάζεται η WSDL περιγραφή της μεθόδου: <complexType name="Edit"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> <element name="String_3" type="string" nillable="true" /> <element name="arrayOfString_4" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType> <complexType name="EditResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
Ασφάλεια Η μέθοδος Edit εκτελείται κανονικά μόνο αν ο χρήστης είναι εξουσιοδοτημένος και επιτρέπει την επεξεργασία οντοτήτων μόνο όταν έχει το ανάλογο δικαίωμα. Στην περίπτωση όπου ο χρήστης δεν είναι εξουσιοδοτημένος επιστρέφεται το μήνυμα “User not found”. Αν ο χρήστης δεν έχει δικαίωμα επεξεργασίας της οντότητας επιστρέφεται το μήνυμα “User Rights Not Set”.
7.4 Delete Η μέθοδος αυτή υλοποιεί τις λειτουργίες διαγραφής στοιχείων της οντολογίας όταν κάτι τέτοιο ζητείται από εξουσιοδοτημένο χρήστη. Οι παράμετροι που χρειάζεται για να εκτελεστεί είναι το SessionID, το ActionCode, το EntityURI, το PropertyURI και το PropertyInstanceValue. Για την ακρίβεια: public String[] Delete(String SessionID, String ActionCode, String EntityURI, String PropertyURI, String PropertyInstanceValue). Το ActionCode παίρνει τις παρακάτω τιμές: 1 αν πρόκειται να διαγραφεί έννοια, 2 για στιγμιότυπο, 3 για ιδιότητα, 4 για στιγμιότυπο ιδιότητας. Σε περίπτωση διαγραφής έννοιας, στιγμιότυπου ή ιδιότητας το URI της προς διαγραφής οντότητας περιέχεται στην παράμετρο EntityURI, ενώ η PropertyURI και η PropertyInstanceValue θα είναι κενές (null). Η PropertyURI και η PropertyInstanceValue δεν είναι κενές όταν το προς διαγραφή στοιχείο είναι στιγμιότυπο ιδιότητας, στην περίπτωση αυτή η PropertyURI έχει το URI της ιδιότητας και η PropertyInstanceValue την τιμή που έχει το προς διαγραφή στιγμιότυπο ιδιότητας. Παρακάτω παρουσιάζεται η WSDL περιγραφή της μεθόδου:
<complexType name="Delete"> <sequence> <element name="String_1" type="string" nillable="true" /> <element name="String_2" type="string" nillable="true" /> <element name="String_3" type="string" nillable="true" /> <element name="String_4" type="string" nillable="true" /> <element name="String_5" type="string" nillable="true" /> </sequence> </complexType> <complexType name="DeleteResponse"> <sequence> <element name="result" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType>
Ασφάλεια Η μέθοδος Delete εκτελείται κανονικά μόνο αν ο χρήστης είναι εξουσιοδοτημένος και επιτρέπει την διαγραφή οντοτήτων μόνο όταν έχει το ανάλογο δικαίωμα. Στην περίπτωση όπου ο χρήστης δεν είναι εξουσιοδοτημένος επιστρέφεται το μήνυμα “User not found” ενώ αν δεν έχει δικαιώματα για αυτή την οντότητα επιστρέφεται το μήνυμα “User Rights Not Set”.
ΜΕΡΟΣ Δ ΟΙ ΕΦΑΡΜΟΓΕΣ ΧΡΗΣΤΩΝ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ .ΝΕΤ WEB SITES Σε αυτό το μέρος περιγράφεται η τεχνολογία που χρησιμοποιήθηκε για την υλοποίηση των εφαρμογών χρηστών του συστήματος. Οι εφαρμογές είναι δυναμικές ιστοσελίδες της πλατφόρμας .NET της Microsoft που χρησιμοποιούν τις διαδικτυακές υπηρεσίες που περιγράφησαν στο προηγούμενο μέρος. Στο μέρος αυτό περιγράφεται η τεχνολογία των εφαρμογών και ο σχεδιασμός τους.
Κεφάλαιο 8: .NET web sites Στα προηγούμενα κεφάλαια παρουσιάστηκαν η οντολογία και οι μηχανισμοί προσπέλασης της, τα Web services, σειρά τώρα έχει η παρουσίαση των εφαρμογών με τις οποίες ο χρήστης θα έρχεται σε επαφή. Πρόκειται για web sites τα οποία ανήκουν στην τεχνολογία ASP .NET της Microsoft, στην πραγματικότητα πρόκειται για δυο τεχνολογίες οι οποίες συνεργάζονται άψογα δίνοντας στον προγραμματιστή την δυνατότητα να υλοποιήσει γρήγορα και εύκολα ασφαλής και ποιοτικές εφαρμογές για το Web. 8.1 ASP Η τεχνολογία ASP είναι η πρόταση της Microsoft για την δημιουργία δυναμικών ιστοσελίδων. Πρόκειται για τεχνολογία όπου εκτελείται στον εξυπηρετητή, στην αγγλική βιβλιογραφία αναφέρεται ως server scripting technology, και το όνομα της προκύπτει από τα αρχικά Active Server Pages. Πρωτοεμφανίστηκε δοκιμαστικά τον Οκτώβριο του 1996 ως μια επέκταση για τον εξυπηρετητή ιστού της Microsoft, τον Internet Information Server 2.0, και χρησιμοποιούσε την γλώσσα Visual Basic Script. Το 2000 με την εμφάνιση της τεχνολογίας .NET η ASP ενσωματώθηκε σε αυτήν με αποτέλεσμα να επεκταθεί και να βελτιωθεί. Πλέον δίνει την δυνατότητα προγραμματισμού με .NET γλώσσες όπως Visual Basic, Visual C#, Visual J# για τον εξυπηρετητή αλλά και προγραμματισμό από την μεριά του χρήστη με γλώσσες όπως η JavaScript. Ένα ASP .NET web site αποτελείται από αρχεία ASP, συγκεκριμένα ένα για κάθε σελίδα του site και τα οποία έχουν κατάληξη .aspx, καθένα από αυτά περιέχει HTML περιεχόμενο και κώδικα σε μια γλώσσα προγραμματισμού από αυτές που αναφέρθηκαν παραπάνω. Όταν ο χρήστης μέσω του φυλλομετρητή κάνει αίτηση για μια σελίδα ASP στον web server, ο server εκτελεί το ASP αρχείο καλώντας την κατάλληλη ISAPI (Internet Server Application Programming Interface) επέκταση, εκτελεί τον κώδικα από την μεριά του εξυπηρετητή (server-side code) και παράγει HTML όπου αποστέλλεται στον φυλλομετρητή του χρήστη. Οι δυνατότητες όμως δεν τελειώνουν εδώ καθώς οι σελίδες ASP μπορούν να δεχθούν είσοδο από τον φυλλομετρητή του χρήστη μέσω των μεθόδων POST και GET που παρέχει το πρωτόκολλο HTTP παρέχοντας αλληλεπίδραση του χρήστη με τον εξυπηρετητή. Ο χρήστης μπορεί να αποστείλει δεδομένα στο εξυπηρετητή, στον εξυπηρετητή εκτελείται ο κώδικας που θα τα επεξεργαστεί και παράγεται πάλι HTML όπου αποστέλλεται πίσω στον φυλλομετρητή του χρήστη. 8.2 .NET .NET είναι μια πλατφόρμα λογισμικού (framework) σχεδιασμένη ώστε να προσφέρει έναν όσο το δυνατόν πιο απλό τρόπο για τον προγραμματισμό εφαρμογών, τόσο αυτόνομων όσο και διαδικτύου. Η πλατφόρμα αυτή ενσωματώνει τεχνολογίες όπως η ASP και η COM+, web services με την υποστήριξη των πρωτοκόλλων SOAP, WSDL και UDDI, παρέχει μια σειρά εργαλείων ανάπτυξης όπως το Visual Studio .ΝΕΤ με πληθώρα επιλογών όσον αφορά την γλώσσα προγραμματισμού: Visual Basic, Visual C#, Visual J# και Visual C++. Η πλατφόρμα αυτή «πατάει» πάνω στο λειτουργικό σύστημα και είναι απαραίτητη για την εκτέλεση των εφαρμογών που βασίζονται σε αυτή την τεχνολογία. Οι εφαρμογές δεν «μιλάνε» απευθείας με το λειτουργικό αλλά με την πλατφόρμα αυτή έτσι οι εφαρμογές μπορούν να τρέξουν οπουδήποτε υπάρχει η πλατφόρμα αυτή. Η τεχνολογία αυτή σχεδιάστηκε έχοντας ως σκοπό να επιτύχει τους παρακάτω στόχους: • Να παρέχει ένα αντικειμενοστραφές προγραμματιστικό περιβάλλον όπου ο κώδικας θα μπορεί να εκτελείται είτε τοπικά είτε απομακρυσμένα.
• • • • •
Να παρέχει ένα περιβάλλον εκτέλεσης για τον κώδικα όπου θα περιορίζει την ανάγκη δημιουργίας διαφορετικών εκδόσεων για διαφορετικά υπολογιστικά περιβάλλοντα. Να παρέχει ένα ασφαλές περιβάλλον για την εκτέλεση του κώδικα μειώνοντας τους κινδύνους σε περίπτωση όπου ο δημιουργός είναι άγνωστος. Το περιβάλλον εκτέλεσης δεν θα αντιμετωπίζει προβλήματα επιδόσεων όπως άλλα συστήματα μετάφρασης κώδικα. Ο προγραμματιστής να μπορεί να αντιμετωπίζει με τον ίδιο τρόπο διαφορετικούς τύπους εφαρμογών, όπως εφαρμογές για Windows ή εφαρμογές διαδικτύου. Ο κώδικας που παράγεται να μπορεί να συνεργαστεί με κώδικα άλλων τεχνολογιών, για να επιτευχθεί αυτό η πλατφόρμα υποστηρίζει τις ήδη προτυποποιημένες τεχνολογίες.
Η πλατφόρμα αποτελείται από δυο κυρίως κομμάτια, επειδή η απόδοση των ονομάτων τους στα ελληνικά δεν είναι ακριβής παρατίθενται αμετάφραστα, το πρώτο ονομάζεται Common Language Runtime (CLR) και το δεύτερο .NET Framework class library. Το πρώτο είναι η βάση της πλατφόρμας αυτής και είναι υπεύθυνο για την διαχείριση του κώδικα κατά την εκτέλεση, παρέχει υπηρεσίες όπως διαχείριση μνήμης, νημάτων, επικοινωνία με άλλα συστήματα ενώ επίσης επιβάλλει χρήση αυστηρά καθορισμένων τύπων δίνοντας έμφαση στην ασφάλεια και την αποτελεσματικότητα. Η Microsoft ξεχωρίζει τις εφαρμογές ανάλογα με το αν ο κώδικας στοχεύει στο common language runtime ή όχι. Αν ο κώδικας εκτελείται μέσω του common language runtime καλείται managed code, θα μπορούσαμε να τον αποκαλούμε διαχειριζόμενο κώδικα επειδή υποβάλλεται σε διαχείριση από το common language runtime αλλά και εδώ θα προτιμήσω την αγγλική ορολογία που προτείνει η μητρική της πλατφόρμας εταιρεία. Αν ο κώδικας εκτελείται χωρίς το common language runtime αποκαλείται unmanaged code. Το δεύτερο κομμάτι .NET Framework class library ή πιο απλά class library είναι μια βιβλιοθήκη κλάσεων, μια αντικειμενοστραφής συλλογή επαναχρησιμοποιήσιμων τύπων που μπορούν να χρησιμοποιηθούν για την ανάπτυξη εφαρμογών που ποικίλουν από γραμμής εντολών ή παραθυρικές με γραφική διεπαφή χρήστη έως και διαδικτυακές φόρμες (Web forms) ή XML Web services. Σημαντικό χαρακτηριστικό της πλατφόρμας .NET είναι ότι μπορεί να χρησιμοποιηθεί και από unmanaged κώδικα ο οποίος μπορεί να φορτώσει στην διεργασία το common language runtime και να εκτελέσει managed code συνδυάζοντας δυνατότητες που παρέχονται και από τις δυο λύσεις. Η πλατφόρμα υποστηρίζει επίσης και άλλες πλατφόρμες εκτέλεσης κώδικα, αναφέρονται ως runtime hosts, καθώς και την ανάπτυξη καινούριων. Για παράδειγμα η ASP.NET χρησιμοποιεί την πλατφόρμα .NET, η ASP είναι unmanaged στοιχείο, για να παρέχει ένα περιβάλλον εκτέλεσης για managed code στον εξυπηρετητή κάνοντας δυνατή την εκτέλεση .NET εφαρμογών όπως είναι οι ASP.NET και τα XML Web services. Ο Internet Explorer είναι ένα ακόμη παράδειγμα unmanaged εφαρμογής όπου χρησιμοποιεί το common language runtime δίνοντας την δυνατότητα ενσωμάτωσης σε αυτόν managed στοιχείων όπως είναι τα στοιχεία ελέγχου μιας φόρμας των Windows σε HTML έγγραφα. Στο παρακάτω σχήμα παρουσιάζεται η σχέση του common language runtime με την class library και τις .NET εφαρμογές και την σχέση τους με όλο το σύστημα.
8.2.1 .NET Common Language Runtime Το Common Language Runtime είναι υπεύθυνο για την μετάφραση του κώδικα, την εξακρίβωση της ασφάλειας του και την εκτέλεση του, διαχειρίζεται την μνήμη, τα νήματα των εφαρμογών, προσφέρει στον κώδικα δυνατότητες του συστήματος όπως είναι η χρήση του δικτύου ή του συστήματος αρχείων με απλό τρόπο. Όσον αφορά την ασφάλεια τα managed στοιχεία μπορούν να έχουν διαφορετικά δικαιώματα ανάλογα με το πόσο αξιόπιστα θεωρούνται, η αξιοπιστία τους καθορίζεται από έναν αριθμό κριτηρίων όπως η προέλευση. Αυτό σημαίνει ότι ένα στοιχείο μπορεί να έχει πρόσβαση στο σύστημα αρχείων ή στο μητρώο συστήματος ενώ ένα άλλο όχι. Το Common Language Runtime φροντίζει για την όσο καλύτερη απόδοση του κώδικα εφαρμόζοντας αυστηρούς τύπους και μηχανισμό εξακρίβωσης κώδικα με ένα σύστημα που αποκαλείται CTS (Common Type System). Το CTS απαιτεί κάθε στοιχείο managed κώδικα να περιγράφει τον εαυτό του, η περιγραφή αυτή προκύπτει από τον compiler. Το Common Language Runtime επίσης επιλύει ένα πολύ συνηθισμένο και σημαντικό για τις εφαρμογές λογισμικού πρόβλημα, αυτό της σωστής χρήσης της μνήμης. Το περιβάλλον εκτέλεσης διαχειρίζεται αυτόματα τα αντικείμενα και τις αναφορές σε αυτά αποδεσμεύοντας την μνήμη όταν δεν χρειάζονται άλλο εξαλείφοντας τα προβλήματα διαρροής μνήμης και των λανθασμένων αναφορών στην μνήμη. Όσον αφορά τον προγραμματιστή και την παραγωγικότητα του βοηθά στην αύξηση της αφού του επιτρέπει να γράφει κώδικα σε γλώσσα της αρεσκείας του, να χρησιμοποιήσει αντικείμενα από την class library και components γραμμένα σε άλλες γλώσσες από άλλους προγραμματιστές. Αν και πρόκειται για καινούρια τεχνολογία υποστηρίζει και παλιότερες, η δυνατότητα συνδυασμού managed και unmanaged κώδικα επιτρέπει την χρήση COM components και DLLs όπου χρειάζεται.
Έχει σχεδιαστεί με έμφαση στην ταχύτητα εκτέλεσης. Για τον λόγο αυτό έχει εφοδιαστεί με ένα στοιχείο που ονομάζεται Just-In-Time (JIT) compiling ο κώδικας μεταγλωττίζεται (compile), δεν διερμηνεύεται (interpret), στην γλώσσα μηχανής του συγκεκριμένου συστήματος στο οποίο εκτελείται. Επιπλέον όσον αφορά την διαχείριση της μνήμης αποφεύγεται ο κατακερματισμός της μνήμης και αυξάνεται η γειτνίαση σε αυτήν των σχετικών αναφορών για επιπλέον ταχύτερη εκτέλεση 8.2.2 .NET Framework Class Library .NET Framework class library είναι μια βιβλιοθήκη κλάσεων, μια αντικειμενοστραφής συλλογή επαναχρησιμοποιήσιμων τύπων που συνεργάζονται στενά με το common language runtime και που μπορούν να χρησιμοποιηθούν για να επεκτείνουν την λειτουργικότητα εφαρμογών που ποικίλουν από γραμμής εντολών ή παραθυρικές με γραφική διεπαφή χρήστη έως και διαδικτυακές φόρμες (Web forms) ή XML Web services. Η βιβλιοθήκη αυτή περιέχει, κλάσεις, διεπαφές και τύπους δεδομένων που επιταχύνουν την διαδικασία ανάπτυξης και παρέχουν πρόσβαση στις λειτουργίες του συστήματος. Τα περισσότερα από αυτά τα στοιχεία είναι προσβάσιμα σχεδόν από κάθε γλώσσα προγραμματισμού και όχι μόνο από τις γλώσσες της .NET τεχνολογίας, η μόνη προϋπόθεση είναι ο μεταγλωττιστής να είναι συμβατός με μια τεχνολογία που αποκαλείται CLS (Common Language Specification). Οι τύποι που παρέχει η βιβλιοθήκη είναι η βάση κάθε εφαρμογής. Περιλαμβάνονται τύποι που εκτελούν τις παρακάτω λειτουργίες: • Αναπαράσταση βασικών τύπων δεδομένων και εξαιρέσεων. • Υλοποιούν δομές δεδομένων. • Αναλαμβάνουν λειτουργίες εισόδου – εξόδου. • Τύποι που χρησιμοποιούνται για έλεγχο και προβολή πληροφοριών άλλων τύπων. • Ενσωματώνουν μηχανισμούς ασφαλείας της πλατφόρμας .NET. • Παρέχουν πρόσβαση σε δεδομένα. • Παρέχουν πολλά στοιχεία για γραφικές διεπαφές χρήστη. Η βιβλιοθήκη χωρίζεται σε κατηγορίες οι οποίες ονομάζονται namespaces και κάθε κατηγορία μπορεί να χωρίζεται σε υποκατηγορίες. Το μέγεθος της παρουσιάζει συνεχώς αυξητικές τάσεις και κατά την περίοδο συγγραφής αυτού του κεφαλαίου περιέχει 309 namespaces και 11417 types.
Κεφάλαιο 9: Εφαρμογή Διάδοσης Η εφαρμογή διάδοσης είναι εκείνο το τμήμα του συστήματος με το οποίο έρχονται οι περισσότεροι χρήστες σε επαφή. Η εφαρμογή αυτή χρησιμοποιεί τους μηχανισμούς ανάκτησης πληροφορίας που υλοποιούνται στα web services και ενσωματώνει μηχανισμούς εμφάνισης της. Όπως προαναφέρθηκε ένα ASP site αποτελείται από asp αρχεία, ένα για κάθε σελίδα, το site της διάδοσης αποτελείται από έξι σελίδες και κατ’ επέκταση από έξι αρχεία asp: 1. Default.aspx: Είναι η αρχική σελίδα του site. 2. more.aspx: Παρέχει κάποιες επιπλέον πληροφορίες για το site. 3. contact.aspx: Περιέχει τα στοιχεία επικοινωνίας. 4. search.aspx: Δίνει την δυνατότητα αναζήτησης στοιχείων στην οντολογία. 5. Guide.aspx: Παρέχει έναν οδηγό για την πλοήγηση στην πληροφορία. 6. ViewDocuments.aspx: Προβάλλει τα έγγραφα (οι ιδιαιτερότητες της συγκεκριμένης κατηγορίας οντοτήτων οδήγησε στην δημιουργία διαφορετικής σελίδας για την προβολή τους). Τα τρία πρώτα αρχεία: Default.aspx, more.aspx και contact.aspx περιέχουν μόνο HTML περιεχόμενο και δεν θα ασχοληθούμε περαιτέρω με αυτά. Τα αρχεία search.aspx, Guide.aspx και ViewDocuments.aspx περιέχουν κώδικα και οι ενέργειες που εκτελούνται εξηγούνται παρακάτω. Ο κώδικας είναι γραμμένος σε γλώσσα C#, εκτελείται στον εξυπηρετητή και για την ανάκτηση πληροφορίας από την οντολογία κάνει χρήση των μεθόδων του GetWebService. 9.1 Μηχανισμός αναζήτησης - Search.aspx Δίνει στον χρήστη την δυνατότητα να γράψει λέξεις, φράσεις ή και προτάσεις και με βάση αυτές να ψάξει στην οντολογία για σχετική πληροφορία. Στον C# κώδικα της σελίδας γίνεται κλήση της μεθόδου FreeTextSearchAll με παράμετρο το κείμενο που έγραψε ο χρήστης και την γλώσσα για να ληφθούν τα αποτελέσματα της αναζήτησης. Στην επόμενη σελίδα παρουσιάζεται παράδειγμα αναζήτησης στην οντολογία με κείμενο – κριτήριο αναζήτησης την λέξη «άδεια».
Για κάθε αποτέλεσμα επιστρέφεται ένας υπερσύνδεσμος ο οποίος δείχνει στην σελίδα Guide.aspx. Στον υπερσύνδεσμο συμπεριλαμβάνεται και μια παράμετρος η οποία δηλώνει ποια οντότητα θα προβληθεί. 9.2 Οδηγός χρήστη - Guide.aspx Αναφέρεται ως οδηγός επειδή οδηγεί τον χρήστη με εύχρηστα μενού και υπερσύνδεσμους στην πληροφορία που τον ενδιαφέρει. Οι μέθοδοι του GetWebService χρησιμοποιεί είναι: GetNomous(), GetDhmousKoinothtes(), GetDiamerismata(), GetDocumentation(), GetPropertyInstancesAttributes(), GetPropertyInstancesRelations(),GetLabel() και GetParentConceptOfAnInstance(). Αν η εκκίνηση του οδηγού γίνει από το μενού, η επιλογή του βρίσκεται στην κορυφή της σελίδας με τίτλο «οδηγός», ο χρήστης προτρέπεται να καθορίσει την γεωγραφική περιοχή που τον ενδιαφέρει με το πολύ τρία βήματα. Στην αρχή ο χρήστης θα πρέπει να επιλέξει τον νομό του όπως φαίνεται στην παρακάτω εικόνα.
Μετά την επιλογή του νομού ο οδηγός ανακτά πληροφορία που σχετίζεται με αυτόν ενώ ο χρήστης αν το επιθυμεί μπορεί να προχωρήσει στο επόμενο επίπεδο επιλέγοντας έναν δήμο του ή κοινότητα του από το αντίστοιχο μενού.
Με την επιλογή δήμου ή κοινότητας προβάλλονται πληροφορίες για τον επιλεγμένο δήμο ή κοινότητα και επιλογές οι οποίες είναι δημοτικά ή κοινοτικά διαμερίσματα ή άλλες οντότητες που σχετίζονται με τον δήμο ή την κοινότητα.
Στην παρακάτω εικόνα φαίνεται η σελίδα όπως διαμορφώνεται αν επιλεχθεί ένα δημοτικό διαμέρισμα.
Αν ο χρήστης επιλέξει έναν από τους υπερσύνδεσμους που αφορούν πληροφορία που σχετίζεται με την επιλεγμένη οντότητα ξανακαλείται η σελίδα Guide.aspx αλλά χωρίς αυτή την φορά τα μενού επιλογής γεωγραφικής περιοχής όπως φαίνεται στην παρακάτω εικόνα.
9.3 Προβολή εγγράφων - ViewDocuments.aspx
Η σελίδα αυτή προβάλλει τα έγγραφα και τα γραφεία ή τις υπηρεσίες που τα εκδίδουν σε έναν δήμο. Η σελίδα ViewDocuments.aspx καλεί την μέθοδο GetDocumentsAndOfficesThatPublishesThemForAMunicipality() του GetWebService. Στην σελίδα αυτή ο χρήστης οδηγείται αν έχει προηγουμένως επιλέξει να δει τα έγγραφα που εκδίδει ένας δήμος από την σελίδα Guide.aspx.
Στην παρακάτω εικόνα φαίνεται μια προβολή της σελίδας ViewDocuments.aspx
Κεφάλαιο 10: Εφαρμογή Καταγραφής – Επικαιροποίησης Η εφαρμογή καταγραφής και επικαιροποίησης είναι η εφαρμογή που επιτρέπει στους χρήστες να εισάγουν και να διαχειρίζονται το περιεχόμενο που ήδη υπάρχει στην οντολογία. Λόγω των δυνατοτήτων της εφαρμογής στην οντολογία έχει δοθεί ιδιαίτερη προσοχή στο θέμα της ασφάλειας έτσι ώστε να είναι όσο το δυνατόν πιο προστατευμένη η οντολογία από κακόβουλους χρήστες. Η ασφάλεια επιτυγχάνεται μέσω της στενής συνεργασίας του web service και του site και της χρήσης του στοιχείου sessionID που έχει ήδη αναφερθεί στο 5ο κεφάλαιο. Οι λειτουργίες που παρέχει η εφαρμογή διάδοσης είναι τόσες πολλές και διαφορετικές που για λόγους ευελιξίας έχουν αφιερωθεί σε αυτές αρκετά διαφορετικά αρχεία – σελίδες. Οι σελίδες αυτές είναι: 1. Login.aspx: Ελέγχει την είσοδο των χρηστών στο site. 2. KatagrafhEpikairopoihsh.aspx: Κύρια σελίδα του site. 3. EditConcepts.aspx: Δίνει στον χρήστη την δυνατότητα να επεξεργαστεί έννοιες. 4. EditProperty.aspx: Δίνει δυνατότητα επεξεργασίας των ιδιοτήτων. 5. EditInstances.aspx: Παρέχει τα απαραίτητα στοιχεία για την επεξεργασία στιγμιότυπων. 6. EditInstancesRelations.aspx: Παρέχει στοιχεία για την επεξεργασία των σχέσεων μεταξύ στιγμιότυπων. 7. SetInstancesRelations.aspx: Από την σελίδα αυτή ο χρήστης μπορεί να ορίσει σχέσεις μεταξύ στιγμιότυπων.
10.1 Είσοδος χρήστη - Login.aspx Η πρώτη σελίδα που βλέπει ο χρήστης του site της καταγραφής και επικαιροποίησης είναι η σελίδα που τον παροτρύνει να εισάγει το όνομα χρήστη και των κωδικό που του αντιστοιχεί προκειμένου να συνδεθεί στο σύστημα, πρόκειται για την Login.aspx.
Αφού ελεγχθούν τα στοιχεία χρήστη και αν είναι έγκυρα ο χρήστης κατευθύνεται αυτόματα στη σελίδα KatagrafhEpikairopoihsh.aspx.
10.2 Καταγραφή και επικαιροποίηση - KatagrafhEpikairopoihsh.aspx Η σελίδα αυτή είναι η σελίδα από την οποία ο χρήστης ξεκινά κάθε διαδικασία εισαγωγής ή επεξεργασίας στοιχείων.
Ο χρήστης έχει την δυνατότητα να επιλέξει μια από τις κατηγορίες.
Μετά την επιλογή κατηγορίας ο χρήστης μπορεί να επιλέξει υποκατηγορία ή στιγμιότυπο και εκτελέσει τις λειτουργίες για τις οποίες έχει δικαιώματα.
10.2.1 Εισαγωγή οντοτήτων Παρακάτω βλέπουμε μια περίπτωση χρήσης κατά την οποία η επιλεγμένη οντότητα είναι έννοια.
Στην περίπτωση εισαγωγής ο χρήστης επιλέγει το στοιχείο κάτω από το οποίο επιθυμεί να εισάγει, μια έννοια, ένα στιγμιότυπο ή ιδιότητα, πατάει το κουμπί εισαγωγή και εισάγει την πληροφορία της όπως φαίνεται παρακάτω.
10.3 Επεξεργασία εννοιών – EditConcepts.aspx Αν μετά την επιλογή μιας έννοιας ο χρήστης επιλέξει την επεξεργασία της από το αντίστοιχο κουμπί παραπέμπεται στην σελίδα EditConcepts.aspx
Από εδώ μπορεί να επεξεργαστεί την λεξικογραφική πληροφορία μιας έννοιας, δηλαδή το όνομα της, την περιγραφή αλλά να επέμβει και στις ιδιότητες αν έχει. Οι ιδιότητες που όπως προαναφέρθηκε εισάγονται από την KatagrafhEpikairopoihsh.aspx αλλά διαγράφονται από την EditConcepts.aspx.
Η διαγραφή γίνεται επιλέγοντας μιας ιδιότητα από το ειδικό πεδίο επιλογής της που εμφανίζεται στα αριστερά της (βλέπε παραπάνω εικόνα) και πατώντας το κουμπί «Διαγραφή επιλεγμένης ιδιότητας».
Πατώντας το κουμπί «Επεξεργασία επιλεγμένης ιδιότητας» ο χρήστης παραπέμπεται στην σελίδα EditProperty.aspx για την επεξεργασία της ιδιότητας.
10.4 Επεξεργασία ιδιότητας - EditProperty.aspx
Η σελίδα αυτή δίνει στον χρήστη την δυνατότητα να αλλάξει τις λεξικογραφικές αναφορές της ιδιότητας αλλά και να ορίσει αν πρόκειται για χαρακτηριστικό έννοιας ή σχέση. 10.5 Επεξεργασία στιγμιότυπου - EditInstances.aspx Αν από την σελίδα KatagrafhEpikairopoihsh.aspx ο χρήστης επιλέξει ένα στιγμιότυπο και πατήσει το κουμπί «επεξεργασία» παραπέμπεται στην σελίδα EditInstances.aspx (επόμενη εικόνα).
Η σελίδα παρέχει επιλογές για κάθε είδους επεξεργασία του στιγμιότυπου, αλλαγή λεξικογραφικών αναφορών, προσθήκη, διαγραφή και επεξεργασία ιδιοτήτων. Οι μόνες ιδιότητες που δεν μπορεί να επεξεργαστεί ο χρήστης από αυτή την σελίδα απευθείας είναι οι σχέσεις, μπορεί όμως να επιλέξει το κουμπί «Επεξεργασία σχέσεων» όπου παραπέμπει στην EditInstancesRelations.aspx.
10.6 Επεξεργασία σχέσεων - EditInstancesRelations.aspx Η σελίδα αυτή παρέχει στον χρήστη επιλογές για προσθήκη, διαγραφή ή επεξεργασία σχέσεων.
Ο χρήστης επιλέγει την σχέση που θέλει να διαγράψει ή να επεξεργαστεί από το ειδικό πεδίο επιλογής το οποίο εμφανίζεται στα δεξιά της και πατάει το αντίστοιχο κουμπί. Αν ο χρήστης επιθυμεί να ορίσει μια νέα σχέση πατάει το κουμπί «Προσθήκη σχέσης» και παραπέμπεται στην σελίδα SetInstancesRelations.aspx.
10.7 Ορισμός σχέσεων μεταξύ στιγμιότυπων - SetInstancesRelations.aspx Στην σελίδα αυτή ο χρήστης επιλέγει μια από τις ήδη ορισμένες σχέσεις για να δημιουργήσει στιγμιότυπο της σχέσης αυτής μεταξύ δυο στιγμιότυπων εννοιών.
Ο χρήστης επιλέγει το αντίστοιχο πεδίο για την σχέση που επιθυμεί και πατάει το κουμπί «Επιλογή σχέσης». Η εμφάνιση της σελίδας αλλάζει (επόμενο σχήμα) άλλα στην πραγματικότητα η σελίδα παραμένει ίδια. Η σελίδα πλέον μας παρακινεί να επιλέξουμε το στιγμιότυπο της έννοιας με το οποίο υπάρχει σχέση, ο οδηγός επιλογής ακολουθεί την ίδια λογική με τον οδηγό που παρουσιάζεται και στην αρχή.
Αφού ο χρήστης επιλέξει κατηγορία πατάει το κουμπί «Επιλογή κατηγορίας». Σειρά έχει η εμφάνιση των υποκατηγοριών σε ένα δέντρο (ASP:treeview) το οποίο περιλαμβάνει τις υποκατηγορίες και τα στιγμιότυπα τους.
Ο χρήστης έχει την δυνατότητα ανάπτυξης των κατηγοριών που τον ενδιαφέρουν και τελικά επιλέγει το στιγμιότυπο που θέλει.
Μετά την επιλογή του στιγμιότυπου ο χρήστης πατάει ολοκλήρωση για να ολοκληρώσει την διαδικασία.
ΜΕΡΟΣ Ε ΥΛΟΠΟΙΗΣΗ – ΚΩΔΙΚΑΣ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ Όταν ολοκληρωθεί η ανάλυση απαιτήσεων και ο σχεδιασμός σειρά έχει ο προγραμματισμός. Οι λειτουργίες που το σύστημα θα εκτελεί αφορά τον σχεδιασμό, το πώς όμως υλοποιούνται αυτές οι λειτουργίες είναι κάτι που αφορά τους προγραμματιστές. Στο μέρος αυτό παρουσιάζεται κώδικας που επιδεικνύει την χρήση της προγραμματιστικής διεπαφής KAON και ο κώδικας των εφαρμογών χρήστη έτσι ώστε να δειχθεί ο τρόπος που μπορούν να χρησιμοποιηθούν οι διαδικτυακές υπηρεσίες.
Κεφάλαιο 11: Υλοποίηση των διαδικτυακών υπηρεσιών Στο κεφάλαιο αυτό παρουσιάζεται επιλεκτικά κώδικας, από τα Web Services με σκοπό να γίνει κατανοητή η διαδικασία πρόσβασης στην οντολογία μέσω του KAON API. Για να εκτελεστεί ο παρακάτω κώδικας θα πρέπει να γίνει εισαγωγή των βιβλιοθηκών του KAON στο project. Στο συμπιεσμένο αρχείο διανομής του KAON τα αρχεία βιβλιοθήκες βρίσκονται στον κατάλογο lib. 11.1 Σύνδεση με την οντολογία Το πρώτο που χρειάζεται να γίνει για να συμβεί οποιαδήποτε διαδικασία στην οντολογία είναι να δημιουργηθεί μια σύνδεση με αυτήν. Η σύνδεση είναι ένα αντικείμενο τύπου DirectKAONConnection. Το αντικείμενο αυτό δέχεται το αποτέλεσμα της μεθόδου getKAONConnection, η μέθοδος αυτή χρειάζεται μια παράμετρο τύπου HashMap η οποία περιέχει τις παραμέτρους τις σύνδεσης. Στις επόμενες γραμμές φαίνεται η δήλωση και η δημιουργία μιας σύνδεσης. DirectKAONConnection connection = null; HashMap parameters = new HashMap(); parameters.put(KAONManager.KAON_CONNECTION, "edu.unika.aifb.kaon.engineeringserver.client.DirectKAONConnection" ); parameters.put( "SERVER_URI","direct://sa@localhost:1433" ); parameters.put( "JDBC_DRIVER", "com.microsoft.sqlserver.jdbc.SQLServerDriver" ); parameters.put("DATABASE_CONNECTION_STRING","jdbc:sqlserver://localhost\\SQLE XPRESS:3103;DatabaseName=Ontology;user=admin;password=passadmin" ); parameters.put( "USER_NAME","admin" ); parameters.put( "PASSWORD", "passadmin" ); connection = (DirectKAONConnection)KAONManager.getKAONConnection(parameters);
Τώρα που η σύνδεση έχει επιτευχθεί πρέπει να δηλωθεί το σχήμα οντολογίας που θα χρησιμοποιηθεί: OIModel model = connection.openOIModelPhysical("direct://sa@localhost:1433/MSSQL/Ontology? EgovlexModelv4");
Από τη στιγμή που έχει δηλωθεί και το σχήμα της οντολογίας μπορεί να πραγματοποιηθεί οποιαδήποτε λειτουργία προσθήκης, τροποποίησης, διαγραφής ή ανάκτησης στοιχείων από αυτό. Μετά την ολοκλήρωση αυτών των λειτουργιών η σύνδεση πρέπει να κλείνει όπως φαίνεται: connection.close();
11.2 Λειτουργίες καταγραφής - επικαιροποίησης Η εισαγωγή, επεξεργασία και διαγραφή στοιχείων ή αλλιώς οι λειτουργίες καταγραφής – επικαιροποίησης είναι αυτές που χρησιμοποιήθηκαν στο SetWebService. Παρακάτω φαίνονται όλες οι δυνατές περιπτώσεις αυτών των λειτουργιών. 11.2.1 Εισαγωγή έννοιας Αρχικά δημιουργείται ένα αντικείμενο τύπου List, με όνομα changes, στο οποίο εκχωρούνται οι αλλαγές που θα πραγματοποιηθούν. Στην δεύτερη γραμμή δηλώνεται ένα ήδη υπάρχον Concept, ο τύπος δεδομένων που αναπαριστά τις έννοιες, με την μέθοδο getConcept, στο οποίο θα ανήκει αυτό που θα
δημιουργηθεί, επειδή δεν είναι υποχρεωτικό ένα Concept να ανήκει σε ένα άλλο η δεύτερη γραμμή μπορεί να παραληφθεί. Στην τρίτη γραμμή δημιουργείται ένα Concept, πάλι με χρήση της getConcept το οποίο στην επόμενη γραμμή εισάγεται σαν οντότητα με την μέθοδο AddEntity. Στην επόμενη γραμμή η έννοια που μόλις δημιουργήθηκε δηλώνεται ότι ανήκει στον χώρο οντοτήτων που ανήκει στην πρώτη έννοια με την μέθοδο AddSubConcept. Οι αλλαγές ακόμα δεν έχουν πραγματοποιηθεί αλλά βρίσκονται αποθηκευμένες στο αντικείμενο τύπου List και πραγματοποιούνται με την κλήση της μεθόδου applyChanges. Οι αλλαγές τώρα έχουν πραγματοποιηθεί και στην τελευταία γραμμή αδειάζεται το αντικείμενο changes από τα περιεχόμενα του. List changes = new LinkedList(); Concept ParentConcept = model.getConcept(“EgovlexModel#PUBLIC-SERVICES”); Concept NewConcept = model.getConcept(model.createNewURI()); changes.add(new AddEntity(NewConcept)); changes.add(new AddSubConcept(ParentConcept, NewConcept)); model.applyChanges(changes); changes.clear();
11.2.2 Διαγραφή έννοιας Για να απομακρυνθεί μια έννοια από τον χώρο οντοτήτων μιας άλλης έννοιας καλείται η μέθοδος RemoveSubConcept. Για την πλήρη διαγραφή της από το σχήμα της οντολογίας πρέπει να κληθεί η μέθοδος RemoveEntity, αυτό ισχύει για την διαγραφή κάθε τύπου οντότητας από το σχήμα οντολογίας. List changes = new LinkedList(); changes.add(new RemoveSubConcept(ParentConcept, conceptToDelete)); model.applyChanges(changes); changes.clear();
11.2.3 Εισαγωγή στιγμιότυπου έννοιας Τα στιγμιότυπα είναι αντικείμενα τύπου Instance, με την μέθοδο getInstance δημιουργείται ένα στιγμιότυπο. Όπως και οι έννοιες εισάγεται και αυτό σαν οντότητα στην οντολογία με την μέθοδο AddEntity. Με την μέθοδο AddInstanceOf δηλώνεται ότι το αντικείμενο instance είναι στιγμιότυπο μιας έννοιας. List changes = new LinkedList(); Instance instance = model.getInstance(model.createNewURI()); changes.add(new AddEntity(instance)); changes.add(new AddInstanceOf(model.getConcept(EntityURI), instance)); model.applyChanges(changes); changes.clear();
11.2.4 Διαγραφή στιγμιότυπου έννοιας Η απομάκρυνση ενός στιγμιότυπου από μια έννοια γίνεται με την μέθοδο RemoveInstanceOf. ConceptOfTheInstance = model.getConcept(URI); changes.add(new RemoveInstanceOf(ConceptOfTheInstance,instance)); model.applyChanges(changes); model.save();
changes.clear();
11.2.5 Εισαγωγή ιδιότητας Οι ιδιότητες αναπαρίστανται από τον τύπο δεδομένων Property και μπορούν να είναι χαρακτηριστικά ή σχέσεις. Property property = model.getProperty(model.createNewURI()); changes.add(new AddEntity(property)); //Η γραμμή που ακολουθεί καθορίζει αν η ιδιότητα θα είναι //χαρακτηριστικό ή σχέση, όταν χρησιμοποιείται όπως είναι //παρακάτω η ιδιότητα ορίζεται ως χαρακτηριστικό, αν η //δεύτερη παράμετρος ήταν false τόττε η ιδιότητα ορίζεται //σχέση. changes.add(new SetPropertyIsAttribute(property, true)); changes.add(new AddPropertyDomain(property, model.getConcept(EntityURI))); model.applyChanges(changes);
11.2.6 Διαγραφή ιδιότητας Με την μέθοδο RemovePropertyDomain παύει η σχέση μεταξύ της έννοιας και της ιδότητας δηλαδή η ιδιότητα παύει να είναι ιδιότητα της έννοιας αλλά εξακολουθεί να υπάρχει στο σχήμα οντολογίας σαν ιδιότητα, για διαγραφή από το σχήμα οντολογίας θα πρέπει να κληθεί η μέθοδος RemoveEntity. changes.add(new RemovePropertyDomain(property, tempConcept)); model.applyChanges(changes);
11.2.7 Εισαγωγή στιγμιότυπου ιδιότητας Τα στιγμιότυπα ιδιότητας αναπαριστόνται από τον τύπο δεομένων PropertyInstance και εισάγονται με την μέθοδο AddPropertyInstance. Τα στιγμιότυπα ιδιότητας εισάγονται με διαφορετικό τρόπο αν η ιδιότητα είναι χαρακτηριστικό και με διαφορετικό αν είναι σχέση. Ο κώδικας που ακολουθεί χρησιμοποιείται αν η ιδιότητα είναι χαρακτηριστικό. Object o = (String)PropertyValue; PropertyInstance proin = model.getPropertyInstance(model.getProperty(PropertyURI), model.getInstance(InstanceURI), o); changes.add(new AddPropertyInstance(proin)); model.applyChanges(changes);
Ο κώδικας που ακολουθεί χρησιμοποιείται για την δημιουργία στιγμιότυπου μιας ιδιότητας που αποτελεί σχέση στο σχήμα της οντολογίας. PropertyInstance proin = model.getPropertyInstance(model.getProperty(PropertyURI), model.getInstance(InstanceURI),model.getInstance(TargetURI)); changes.add(new AddPropertyInstance(proin)); model.applyChanges(changes); changes.clear();
11.2.8 Διαγραφή στιγμιότυπου ιδιότητας changes.add(new RemovePropertyInstance(propertyInstance)); model.applyChanges(changes); model.save(); changes.clear();
Όπως προναφέρθηκε στα προηγούμενα παραδείγματα για την διαγραφή των διαφόρων τύπων οντοτήτων για να διαγραφεί από το σχήμα οντολογίας μια οντότητα πρέπει να κληθεί η μέθοδος RemoveEntity(Entity entity) σε αντίθετη περίπτωση αυτό που συμβαίνει είναι η διαγραφή της σχέσης που έχει αυτή η οντότητα σε σχέση με κάποιες άλλες οντότητες. Στις δυο παρακάτω γραμμές επιδεικνύεται η περίπτωση διαγραφής από το σχήμα οντολογίας μιας οντότητας η οποία αναπαριστάται από τον τύπο δεδομένων Entity. changes.add(RemoveEntity(Entity entity)); model.applyChanges(changes);
11.2.9 Λεξικογραφική πληροφορία Το KAON παρέχει την δυνατότητα συσχετισμού των οντοτήτων με πληροφορία σε μορφή κειμένου, αυτή η πληροφορία αναφέρεται ως λεξικογραφική. Χρησιμοποιήθηκαν δυο τύποι λεξικογραφικής πληροφορίας, ο τύπος Label που χρησιμοποιείται για την απόδοση ονομάτων στις οντότητας και ο τύπος Documentation ο οποίος χρησιμοποιείται για την αποθήκευση μεγαλύτερης σε μέγεθος λεξικογραφικής πληροφορίας όπως είναι οι περιγραφές των οντοτήτων. Παρακάτω θα χρησιμοποιηθεί ο όρος όνομα αντί για Label και περιγραφή για τον όρο Documentation. 11.2.9.1 Εισαγωγή ονομάτων Για την αναπαράσταση της λεξικογραφικής πληροφορίας χρησιμοποιείται ο τύπος δεδομένων LexicalEntry. LexicalEntry label = null; String URI = model.createNewURI(); label=model.getLexicalEntry(URI); LexiconUtil.createLexicalEntry(label, KAONVocabularyAdaptor.INSTANCE.getKAONLabel(), EntityLabel[1], KAONVocabularyAdaptor.INSTANCE.getLanguageURI("en"), EntityToAddLabel,changes); model.applyChanges(changes);
11.2.9.2 Εισαγωγή περιγραφής String URI = model.createNewURI(); LexicalEntry documentation = model.getLexicalEntry(URI); LexiconUtil.createLexicalEntry(documentation, KAONVocabularyAdaptor.INSTANCE.getDocumentation(), EntityDocumentation[2],
KAONVocabularyAdaptor.INSTANCE.getLanguageURI("el"), EntityToAddDocumentation, changes); model.applyChanges(changes);
11.3 Λειτουργίες ανάκτησης Με τον όρο ανάκτηση εννοείται οποιαδήποτε άντληση στοιχείων γίνεται από την οντολογία, αυτό μπορεί να περιλαμβάνει το όνομα μιας οντότητας, την περιγραφή της ή τις σχέσεις της με άλλες οντότητες. Σε κάθε περίπτωση η οντότητα βρίσκεται στο επίκεντρο και κάθε διαδικασία ανάκτησης ξεκινά από μια. Το KAON API παρέχει τρεις τρόπους πρόσβασης σε μια οντότητα. Ο πρώτος είναι με το URI της. Ο δεύτερος είναι με χρήση του ερωτήματος. Ο τρίτος αφορά την ανάκτηση μιας οντότητας με βάση μια σχέση με άλλη οντότητα πράγμα το οποίο προϋποθέτει όμως να έχει εφαρμοστεί προηγουμένως κάποιος από τους δυο προηγούμενους τρόπους. Όσον αφορά τον τρίτο τρόπο ο όρος σχέση δεν περιορίζεται στις ιδιότητες – σχέσεις αλλά καις στις σχέσεις που προκύπτουν από την ιεραρχία της οντολογίας όπως είναι η σχέση της έννοιας γονέα ή υπέρ-έννοιας (SuperConcept) με την υποέννοια (SubConcept) ή η σχέση μιας έννοιας με τα στιγμιότυπα της. 11.3.1 Ανάκτηση οντότητας με χρήση URI Εδώ παρουσιάζεται η ανάκτηση μιας έννοιας (Concept) χρησιμοποιώντας το URI: Concept Office = model.getConcept("EgovlexModel#PUBLIC-SERVICES");
Για την ανάκτηση άλλου τύπου οντότητας, για παράδειγμα ιδιότητας, αλλάζουμε τον τύπο της οντότητας, στην προκειμένη περίπτωση σε Property, και δίνουμε το URI της π.χ.: Property PropertyFinancialSubordination = model.getProperty(“ EgovlexModelv4#FINANCIAL-SUBORDINATION”);
11.3.2 Ανάκτηση με χρήση ερωτήματος Το ΚΑΟΝ παρέχει έναν μηχανισμό εκτέλεσης ερωτημάτων για την αναζήτηση και εύρεση οντοτήτων. Ο μηχανισμός δίνει την δυνατότητα αναζήτησης με κριτήριο το όνομα μιας οντότητας ή με κριτήριο κάποιες σχέσεις, αυτό το χαρακτηρστικό είναι ιδιαίτερα σημαντικό αν δεν είναι γνωστό το URI της οντότητας. 11.3.2.1 Αναζήτηση με χρήση ονόματος Το ερώτημα HAS_LABEL('όνομα ','el') χρησιμοποιείται για να βρεθεί οποιαδήποτε οντότητα έχει ένα όνομα αντίστοιχο με αυτό που στο συγκεκριμένο παράδειγμα είναι η λέξη όνομα και με γλώσσα ελληνικά, αν ήταν αγγλικά αντί για 'el' θα είχε 'en' και για οποιαδήποτε άλλη γλώσσα τον κωδικό που της αντιστοιχεί. Η μέθοδος executeQuery εκτελεί το παραπάν ερώτημα και επιστρέφει τα αποτελέσματα σε ένα αντικείμενο τύπου Collection όπως φαίνεται παρακάτω. String query = "HAS_LABEL('όνομα ','el')"; Collection Results = model.executeQuery(query);
11.3.2.2 Αναζήτηση με χρήση ιδιότητας
Εδώ γίνεται αναζήτηση με κριτήριο μια ιδιότητα – σχέση, συγκεκριμένα ζητούνται όλες οι οντότητες που έχουν σχέση ADMINISTRATIVE-SUBORDINATION και η οποία θα τις συνδέει με την οντότητα που έχει URI ίδιο με την τιμή της μεταβλητής URI. String URI = “EgovlexModelv4#i-1183717276670-39615596”; String query1 = "SOME(<#ADMINISTRATIVE-SUBORDINATION>=!"+URI+"!)"; Collection Results = model.executeQuery(query1);
11.3.3 Ανάκτηση εννοιών ανάλογα με την ιεραρχία Με τον όρο ιεραρχία εννοούνται οι ιεραρχικές σχέσεις των εννοιών στο σχήμα οντολογίας για παράδειγμα η οντότητα EGOVLEX0 είναι η οντότητα με την υψηλότερη στην ιεραρχία θέση και μπορούμε εύκολα να ανακτήσουμε τις έννοιες που βρίσκονται στο αμέσως επόμενο επίπεδο. Παρακάτω παρουσιάζεται πως ανακτώνται οι υποέννοιες μιας έννοιας: Set SubConcepts = concept.getSubConcepts();
Η συλλογή SubConcepts τώρα περιέχει τις έννοιες ADMINISTRATION LEVEL, DOCUMENTS, ENTERPRISE, HUMAN RESOURCES, LOCATION ENTITY, OFFICE, PUBLIC SERVICES όπως ακριβώς περιγράφεται και στο κεφάλαιο 3 στην παράγραφο 2.1. To ΚΑΟΝ δίνει την δυνατότητα από πάνω προς τα κάτω διάσχισης του σχήματος της οντολογίας αλλά και αντίστροφα, δηλαδή από την έννοια ADMINISTRATION LEVEL για παράδειγμα να ανακτήσουμε την EGOVLEX0. Ο κώδικας με τον οποίο μπορεί να γίνει αυτό παρουσιάζεται στην επόμενη γραμμή: Set SuperConcepts = SuperConcept.getSuperConcepts();
11.3.4 Ανάκτηση στιγμιότυπων εννοιών Στο παράδειγμα αυτό παρουσιάζεται ο τρόπος με τον οποίο ανακτώνται τα στιγμιότυπα μιας έννοιας. Για μια ήδη γνωστή έννοια concept και με την κλήση της μεθόδου getInstances() τα στιγμιότυπα επιστρέφονται σε ένα αντικείμενο τύπου Set. Set Instances = concept.getInstances();
11.3.5 Ανάκτηση στιγμιότυπων ιδιοτήτων Η παρακάτω γραμμή κώδικα δείχνει πως από ένα στιγμιότυπο έννοιας, στο οποίο αναφέρεται το αντικείμενο instance μπορούν να ανακτηθούν τα στιγμιότυπα ιδιοτήτων του. Set PropertyInstances = instance.getFromPropertyInstances();
11.3.6 Ανάκτηση λεξικογραφικής πληροφορίας Όταν ανακτάται μια οντότητα δεν ανακτώνται όλες οι οντότητες και τα στοιχεία με τα οποία σχετίζεται μαζί με αυτά ούτε η λεξικογραφική πληροφορία που την αφορά. Για αυτό αν χρειάζονται τέτοια στοιχεία θα πρέπει να ανακτηθούν μετά την οντότητα.
11.3.6.1 Ανάκτηση ονόματος οντότητας Στις παρακάτω γραμμές ζητείται το όνομα μιας έννοιας στην αγγλική γλώσσα: String Label = concept.getLabel(KAONVocabularyAdaptor.INSTANCE.getLanguageURI(“en”)); Για την ελληνική γλώσσα αρκεί να αντικατασταθεί η παράμετρος “en” από την παράμετρο “el”. 11.3.6.2 Ανάκτηση περιγραφής οντότητας Εδώ παρουσιάζεται η ανάκτηση περιγραφής ενός στιγμιότυπου στην ελληνική γλώσσα: String Documentation = instance.getLexicalAttribute(KAONVocabularyAdaptor.INSTANCE.getDocument ation(), KAONVocabularyAdaptor.INSTANCE.getLanguageURI("el"), KAONVocabularyAdaptor.INSTANCE.getValue());
Κεφάλαιο 12: Παρουσίαση υλοποίησης εφαρμογών χρήστη Στο κομμάτι αυτό παρουσιάζεται ο κώδικας, από τα site, που καλεί τις μεθόδους των web services. Η παρουσίαση γίνεται σε δυο μέρη, το πρώτο mέρος είναι αφιερωμένο στην παρουσίαση των μεθόδων της διαδικτυακής υπηρεσίας που εξυπηρετεί την διάδοση της πληροφορίας (GetWebService) και το δεύτερο στην παρουσίαση των μεθόδων της διαδικυτακής υπηρεσίας που εξυπηρετεί την καταγραφή και την επικαιροποίηση της πληροφορίας (SetWebService). 12.1 Παρουσίαση εφαρμογής διάδοσης Για να είναι προσβάσιμες οι μέθοδοι της διαδικτυακής υπηρεσίας από το site θα πρέπει να δηλωθεί το web service στο οποίο ανήκουν. Για αυτό πρέπει να γίνει προσθήκη μιας web αναφοράς (add web reference, όπως αναφέρεται στο Visual studio), κατά την διαδικασία αυτή ζητείται το URL του web service το οποίο στην προκειμένη περίπτωση είναι http://195.130.72.182:8080/EgovLexBackend/GetWebService?WSDL. Το URL αποτελείται από το πρωτόκολο την IP και το port (http://195.130.72.182:8080) που χρησιμοποιείται από την εφαρμογή web service, ακολουθεί το όνομα της εφαρμογής (EgovLexBackend), το τμήμα της εφαρμογής (GetWebService) και τέλος η δήλωση για το WSDL (?WSDL) ή Web Service Description Language που αποτελεί την περιγραφή του. Κάθε κομμάτι κώδικα παρακάτω δείχνει μόνο τον κώδικα που χρειάζεται για να κληθεί μία μέθοδος και να ληφθούν τα δεδομένα. Σε κάθε περίπτωση στις δυο πρώτες γραμμές έχουμε την δήλωση του web service που θα χρησιμοποιηθεί και της μεθόδου που θα κληθεί. Στις επόμενες γραμμές ακολουθεί η εισαγωγή των παραμέτρων που χρειάζεται η μέθοδος και στην τελευταία γραμμή επιστρέφονται τα αποτελέσματα.
Login GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.Login l = new GetWebService.Login(); l.String_1 = txtUsername.Text; l.String_2 = txtPassword.Text; LoginResponse lr = gws.Login(l);
GetUserProfile GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetUserProfile gup = new GetWebService.GetUserProfile(); gup.String_1 = Common.SessionID; string[] sgup = gws.GetUserProfile(gup);
GetNomous GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetNomous LoadNomous = new GetWebService.GetNomous(); LoadNomous.String_1 = ""; LoadNomous.String_2 = "el"; string[] Nomoi = gws.GetNomous(LoadNomous);
GetDhmousKoinothtes GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetDhmousKoinothtes gdk = new GetWebService.GetDhmousKoinothtes(); gdk.String_1 = NomosURI.Value; gdk.String_2 = "el"; string[] Dhmoi = gws.GetDhmousKoinothtes(gdk);
GetDiamerismata GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetDiamerismata gd = new GetWebService.GetDiamerismata(); gd.String_1 = NomosURI.Value; gd.String_2 = DhmosURI.Value; gd.String_3 = "el"; string[] Diamerismata = gws.GetDiamerismata(gd);
GetOffices GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetOffices go = new GetWebService.GetOffices(); go.String_1 = CategoryName; go.String_2 = Language; string[] Offices = gws.GetOffices(go);
GetPublicServices GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetPublicServices gps = new GetWebService.GetPublicServices(); gps.String_1 = CategoryName;
gps.String_2 = Language; string[] subcat = gws.GetPublicServices(gps);
getDocuments
GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.getDocuments gdoc = new GetWebService.getDocuments(); gdoc.String_1 = CategoryName; gdoc.String_2 = Language; string[] subcat = gws.getDocuments(gdoc);
GetStatuaryBoard GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetStatuaryBoard gstboard = new GetWebService.GetStatuaryBoard(); gstboard.String_1 = CategoryName; gstboard.String_2 = Language; string[] subcat = gws.GetStatuaryBoard(gstboard);
GetEnterprises GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetEnterprises gEnt = new GetWebService.GetEnterprises(); gEnt.String_1 = CategoryName; gEnt.String_2 = Language; string[] subcat = gws.GetEnterprises(gEnt);
GetChildEntities GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetChildEntities3 gchent = new GetWebService.GetChildEntities3(); gchent.String_1=ConceptUri; gchent.String_2=Nomos; gchent.String_3=Dhmos; gchent.String_4= Diamerisma; gchent.String_5 = Language; string[] results = gws.GetChildEntities3(gchent);
GetDocumentation GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetDocumentation gd = new GetWebService.GetDocumentation(); gd.String_1 = Default2.uri; gd.String_2 = Common.Language; Default2.EntityDocumentation = gws.GetDocumentation(gd).result;
FreeTextSearchWithLENAME GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.FreeTextSearchWithLENAME search = new GetWebService.FreeTextSearchWithLENAME(); search.String_1 = query; search.String_2 = Language; string[] Query_result = gws.FreeTextSearchWithLENAME(search);
FreeTextSearchAll GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.FreeTextSearchAll ftsa = new FreeTextSearchAll(); ftsa.String_1 = query; ftsa.String_2 = Common.Language; string[] results = gws.FreeTextSearchAll(ftsa);
GetAllPropertiesFromConcept GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetAllPropertiesFromConcept gpfc = new GetWebService.GetAllPropertiesFromConcept(); gpfc.String_1 = parentURI; gpfc.String_2 = "el"; string[] properties = gws.GetAllPropertiesFromConcept(gpfc);
GetPropertyInstances GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetPropertyInstances gpi = new GetWebService.GetPropertyInstances(); gpi.String_1 = InstanceURI; gpi.String_2 = "el"; string[] proins = gws.GetPropertyInstances(gpi);
GetEntities GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetEntities gen = new GetWebService.GetEntities(); gen.String_1=URI; gen.String_2 = "el"; string[] labels =gws.GetEntities(gen);
GetParentConceptOfAnInstance GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetParentConceptOfAnInstance gp = new GetWebService.GetParentConceptOfAnInstance(); gp.String_1 = Default2.uri; gp.String_2 = Common.Language; string[] parent = gws.GetParentConceptOfAnInstance(gp);
GetOfficePublishingDocument GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetOfficePublishingDocument gopd = new GetWebService.GetOfficePublishingDocument(); gopd.String_1 = Default2.uri; gopd.String_2 = Common.Language; Default2.OfficePublishingThisDocument = gws.GetOfficePublishingDocument(gopd);
GetNumberOfEntities GetWebService.GetWebService service = new GetWebService.GetWebService(); GetNumberOfEntities entities = new GetNumberOfEntities(); entities.String_1 = URI; entities.String_2 = "el"; int numberOfEntities = service.GetNumberOfEntities(entities).result;
GetLabel GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetLabel gl = new GetWebService.GetLabel(); gl.String_1 = DhmosURI.Value; gl.String_2 = Common.Language; string DhmosLabel = gws.GetLabel(gl).result;
InformIfEntityIsConceptOrInstance GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.InformIfEntityIsConceptOrInstance InstOrConc = new GetWebService.InformIfEntityIsConceptOrInstance(); InstOrConc.String_1 = InstanceOrConceptToViewURI; string type = gws.InformIfEntityIsConceptOrInstance(InstOrConc).result;
URItoID GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.URItoID ui = new GetWebService.URItoID(); ui.String_1 = Request.QueryString["uri"]; Response.Redirect("graph.aspx?id=" + gws.URItoID(ui).result);
IDtoURI GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.IDtoURI id2uri = new GetWebService.IDtoURI(); id2uri.String_1 = ConceptID.Value; ConceptURI.Value = gws.IDtoURI(id2uri).result;
GetPropertiesFromConcept GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetPropertiesFromConcept gpfc = new GetWebService.GetPropertiesFromConcept(); gpfc.String_1 = ConceptURI.Value; gpfc.String_2 = "el"; string[] UnsortProperties = gws.GetPropertiesFromConcept(gpfc);
GetLabels GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetLabels gl = new GetWebService.GetLabels(); gl.arrayOfString_1 = PropertyInstanceURIs.ToArray(Type.GetType("System.String")) as string[]; gl.String_2 = Common.Language; string[] labels = gws.GetLabels(gl);
GetPropertyInstancesAttributes GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetPropertyInstancesAttributes gpia = new GetWebService.GetPropertyInstancesAttributes(); gpia.String_1 = Default2.uri; gpia.String_2 = Common.Language; string[] Attributes = gws.GetPropertyInstancesAttributes(gpia);
GetPropertyInstancesRelations GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetPropertyInstancesRelations gpir = new GetWebService.GetPropertyInstancesRelations(); gpir.String_1 = Default2.uri; gpir.String_2 = Common.Language; string[] Relations = gws.GetPropertyInstancesRelations(gpir);
GetDocumentsAndOfficesThatPublishedByAMunicipality GetWebService.GetWebService gws = new GetWebService.GetWebService(); GetWebService.GetDocumentsAndOfficesThatPublishesThemForAMunicipality gdopm = new GetWebService. GetDocumentsAndOfficesThatPublishesThemForAMunicipality(); gdopm.String_1 = DhmosURI.Value; gdopm.String_2 = Common.Language; string[] OfficesDocuments = gws.GetDocumentsAndOfficesThatPublishesThemForAMunicipality(gdopm);
12.2 Παρουσίαση εφαρμογής καταγραφής και επικαιροποίησης - SetWebService Για να είναι προσβάσιμες οι μέθοδοι του SetWebService από το site θα πρέπει να δηλωθεί το web service στο οποίο ανήκουν όπως έγινε και με το GetWebService. Στην συγκεκριμένη περίπτωση το URL που θα δοθεί για web αναφορά είναι: http://195.130.72.182:8080/EgovLexBackend/SetWebService?WSDL.
UpdateUserProfile SetWebService.SetWebService sws = new SetWebService.SetWebService(); SetWebService.UpdateUserProfile upprof = new SetWebService.UpdateUserProfile(); upprof.String_1 = Common.SessionID; upprof.String_2 = TbFirstname.Text; upprof.String_3 = TbLastname.Text; upprof.int_4 = ComboLanguage.SelectedIndex; upprof.String_5 = TbEmail.Text; upprof.String_6 = TbPassword.Text; sws.UpdateUserProfile(upprof);
Set string[] strArray = new string[] { this.TbLabelEN.Text, this.TbLabelGR.Text, this.TbDescEn.Text, this.TbDescGR.Text }; SetWebService.SetWebService service = new SetWebService.SetWebService();
SetWebService.Set set = new SetWebService.Set(); set.String_1 = sessionID; set.String_2 = “1”; set.String_3 = URI; set.arrayOfString_4 = strArray; string[] strArray2 = service.Set(set);
Edit SetWebService.SetWebService service2 = new SetWebService.SetWebService(); SetWebService.Edit edit = new SetWebService.Edit(); edit.String_1 = sessionID; edit.String_2 = Convert.ToString(num); edit.String_3 = URI; edit.arrayOfString_4 = strArray; string[] strArray2 = service2.Edit(edit);
Τα παραδείγματα που παρουσιάστηκαν έχουν ως σκοπό να δείξουν τον τρόπο με τον οποίο ο κώδικας του site αξιοποιεί τα Web Services και τις μεθόδους τους και όχι να περιγράψουν λεπτομερώς την χρησιμοποίηση των παραμέτρων ανάλογα με την επιθυμητή λειτουργία. Πλήρης περιγραφή παραμέτρων των μεθόδων και σχέσεων με τις λειτουργίες που εκτελούν βρίσκεται στο κεφάλαιο 5.
Παράρτημα Επεξήγηση Όρων Κατά την διάρκεια ανάπτυξης του συστήματος δόθηκαν κάποια αναγνωριστικά ονόματα σε έννοιες περίπλοκες οι οποίες παρουσιάζονταν με μορφή μεταβλητών στον πηγαίο κώδικα. Προκειμένου κάθε φορά σε αυτό το κείμενο να μην χρησιμοποιείται μια μακροσκελής περιγραφή μιας έννοιας θα χρησιμοποιήσουμε τα αναγνωριστικά αυτά επεξήγηση των οποίων ακολουθεί παρακάτω: .NET: τεχνολογία της Microsoft που στηρίζεται σε μια πλατφόρμα λογισμικού που στόχο έχει να ενοποιήσει κάθε τοπικό σύστημα που διαθέτει την πλατφόρμα με το Internet. ActionCode: είναι ένας κωδικός που χρησιμεύει στην κλήση των διαδικτυακών υπηρεσιών και δηλώνει την λειτουργία που θα εκτελεστεί από μια μέθοδο η οποία περιλαμβάνει πολλές λειτουργίες. ASP (Active Server Pages): τεχνολογία της Microsoft για την δημιουργία και την υποστήριξη δυναμικών ιστοσελίδων. Documentation: είδος λεξικογραφικής πληροφορίας που χρησιμοποιείται για την απόδοση περιγραφής στις οντότητες. EntityURI: συμβολίζει το URI μιας οντότητας. ISAPI: προγραμματιστική διεπαφή του εξυπηρετητή ιστού. Κάθε στοιχείο ISAPI είναι ένα αρχείο DLL το οποίο φορτώνεται στον ίδιο χώρο μνήμης με τον web server και παραμένει εκεί για όσο χρειάζεται. Η τεχνολογία αναπτύχθηκε από την Microsoft ως απάντηση στα προβλήματα που παρουσίαζε η τεχνολογία CGI. Η τεχνολογία αυτή ήταν η πρώτη που χρησιμοποιήθηκε για δυναμικές εφαρμογές διαδικτύου, ο
φυλλομετρητής ζητούσε από τον εξυπηρετητή την εκτέλεση μιας εφαρμογής η οποία επέστρεφε HTML περιεχόμενο, το μειονέκτημα όμως είναι ότι για κάθε αίτηση φορτώνονταν στην μνήμη ένα στιγμιότυπο της εφαρμογής. Όλη τεχνολογία ASP βρίσκεται σε ένα μόνο, μικρό μάλιστα (~400ΚΒ), αρχείο με όνομα ASP.DLL. Label: είδος λεξικογραφικής πληροφορίας που χρησιμοποιείται για την απόδοση ονόματος στις οντότητες. PropertyInstanceValue: η τιμή ενός στιγμιότυπου ιδιότητας. PropertyURI: το URI μιας ιδιότητας. SessionID: είναι η ταυτότητα ενός χρήστη, δημιουργείται όταν ένας χρήστης συνδέεται στο σύστημα χρησιμοποιώντας το όνομα χρήστη και τον κωδικό του. Αφού δημιουργηθεί το SessionID και για όσο ο χρήστης παραμένει συνδεδεμένος στο σύστημα αν χρειάζεται ταυτοποίηση του αυτή πραγματοποιείται με το SessionID. SOAP (Simple Object Access Protocol): πρωτόκολλο που χρησιμοποιείται από τις διαδικτυακές υπηρεσίες για την ανταλλαγή των δεδομένων. UDDI (Universal Description, Discovery and Integration): Το Universal Description Discovery & Integration (UDDI) εστιάζει στον καθορισμό ενός συνόλου από υπηρεσίες που θα υποστηρίζουν την περιγραφή και την ανακάλυψη: των εταιριών, των οργανισμών και άλλων παρόχων web services καθώς και όσα από αυτά είναι διαθέσιμα. URI: η ταυτότητα μιας οντότητας στην οντολογία, κάθε οντότητα έχει ένα ξεχωριστό URI και αυτό είναι που χρησιμοποιείται στις περισσότερες περιπτώσεις για τον χειρισμό της. WSDL (Web Service Description Language): πρότυπο περιγραφής διαδικτυακών υπηρεσιών στου στηρίζεται στο XML. Έννοια: η γενική περιγραφή ενός αντικειμένου σε ένα σχήμα οντολογίας. Στον πραγματικό κόσμο κάθε αντικείμενο ανήκει σε μια τουλάχιστον κατηγορία ή ομάδα, αυτή την κατηγορία ή ομάδα εκπροσωπεί η έννοια σε μια οντολογία. Μια έννοια σε ένα σχήμα οντολογίας για ένα εκπαιδευτικό ίδρυμα μπορεί να είναι η πτυχιακή εργασία. Εύρος ιδιότητας: δηλώνει το σύνολο των εννοιών και των στιγμιότυπων αυτών οι οποίες μπορούν να διαθέτουν μια ιδιότητα. Οντολογία: μέθοδος ή σύστημα για την αναπαράσταση ενός τμήματος του κόσμου. Οντότητα: το βασικό συστατικό κάθε οντολογίας. Οποιοδήποτε αντικείμενο της οντολογίας είναι και μια οντότητα. Στιγμιότυπο έννοιας: πρόκειται για ένα συγκεκριμένο αντικείμενο το οποίο ανήκει σε μια κατηγορία – έννοια π.χ. αν έχουμε την έννοια πτυχιακή εργασία ένα στιγμιότυπο της είναι η συγκεκριμένη πτυχιακή εργασία που διαβάζετε αυτή τη στιγμή. Σχήμα οντολογίας: αναπαράσταση ενός τμήματος του πραγματικού κόσμου.
ΒΙΒΛΙΟΓΡΑΦΙΑ 1. MSDN library for visual studio 2005 (σε CD ή http://www.msdn.micorosft.com) 2. MSDN library for visual studio 2008 (σε CD ή http://www.msdn.micorosft.com) 3. NET Framework Essentials, Thoan Thai, Hoang Lam, εκδόσεις O'Reilly, 2001 4. ASP In A Nutshell: A Desktop Quick Reference, Keyton Weissinger, O'Reilly, 2000 5. Programming C# 2nd edition, Jesse Liberty, O'Reilly, 2002 6. Web Design Nutshell: A Desktop Quick Reference, Jennifer Niederst, O'Reilly, 1999 7. Java Cookbook, Ian Darwin, O'Reilly, 2001 8. JAVA in a Nutshell: A Desktop Quick Reference 4th edition, David Flanagan, O'Reilly, 2002 9. Java Web Services: Using Java in Service-Oriented Architectures, David Chappell,Tyler Jewell, O'Reilly, 2002 10. Java and SOAP, Robert Englander, O'Reilly, 2002 11. NetBeans The Definitive Guide, Tim Boudreau, Jesse Glick, Simeon Greene, Vaughn Spurlin, Jack J. Woehr, O'Reilly, 2002 12. XML in a Nutshell, Elliotte Rusty Harold, W. Scott Means, O'Reilly, 2002 13. KAON The Karlsruhe Ontology and Semantic Web Framework: Developer s Guide for KAON 1.2.7, January 2004, FZI Research Center for Information Technologies at the University of Karlsruhe, Germany, Research Group Knowledge Management (WIM), http://www.fzi.de/wim, Institute AIFB, University of Karlsruhe, Germany, Knowledge Management Group (WBS), http://www.aifb.uni-karlsruhe.de/WBS 14. KAON – An Overview, Karlsruhe Ontology Management Infrastructure, Thomas Gabel, York Sure and Johanna Voelker, (Institute AIFB, University of Karlsruhe), April 7th, 2004
Στοιχεία επικοινωνίας: Βασίλειος Κομιανός, τηλ.: 6942263410, e-mail:vasiliskomianos@gmail.com Παναγιώτης Βελισσάριος, τηλ.: 6948102533, e-mail:pvelissarios@googlemail.com Απαγορεύεται η αναπαραγωγή με κάθε μέσο του παρόντος έργου καθώς και τμήματος αυτού χωρίς έγκριση των δημιουργών. Άρτα, 26 Ιανουαρίου 2009.