Joeri Exelmans 3 лет назад
Родитель
Сommit
4c67ea67f7

+ 24 - 0
examples/oml/CDF/.fuseki.ttl

@@ -0,0 +1,24 @@
+@prefix fuseki:  <http://jena.apache.org/fuseki#> .
+@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix tdb:     <http://jena.hpl.hp.com/2008/tdb#> .
+@prefix ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .
+@prefix :        <#> .
+
+[] rdf:type fuseki:Server .
+
+<#service> rdf:type fuseki:Service ;
+    rdfs:label          "CDF" ;												# Human readable label for dataset
+    fuseki:name         "CDF" ;												# Name of the dataset in the endpoint url
+    fuseki:serviceReadWriteGraphStore "data" ;											# SPARQL Graph store protocol (read and write)
+    fuseki:endpoint 	[ fuseki:operation fuseki:query ;	fuseki:name "sparql"  ] ;	# SPARQL query service
+    fuseki:endpoint 	[ fuseki:operation fuseki:shacl ;	fuseki:name "shacl" ] ;		# SHACL query service
+    fuseki:dataset      <#dataset> .
+
+## In memory TDB with union graph.
+<#dataset> rdf:type   tdb:DatasetTDB ;
+  tdb:location "--mem--" ;
+  # Query timeout on this dataset (1s, 1000 milliseconds)
+  ja:context [ ja:cxtName "arq:queryTimeout" ; ja:cxtValue "1000" ] ;
+  # Make the default graph be the union of all named graphs.
+  tdb:unionDefaultGraph true .

+ 29 - 0
examples/oml/CDF/.project

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>CDF</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>io.opencaesar.rosetta.oml.ui.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>io.opencaesar.rosetta.oml.ui.nature</nature>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+		<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
+	</natures>
+</projectDescription>

+ 232 - 0
examples/oml/CDF/build.gradle

