Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "XDI4j Tutorial 1"

Line 1: Line 1:
 
{{#eclipseproject:technology.higgins|eclipse_custom_style.css}}
 
{{#eclipseproject:technology.higgins|eclipse_custom_style.css}}
 
[[Image:Higgins_logo_76Wx100H.jpg|right]]
 
[[Image:Higgins_logo_76Wx100H.jpg|right]]
 +
 +
This tutorial explains how to create and manipulate a simple XDI graph.
 +
 
== Interfaces and classes ==
 
== Interfaces and classes ==
 +
 +
This section briefly describes the core Java interfaces that represent various parts of an XDI graph.
  
 
=== Graph ===
 
=== Graph ===
Line 7: Line 12:
 
   org.eclipse.higgins.xdi4j.Graph;
 
   org.eclipse.higgins.xdi4j.Graph;
  
This interface represents a whole XDI graph.
+
This interface represents an XDI graph.
 
XDI graphs consist of subjects, predicates, literals, references and inner graphs.
 
XDI graphs consist of subjects, predicates, literals, references and inner graphs.
 
Operations on the graph include creating these graph components, finding and manipulating them
 
Operations on the graph include creating these graph components, finding and manipulating them
Line 59: Line 64:
 
Graph factories exist for all implementations of the Graph interface (e.g. Memory, XML, Hibernate). They can be used to create a new XDI document, or to load an existing one.
 
Graph factories exist for all implementations of the Graph interface (e.g. Memory, XML, Hibernate). They can be used to create a new XDI document, or to load an existing one.
  
== Example ==
+
== Constructing an XDI graph ==
 +
 
 +
We will write a simple Java program the creates the following XDI graph in memory:
 +
 
 +
<pre>
 +
=markus
 +
+name
 +
"Markus"
 +
+friend
 +
=giovanni
 +
=drummond
 +
=giovanni
 +
+friend
 +
=drummond
 +
</pre>
 +
 
 +
Note that subjects, predicates and references have no specific order, i.e. when the graph is serialized and printed, '''+friend''' could just as well come before '''+name'''.
 +
 
 +
There are several ways of working with an XDI graph. For example, we could create the XDI subject '''=markus''', then the XDI predicate '''+name''', and then the XDI literal '''"Markus"'''. Or, we could create an entire XDI statement with all three parts in a single step. The result is the same.
  
This example app shows how to create a new XDI document and how to perform basic graph operations on it.
+
The following code demonstrates how to create an XDI graph in memory and fill it with the above data.
  
 
<pre>
 
<pre>

Revision as of 07:28, 29 January 2010

{{#eclipseproject:technology.higgins|eclipse_custom_style.css}}

Higgins logo 76Wx100H.jpg

This tutorial explains how to create and manipulate a simple XDI graph.

Interfaces and classes

This section briefly describes the core Java interfaces that represent various parts of an XDI graph.

Graph

 org.eclipse.higgins.xdi4j.Graph;

This interface represents an XDI graph. XDI graphs consist of subjects, predicates, literals, references and inner graphs. Operations on the graph include creating these graph components, finding and manipulating them

Subject

 org.eclipse.higgins.xdi4j.Subject;

This interface represents a subject in an XDI graph. Methods include creating and finding predicates of the subject.

Predicate

 org.eclipse.higgins.xdi4j.Predicate;

This interface represents a predicate in an XDI graph. Methods include creating and finding references, literals and inner graphs of the predicate.

Reference

 org.eclipse.higgins.xdi4j.Reference;

This interface represents a reference in an XDI graph.

Literal

 org.eclipse.higgins.xdi4j.Literal;

This interface represents a literal in an XDI graph.

Statement

 org.eclipse.higgins.xdi4j.Statement;

This interface represents a statement in an XDI graph.

A statement consists of either:

  • A subject (if the subject has no predicates).
  • A subject and a predicate (if the predicate has no references or literals).
  • A subject and a predicate and a reference.
  • A subject and a predicate and a literal.
  • A subject and a predicate and an inner graph.

A statement never has BOTH an reference and a literal.

GraphFactory

 org.eclipse.higgins.xdi4j.GraphFactory;

Graph factories exist for all implementations of the Graph interface (e.g. Memory, XML, Hibernate). They can be used to create a new XDI document, or to load an existing one.

Constructing an XDI graph

We will write a simple Java program the creates the following XDI graph in memory:

=markus
	+name
		"Markus"
	+friend
		=giovanni
		=drummond
=giovanni
	+friend
		=drummond

Note that subjects, predicates and references have no specific order, i.e. when the graph is serialized and printed, +friend could just as well come before +name.

There are several ways of working with an XDI graph. For example, we could create the XDI subject =markus, then the XDI predicate +name, and then the XDI literal "Markus". Or, we could create an entire XDI statement with all three parts in a single step. The result is the same.

The following code demonstrates how to create an XDI graph in memory and fill it with the above data.

package org.eclipse.higgins.xdi4j.tutorial;

import org.eclipse.higgins.xdi4j.Graph;
import org.eclipse.higgins.xdi4j.GraphFactory;
import org.eclipse.higgins.xdi4j.Predicate;
import org.eclipse.higgins.xdi4j.Subject;
import org.eclipse.higgins.xdi4j.impl.memory.MemoryGraphFactory;
import org.eclipse.higgins.xdi4j.xri3.impl.XRI3Segment;

/**
 * This example app shows how to create a new XDI
 * document and how to perform basic graph operations on it.
 * 
 * @author msabadello at parityinc dot not
 *
 */
public class Tutorial1 {

	public static void main(String[] args) throws Exception {

		GraphFactory factory = MemoryGraphFactory.getInstance();
		Graph graph = factory.openGraph();

		// there are basically two ways of working with graphs

		// 1) work with subjects, predicates, references and literals

		Subject markus = graph.createSubject(new XRI3Segment("=markus"));

		Predicate name = markus.createPredicate(new XRI3Segment("+name"));
		Predicate friend = markus.createPredicate(new XRI3Segment("+friend"));

		name.createLiteral("Markus");
		friend.createReference(new XRI3Segment("=drummond"));

		// 2) work with statements

		graph.createStatement(new XRI3Segment("=markus"), new XRI3Segment("+friend"), new XRI3Segment("=giovanni"));
		graph.createStatement(new XRI3Segment("=giovanni"), new XRI3Segment("+friend"), new XRI3Segment("=drummond"));

		// after our graph is filled, we can output it

		System.out.println(graph.toString());

		graph.close();
	}
}

Back to the top