Notre travail sur les requêtes fédérées

SPARQL

L’ambition de SPARQL est d’offrir une interopérabilité, non seulement au niveau des services, comme avec les services Web, mais aussi au niveau des données, structurées ou non, qui sont disponible à travers l’Internet. Toutes ces données disponibles en ligne via SPARQL sont ce que l’on nomme le Web des données1.

SPARQL2

La structure d’une requête SPARQL2

Les objets sur l’Internet sont liées l’un à l’autre. Avec des triplets RDF, il est possible de décrire le lien entre différents objets sous la forme de (sujet, prédicat, objet). Ces connexions peuvent être représentés sous forme de graphe des objets, où chaque noeud est un objet et chaque bord est une propriété. Avec SPARQL (SPARQL Protocole et RDF Query Language), il est possible de créer des requêtes basées sur ces graphes. La structure d’une requête SPARQL est indiqué dans la figure.

Dans l’exemple ci-dessous, une requête SPARQL est affiché. Nous voudrions sélectionner les personnes et leurs âges de l’ensemble de données http://example.org/data.rdf. La structure de l’exécution est représentée dans la figure.

SPARQL

La structure de l’exécution de SPARQL3

Requêtes fédérées

Il est possible, qu’un objet existe sur Internet dans plus de graphe avec des URI différents, donc il peut être difficile de recueillir toutes les informations existantes sur cet objet. La raison pour cela est de certaines informations peuvent être trouvées dans une graphe et quelques autres informations peuvent être trouvées dans l’autre graphe. Pour résoudre ce problème, nous avons besoin de créer des requêtes fédérées. Dans cette manière, c’est possible de créer une requête en utilisant plusieurs ensembles de données, en d’autres termes plusieurs graphe.

C’est aussi facile de vérifier si deux objets de différents ensembles de données sont liées, ou bien la même entité. Avec les requêtes fédérées, on peut obtenir toutes les informations à partir d’une seule requête. Pour ce faire, nous devons faire les étapes suivantes4 :

  1. Utiliser un service des requêtes fédérées (médiateur). Nous exécutons la requête à travers ce médiateur.
  2. Le médiateur crée des sous-requêtes vers tous les points de terminaison SPARQL dans notre requête.
  3. Le médiateur reçoit les réponses des points de terminaison différents et les combine pour obtenir la résultat de requête fédérée.
    La structure d’une requête fédérée est représentée dans la figure.
SPARQL2

La structure d’une requête fédérée5

Notre travail

Dans notre projet, nous voulions créer une requête qui renvoie les films de l’acteur Tom Hanks à partir de la base de données de Linkedmdb et qui renvoie des informations supplémentaires (par exemple sa date de naissance) du même objet d’une autre base de données, Dbpedia.

En premier temps, nous avons téléchargé Jena à partir de https://jena.apache.org/ et nous avons créé un nouveau projet dans Eclipse pour créer une requête fédérée. La première étape était d’importer les bibliothèques de Jena au chemin de construction (“build path”) de notre projet. Ensuite, nous avons créé une classe SimpleFederatedQuery. Dans cette classe, nous n’avions qu’une seule variable statique et la fonction main. Cette variable statique était une chaîne (http://sparql.org/sparql), qui représente en fait le médiateur nous utilisions. Dans la fonction main nous avons créé la requête SPARQL basée sur le tutoriel SPARQL de Jena6. La première requête que nous avons créé est le suivant:

String queryString = "PREFIX imdb: <http://data.linkedmdb.org/resource/movie/> "
			+ "PREFIX dbpedia: <http://dbpedia.org/ontology/> "
			+ "PREFIX dcterms: <http://purl.org/dc/terms/> "
			+ "PREFIX owl:  <http://www.w3.org/2002/07/owl#>"
			+ "SELECT * "
			+ " from <http://xmlns.com/foaf/0.1/> "
			+ " { "
			+ " SERVICE <http://data.linkedmdb.org/sparql> "
			+ " { "
			+ " ?actor1 imdb:actor_name \"Tom Hanks\". "
			+ " ?movie imdb:actor ?actor1 ; "
			+ " dcterms:title ?movieTitle . "
			+ " } "
			+ " SERVICE <http://dbpedia.org/sparql> "
			+ " { "
			+ " ?actor owl:sameAs ?actor1 ; "
			+ " dbpedia:birthDate ?birth_date . "
			+ " } "
			+ " } ";