@@ -0,0 +1,232 @@
+/* 
+ * The Maven coordinates for the project artifact
+ */
+ext.title = 'CDF'
+description = 'CDF traceability demo'
+group = 'be.flandersmake'
+version = '1.0.0'
+
+/* 
+ * The Gradle plugins 
+ */
+apply plugin: 'maven-publish'
+
+/* 
+ * The Gradle task dependencies 
+ */
+buildscript {
+	repositories {
+		mavenLocal()
+		mavenCentral()
+	}
+	dependencies {
+        classpath 'io.opencaesar.owl:owl-fuseki-gradle:+'
+        classpath 'io.opencaesar.owl:owl-query-gradle:+'
+        classpath 'io.opencaesar.owl:owl-load-gradle:+'
+        classpath 'io.opencaesar.owl:owl-reason-gradle:+'
+        classpath 'io.opencaesar.oml:oml-merge-gradle:+'
+        classpath 'io.opencaesar.adapters:oml2owl-gradle:+'
+	}
+}
+
+/*
+ * Dataset-specific variables
+ */
+ext.dataset = [
+    // Name of dataset (matches one used in .fuseki.ttl file)
+    name: 'CDF',
+    // Root ontology IRI of the dataset
+    rootOntologyIri: 'http://flandersmake.be/cdf/description/bundle',
+]
+
+/*
+ * The repositories to look up OML dependencies in
+ */
+repositories {
+    mavenLocal()
+    mavenCentral()
+}
+
+/*
+ * The configuration of OML dependencies
+ */
+configurations {
+    oml
+}
+
+/*
+ * Dependency versions
+ */
+ext { 
+    coreVersion = '+'
+}
+
+/*
+ * The OML dependencies
+ */
+dependencies {
+    oml "io.opencaesar.ontologies:core-vocabularies:$coreVersion"
+}
+
+/*
+ * A task to extract and merge the OML dependencies
+ */
+task omlDependencies(type:io.opencaesar.oml.merge.OmlMergeTask, group:"oml") {
+    inputZipPaths = configurations.oml.files
+    outputCatalogFolder = file('build/oml')
+}
+
+/*
+ * A task to convert the OML catalog to OWL catalog
+ */
+task omlToOwl(type:io.opencaesar.oml2owl.Oml2OwlTask, group:"oml", dependsOn: omlDependencies) {
+    // OML catalog
+    inputCatalogPath = file('catalog.xml')
+    // OWL catalog
+    outputCatalogPath = file('build/owl/catalog.xml')
+}
+
+/*
+ * A task to run the Openllet reasoner on the OWL catalog
+ */
+task owlReason(type:io.opencaesar.owl.reason.OwlReasonTask, group:"oml", dependsOn: omlToOwl) {
+    // OWL catalog
+    catalogPath = file('build/owl/catalog.xml')
+    // Input ontology IRI to reason on
+    inputOntologyIri = "$dataset.rootOntologyIri".toString()
+    // Entailment statements to generate and the ontologies to persist them in
+    specs = [
+        "$dataset.rootOntologyIri/classes = ALL_SUBCLASS".toString(),
+        "$dataset.rootOntologyIri/properties = INVERSE_PROPERTY | ALL_SUBPROPERTY".toString(),
+        "$dataset.rootOntologyIri/individuals = ALL_INSTANCE | DATA_PROPERTY_VALUE | OBJECT_PROPERTY_VALUE | SAME_AS".toString()
+    ]
+    // Junit error report
+    reportPath = file('build/reports/reasoning.xml')
+}
+
+/*
+ * Start the headless Fuseki server
+ */
+task startFuseki(type: io.opencaesar.owl.fuseki.StartFusekiTask, group:"oml") {
+    configurationPath = file('.fuseki.ttl')
+    outputFolderPath = file('.fuseki')
+}
+
+/*
+ * Stop the headless Fuseki server
+ */
+task stopFuseki(type: io.opencaesar.owl.fuseki.StopFusekiTask, group:"oml") {
+    outputFolderPath = file('.fuseki')
+}
+
+/*
+ * A task to load an OWL catalog to a Fuseki dataset endpoint
+ */
+task owlLoad(type:io.opencaesar.owl.load.OwlLoadTask, group:"oml", dependsOn: owlReason) {
+    catalogPath = file('build/owl/catalog.xml')
+    endpointURL = "http://localhost:3030/$dataset.name".toString()
+    fileExtensions = ['owl', 'ttl']
+    iris = [
+        "$dataset.rootOntologyIri/classes".toString(),
+        "$dataset.rootOntologyIri/properties".toString(),
+        "$dataset.rootOntologyIri/individuals".toString()
+    ]
+}
+
+/*
+ * A task to run a set of SPARQL queries on a Fuseki dataset endpoint
+ */
+task owlQuery(type:io.opencaesar.owl.query.OwlQueryTask, group:"oml", dependsOn: owlLoad) {
+    endpointURL = "http://localhost:3030/$dataset.name".toString()
+    queryPath = file('src/sparql')
+    resultPath = file('build/results')
+    format = 'json'
+}
+
+/*
+ * A task to build the project, which executes several tasks together
+ */
+task build(group: "oml") {
+    dependsOn owlReason
+}
+
+/*
+ * A task to delete the build artifacts
+ */
+task clean(type: Delete, group: "oml") {
+	delete 'build'
+}
+
+/*
+ * Publish artifact to maven
+ */
+task omlZip(type: Zip, group:"oml") {
+    from file('src/oml')
+    include "**/*.oml"
+    destinationDirectory = file('build/libs')
+    archiveBaseName = project.name
+    archiveVersion = project.version
+}
+
+def pomConfig = {
+    licenses {
+        license {
+            name "The Apache Software License, Version 2.0"
+            url "http://www.apache.org/licenses/LICENSE-2.0.txt"
+            distribution "repo"
+        }
+    }
+    developers {
+        developer {
+            id "melaasar"
+            name "Maged Elaasar"
+            email "melaasar@gmail.com"
+        }
+    }
+    scm {
+        url 'https://github.com/opencaesar/'+rootProject.name
+    }
+}
+
+publishing {
+    publications {
+        maven(MavenPublication) {
+            groupId project.group
+            artifactId project.name
+            version project.version
+            artifact omlZip
+            pom {
+                packaging = 'zip'
+                withXml {
+                    def root = asNode()
+                    if (configurations.find { it.name == 'oml' }) {
+                        def dependencies = root.appendNode('dependencies')
+                        configurations.oml.resolvedConfiguration.resolvedArtifacts.each {
+                            def dependency = dependencies.appendNode('dependency')
+                            dependency.appendNode('groupId', it.moduleVersion.id.group)
+                            dependency.appendNode('artifactId', it.moduleVersion.id.name)
+                            dependency.appendNode('version', it.moduleVersion.id.version)
+                            if (it.classifier != null) {
+                                dependency.appendNode('classifier', it.classifier)
+                                dependency.appendNode('type', it.extension)
+                            }
+                        }
+                    }
+                    root.appendNode('name', project.ext.title)
+                    root.appendNode('description', project.description)
+                    root.appendNode('url', 'https://github.com/opencaesar/'+rootProject.name)
+                    root.children().last() + pomConfig
+                }
+            }
+        }
+    }
+}
+
+/*
+ * Integration with the Eclipse IDE
+ */ 
+apply plugin: 'eclipse'
+
+eclipse {
+    synchronizationTasks omlDependencies
+}

