About Apache Jena

Apache Jena is a free and open source Java framework for building Semantic Web and Linked Data applications : link.

How to use Jena Module

Import Jena module into your project

Add the needed dependencies into your pom.xml

						
							org.ddbstoolkit.toolkit.modules.datastore.jena
							ddbstoolkit-jena
							1.0.0-beta2
							compile
						

Create your data model

You need to create your data classes with the following requirements :

Primary keys are indicated with the @Id annotation. It is mainly used if you want to add your entity into a database module such as MySQL or SQLite module.

The remote endpoint URL is indicated with the @Service annotation.

The default URI namespace is indicated with the @DefaultNamespace annotation.

Optional elements are indicated with the @Optional annotation.

Entity URI is indicated with the @URI annotation.

Namespace property is indicated with the @Namespace annotation. It can be used if the namespace of the property is different from the default namespace defined with @DefaultNamespace annotation.

Example for distributed Actor and Film data

				@Service(url="http://www.factforge.net/sparql")
				@DefaultNamespace(name="fb",url="http://rdf.freebase.com/ns/")
				public class Actor extends DistributedEntity {
				
				    @Id
    				@EntityName(name="actor_id")
    				private Integer actorId;
				
				    @URI
    				private String actor_uri;
				
				    @Optional
				    @EntityName(name="actor_name")
				    private String actorName;
				    
				    public String getActorName() {
						return actorName;
					}
				
					public void setActorName(String actorName) {
						this.actorName = actorName;
					}
					
					public String getActor_uri() {
						return actor_uri;
					}
				
					public void setActor_uri(String actor_uri) {
						this.actor_uri = actor_uri;
					}
					
					public Integer getActorId() {
						return actorId;
					}
				
					public void setActorId(Integer actorId) {
						this.actorId = actorId;
					}
				    
				    
				}
				@Service(url="http://data.linkedmdb.org/sparql")
				@DefaultNamespace(name="movie",url="http://data.linkedmdb.org/resource/movie/")
				public class Film implements DistributedEntity {
				
				    @Id
					@Optional
					@EntityName(name="film_id")
				    private Integer filmID;
				
				    @URI
    				private String film_uri;
				
				    @Namespace(name="dc",url="http://purl.org/dc/terms/")
				    private String title;
				
				    private int runtime;
				
				    private Actor[] actor;
				    
				    public Integer getFilmID() {
						return filmID;
					}
				
					public void setFilmID(Integer filmID) {
						this.filmID = filmID;
					}
					
					public String getFilm_uri() {
						return film_uri;
					}
				
					public void setFilm_uri(String film_uri) {
						this.film_uri = film_uri;
					}
					
					public String getTitle() {
						return title;
					}
				
					public void setTitle(String title) {
						this.title = title;
					}
					
					public int getRuntime() {
						return runtime;
					}
				
					public void setRuntime(int runtime) {
						this.runtime = runtime;
					}
					
					public Actor[] getActors() {
						return actors;
					}
				
					public void setActors(Actor[] actors) {
						this.actors = actors;
					}
				}
				

Instantiate your Jena module

If you are using a remote endpoint

				DistributableEntityManager manager = new DistributedSPARQLManager();

If you are using a local datastore

				DistributableEntityManager manager = new DistributedSPARQLManager("/myPath/myJenaDatastore");

Jena Module actions

Add an element (Only for local datastore)

				manager.open();
		
				Actor anActor = new Actor();
				anActor.setActor_uri("http://ddbstoolkit.org/actor/Steven");
				anActor.setActorName("Steven");
					
				manager.add(anActor);
				
				manager.close();

Update an element (Only for local datastore)

				manager.open();
		
				Actor anActor = new Actor();
				anActor.setActor_uri("http://ddbstoolkit.org/actor/Steven");
				anActor.setActorName("Steven");
					
				manager.update(anActor);
				
				manager.close();

Delete an element (Only for local datastore)

				manager.open();
		
				Actor anActor = new Actor();
				anActor.setActor_uri("http://ddbstoolkit.org/actor/Steven");
					
				manager.delete(anActor);
				
				manager.close();

Read an element

				manager.open();
		
				Actor anActor = new Actor();
				anActor.setActor_uri("http://ddbstoolkit.org/actor/Steven");
					
				anActor = manager.read(anActor);
				
				manager.close();

List elements

				manager.open();
		
				//List all films
				List films = manager.listAll(new Film(), null, null);
		
				//List all films ordered by film_ID
				films = manager.listAll(new Film(), null, OrderBy.get("filmId", OrderByType.ASC));
				
				List conditions = new ArrayList<>();
        		conditions.add(DistributedSPARQLManager.getObjectVariable(new Book())+" fb:type.object.name 'The Fellowship of the Ring'@en");
        		conditions.add("FILTER ( lang(?title) =  'en' )");
        		conditions.add("FILTER ( lang(?summary) = 'en' )");
				
				//List all films with the english name 'The Fellowship of the Ring'
				films = manager.listAll(new Film(), conditions, null);
				
				//List with Conditions
				Conditions condition = Conditions.createConditions().add(
				Conditions.ge("runtime", 20));
				List results = manager.listAll(new Film(),condition, null);

				
				manager.close();

Load elements linked to an entity

				manager.open();
 
				Film aFilm = new Film();
				aFilm.setFilmID("http://ddbstoolkit.org/film/hobbit");
     
				aFilm = manager.read(aFilm);
				
				//List actors of a movie ordered by actor_id field
				lastFilmAdded = manager.loadArray(aFilm, "actors", OrderBy.get("filmID", OrderByType.ASC));				
 
				manager.close();

Execute transactions

				manager.open();
				
				//Start a new transaction
				DDBSTransaction transactionAddCommit = new DDBSTransaction("myTransaction");
     
				Actor anActor = new Actor();
				anActor.setActorName("Steven");
				
				transactionAddCommit.add(filmToAdd);
		
				//Execute the transaction
				manager.executeTransaction(transactionAddCommit);
				
				//Commit the transaction
				manager.commit(transactionAddCommit);
				
				//Rollback the transaction
				manager.rollback(transactionAddCommit);				
 
				manager.close();