Een belangrijk punt voor het implementeren van onze context-aware service compositie tool is dat we kunnen werken met ontologies en dat we over die ontologies kunnen redeneren. Daarom bekijken we in deze post enkele API's en mogelijke reasoning engines.
Voor de ontology API hebben we de volgende keuzes:
- OWL API [1]
- Jena [2]
- Protégé-OWL API [3]
Voor de reasoners hebben we de volgende keuzes:
- Pellet [4]
- FaCT++ [5]
- RacerPro [6]
- Hermit OWL Reasoner [7]
Op het eerste zicht lijken dit twee losstaande keuzes te zijn, maar dat is het niet omdat de API's niet alle reasoners even goed ondersteunen en omgekeerd. We moeten dit dus in ons achterhoofd houden. Daarnaast is het ook zo dat de API die we kiezen een invloed heeft op een groot deel van onze code omdat we deze op vele plaatsen nodig hebben in de code. Wanneer we dus later zouden moeten wisselen van API betekent dit dat we een mogelijk groot deel moeten herschrijven en dit is zeker niet gewenst. Bij de reasoners is dit niet noodzakelijk het geval omdat bepaalde API's een eenduidige interface aanbieden die voor alle reasoners werkt waardoor het dus mogelijk is om heel eenvoudig van reasoner te wisselen.
Om nu een keuze te maken voor zowel een reasoner als een API gaan we de opties eerst wat dieper in detail bekijken.
Vergelijking van de API's.
OWL API
The OWL API is a Java interface and implementation for the W3C Web Ontology Language OWL. The latest version of the API is focused towards OWL 2 which encompasses, OWL-Lite, OWL-DL and some elements of OWL-Full. [1]
Jena
Jena is a Java framework for building Semantic Web applications. It provides a programmatic environment for RDF, RDFS and OWL, SPARQL and includes a rule-based inference engine. [2]
Protégé-OWL API
The Protégé-OWL API is an open-source Java library for the Web Ontology Language and RDF(S). The API provides classes and methods to load and save OWL files, to query and manipulate OWL data models, and to perform reasoning. Furthermore, the API is optimized for the implementation of graphical user interfaces. [3]
Alle drie de API's zijn open source en bieden op het eerste zicht een goede ondersteuning aan voor de OWL specificatie. Na wat verder te zoeken blijkt het dat vooral de OWL API en Jena voor ons handig kunnen zijn. De Protégé-OWL API is vooral handig wanneer je plugins voor Protégé wil schrijven. Tussen OWL API en Jena is het wat moeilijker kiezen. Het voordeel blijkt toch voor een stuk uit te gaan naar OWL API omwille van de volgende punten:
- Eenvoudiger dan Jena en Protégé.
- Staat dichter bij de specificatie dan Jena en Protégé.
- Ondersteuning voor alle bovenstaande genoemde reasoners.
Vergelijking van de reasoners.
Pellet, FaCT++ en Hermit zijn open source, RacerPro daarentegen is niet open source en dus niet gratis beschikbaar.
Alle reasoners ondersteunen ongeveer dezelfde basisfuncties. Het grote verschil is vaak de performantie van de reasoners. In ons systeem is performantie redelijk belangrijk dus kan de performantie mogelijk een doorslaggevende factor zijn bij de keuze. Het is natuurlijk ook zeer belangrijk dat de reasoners correct functioneren.
Er zijn een aantal papers die een aantal reasoners vergelijken op performantie en correctheid (bijvoorbeeld [8], [9], [10]). Het probleem is echter dat, ondanks het feit dat de papers allemaal vrij recent zijn, de reasoners vaak in het laatste jaar al upgedate zijn waardoor hun conclusies mogelijk niet meer volledig correct zijn. Bovendien blijken de resultaten in de papers sterk af te hangen van de gekozen ontologies. We kunnen nu dus nog niet besluiten welke reasoner het best is voor onze toepassing.
Op dit moment is het bovendien nog niet duidelijk in hoeverre welke reasoners alle eigenschappen ondersteunen die we zullen nodig hebben. We zullen dit pas later zien wanneer we geavanceerdere functies toevoegen aan de code.
Besluit:
De keuze voor een specifieke API is niet gemakkelijk en vaak is het gewoon een voorkeur voor de ene manier van werken tegenover de andere. Toch is de keuze van de API belangrijk in onze thesis omdat we veel code zullen schrijven die zich baseert op een bepaalde API. Het is dus niet triviaal om op een later moment voor een andere API te kiezen. We hebben daarom geprobeerd zo goed mogelijk te bepalen welke API voor ons de beste keuze is, door de voordelen van de verschillende API's op een rijtje te zetten. Daarenboven hebben we ook in alle drie de API's enkele codevoorbeelden bestudeerd en zelf een paar dingen geprobeerd.
Na dat we dit alles gedaan hebben maken we volgende keuze. We kiezen voor de OWL API omwille van het eenvoud van gebruik, een goede ondersteuning (zowel documentatie als mailinglist) en omdat alle reasoners OWL API ondersteuning hebben. Doordat we kiezen voor de OWL API is de keuze van reasoner op dit moment niet zo belangrijk aangezien de OWL API een interface aanbiedt om met iedere reasoner te communiceren. Op dit moment in het project kunnen we dus nog vrij kiezen welke reasoner het wordt.
Extra:
Een ander probleem dat zich stelt is het verschil tussen OWL API v.2 en OWL API v.3. OWL API v.3 is de meest recente versie maar wordt bijvoorbeeld door pellet reasoner nog niet goed ondersteund. Daartegenover staat dat Hermit enkel OWL API v.3 ondersteunt. Dit maakt het er niet makkelijker op, omdat er toch al redelijke verschillen zijn tussen v.2 en v.3. Bovendien verschillen de imports van naam zodat we deze ook zouden moeten aanpassen als we wisselen van API. Een mogelijke oplossing kan erin bestaan bepaalde stukken van de code te verbergen achter een Facade. Dit zorgt echter voor een stuk meer code. Het is bovendien niet mogelijk om alles achter een facade te verstoppen - tenzij we alle nodige API's voorzien in de Facade, maar dit zorgt voor nog meer code overhead.
We hebben ondertussen reeds Pellet en FaCT++ wat getest met de DogOnt ontology. Daaruit blijkt dat Pellet het vaak moeilijk heeft met de DogOnt ontology en soms heel lang bezig is met een classificatie (of zelfs volledig blijft hangen). Daarom gaat onze voorkeur voor de reasoner op dit moment uit naar FaCT++. Het is zeker de bedoeling om ook Hermit nog te testen. RacerPro valt uit de boot omdat er enkel een gratis trial versie is.
Bronnen:
[1] http://owlapi.sourceforge.net/
[2] http://jena.sourceforge.net/
[3] http://protege.stanford.edu/plugins/owl/api/
[4] http://clarkparsia.com/pellet/
[5] http://owl.man.ac.uk/factplusplus/
[6] http://www.racer-systems.com/
[7] http://hermit-reasoner.com/
[8] Benchmarking DL Reasoners Using Realistic Ontologies - Zhengxiang Pan
[9] A survey of requirements for automated reasoning services for bio-ontologies in OWL - C. Maria Keet , Marco Roos , and M. Scott Marshall
[10] Evaluation of Ontologies and DL Reasoners - Muhammad Fahad, Muhammad Abdul Qadir and Syed Adnan Hussain Shah
[11] HermiT: A Highly-Efficient OWL Reasoner - Rob Shearer, Boris Motik, and Ian Horrocks
Geen opmerkingen:
Een reactie posten