+ 5 - 0
examples/oml/CDF/catalog.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" prefer="public">
+	<rewriteURI uriStartString="http://flandersmake.be/cdf/" rewritePrefix="src/oml/flandersmake.be/cdf/"/>
+	<rewriteURI uriStartString="http://" rewritePrefix="build/oml/"/>
+</catalog>

+ 4 - 0
examples/oml/CDF/src/oml/flandersmake.be/cdf/description/bundle.oml

@@ -0,0 +1,4 @@
+description bundle <http://flandersmake.be/cdf/description/bundle#> as ^bundle {
+	includes <http://flandersmake.be/cdf/description/my_ftg#>
+	includes <http://flandersmake.be/cdf/description/my_statechart#>
+}

+ 43 - 0
examples/oml/CDF/src/oml/flandersmake.be/cdf/description/my_ftg.oml

@@ -0,0 +1,43 @@
+description <http://flandersmake.be/cdf/description/my_ftg#> as my_ftg {
+	
+	uses <http://flandersmake.be/cdf/vocabulary/ftg#> as ftg
+	uses <http://flandersmake.be/cdf/vocabulary/immutable#> as immutable
+	
+	// Formalisms
+	ci f1 : ftg:Formalism [
+		immutable:hasUUID "f1"
+	]
+	ci f2 : ftg:Formalism [
+		immutable:hasUUID "f2"
+	]
+	ci f3 : ftg:Formalism [
+		immutable:hasUUID "f3"
+	]	
+	
+	// This is allowed - they are the same individuals:
+	ci f4a : ftg:Formalism [
+		immutable:hasUUID "f4"
+	]
+	ci f4b : ftg:Formalism [
+		immutable:hasUUID "f4"
+	]
+	
+	// Transformation
+	ci t1 : ftg:Transformation [
+		immutable:hasUUID "t1"
+	]
+	// Inputs and outputs
+	ri in_f1 : ftg:Input [
+		from t1 to f1
+		ftg:name "in_f1"
+	]
+	ri out_f2 : ftg:Output [
+		from t1 to f2
+		ftg:name "out_f2"
+	]
+	ri out_f3 : ftg:Output [
+		from t1 to f3
+		ftg:name "out_f3"
+	]
+
+}

+ 30 - 0
examples/oml/CDF/src/oml/flandersmake.be/cdf/description/my_statechart.oml

@@ -0,0 +1,30 @@
+description <http://flandersmake.be/cdf/description/my_statechart#> as my_statechart {
+	
+	uses <http://flandersmake.be/cdf/vocabulary/statechart#> as statechart
+	uses <http://flandersmake.be/cdf/vocabulary/immutable#> as immutable
+
+	uses <http://flandersmake.be/cdf/vocabulary/object_diagram#> as object_diagram
+	
+	ci default : statechart:AndState [
+		statechart:name "default"
+	]
+	
+	ri t : statechart:Transition [
+		from default
+		to default
+		statechart:hasLabel "e"
+	]
+	
+	ci root : statechart:OrState [
+		statechart:hasDefaultState default
+		statechart:name "root"
+	]
+	
+	ci sc : statechart:Model [
+		immutable:hasUUID "sc"
+		statechart:hasRoot root
+		
+		object_diagram:hasObject root
+		object_diagram:hasObject default
+	]
+}

+ 6 - 0
examples/oml/CDF/src/oml/flandersmake.be/cdf/vocabulary/bundle.oml

@@ -0,0 +1,6 @@
+vocabulary bundle <http://flandersmake.be/cdf/vocabulary/bundle#> as ^bundle {
+	includes <http://flandersmake.be/cdf/vocabulary/ftg#>
+	includes <http://flandersmake.be/cdf/vocabulary/immutable#>
+	includes <http://flandersmake.be/cdf/vocabulary/object_diagram#>
+	includes <http://flandersmake.be/cdf/vocabulary/statechart#>
+}

+ 35 - 0
examples/oml/CDF/src/oml/flandersmake.be/cdf/vocabulary/ftg.oml

