Difference between revisions of "Tutorial: Ontology Development"
m |
m |
||
Line 55: | Line 55: | ||
First we need to specify object types for the concepts ''Movie'', ''Role'' and ''Person''. Actors, directors and producers are moled as ''Persons''. A person becomes a representative of a classification, say actor, once he/she has acted in a motion picture. | First we need to specify object types for the concepts ''Movie'', ''Role'' and ''Person''. Actors, directors and producers are moled as ''Persons''. A person becomes a representative of a classification, say actor, once he/she has acted in a motion picture. | ||
− | + | // Types | |
− | + | Movie.Movie <T L0.Entity | |
− | + | Movie.Role <T L0.Entity | |
+ | Movie.Person <T L0.Entity | ||
* Specify Properties | * Specify Properties | ||
− | + | // Properties | |
− | + | Movie.HasDobYear <R L0.HasProperty | |
− | + | L0.HasRange L0.Integer | |
− | + | Movie.HasAge <R L0.HasProperty | |
− | + | L0.HasRange L0.Double | |
− | + | Movie.HasGender <R L0.HasProperty | |
+ | L0.HasRange Movie.Gender | ||
* Specify Literals | * Specify Literals | ||
− | Gender is a special case, since it is not defined in Layer0 | + | Gender is a special case, since it is not defined in Layer0 you must define yourself. The syntax is defined in [[Databoard_Specification#Datatypes|Datatype documentation]]. In it you will find out the format for your enumeration is ''|Male|Female''. |
+ | // Literals | ||
Movie.Gender <T L0.Literal | Movie.Gender <T L0.Literal | ||
@L0.assert L0.HasDataType $(|Male|Female) | @L0.assert L0.HasDataType $(|Male|Female) | ||
L0.PartOf Movie | L0.PartOf Movie | ||
− | * Add properties to your types | + | * Add the properties to your types |
// Properties | // Properties | ||
Movie.HasDobYear <R L0.HasProperty | Movie.HasDobYear <R L0.HasProperty |
Revision as of 12:32, 14 October 2010
"What's up folks." Today we are going to create a movie database ontology for a client of your Acme company.
Step 1: Setup Ontology Plug-in
Ontologies are encapsulated in OSGi bundles. In eclipse we develop them as equinox plug-ins. An ontology bundle is a package that contains the sources (graph/*.pgraph), a compiled graph file (graph.tg), and Java resource files (src/ and bin/).
Open a New Plug-in Project wizard:
- Open Plug-in Development Perspective
- Select File >> New >> Other
- Select Plug-in Development >> Plug-in Project
A New Plug-in Project wizard will open.
- Our organization is Acme Software ltd and from there is our plug-in name derived, com.acme.movie.ontology. Insert that as project name. Next >
- In the following page you should know that this plugin does not contribute to UI, does not need activator or isn't a rich client application. Next >
- Use template Plug-in with a Simantics Ontology. Next >
- Your company domain is com.acme.movie and ontology name Movie, and the inital version is 1.0. Finish
You have now a new project in Package Explorer. In it you will find META-INF/MANIFEST.MF, graph/Movie.pgraph, and graph.tg.
Step 2: Initialize Ontology
Open Movie.pgraph and start editing.
As you are using Layer0 concepts, it is a good idea to capture its namespace:
L0 = <http://www.simantics.org/Layer0-1.0>
Your acme company has a namespace which is used. You are creating a new one so it must be stated.
<http://com.acme> : L0.Library @L0.new
The ontology has a representing resource, an instance of L0.Ontology. Don't forget to add stub-compiler metadata L0.HasResourceClass.
Movie = <http://com.acme/Movie-1.0> : L0.Ontology L0.HasResourceClass "com.acme.ontology.Movie"
Step 3: Export package
Now that you have some content, graph compiler has created a Resource class com.acme.ontology.Movie under src/ folder. When developing database code you can gain access to your ontology concepts using this class. In OSGi plugin environment, the access to other plugins' classes is denied by default. To share it you must export its Java package.
- Open META-INF/MANIFEST.MF >> Exported Packages / Add >> com.acme.ontology
Your MANIFEST.MF should look like this.
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Ontology Bundle-SymbolicName: com.acme.movie.ontology Bundle-Version: 1.0.0.qualifier Bundle-Vendor: ACME Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Require-Bundle: org.simantics.layer0;bundle-version="1.0.0" Export-Package: com.acme.ontology
Step 4: Write your movie Ontology
In movie database we are going to store objects such as movies, actors, directors and producers. There is going to be a few properties about them, and a couple of relations. Now open your ontology (graph/Movie.pgraph) in an editor. Also, at this point it is a good idea to take a look at the graph file format documentation.
- Specify Types
First we need to specify object types for the concepts Movie, Role and Person. Actors, directors and producers are moled as Persons. A person becomes a representative of a classification, say actor, once he/she has acted in a motion picture.
// Types Movie.Movie <T L0.Entity Movie.Role <T L0.Entity Movie.Person <T L0.Entity
- Specify Properties
// Properties Movie.HasDobYear <R L0.HasProperty L0.HasRange L0.Integer Movie.HasAge <R L0.HasProperty L0.HasRange L0.Double Movie.HasGender <R L0.HasProperty L0.HasRange Movie.Gender
- Specify Literals
Gender is a special case, since it is not defined in Layer0 you must define yourself. The syntax is defined in Datatype documentation. In it you will find out the format for your enumeration is |Male|Female.
// Literals Movie.Gender <T L0.Literal @L0.assert L0.HasDataType $(|Male|Female) L0.PartOf Movie
- Add the properties to your types
// Properties Movie.HasDobYear <R L0.HasProperty L0.HasRange L0.Integer Movie.HasAge <R L0.HasProperty L0.HasRange L0.Double Movie.HasGender <R L0.HasProperty L0.HasRange Movie.Gender
- Specify Relations
Movie.IsDirectedBy <R L0.IsRelatedTo L0.HasDomain Movie.Movie L0.HasRange Movie.Person Movie.IsDirectorOf <R L0.IsRelatedTo L0.InverseOf Movie.IsDirectedBy L0.HasDomain Movie.Person L0.HasRange Movie.Movie Movie.IsWrittenBy <R L0.IsRelatedTo L0.HasDomain Movie.Movie L0.HasRange Movie.Person Movie.HasWritten <R L0.IsRelatedTo L0.InverseOf Movie.IsWrittenBy L0.HasDomain Movie.Person L0.HasRange Movie.Movie Movie.IsProducedBy <R L0.IsRelatedTo L0.HasDomain Movie.Movie L0.HasRange Movie.Person Movie.IsProducerOf <R L0.IsRelatedTo L0.InverseOf Movie.IsProducedBy L0.HasDomain Movie.Movie L0.HasRange Movie.Person Movie.Played <R L0.IsRelatedTo L0.HasDomain Movie.Person L0.HasRange Movie.Role Movie.IsPlayedBy <R L0.IsRelatedTo L0.InverseOf Movie.Played L0.HasDomain Movie.Role L0.HasRange Movie.Person
Save file. Your Movie.java resource file should now contain a list of resources and URIs. Go ahead and take a look.
Congratulations You have now set-up an ontology.
Give your brains a break before proceeding to the next tutorial.
Tutorial 3: Feature Development