Aspekty bezpieczeństwa
LMS SERVICE
3.3.2. Moduł Zaawansowanego Wyszukiwania (ASM)
3.3.2.2. Szczegółowy opis składowych ASM PA – Personal Agent
Personal Agent to agent reprezentujący użytkownika. Każdy użytkownik który uzyskuje dostęp do systemu posiada jedną instancję tego agenta którego zadanie polega na obsłu-‐ dze użytkownika. Nie mam możliwości dostępu do systemu z pominięciem agenta osobi-‐ stego. Jeśli użytkownik posiada konto agent po zalogowaniu wczytuje ustawienia danej osoby. W przypadku użytkownika niezalogowanego agent bazuje na ustawieniach domyślnych, a funkcjonalność wyszukiwania jest znacznie zredukowana np. brak perso-‐ nalizacji. Agent automatycznie aktualizuje ustawienia konta użytkownika w momencie wylogowania które również automatycznie nastąpi po 30 minutowym okresie nieaktyw-‐ ności. Po przygotowaniu zapytania agent decyduje w jakiej formie i którym agentom wyszukującym je przekazać. Uzyskane wyniki napływają od agentów SA w sposób asyn-‐ chroniczny. PA na bieżąco przesyła uzyskane wyniki wyszukania do agenta RA który przekazuje mu spersonalizowane informacje odnośnie znalezionych obiektów LO. Końcowe wyniki są gromadzone i dostępne u agenta PA do czasu kolejnego zadania zapytania. Użytkownik zatem po zadaniu zapytania nie musi czekać na wynik wyszuki-‐ wania lecz wynik może uzyskać po ponownym zalogowaniu się do Systemu.
PA stanowi klasę Javy opartą na klasie Agent platformy JADE implementującą interfejsy tworzące jego funkcjonalność Agenta w Systemie ABSS – tabela 19.
Aby powołać do życia instancję agenta osobistego należy wywołać statyczną metodę
lookupPersonalAgent. Metody statyczne oznaczono niebieskim kolorem.
Tabela 19: Interfejsy agenta PA
metody interfejsu opis
initializePersonalAgentInterface shutdownPersonalAgentInterface
Celem jest przygotowanie agentów osobistych poprzez nawią-‐ zanie połączenia z bazą proWili użytkowników DB_USERS, a także pobranie z tabel DB_LOMS struktur opisujących słowniki systemu ABSS w celu szybkiego ich stosowania.
lookupPersonalAgent
(String personalAgentName)
Poszukuje i zwraca referencję do agenta używając jego unikal-‐ nej nazwy. Jeśli agent nie zostanie odnaleziony powoływana jest nowa instancja.
killPersonalAgentIfExists
(String personalAgentName) Agent o danej nazwie jest niszczony o ile zostanie odnaleziony.
createUser
(UserSettings userSettings)
Metoda zakłada nowe konto użytkownika. Klasa UserSettings stanowi DAO (Data Access Objects) wykorzystywany w J2EE do tworzenia odpowiednich rekordów w bazie DB_USERS. Obiekt ten zawiera kompletną informację o użytkowniku wymaganą przez system ABSS.
validateUserLogin (String username, String password)
Służy do autoryzacji użytkownika w systemie; zwraca ustawie-‐ nia konta użytkownika w przypadku sukcesu (UserSettings)
getUserSettings()
Zwraca ustawienia użytkownika w imieniu do którego przypi-‐ sany jest dany agent osobisty lub “null” dla użytkownika anoni-‐ mowego (niezalogowanego w Systemie).
addRequest(Request request)
Dodaje nowe zapytanie (request) do listy zapytań obsługiwa-‐ nych przez PA w imieniu użytkownika. PA odpowiada za wybór odpowiednich SA i przekazanie im zapytania z żądaniem wyszukiwania obiektów LO zgodnych z zapytaniem.
Lista dostępnych w systemie agentów szukających jest pobie-‐ rana poprzez usługę platformy JADE DF.
getCurrentRequests() getCurrentRequestsCount()
Zwraca Obiekt klasy Vector zawierający ciąg zapytań (Requests) lub ich liczbę aktualnie obsługiwanych przez PA dla danego użytkownika.
removeRequest(Request request) removeAllRequests()
Przekazuje informację do agenta PA, że użytkownik nie jest zainteresowany dalszym danym wyszukiwaniem (Request).
metadataSelected (int metadataId) metadataRanked
(int metadataId, int rank) metadataDownloaded (int metadataId) metadataAddedToFolder (int metadataId, Folder folder) metadataRemovedFromFolder (int metadataId, Folder folder)
Lista metod służących przekazaniu za pośrednictwem agenta PA agentowi RA informacji o czynnościach wykonanych przez użytkownika (zarówno jawnych jak i niejawnych) dla konkret-‐ nego opisu LO.
addStoredRequest (Request request) deleteStoredRequest
(long requestId) getStoredRequests()
Metody przeznaczone dla zarejestrowanych użytkowników służące wyszukiwaniu w trybie ofWline.
W przypadku znalezienia wyników użytkownik każdorazowo będzie informowany o nich za pomocą poczty elektronicznej.
getAvailableSearchMethods()
Zwraca listę (obiekt klasy Vector) opisów metod wyszukiwaw-‐ czych dostępnych w systemie. Celem jest umożliwienie użyt-‐ kownikowi wskazanie które metody wyszukiwania mają być użyte do realizacji zapytania (Request).
Opis kluczowych klas i sposoby ich wykorzystania przedstawiono w kolejnych sekcjach.
UserSepngs
Klasa wykorzystywana przy tworzeniu nowego konta użytkownika oraz pobieraniu informacji o istniejącym koncie użytkownika. Dane są pobierane każdorazowo z bazy danych DB_USERS po zalogowaniu użytkownika do systemu i zapisywane w momencie zakończenia pracy przez agenta osobistego. Klasa przechowuje informacje o użytkow-‐ niku i zawiera następujące pola: username (unikalna nazwa ustawiana tylko w momencie zakładania konta), password, firstName, middleName, lastName, gender, email, birthYear,
yearOfEducation, nativeLanguage, spokenLanguages (oba pola zawierają wartości ze słow- nika opisującego języki),countryOfBirth, countryOfEducation (oba pola zawierają wartości ze słownika nazw krajów),interests,profesionalInterests(oba pola zawierają wartości ze słow-
nika ETB – LRE Thesaurus),favourites,courses(obiekty klasy Folder),userType(informacja czy jest to konto ucznia, nauczyciela czy innego typu osoby).
Folder
Klasa opisuje tzw. folder metadanych, czyli miejsce do którego można wstawiać obiekty reprezentujące metadane (obiekty klasy Metadata), zapytania (obiekty klasy Request) oraz inne obiekty klasy Folder.
Każdy użytkownik może utworzyć swoją strukturę folderów i nadać jej nazwę oraz opisać jej przeznaczenie oraz ponadto kategorię (używając wartości z LRE Thesau-‐ rus), a w przypadku nauczycieli również kategorię wiekową reprezentującą docelową grupę użytkowników kursu w którym wykorzystywane będą elementy danego folderu.
Istnieje jeden folder domyślny (tzw. root folder) przechowywany w PA który stanowi bazę struktury folderów tworzonych przez użytkownika.
ZdeWiniowano następujące metody tworzące funkcjonalność Folderu – dla metadanych:
getMetadata(), addMetadata (Metadata metadata), deleteMetadata(long metadataId); dla zapytań:getRequests(),addRequest (Request request),deleteRequest (long requestId); w celu przeglądania struktury:getParentFolder(),getSubfolders(),addSubfolder(Folder folder), deleteFolder(Folder folder).
Request
Klasa ta reprezentuje pojedyncze zapytanie użytkownika. Każde zapytanie jest powią-‐ zane z użytkownikiem (poprzez jego PA) oraz wynikami zapytania (ciąg wyników repre-‐ zentowany przez Vector obiektów klasy Result).
Klasa Request dziedziczy z serializowanej klasy RequestQuery wykorzystywanej przy przesyłaniu zapytań do agentów wyszukujących SA. Zapytanie wymaga przesłania tekstu reprezentującego zapytanie – konstruktor Request(String queryString) (tekst odpowiada polu:queryTitle. Wartość tę można zmody\ikować po utworzeniu obiektu wywołując metodę: setQueryTitle(String queryTitle)).
Można uszczegółowić charakter zapytania ustawiając jego parametry (odpowied- nie pola) za pomocą publicznych metod. Można wskazać autora, słowa kluczowe czy przeznaczenie – pola:queryAuthors,queryKeywords,queryDescriptioni odpowiadające im metody: setQueryAuthors(String queryAuthors), setQueryKeywords(String queryKey-‐ words), setQueryDescription(String queryDescription).
Przeszukiwanie można zawęzić wprowadzając ograniczenia co do języków natu-‐ ralnych stosowanych dla opisu zasobów czy samych zasobów (metody odpowiednio:
setLanguages(java.util.Vector<Language> languages))setResourceLanguages(java.util. Vector<java.lang.Integer> resourceLanguagesIds)); do określonego zakresu dla wieku, rozmiaru zasobów LO, daty utworzenia – pola:ageMin,ageMax,sizeMin,sizeMax,contribu-‐ tedBefore, contributedAfter i metody im towarzyszące w kolejności:setAgeMin(Integer ageMin), setAgeMax(Integer ageMax), setSizeMin(Integer sizeMin), setSizeMax(Integer sizeMax), setContributedBefore(java.util.Date contributedBefore), setContributedA-‐ fter(java.util.Date contributedAfter); uwzględnieni opłat i restrykcyjności – pola:
costs i restrictions i metody kolejno: setCosts(Boolean costs) i setRestrictions( Boolean restrictions); uwzględnienia konkretnych formatów i typów LO (setFormats( java.util.Vector<java.lang.Integer> formatsIds) i setResourceTypes(java.util.Vector <java.lang.Integer> resourceTypesIds)); przeznaczenia LO (setEndUserRoles(java.
util.Vector<java.lang.Integer> endUserRolesIds) i setResourceLearningContexts(java. util.Vector<java.lang.Integer> resourceLearningContextsIds)).
Wyszukiwanie można ograniczyć podając maksymalną liczbę zwracanych wyni-‐ ków: setMaxResultsCount(int maxResultsCount), czy wskazać konkretne metody wyszu-‐ kujące które mają zostać zastosowane:setSearchMehods(java.util.Vector<SearchMethod> searchMehods).
System wyszukiwania wspiera rozszerzenia S2QL (utworzono nowy języka zapy-‐ tań XS2QL – eXtended S2QL). Wprowadzone rozszerzenia umożliwiają stosowanie operatorów logicznych “OR” i “AND” w zapytaniu – więcej w sekcji: „Nowe języki zde\inio-
wane i obsługiwane przez system wyszukiwania” (str. 108).
Użytkownik ma możliwość wprowadzić domyślne ustawienie dla zapytania tzw.
globalMergeMode (setGlobasMergeMode(RequestQuery.MergeMode mergeMode)) oznaczający w praktyce czy poszukujemy obiektów spełniających wszystkie parametry zapytania lub spełnienie choć jednego z nich. Przy czym jako spełnienie danego pojedynczego „para-‐ metru” traktujemy sukces wyrażony przez znalezienie zasobów w których występuje ten dany parametr. Sam parametr wyszukiwania może być złożony z listy pojedynczych skła-‐ dowych jak na przykład lista słów kluczowych. Wprowadzono także dodatkową możli-‐ wość wskazania czy opisane powyżej spełnienie pojedynczego „parametru zapytania” oznacza spełnienie wszystkich jednostkowych wartości z jego listy czy choć jednego. Realizacja dokonuje się poprzez ustawienie warunków logicznych dla elementów list. Służą do tego następujące metody: setQueryTitleMergeMode(RequestQuery.MergeMode queryTitleMergeMode), setQueryAuthorsMergeMode(RequestQuery.MergeMode queryAuthor-‐ sMergeMode), setQueryKeywordsMergeMode(RequestQuery.MergeMode queryKeywordsMerge-‐ Mode), setQueryDescriptionMergeMode(RequestQuery.MergeMode queryDescriptionMerge-‐ Mode), setEndUserRolesMergeMode(RequestQuery.MergeMode endUserRolesMergeMode), set-‐ FormatsMergeMode(RequestQuery.MergeMode resourceFormatsMergeMode), setLreThesauri-‐ ItemsMergeMode(RequestQuery.MergeMode lreThesauriItemsMergeMode), setResourceLan-‐ guagesMergeMode(RequestQuery.MergeMode resourceLanguagesMergeMode), setResource-‐ LearningContextsMergeMode(RequestQuery.MergeMode learningContextsMergeMode) i set-‐ ResourceTypesMergeMode(RequestQuery.MergeMode resourceTypesMergeMode).
Tworzenie zapytania bez podawania jego parametrów jest również możliwe przy zastosowaniu jednej z poniższych metod:
1. buildMetadataBasedSimilarityRequest(java.util.Vector<Metadata> similarMetadata)
stanowi implementację podejścia QBE (ang. Query By Example) i pozwala użytkowni-‐ kowi wyszukiwać zasoby podobne do przykładów umieszczonych w wektorze. Jej zada-‐ nie polega na wyszukaniu wszystkich podobieństw pomiędzy metadanymi i stworzenie zapytania mającego wspólne cechy wszystkich metadanych z listy.
2. getOtherUsersOpinionBasedSimilarityRequestAndResults(UserSettings userSettings, java.util.Vector<java.lang.Long> lomsIds,
int maxResultsCount)
metoda ta wykorzystuje informacje zgromadzone w folderach użytkownika traktując dodane obiekty do folderów jako obiekty podobne, a następnie tworzy zapytanie uwzględniając dodatkowo obiekty z listy lomsIds (o ile są one podane).
Uzyskane wyniki wyszukiwania (podejście asynchroniczne oznacza, że wyniki spływają od wielu agentów wyszukujących i mogą zmieniać się w czasie do chwili kiedy
wszyscy agenci zakończą proces wyszukiwania) mogą być przedstawiane użytkowni-‐ kowi na różne sposoby. Sposób przedstawienia wyników stanowi realizację dopasowań według zadanych kryteriów – implementację fragmentu koncepcji przedstawionej w sekcji: „Propozycja systemu wyszukiwania spersonalizowanego” (str. 53).
Za realizację odpowiedzialne są poniższe metody:
getResultsOrderedByQueryConformityAvg(...)
getResultsOrderedByQueryConformityAvg(java.util.Hashtable<String,Integer> methodsWeights) methodsWeights – tablica hashująca. jej kluczem jest nazwa metody, a liczba reprezentuje w procentach wagę „dopasowań do zapytania” wyników tej metody
getResultsOrderedByQueryConformityMax()
Wyniki są sortowane według dopasowań do zapytań przy czym jeśli więcej niż jeden agent wyszukujący dostarczy ten sam obiekt lecz z inną wartością dopasowania do zapy-‐ tania różne strategie są stosowane przy wyliczeniu ostatecznej wartości dopasowania;
getResultsOrderedByPopularity(UserOpinionType16 userOpinionType)
sortowanie wg popularności obiektu czyli liczby pobrań i oglądnięć;
getResultsOrderedByProfileConformity(UserSettings userSettings)
dopasowanie obiektu do proWilu użytkownika(brane pod uwagę są języki “spoken languages”, wiek oraz zainteresowania);
getResultsOrderedByRanks(UserType17 ranksOfUserType)
sortowanie po ocenach przypisanych obiektom poprzez daną kategorię użytkowników;
getResultsOrderedBySimilarUsersEvaluation(UserSettings userSettings, UserSimilarityType18 userSimilarityType,
UserOpinionType16 userOpinionType, UserType17 userType)
Wykorzystuje zaimplementowane metody CF. Na podstawie zadanego typu CF (wartość
UserSimilarityType) oraz typu użytkownika (wartość UserType) brane pod uwagę będą tylko odpowiednie typy klasteryzacji, a następnie wg polaUserSettings znaleziony jest klaster do którego przypisany jest dany użytkownik. Sortowanie uwzględnia dopasowa-‐ nie wyników do klastra poprzez średnią ocenę nadaną obiektom przez użytkowników danego klastra.
getResultsOrderedBySearchMethod()
Metoda pozwala posortować listę wyników wg metody wyszukiwawczej. Nie następuje scalanie wyników. Celem jest zarówno prezentacja skuteczności konkretnych metod wyszukujących oraz możliwość kalibracji wag stosowanych w metodziegetResultsOrde-‐ redByQueryConformityAvg używanej przy scalaniu wyników.
Realizacja scalenia wyników pochodzących od różnych agentów wyszukujących, czy jako wynik końcowy podsystemu wyszukującego oraz podsystemu personalizującego ma miejsce poprzez zastosowanie poniższych metod realizujących scalanie dwóch list wyni-‐ ków w oparciu o różne średnie ważone (arytmetyczną i geometryczną).
Metody te to:
16. abss.userInterface.UserOpinionType przyjmuje jedną z 5 wartości: downloading, labelling,
ranking, viewing lub any.
17. abss.userInterface.UserType przyjmuje jedną z 3 wartości: learner, teacher lub other.
18. abss.userInterface.UserSimilarityType przyjmuje jedną z 3 wartości: behaviour, profile lub both.
mergeResults(java.util.Vector<Result> firstResults, byte firstResultsWeight,
java.util.Vector<Result> secondResults, byte secondResultsWeight)
mergeResultsGeometricMean(java.util.Vector<Result> firstResults, byte firstResultsWeight,
java.util.Vector<Result> secondResults, byte secondResultsWeight)
Wynikiem jest ciąg (Vector) wyników nie zawierający zduplikowanych metadanych gdzie ostateczne dopasowanie “conformity” stanowi średnią arytmetyczną lub geome-‐ tryczną wartości wcześniejszych.
Result
Obiekty jej klasy są zwracane jako lista (obiekt klasy Vector). wyniki zapytania nie zawierają konkretnych metadanych lecz indeksy (polemetadataId) reprezentujące meta-‐ dane w tabelach bazy DB_LOMS. Ponadto zawierają zestandaryzowaną wartość z prze-‐ działu: [0,100] oznaczającą w % stopień dopasowania wyniku do zapytania (pole
queryConformityPercent).
W klasie zaimplementowano dwie metody służące otrzymaniu metadanych reprezento-‐ wanych przez pole metadataId:
•getMetadata() – zwraca obiekt klasy Metadata zawierający dane pochodzące z DB_LOMS
•getMetadataXML(FireXMLResultFormat xmlResultFormat) – zwraca opis metadanych w zadanym formacie (FireXMLResultFormat) i jest używany przez interfejs SQI
Metadata
Obiekty jej klasy służą do opisania metadanych przechowywanych w DB_LOMS.
ZdeWiniowano metody pozwalające na odczyt wartości stosownych pól, a w szczególno-‐ ści: educationalDescription(Language language), getDescription(Language language),
getRightsDescription(Language language)(zwracają przeznaczenie LO jako tekst w zadanym języku o ile opis taki oczywiście istnieje), getUrl() (zwraca adres domyślnej lokalizacji LO),
getAdditionalUrls() (zwraca listę redundantnych lokalizacji LO), getAgeMax(), getAgeMin()
(pola zwracają wartości wskazujące na docelową grupę wiekową danego LO), getAuthors()
(autorzy / twórcy LO),getAvailableLanguages()(lista języków dla których dostępne są warianty LO), getLanguages() (lista języków dla których istnieją opisy LOM), getClassification()
(opisują kategorię zasobów poprzez wartości ETB – LRE Thesaurus), getKeywords(Language language) (lista słów kluczowych), getResourceEndUserRoles(), getResourceFormats(),
getResourceTypes(), getResourceLearningContexts(), getTitle(Language language),
getSize(),isCosts(),isRights() zwracają wartości związane z polami reprezentującymi konkretne wartości zgodnie ze standardem LRE 2.0 / IEEE LOM (tabela 18 – str. 95).
Ponadto wprowadzono też metody związane z realizacją wyszukiwania spersona-‐ lizowanego, a w szczególności: getDownloadCount(), getSelectCount() (dla liczby pobrań i oglądnięć), getRankAverage(), getRankLearner(), getRankTeacher() (reprezentują oceny nadane przez użytkowników systemu) oraz getRankLearnerCount() i getRankTeacherCount()
(liczba ocen).
DAOs
Obiekty DAO (ang. Data Access Objects) są używane tylko wewnątrz metod agenta osobi-‐ stego. Użyte klasy DAO dziedziczą z klasy PrototypeDAO która obsługuje komunikację z bazą danych mySQL. Wszelkie operacje na danych bazy nie są wykonywane bezpośred-‐ nio na bazie lecz poprzez odpowiednie obiekty DAO. ZdeWiniowano następujące klasy: FireXMLResultFormat, ResourceEndUserRoleDAO, ResourceLearningContextDAO, i UserSettingsDAO.
JadeContainerController
Klasa używana tylko przez narzędzia administratora. Służy do monitorowania pracy agentów. Pozwala tworzyć i usuwać agentów oraz włączać/wyłączać usługi wyszukiwania.
Vocabularies
System wykorzystuje tabele słownikowe stanowiące część bazy DB_LOMS zawierające wartości zdeWiniowane przez standardy LRE 2.0 / IEEE LOM (tabela 18 – str. 95). Dane słownikowe są pobierane przy starcie platformy agentowej z tabel DB_LOMS (tabela 20). Utworzono szereg klas reprezentujących podstawowe tabele słownikowe prze-‐ chowywane w tablicy statycznej. Klasy te wywodzą się zVocabularyItem wprowadzonej w celu ujednolicenia operacji ładowania danych słownikowych oraz prezentację warto-‐ ści słownika w zadanym języku narodowym (getNameTranslation(Language language)). Tabele te to: Country, Language, ResourceEndUserRole, ResourceFormat, ResourceLearning-‐ Context i ResourceType.
Wprowadzono także obsługę ETB – LRE Thesaurus (tabela 21). Realizacja poprzez klasę ThesaurusItem w której zdeWiniowano metody pozwalające na poruszanie się po strukturze thesaurusa (getParents(),getChildren(),getRelated(), getSynonyms(),
getSimilar(int similarityLevel),isSimilar(ThesaurusItem comparedItem),getSimilari-‐ tyLevel(ThesaurusItem comparedItem)).
Tabela 21: Tablice DB_LOMS przechowujące wartości ETB – LRE Thesaurus