@@ -0,0 +1,35 @@
+vocabulary <http://flandersmake.be/cdf/vocabulary/ftg#> as ftg {
+	extends <http://flandersmake.be/cdf/vocabulary/immutable#> as immutable
+	extends <http://www.w3.org/2001/XMLSchema#> as xsd
+
+	concept Transformation :> immutable:Thing [
+	]
+	
+	concept Formalism :> immutable:Thing [
+	]
+	
+	aspect InputOrOutput [
+		restricts scalar property name to exactly 1
+	]
+
+	relation entity Input :> InputOrOutput [
+		from Transformation
+		to Formalism
+		asymmetric
+		irreflexive
+	]
+	
+	scalar property name [
+		domain InputOrOutput
+		range xsd:string
+		functional
+	]
+		
+
+	relation entity Output :> InputOrOutput [
+		from Transformation
+		to Formalism
+		asymmetric
+		irreflexive
+	]
+}

+ 15 - 0
examples/oml/CDF/src/oml/flandersmake.be/cdf/vocabulary/immutable.oml

@@ -0,0 +1,15 @@
+vocabulary <http://flandersmake.be/cdf/vocabulary/immutable#> as immutable {
+	
+	extends <http://www.w3.org/2001/XMLSchema#> as xsd
+
+	aspect Thing [
+		key hasUUID
+		restricts scalar property hasUUID to exactly 1 
+	]
+	
+	scalar property hasUUID [
+		domain Thing
+		range xsd:string
+		functional
+	]
+}

+ 24 - 0
examples/oml/CDF/src/oml/flandersmake.be/cdf/vocabulary/object_diagram.oml

@@ -0,0 +1,24 @@
+vocabulary <http://flandersmake.be/cdf/vocabulary/object_diagram#> as object_diagram {
+	
+	extends <http://flandersmake.be/cdf/vocabulary/immutable#> as immutable
+
+	aspect Object []
+		
+	relation entity Link [
+		from Object
+		to Object
+	]
+		
+	aspect Model :> immutable:Thing [
+	]
+	
+	relation entity HasObject [
+		from Model
+		to Object
+		forward hasObject
+		reverse inModel
+		inverse functional
+		asymmetric
+		irreflexive
+	]
+}

+ 119 - 0
examples/oml/CDF/src/oml/flandersmake.be/cdf/vocabulary/pm.oml

@@ -0,0 +1,119 @@
+vocabulary <http://flandersmake.be/cdf/vocabulary/pm#> as pm {
+	extends <http://flandersmake.be/cdf/vocabulary/object_diagram#> as object_diagram
+	extends <http://www.w3.org/2001/XMLSchema#> as xsd
+	extends <http://flandersmake.be/cdf/vocabulary/ftg#> as ftg
+
+	aspect CtrlSource [
+		restricts relation ctrlFrom to min 1
+	]
+	aspect CtrlSink [
+		restricts relation ctrlTo to min 1
+	]
+	
+	relation entity CtrlFlow [
+		from CtrlSource
+		to CtrlSink
+		forward ctrlFrom
+		reverse ctrlTo
+		asymmetric
+		irreflexive
+	]
+	
+	aspect DataSource [
+		restricts relation dataFrom to min 1
+	]
+	aspect DataSink [
+		restricts relation dataTo to min 1
+	]
+	
+	relation entity DataFlow [
+		from DataSource
+		to DataSink
+		forward dataFrom
+		reverse dataTo
+		asymmetric
+		irreflexive
+	]
+	
+	aspect Named [
+		restricts scalar property hasName to exactly 1
+	]
+	
+	aspect Node :> object_diagram:Object []
+	
+	concept Activity :> Node, Named [
+		// must have at least one of the following port types:
+		restricts some relation hasPort to CtrlInputPort
+		restricts some relation hasPort to CtrlOutputPort
+	]
+	
+	relation entity IsTransformation [
+		from Activity
+		to ftg:Transformation
+		forward isTransformation
+		reverse occursAsActivity
+		functional
+		asymmetric
+		irreflexive
+	]
+	
+	aspect Port :> Node, Named [
+		restricts relation ofActivity to exactly 1
+	]
+	
+	relation entity HasPort :> object_diagram:Link [
+		from Activity
+		to Port
+		forward hasPort
+		reverse ofActivity
+		asymmetric
+		irreflexive
+		inverse functional
+	]
+	
+	scalar property hasName [
+		domain Named
+		range xsd:string
+		functional
+	]
+	
+	// Every port can only have one incoming/outgoing connection
+	concept CtrlOutputPort :> CtrlSource, Port [
+		restricts relation ctrlFrom to max 1
+	]
+	concept CtrlInputPort :> CtrlSink, Port [
+		restricts relation ctrlTo to max 1
+	]
+	concept DataOutputPort :> DataSource, Port [
+		restricts relation dataFrom to max 1
+	]
+	concept DataInputPort :> DataSink, Port [
+		restricts relation dataTo to max 1
+	]
+	
+	concept Start :> Node, CtrlSource []
+	concept Final :> Node, CtrlSink []
+	
+	concept Artifact :> Node, Named, DataSource, DataSink []
+	
+	relation entity HasType [
+		from Artifact
+		to ftg:Formalism
+		forward hasType
+		reverse occursAsArtifact
+		functional
+		asymmetric
+		irreflexive
+	]
+	
+	concept ForkJoin :> Node, CtrlSink, CtrlSource []
+	
+	concept Merge :> Node, CtrlSink, CtrlSource [
+		// only one outgoing control flow link:
+		restricts relation ctrlFrom to max 1
+	]
+	
+	concept Model :> object_diagram:Model [
+		restricts all relation object_diagram:hasObject to Node
+	]
+}