Après avoir exécuté cette requête à partir d’Eclipse, la sortie était “HTTP 503 error making the query: The query timed out (restricted to 10000,60000 ms)”. Pour trouver le problème, nous avons dû consulter la page Dbpedia de Tom Hanks–http://dbpedia.org/page/Tom_Hanks. Sur cette page, nous avons pu voir qu’il y avait un seul lien vers Linkedmdb avec la balise sameAs, qui était http://data.linkedmdb.org/resource/producer/9810. Cependant, ce lien n’est pas Tom Hanks comme un acteur, mais Tom Hanks comme un producteur. Pour cette raison, nous avons modifié la requête sur linkedmdb de imdb:actor_name et imdb:acteur à imdb:producer_name et imdb:producer respectivement. La requête est devenue la suivante:

String queryString = "PREFIX imdb: <http://data.linkedmdb.org/resource/movie/> "
			+ "PREFIX dbpedia: <http://dbpedia.org/ontology/> "
			+ "PREFIX dcterms: <http://purl.org/dc/terms/> "
			+ "PREFIX owl:  <http://www.w3.org/2002/07/owl#>"
			+ "SELECT * "
			+ " from <http://xmlns.com/foaf/0.1/> "
			+ " { "
			+ " SERVICE <http://data.linkedmdb.org/sparql> "
			+ " { "
			+ " ?actor1 imdb:producer_name \"Tom Hanks\". "
			+ " ?movie imdb:producer ?actor1 ; "
			+ " dcterms:title ?movieTitle . "
			+ " } "
			+ " SERVICE <http://dbpedia.org/sparql> "
			+ " { "
			+ " ?actor owl:sameAs ?actor1 ; "
			+ " dbpedia:birthDate ?birth_date . "
			+ " } "
			+ " } ";

Après ce changement, dans la sortie de notre requête, nous avons pu obtenir ce que nous voulions. L’actor, le movie et le movieTitle sont venus de Dbpedia et le même actor et son anniversaire sont venus de Linkedmdb. En d’autres termes, nous avons créé une requête fédérée, qui utilisait deux bases de données différentes et qui a trouvé les différentes informations sur le même objet.

Le résultat final que nous avons obtenu :

