Modelling ontologies has become one of the main topics of research within ontological engineering because of the difficulties it involves. Developers must tackle a wide range of difficulties and handicaps when modelling ontologies that can imply the appearance of anomalies or errors in ontologies. Therefore, it is important to evaluate the ontologies in order to detect those potential problems.


OOPS! (OntOlogy Pitfall Scanner!) helps you to detect some of the most common pitfalls appearing when developing ontologies.


This web site provides documentation for OOPS! Restful Web Service. There is also a web user interface avaialable at www.oeg-upm.net/oops.

OOPS! RESTFul Web Service

The web service is deployed in the following URL: http://oops-ws.oeg-upm.net/rest. A wadl file with the definition of the RESTFul web service is available in the following URL: http://oops-ws.oeg-upm.net/rest/application.wadl.


Web Service Request


For accessing the OOPS! RESTFUL Web Service, use a HTTP POST request using the following URL: http://oops-ws.oeg-upm.net/rest.


The body of the request must be an XML with the following structure:


<?xml version="1.0" encoding="UTF-8"?>
<OOPSRequest>
	<OntologyURI>http://www.cc.uah.es/ie/ont/learning-resources.owl</OntologyURI>
	<OntologyContent></OntologyContent>
	<Pitfalls>10</Pitfalls>
	<OutputFormat></OutputFormat>
</OOPSRequest>

The fields of the XML are:

  • OntologyURI: the ontology URI. Mandatory if OntologyContent field is empty.
  • OntologyContent: ontology RDF source code. Highly important: the RDF code must be contained inside <![CDATA[ RDF code ]]>. Otherwise, the code won’t be read properly. Mandatory if OntologyUrl field is empty.
  • Pitfalls: list of pitfalls to be scanned. If the list is empty, all the pitfalls will be analyzed. If the user just wants to analyze some pitfalls, just enter the number of the pitfall with a coma separator if more than one pitfall is entered. For instance: “4,11,21” or "P04,P11,P21". Although 35 pitfalls have been identified, not all of them have been implemented. List of implemented pitfalls: 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 19, 20, 21, 22, 24, 25, 25, 26, 27, 28 and 29. Optional field.
  • OutputFormat: response can be an RDF file or and XML file. Possible values of this field: XML or RDF/XML. If any other value is entered, the default output will be RDF/XML. Accepted values: XML, RDF/XML. Optional field.

You must enter either the OntologyUrl or the OntologyContent value, if none of them is sent, an RDF error message will be received as response. If both of them are entered, the service will use the OntologyContent.


Web Service Response


The web service response can be either a XML or a RDF file. In both cases, the structure is almost similar. Tags in XML response have been created using similar names or the same as in the RDF response. Below, both structures are described.


The RDF file response has the following structure:

  • Response element: a resource of rdf:type http://www.oeg-upm.net/oops#response. This is the main resource of the RDF file. This resource will contain as many elements as pitfalls, warning or suggestions detected during the analysis of the ontology.
  • Pitfall element: resources of rdf:type http://www.oeg-upm.net/oops#pitfall. For every pitfall detected, a new resource of this type will be created and associated with the response element. This element contains a set of fixed properties:
    • oops:hasCode: the code of the pitfall.
    • oops:hasName: the name of the pitfall.
    • oops:hasDescription: the description of the pitfall.
    Depending on the pitfall, it could contain some of the following elements:
    • oops:hasAffectedElement: indicates the URI of the element (class, object property or data property) affected.
    • oops:mightBeEquivalentProperty: points to a resource that will contain the URIs of the elements (class, object property or data property) affected.
    • oops:mightBeEquivalentAttribute: points to a resource that will contain the URIs of the elements (class, object property or data property) affected.
    • oops:mightNotBeInverseOf: indicates the URI of the element (class, object property or data property) affected.
  • Warning element: resources of rdf:type http://www.oeg-upm.net/oops#warning. For possible warning detected, a new resource of this type will be created and associated with the response element. This element contains a set of fixed elements:
    • oops:hasName: the name of the warning value.
    • oops:hasAffectedElement: this element will contain as many URIs as elements detected during the analysis.
  • Suggestion element: resources of rdf:type http://www.oeg-upm.net/oops#suggestion. For possible suggestions detected, a new resource of this type will be created and associated with the response element. This element contains a set of fixed elements:
    • oops:hasName: the name of the suggestion.
    • oops:hasDescription: the description of the suggestion value.
    • oops:hasAffectedElement: this element will contain as many URIs as elements detected during the analysis.

The XML file response has the following structure:

  • Pitfall element: this element (oops:Pitall) contains a set of fixed elements:
    • oops:Code: the code of the pitfall.
    • oops:Name: the name of the pitfall.
    • oops:Description: the description of the pitfall.
    • oops:Affects: this element will contain the elements affected. Depending on the pitfall, it could contain some of the following elements:
      • oops:AffectedElement: the URI of the element (class, object property or data property) affected.
      • oops:MightBeEquivalentProperty: to represent possible equivalent property elements. Contains oops:AffectedElement elements that will contain the URIs of the object properties affected.
      • oops:MightBeEquivalentAttribute: to represent possible equivalent attribute elements. Contains oops:AffectedElement elements that will contain the URIs of the data properties affected.
      • oops:MightNotBeInversedOf: to represent possible wrong inverse relationships between object properties. Contains oops:AffectedElement elements that will contain the URIs of the object properties affected.
  • Warning element: this element (oops:Warning) contains a set of fixed elements:
    • oops:Name: the name of the warning.
    • oops:Affects: this element will contain the elements affected. This element contains a set of oops:AffectedElement: the URI of the element (class, object property or data property) affected.
  • Suggestion element: this element (oops:Suggestion) contains a set of fixed elements:
    • oops:Name: the name of the suggestion.
    • oops:Description: the description of the suggestion.
    • oops:Affects: this element will contain the elements affected. This element contains a set of oops:AffectedElement: the URI of the element (class, object property or data property) affected.