+ 69 - 0
examples/oml/CDF/src/oml/flandersmake.be/cdf/vocabulary/statechart.oml

@@ -0,0 +1,69 @@
+vocabulary <http://flandersmake.be/cdf/vocabulary/statechart#> as statechart {
+	
+	extends <http://flandersmake.be/cdf/vocabulary/object_diagram#> as object_diagram
+	extends <http://www.w3.org/2001/XMLSchema#> as xsd
+	
+	aspect State :> object_diagram:Object [
+		restricts scalar property name to exactly 1
+	]
+	
+	scalar property name [
+		domain State
+		range xsd:string
+		functional
+	]
+	
+	concept OrState :> State [
+		restricts relation hasDefaultState to exactly 1
+	]
+	
+	relation entity DefaultState :> object_diagram:Link [
+		from OrState
+		to State
+		forward hasDefaultState
+		reverse isDefaultStateOf
+		functional
+		asymmetric
+		irreflexive
+	]
+	
+	concept AndState :> State []
+	
+	relation entity Parent :> object_diagram:Link [
+		from State
+		to State
+		forward hasParent
+		reverse hasChild
+		functional
+		asymmetric
+		irreflexive
+	]
+	
+	relation entity Transition :> object_diagram:Link [
+		from State
+		to State
+		// uncomment to make label mandatory:
+		restricts scalar property hasLabel to exactly 1
+	]
+	
+	scalar property hasLabel [
+		domain Transition
+		range xsd:string
+		functional
+	]
+	
+	concept Model :> object_diagram:Model, object_diagram:Object [
+		restricts relation hasRoot to exactly 1
+		restricts all relation object_diagram:hasObject to State
+	]
+	
+	relation entity Root :> object_diagram:Link [
+		from Model
+		to OrState
+		forward hasRoot
+		reverse rootOf
+		functional
+		asymmetric
+		irreflexive
+	]
+}

+ 8 - 0
examples/oml/CDF/src/sparql/GetFormalisms.sparql

@@ -0,0 +1,8 @@
+PREFIX ftg: <http://flandersmake.be/cdf/vocabulary/ftg#>
+PREFIX immutable: <http://flandersmake.be/cdf/vocabulary/immutable#> 
+
+SELECT DISTINCT ?uuid
+WHERE {
+	?formalism a ftg:Formalism . 
+	?formalism immutable:hasUUID ?uuid . 
+}

+ 9 - 0
examples/oml/CDF/src/sparql/GetInputsOfT1.sparql

@@ -0,0 +1,9 @@
+PREFIX ftg: <http://flandersmake.be/cdf/vocabulary/ftg#>
+PREFIX immutable: <http://flandersmake.be/cdf/vocabulary/immutable#>
+
+SELECT ?formalism
+WHERE {
+	?formalism a ftg:Formalism .
+	?transformation ftg:hasInput ?formalism .
+	?transformation immutable:hasUUID "t1" .
+}

+ 6 - 0
examples/oml/CDF/src/sparql/GetLinks.sparql

@@ -0,0 +1,6 @@
+PREFIX object_diagram: <http://flandersmake.be/cdf/vocabulary/object_diagram#>
+
+SELECT ?link
+WHERE {
+	?link a object_diagram:Link .
+}

+ 6 - 0
examples/oml/CDF/src/sparql/GetObjects.sparql

@@ -0,0 +1,6 @@
+PREFIX object_diagram: <http://flandersmake.be/cdf/vocabulary/object_diagram#>
+
+SELECT ?object
+WHERE {
+	?object a object_diagram:Object .
+}

+ 6 - 0
examples/oml/CDF/src/sparql/GetTransitions.sparql

@@ -0,0 +1,6 @@
+PREFIX statechart: <http://flandersmake.be/cdf/vocabulary/statechart#>
+
+SELECT ?t
+WHERE {
+	?t a statechart:Transition . 
+}