log4j:WARN No appenders could be found for logger (org.apache.jena.riot.system.stream.JenaIOEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Results from query: 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| actor1                                             | movie                                           | movieTitle                     | actor                                   | birth_date                                                  |
=================================================================================================================================================================================================================================================
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/38203> | "Cast Away"                    | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/38695> | "Band of Brothers"             | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/39389> | "My Big Fat Greek Wedding"     | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/1492>  | "Looney Tunes: Back in Action" | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/40586> | "Connie and Carla"             | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/42002> | "House of D"                   | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/43580> | "Evan Almighty"                | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/44738> | "The Ant Bully"                | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/45166> | "Starter for Ten"              | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/5399>  | "Charlie Wilson's War"         | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/5495>  | "Where the Wild Things Are"    | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/5516>  | "The Polar Express"            | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/45816> | "The Great Buck Howard"        | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/50695> | "My Life In Ruins"             | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/11531> | "Mamma Mia!"                   | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/51110> | "The Pacific"                  | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/18755> | "City of Ember"                | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/23012> | "Surfer Dude"                  | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
| <http://data.linkedmdb.org/resource/producer/9810> | <http://data.linkedmdb.org/resource/film/52882> | "The Ant Bully"                | <http://dbpedia.org/resource/Tom_Hanks> | "1956-07-09+02:00"^^<http://www.w3.org/2001/XMLSchema#date> |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

All done.

Notre code est le suivant :

package WebSemantic;

import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.query.ResultSetFormatter;
/**
*
* @author Lisa MALIPHOL, Romy ARDIANTO, Andres RAMIREZ GOMEZ, Sami ALKABBANI, András PÁSZTOR
*
* Federated query using two different sources
* Example taken from here :
* http://answers.semanticweb.com/questions/9190/federated-sparql-query-using-jena
*
*/
public class SimpleFederatedQuery {
	final static String serviceEndpoint = "http://sparql.org/sparql";

	public static void main(String[] args) {
		String queryString = "PREFIX imdb: <http://data.linkedmdb.org/resource/movie/> "
								+ "PREFIX dbpedia: <http://dbpedia.org/ontology/> "
								+ "PREFIX dcterms: <http://purl.org/dc/terms/> "
								+ "PREFIX owl:  <http://www.w3.org/2002/07/owl#>"
								+ "SELECT * "
								+ " from <http://xmlns.com/foaf/0.1/> "
								+ " { "
								+ " SERVICE <http://data.linkedmdb.org/sparql> "
								+ " { "
								+ " ?actor1 imdb:producer_name \"Tom Hanks\". "
								+ " ?movie imdb:producer ?actor1 ; "
								+ " dcterms:title ?movieTitle . "
								+ " } "
								+ " SERVICE <http://dbpedia.org/sparql> "
								+ " { "
								+ " ?actor owl:sameAs ?actor1 ; "
								+ " dbpedia:birthDate ?birth_date . "
								+ " } "
								+ " } ";

		Query query = QueryFactory.create(queryString); // exception happens
		// here
		QueryExecution qe = QueryExecutionFactory.sparqlService(serviceEndpoint, query);
		try {
			ResultSet rs = qe.execSelect();
			System.out.println("Results from query: \n");
			if (rs.hasNext()) {
				// show the result, more can be done here
				System.out.println(ResultSetFormatter.asText(rs));
			}
		} catch (Exception e) {
			System.out.print("Exception caught : ");
			System.out.println(e.getMessage());
		} finally {
			qe.close();
		}
		System.out.println("All done.");
	}
}

Resource Description Framework

Dans la conception de web sémantique, l’ordinateur et le logiciel doivent comprendre les différentes données provenant de différentes sources. Afin de ce faire, nous devons créer une syntaxe commune qui décrit les différents attributs des données. Avec cette description, l’ordinateur peut comprendre les différentes données, même quand ils viennent de différentes bases de données. Cette solution descriptive est ontologie.

Un de l’ontologie plus fondamental et important est le RDF (Resource Description Framework). C’est une syntaxe descriptive1, qui est développé par le W3C2 et il permet à l’ordinateur à comprendre les données de différentes bases de données. L’idée principale derrière RDF est de décrire le contenu de l’Internet avec les déclarations triples (triplets)1. Avec ces triplets, il est possible de décrire non seulement l’entité, mais la relation entre les entités, afin qu’ils puissent décrire des structures complexes.

Un graphe basé sur RDF3

Avec RDF, nous pouvons représenter le contenu d’Internet comme un graphe. Dans ce graphe les noeuds sont des ressources et peuvent être décrits par des URI (Uniform Resource Identifier). Le RDF permet de représenter les propriétés de chaque noeud comme un noeud tandis que les bords du graphe sont le type de la propriété.
Dans le modèle RDF, il y a quatre différents ensembles sont définis1:

  • ressources – Ressources sont des informations qui peuvent être trouvés sur l’Internet et peuvent être identifié par des URI.
  • propriétés – Propriétés sont les propriétés liées à la ressource. Ils peuvent également être identifiés par des URI et ils peuvent être aussi des ressources, donc cet ensemble est un sous-ensemble de l’ensemble des ressources.
  • littérals – Les chaînes de caractères.
  • déclarations – Les déclarations sont des connexions entre sujet, prédicat et l’objet. Les sujets peuvent être des ressources, les prédicats peuvent être des propriétés et les objets peuvent être des propriétés ou des littéraux. Nous pouvons représenter ces triplets que (sujet, prédicat, objet).

Comme nous l’avons mentionné précédemment, le RDF décrit le contenu avec des déclarations triples, où nous avons un sujet, un prédicat et un objet. Par exemple, basé sur la figure d’example ci-dessus3, nous pouvons faire les déclarations suivantes.

  • Le résident de la maison est personne.
    • ([http://example.com/damian_house], resident, [http://example.com/damian])
  • Le nom de la personne est Damian Steer.
    • ([[http://example.com/damian]], name, “Damian Steer”)
  • L’adresse de la maison est le 137 Cranbook Road Bristol, où 137 est le nombre, Cranbook Road est la rue et Bristol est la ville.
    • ([http://example.com/damian_house], address, noeud vide)
    • (noeud vide, number, “137”)
    • (noeud vide, street, “Cranbrook Road”)
    • (noeud vide, city, “Bristol”)

Comme nous pouvons le voir ci-dessus, il y a de possibilité de définir un “noeud vide”1. Si nous voulons décrire le noeud plus détaillée (comme dans l’exemple, l’adresse), nous devons définir un noeud vide et de ce noeud vide nous pouvons faire la description détaillée souhaitée.

Le code RDF pour l’exemple est la suivante3:

Un code RDF3

Avec la représentation RDF nous pouvons décrire et connecter tout le contenu de l’Internet, mais l’idée de web sémantique inclut l’idée de la conclusion. Afin de pouvoir formuler des conclusions, il y a plusieurs schémas à utiliser (RDFS, OWL, SKOS, FRR)1.

Pour comprendre la conclusion, voir l’exemple ci-dessous1. Avec RDF nous pouvons décrire, que l’homme A est un ami de l’homme B. Si poser la question « Est-ce que A et B se connaissent? », nous pouvons répondre oui, parce que nous avons des connaissances de base, qui dit « si les gens sont amis, ils se connaissent ». Malheureusement, l’ordinateur n’a pas cette connaissance de base, mais nous pouvons la donner à elle avec les différents schémas.

Le schéma RDF (RDFS) est fondamentalement le dictionnaire RDF complété avec des ressources supplémentaires. Avec RDFS nous pouvons définir de classes supplémentaires et des propriétés supplémentaires pour des différentes applications. Nous pouvons donc dire, que les RDFS nous donne la possibilité de créer des déclarations pour des applications spécifiques1.

Le vocabulaire défini par la spécification RDF est la suivante2:
Classes

  • rdf
    • rdf:XMLLiteral – la classe des valeurs littérales XML
    • rdf:Property – la classe des propriétés
    • rdf:Statement – la classe des déclarations RDF
    • rdf:Alt, rdf:Bag, rdf:Seq – conteneurs des alternatives, conteneurs non ordonnés, et conteneurs ordonnés (rdfs:Container est un super-classe de trois)
    • rdf:List – la classe des listes de RDF
    • rdf:nil – une instance de rdf:List représentant la liste vide
  • rdfs
    • rdfs:Resource – la classe ressource, tout
    • rdfs:Literal – la classe de la classe de types de données RDF, par exemple chaînes et entiers
    • rdfs:Class – la classe des classes
    • rdfs:Datatype – la classe des types de données RDF
    • rdfs:Container – la classe des conteneurs RDF
    • rdfs:ContainerMembershipProperty – la classe des propriétés d’adhésion, rdf:_1, rdf:_2, …, qui sont tous les sous-propriétés de rdfs:member

Propriétés

  • rdf
    • rdf:type – une instance de rdf:Property utilisé pour indiquer qu’une ressource est une instance d’une classe
    • rdf:first – le premier élément de la liste RDF
    • rdf:rest – le reste de la liste RDF après rdf:first
    • rdf:value – propriété idiomatique utilisée pour les valeurs structurées
    • rdf:subject – le sujet de la déclaration RDF
    • rdf:predicate – le prédicatde la déclaration RDF
    • rdf:object – l’objet de la déclaration RDF
  • rdfs
    • rdfs:subClassOf – le sujet est une sous-classe d’une classe
    • rdfs:subPropertyOf – le sujet est une sous-propriété d’une propriété
    • rdfs:domain – un domaine de la propriété en question
    • rdfs:range – une gamme de la propriété en question
    • rdfs:label – un nom lisible du sujet
    • rdfs:comment – une description de la ressource en question
    • rdfs:member – un membre de la ressource en question
    • rdfs:seeAlso – plus d’information sur la ressource en question
    • rdfs:isDefinedBy – la définition de la ressource en question

FOAF : L’ami d’un ami

FOAF (de l’anglais Friend of a friend, littéralement « l’ami d’un ami ») est un vocabulaire RDF et Web Ontology Language (OWL) permettant de décrire des personnes et les relations qu’elles entretiennent entre elles. web sémantique (1).

FOAF est un projet qui lie des personnes et des renseignements en utilisant l’internet. (2)

FOAF permet créer de pages web pour décrire de personnes, les liens entre eux et les choses que ils font, FOAF est un vocabulaire RDF, qui permet d’avoir de manière disponible l’information personnel d’une forme simple pour être traité, partagé et réutilisable.     (3)

Aprés d’avoir les données personnels sur l’internet, ils seront partagés et accessibles par de moteurs de recherches, ou sera possible trouver d’informations sur une personne et sur ses communautés d’une manière vite et simple. (4)

Dans l’internet une personne est identifiée avec son nom et son courriel. Alors le point principal de FOAF est décrire une personne et ses relations. (5)

Une exemple (6)
:
FOAF exemple
Recherches peuvent utiliser ces profile FOAF pour trouver, par exemple, toutes les personnes qui vivent en Europe, ou pour lister toutes les gens connu entre vous et un ami. (7)

OWL

OWL (Web Ontology Language) is the standard ontology language for semantic web recommended by World Wide Web Consortium (W3C) in 2004. This language extends RDF and RDF-S, two early standard languages for semantic web, by adding more features on vocabulary terms. OWL has a valid syntax as RDF document and well-formed XML document. The diagram of family tree shows that OWL was developed based on DAML (The DARPA Agent Markup Language) + OIL (Ontology Inference Layer). The U.S. Defense Department and European Defense community combined DAML and OIL as a web ontology language in order to find the dynamic data format that can be used by intelligent agents to understand autonomously on that data. Further, W3C used OWL as a standard ontology language because it can integrate RDF and RDFS as well as other web semantic standards that cannot be done by DAML+OIL.

The OWL family tree diagram

The OWL family tree diagram

The Species of OWL

There are 3 variants sublanguages of OWL endorsed by W3C:

  • OWL Lite

OWL Lite was designed to support users that need a classification hierarchy and simple constraint features. For example, while it supports cardinality constraints, it only permits cardinality values of 0 or 1. It should be simpler to provide tool support for OWL Lite than its more expressive relatives, and provide a quick migration path for thesauri and other taxonomies.

  • OWL DL

OWL DL was designed to supports users who want the maximum expressiveness by taking into consideration the factor of computational completeness and decidability of reasoning systems. OWL DL includes all OWL language constructs, but in order to use it, users must consider about the restrictions such as type separation (a class can not also be an individual or property, and vice versa). OWL DL is so named due to its correspondence with description logic, a field of research that has studied the logics that develop the basic foundation of OWL.

  • OWL Full

OWL Full was designed to provide the maximum expressiveness and compatibility for RDF schema, based on different format of OWL Lite or OWL DL. For example, in OWL Full a class can be treated simultaneously as a collection of individuals and as an individual in its own right. OWL Full allows an ontology to augment the meaning of the pre-defined (RDF or OWL) vocabulary.

References:

SWRL: Semantic Web Rule Language

The Semantic Web Rule Language (SWRL) is a significant OWL-based rule language for semantic web that allows to write rules in terms of OWL concepts which give strong deductive analysis capabilities than OWL alone. SWRL is based on OWL description logic that grants powerful formal guarantees in inference.

Featured image

A SWRL rule can be divided to an antecedent part ( body), positive conjunctions of atoms made both the head and the body:
atom^atom …….. –> atom^atom.
Where we can say that if the atoms in body are true -> the atoms in the head is true. An atom expression has a predicate symbol (p) and the terms or arguments (argn).The form of the atom expression is:   p(arg1, arg2, arg3, … argn)

The predicate symbols usually has an OWL classes, properties or data types. Where the arguments can be OWL individuals or data values, or variables referring to them.

The atom has many types :
Class atom: consist of an OWL named class and an OWL individual represented by single argument.
Individual property atom: consists of an OWL object property and two arguments representing OWL individuals.
Data valued property atom: consists of an OWL data property and two arguments, the first representing an OWL individual, and the second a data value.
Different individuals atom: consists of the differentFrom symbol and two arguments representing OWL individuals.
Same individual atom: consists of the sameAs symbol and two arguments representing OWL individuals.
Data range atom: consists of a datatype name or a set of literals and a single argument representing a data value.
Built-in atom: is evaluation of arguments to be true if they assure a predication.

The SWRL can use OWL class expressions in the rules but it can’t use non-monotonic inference and it only supported positive conjunctions of atoms where the disjunctions is not possible. RDF and RDFS are not supported by SWRL since it’s based on OWL DL, though built-in libraries in SWRL can give the possibility to do RDF operations.
SWRL is further significant than just OWL DL, still this bonus comes at the price of determinacy. Normally the OWL is better in the aim of decidability but SWRL is more powerful when there is the need for more expressivity.