Request examples

In both examples, the ontology analysed is http://www.cc.uah.es/ie/ont/learning-resources.owl. In the first example, OntologyUrl field is used and the output will be a XML file. In the second example, OntologyContent field is used and the output will be a RDF/XML file. In both cases, only pitfall number 10 will be analysed.


Example using OntologyUrl field and XML output


Request body:


<?xml version="1.0" encoding="UTF-8"?>
<OOPSRequest>
      <OntologyUrl>http://www.cc.uah.es/ie/ont/learning-resources.owl</OntologyUrl>
      <OntologyContent></OntologyContent>
      <Pitfalls>10</Pitfalls>
      <OutputFormat>XML</OutputFormat>
</OOPSRequest>

Service Response:


<?xml version="1.0" encoding="UTF-8"?>
<oops:OOPSResponse xmlns:oops="http://www.oeg-upm.net/oops">
	<oops:Pitfall>
		<oops:Code>P10</oops:Code>
		<oops:Name>Missing disjointness [1, 2, 3]</oops:Name>
		<oops:Description>The ontology lacks disjoint axioms between classes or between properties 
		that should be defined as disjoint. For example, we can create the classes “Odd” and “Even” 
		(or the classes “Prime” and “Composite”) without being disjoint; such representation is not 
		correct based on the definition of these types of numbers.</oops:Description>
	</oops:Pitfall>
</oops:OOPSResponse>

Example using OntologyContent field and RDF/XML output


Request body:


<?xml version="1.0" encoding="UTF-8"?>
<OOPSRequest>
      <OntologyUrl></OntologyUrl>
      <OntologyContent><![CDATA[
<?xml version="1.0"?>
<rdf:RDF
    xmlns="http://www.cc.uah.es/ie/ont/learning-resources#"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
  xml:base="http://www.cc.uah.es/ie/ont/learning-resources">
  <owl:Ontology rdf:about="">
    <rdfs:comment xml:lang="en">An upper ontology for models of</rdfs:comment>
  </owl:Ontology>
  <owl:Class rdf:ID="LearningObject">
    <rdfs:comment xml:lang="en">"A digital learning resource"</rdfs:comment>
  </owl:Class>
  <owl:Class rdf:ID="ExerciseLO">
    <rdfs:comment xml:lang="en">"A task, problem, or other effort performed to develop or maintain fitness 
    or increase skill:"</rdfs:comment>
    <rdfs:subClassOf rdf:resource="#LearningObject"/>
  </owl:Class>
  <owl:ObjectProperty rdf:ID="partOf">
    <owl:inverseOf>
      <owl:TransitiveProperty rdf:ID="hasPart"/>
    </owl:inverseOf>
    <rdfs:range rdf:resource="#LearningObject"/>
    <rdfs:domain rdf:resource="#LearningObject"/>
  </owl:ObjectProperty>
  <owl:TransitiveProperty rdf:about="#hasPart">
    <rdfs:range rdf:resource="#LearningObject"/>
    <rdfs:domain rdf:resource="#LearningObject"/>
    <rdfs:comment xml:lang="en">Specifies that a LO has as one of its constituent another LO.</rdfs:comment>
    <owl:inverseOf rdf:resource="#partOf"/>
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
  </owl:TransitiveProperty>
  <LearningObject rdf:ID="aLearningObject">
    <hasPart>
      <ExerciseLO rdf:ID="anExerciseLearningObject">
        <partOf rdf:resource="#aLearningObject"/>
      </ExerciseLO>
    </hasPart>
    <partOf>
      <LearningObject rdf:ID="yetAnotherLearningObject">
        <hasPart rdf:resource="#aLearningObject"/>
      </LearningObject>
    </partOf>
  </LearningObject>
  <LearningObject rdf:ID="anotherLearningObject"/>
</rdf:RDF>
]]></OntologyContent>
      <Pitfalls>10</Pitfalls>
      <OutputFormat>RDF/XML</OutputFormat>
</OOPSRequest>

Service Response:


<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:oops="http://www.oeg-upm.net/oops#" > 
  <rdf:Description rdf:about="http://www.oeg-upm.net/oops/64abbced-1570-4067-a079-f8f94722a57e">
    <oops:hasPitfall rdf:resource="http://www.oeg-upm.net/oops/8ed5e4bb-f95d-4641-bc20-ff226466d535"/>
    <rdf:type rdf:resource="http://www.oeg-upm.net/oops#response"/>
  </rdf:Description>
  <rdf:Description rdf:about="http://www.oeg-upm.net/oops/8ed5e4bb-f95d-4641-bc20-ff226466d535">
    <oops:hasDescription rdf:datatype="http://www.w3.org/2001/XMLSchema#string">The ontology lacks 
    disjoint axioms between classes or between properties that should be defined as disjoint. For 
    example, we can create the classes “Odd” and “Even” (or the classes “Prime” and “Composite”) 
    without being disjoint; such representation is not correct based on the definition of these 
    types of numbers.</oops:hasDescription>
    <oops:hasName rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Missing disjointness 
    [1, 2, 3]</oops:hasName>
    <oops:hasCode rdf:datatype="http://www.w3.org/2001/XMLSchema#string">P10</oops:hasCode>
    <rdf:type rdf:resource="http://www.oeg-upm.net/oops#pitfall"/>
  </rdf:Description>
</rdf:RDF>

Please, help us making OOPS! better. Feedback is more than welcome and you can also suggest new pitfalls!

Want to help?

Documentation:

Related papers:

Web services:

Developed by:

OEG logo