diff --git a/NOTICE b/NOTICE
index 3d630ea..72df5ec 100644
--- a/NOTICE
+++ b/NOTICE
@@ -9,36 +9,3 @@
 These have been licensed to the Apache Software Foundation under a software grant.
 
 -----------------------------------------------------------------------------------
-./taverna-robundle/src/main/resources/ontologies/ro.owl
-./taverna-scufl2-wfdesc org.apache.taverna.scufl2.wfdesc.ontologies.Wfdesc
-./taverna-scufl2-wfdesc org.apache.taverna.scufl2.wfdesc.ontologies.Wfprov
-./taverna-scufl2-wfdesc org.apache.taverna.scufl2.wfdesc.ontologies.Roterms
-./taverna-scufl2-wfdesc org.apache.taverna.scufl2.wfdesc.ontologies.Wf4ever
-
-The above Java classes are derivatives from original work 
-(Research Object OWL ontologies), used under the 
-Creative Commons Attribution 3.0 License 
-https://creativecommons.org/licenses/by/3.0/
-
-Attribution for the original work:
-
-	Wf4Ever Research Object Model 1.0 https://w3id.org/ro/
-	wfdesc ontology https://w3id.org/ro/wfdesc
-	wfprov ontology  https://w3id.org/ro/wfprov
-	roterms ontology http://purl.org/wf4ever/roterms
-	wf4ever ontology https://w3id.org/ro/wf4ever
-	
-	Copyright (c) 2011-2014
-	  Stian Soiland-Reyes, University of Manchester
-	  Sean Bechhofer, University of Manchester
-	  Khalid Belhajjame, University of Manchester
-	  Graham Klyne, University of Oxford
-	  Daniel Garijo, UPM
-	  Oscar Corcho, UPM
-	  Esteban Garcia Cuesta, iSOCO
-	  Raul Palma, PSNC
-
-The derived work is licensed to the Apache Software Foundation (ASF) 
-under one or more contributor license agreements; and to You under 
-the Apache License, Version 2.0.
------------------------------------------------------------------------------------
diff --git a/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Foaf.java b/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Foaf.java
index 7038ffc..299e955 100644
--- a/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Foaf.java
+++ b/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Foaf.java
@@ -22,8 +22,10 @@
 import org.apache.jena.ontology.*;
  
 /**
- * Vocabulary definitions from file:/home/stain/src/incubator-taverna-language/taverna-scufl2-wfdesc/src/main/resources/com/xmlns/foaf/foaf.rdf 
- * @author Auto-generated by schemagen on 21 Nov 2018 10:58 
+ * Constants from the Friend of a Friend (FOAF) namespace
+ * 
+ * @see http://xmlns.com/foaf/0.1/
+ *
  */
 public class Foaf {
     /** <p>The ontology model that holds the vocabulary terms</p> */
@@ -36,250 +38,156 @@
      * @return namespace as String
      * @see #NS */
     public static String getURI() {return NS;}
-    
+
     /** <p>The namespace of the vocabulary as a resource</p> */
     public static final Resource NAMESPACE = M_MODEL.createResource( NS );
     
-    /** <p>Indicates an account held by this agent.</p> */
-    public static final ObjectProperty account = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/account" );
+    public static final ObjectProperty account = M_MODEL.createObjectProperty(NS + "account");
     
-    /** <p>Indicates a homepage of the service provide for this online account.</p> */
-    public static final ObjectProperty accountServiceHomepage = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/accountServiceHomepage" );
+    public static final ObjectProperty accountServiceHomepage = M_MODEL.createObjectProperty(NS + "accountServiceHomepage");
     
-    /** <p>A location that something is based near, for some broadly human notion of 
-     *  near.</p>
-     */
-    public static final ObjectProperty based_near = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/based_near" );
+    public static final ObjectProperty based_near = M_MODEL.createObjectProperty(NS + "based_near");
     
-    /** <p>A current project this person works on.</p> */
-    public static final ObjectProperty currentProject = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/currentProject" );
+    public static final ObjectProperty currentProject = M_MODEL.createObjectProperty(NS + "currentProject");
     
-    /** <p>A depiction of some thing.</p> */
-    public static final ObjectProperty depiction = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/depiction" );
+    public static final ObjectProperty depiction = M_MODEL.createObjectProperty(NS + "depiction");
     
-    /** <p>A thing depicted in this representation.</p> */
-    public static final ObjectProperty depicts = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/depicts" );
+    public static final ObjectProperty depicts = M_MODEL.createObjectProperty(NS + "depicts");
     
-    /** <p>An organization funding a project or person.</p> */
-    public static final ObjectProperty fundedBy = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/fundedBy" );
+    public static final ObjectProperty fundedBy = M_MODEL.createObjectProperty(NS + "fundedBy");
     
-    /** <p>Indicates an account held by this agent.</p> */
-    public static final ObjectProperty holdsAccount = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/holdsAccount" );
+    public static final ObjectProperty holdsAccount = M_MODEL.createObjectProperty(NS + "holdsAccount");
     
-    /** <p>A homepage for some thing.</p> */
-    public static final ObjectProperty homepage = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/homepage" );
+    public static final ObjectProperty homepage = M_MODEL.createObjectProperty(NS + "homepage");
     
-    /** <p>An image that can be used to represent some thing (ie. those depictions which 
-     *  are particularly representative of something, eg. one's photo on a homepage).</p>
-     */
-    public static final ObjectProperty img = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/img" );
+    public static final ObjectProperty img = M_MODEL.createObjectProperty(NS + "img");
     
-    /** <p>A page about a topic of interest to this person.</p> */
-    public static final ObjectProperty interest = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/interest" );
+    public static final ObjectProperty interest = M_MODEL.createObjectProperty(NS + "interest");
     
-    /** <p>A person known by this person (indicating some level of reciprocated interaction 
-     *  between the parties).</p>
-     */
-    public static final ObjectProperty knows = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/knows" );
+    public static final ObjectProperty knows = M_MODEL.createObjectProperty(NS + "knows");
     
-    /** <p>A logo representing some thing.</p> */
-    public static final ObjectProperty logo = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/logo" );
+    public static final ObjectProperty logo = M_MODEL.createObjectProperty(NS + "logo");
     
-    /** <p>Something that was made by this agent.</p> */
-    public static final ObjectProperty made = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/made" );
+    public static final ObjectProperty made = M_MODEL.createObjectProperty(NS + "made");
     
-    /** <p>An agent that made this thing.</p> */
-    public static final ObjectProperty maker = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/maker" );
+    public static final ObjectProperty maker = M_MODEL.createObjectProperty(NS + "maker");
     
-    /** <p>A personal mailbox, ie. an Internet mailbox associated with exactly one owner, 
-     *  the first owner of this mailbox. This is a 'static inverse functional property', 
-     *  in that there is (across time and change) at most one individual that ever 
-     *  has any particular value for foaf:mbox.</p>
-     */
-    public static final ObjectProperty mbox = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/mbox" );
+    public static final ObjectProperty mbox = M_MODEL.createObjectProperty(NS + "mbox");
     
-    /** <p>Indicates a member of a Group</p> */
-    public static final ObjectProperty member = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/member" );
+    public static final ObjectProperty member = M_MODEL.createObjectProperty(NS + "member");
     
-    /** <p>An OpenID for an Agent.</p> */
-    public static final ObjectProperty openid = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/openid" );
+    public static final ObjectProperty openid = M_MODEL.createObjectProperty(NS + "openid");
     
-    /** <p>A page or document about this thing.</p> */
-    public static final ObjectProperty page = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/page" );
+    public static final ObjectProperty page = M_MODEL.createObjectProperty(NS + "page");
     
-    /** <p>A project this person has previously worked on.</p> */
-    public static final ObjectProperty pastProject = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/pastProject" );
+    public static final ObjectProperty pastProject = M_MODEL.createObjectProperty(NS + "pastProject");
     
-    /** <p>A phone, specified using fully qualified tel: URI scheme (refs: http://www.w3.org/Addressing/schemes.html#tel).</p> */
-    public static final ObjectProperty phone = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/phone" );
+    public static final ObjectProperty phone = M_MODEL.createObjectProperty(NS + "phone");
     
-    /** <p>The primary topic of some page or document.</p> */
-    public static final ObjectProperty primaryTopic = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/primaryTopic" );
+    public static final ObjectProperty primaryTopic = M_MODEL.createObjectProperty(NS + "primaryTopic");
     
-    /** <p>A link to the publications of this person.</p> */
-    public static final ObjectProperty publications = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/publications" );
+    public static final ObjectProperty publications = M_MODEL.createObjectProperty(NS + "publications");
     
-    /** <p>A homepage of a school attended by the person.</p> */
-    public static final ObjectProperty schoolHomepage = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/schoolHomepage" );
+    public static final ObjectProperty schoolHomepage = M_MODEL.createObjectProperty(NS + "schoolHomepage");
     
-    /** <p>A theme.</p> */
-    public static final ObjectProperty theme = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/theme" );
+    public static final ObjectProperty theme = M_MODEL.createObjectProperty(NS + "theme");
     
-    /** <p>A derived thumbnail image.</p> */
-    public static final ObjectProperty thumbnail = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/thumbnail" );
+    public static final ObjectProperty thumbnail = M_MODEL.createObjectProperty(NS + "thumbnail");
     
-    /** <p>A tipjar document for this agent, describing means for payment and reward.</p> */
-    public static final ObjectProperty tipjar = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/tipjar" );
+    public static final ObjectProperty tipjar = M_MODEL.createObjectProperty(NS + "tipjar");
     
-    /** <p>A topic of some page or document.</p> */
-    public static final ObjectProperty topic = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/topic" );
+    public static final ObjectProperty topic = M_MODEL.createObjectProperty(NS + "topic");
     
-    /** <p>A thing of interest to this person.</p> */
-    public static final ObjectProperty topic_interest = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/topic_interest" );
+    public static final ObjectProperty topic_interest = M_MODEL.createObjectProperty(NS + "topic_interest");
     
-    /** <p>A weblog of some thing (whether person, group, company etc.).</p> */
-    public static final ObjectProperty weblog = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/weblog" );
+    public static final ObjectProperty weblog = M_MODEL.createObjectProperty(NS + "weblog");
     
-    /** <p>A work info homepage of some person; a page about their work for some organization.</p> */
-    public static final ObjectProperty workInfoHomepage = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/workInfoHomepage" );
+    public static final ObjectProperty workInfoHomepage = M_MODEL.createObjectProperty(NS + "workInfoHomepage");
     
-    /** <p>A workplace homepage of some person; the homepage of an organization they 
-     *  work for.</p>
-     */
-    public static final ObjectProperty workplaceHomepage = M_MODEL.createObjectProperty( "http://xmlns.com/foaf/0.1/workplaceHomepage" );
+    public static final ObjectProperty workplaceHomepage = M_MODEL.createObjectProperty(NS + "workplaceHomepage");
     
-    /** <p>Indicates the name (identifier) associated with this online account.</p> */
-    public static final DatatypeProperty accountName = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/accountName" );
+    public static final DatatypeProperty accountName = M_MODEL.createDatatypeProperty(NS + "accountName");
     
-    /** <p>The age in years of some agent.</p> */
-    public static final DatatypeProperty age = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/age" );
+    public static final DatatypeProperty age = M_MODEL.createDatatypeProperty(NS + "age");
     
-    /** <p>An AIM chat ID</p> */
-    public static final DatatypeProperty aimChatID = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/aimChatID" );
+    public static final DatatypeProperty aimChatID = M_MODEL.createDatatypeProperty(NS + "aimChatID");
     
-    /** <p>The birthday of this Agent, represented in mm-dd string form, eg. '12-31'.</p> */
-    public static final DatatypeProperty birthday = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/birthday" );
+    public static final DatatypeProperty birthday = M_MODEL.createDatatypeProperty(NS + "birthday");
     
-    /** <p>A checksum for the DNA of some thing. Joke.</p> */
-    public static final DatatypeProperty dnaChecksum = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/dnaChecksum" );
+    public static final DatatypeProperty dnaChecksum = M_MODEL.createDatatypeProperty(NS + "dnaChecksum");
     
-    /** <p>The family name of some person.</p> */
-    public static final DatatypeProperty familyName = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/familyName" );
+    public static final DatatypeProperty familyName = M_MODEL.createDatatypeProperty(NS + "familyName");
     
-    /** <p>The family name of some person.</p> */
-    public static final DatatypeProperty family_name = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/family_name" );
+    public static final DatatypeProperty family_name = M_MODEL.createDatatypeProperty(NS + "family_name");
     
-    /** <p>The first name of a person.</p> */
-    public static final DatatypeProperty firstName = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/firstName" );
+    public static final DatatypeProperty firstName = M_MODEL.createDatatypeProperty(NS + "firstName");
     
-    /** <p>A textual geekcode for this person, see http://www.geekcode.com/geek.html</p> */
-    public static final DatatypeProperty geekcode = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/geekcode" );
+    public static final DatatypeProperty geekcode = M_MODEL.createDatatypeProperty(NS + "geekcode");
     
-    /** <p>The gender of this Agent (typically but not necessarily 'male' or 'female').</p> */
-    public static final DatatypeProperty gender = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/gender" );
+    public static final DatatypeProperty gender = M_MODEL.createDatatypeProperty(NS + "gender");
     
-    /** <p>The given name of some person.</p> */
-    public static final DatatypeProperty givenName = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/givenName" );
+    public static final DatatypeProperty givenName = M_MODEL.createDatatypeProperty(NS + "givenName");
     
-    /** <p>The given name of some person.</p> */
-    public static final DatatypeProperty givenname = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/givenname" );
+    public static final DatatypeProperty givenname = M_MODEL.createDatatypeProperty(NS + "givenname");
     
-    /** <p>An ICQ chat ID</p> */
-    public static final DatatypeProperty icqChatID = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/icqChatID" );
+    public static final DatatypeProperty icqChatID = M_MODEL.createDatatypeProperty(NS + "icqChatID");
     
-    /** <p>A jabber ID for something.</p> */
-    public static final DatatypeProperty jabberID = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/jabberID" );
+    public static final DatatypeProperty jabberID = M_MODEL.createDatatypeProperty(NS + "jabberID");
     
-    /** <p>The last name of a person.</p> */
-    public static final DatatypeProperty lastName = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/lastName" );
+    public static final DatatypeProperty lastName = M_MODEL.createDatatypeProperty(NS + "lastName");
     
-    /** <p>The sha1sum of the URI of an Internet mailbox associated with exactly one 
-     *  owner, the first owner of the mailbox.</p>
-     */
-    public static final DatatypeProperty mbox_sha1sum = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/mbox_sha1sum" );
+    public static final DatatypeProperty mbox_sha1sum = M_MODEL.createDatatypeProperty(NS + "mbox_sha1sum");
     
-    /** <p>An MSN chat ID</p> */
-    public static final DatatypeProperty msnChatID = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/msnChatID" );
+    public static final DatatypeProperty msnChatID = M_MODEL.createDatatypeProperty(NS + "msnChatID");
     
-    /** <p>A Myers Briggs (MBTI) personality classification.</p> */
-    public static final DatatypeProperty myersBriggs = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/myersBriggs" );
+    public static final DatatypeProperty myersBriggs = M_MODEL.createDatatypeProperty(NS + "myersBriggs");
     
-    /** <p>A name for some thing.</p> */
-    public static final DatatypeProperty name = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/name" );
+    public static final DatatypeProperty name = M_MODEL.createDatatypeProperty(NS + "name");
     
-    /** <p>A short informal nickname characterising an agent (includes login identifiers, 
-     *  IRC and other chat nicknames).</p>
-     */
-    public static final DatatypeProperty nick = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/nick" );
+    public static final DatatypeProperty nick = M_MODEL.createDatatypeProperty(NS + "nick");
     
-    /** <p>A .plan comment, in the tradition of finger and '.plan' files.</p> */
-    public static final DatatypeProperty plan = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/plan" );
+    public static final DatatypeProperty plan = M_MODEL.createDatatypeProperty(NS + "plan");
     
-    /** <p>A sha1sum hash, in hex.</p> */
-    public static final DatatypeProperty sha1 = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/sha1" );
+    public static final DatatypeProperty sha1 = M_MODEL.createDatatypeProperty(NS + "sha1");
     
-    /** <p>A Skype ID</p> */
-    public static final DatatypeProperty skypeID = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/skypeID" );
+    public static final DatatypeProperty skypeID = M_MODEL.createDatatypeProperty(NS + "skypeID");
     
-    /** <p>A string expressing what the user is happy for the general public (normally) 
-     *  to know about their current activity.</p>
-     */
-    public static final DatatypeProperty status = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/status" );
+    public static final DatatypeProperty status = M_MODEL.createDatatypeProperty(NS + "status");
     
-    /** <p>The surname of some person.</p> */
-    public static final DatatypeProperty surname = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/surname" );
+    public static final DatatypeProperty surname = M_MODEL.createDatatypeProperty(NS + "surname");
     
-    /** <p>Title (Mr, Mrs, Ms, Dr. etc)</p> */
-    public static final DatatypeProperty title = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/title" );
+    public static final DatatypeProperty title = M_MODEL.createDatatypeProperty(NS + "title");
     
-    /** <p>A Yahoo chat ID</p> */
-    public static final DatatypeProperty yahooChatID = M_MODEL.createDatatypeProperty( "http://xmlns.com/foaf/0.1/yahooChatID" );
+    public static final DatatypeProperty yahooChatID = M_MODEL.createDatatypeProperty(NS + "yahooChatID");
     
-    /** <p>Indicates the class of individuals that are a member of a Group</p> */
-    public static final AnnotationProperty membershipClass = M_MODEL.createAnnotationProperty( "http://xmlns.com/foaf/0.1/membershipClass" );
+    public static final AnnotationProperty membershipClass = M_MODEL.createAnnotationProperty(NS + "membershipClass");
     
-    /** <p>A document that this thing is the primary topic of.</p> */
-    public static final OntProperty isPrimaryTopicOf = M_MODEL.createOntProperty( "http://xmlns.com/foaf/0.1/isPrimaryTopicOf" );
+    public static final OntProperty isPrimaryTopicOf = M_MODEL.createOntProperty(NS + "isPrimaryTopicOf");
     
-    /** <p>An agent (eg. person, group, software or physical artifact).</p> */
-    public static final OntClass Agent = M_MODEL.createClass( "http://xmlns.com/foaf/0.1/Agent" );
+    public static final OntClass Agent = M_MODEL.createClass(NS + "Agent");
     
-    /** <p>A document.</p> */
-    public static final OntClass Document = M_MODEL.createClass( "http://xmlns.com/foaf/0.1/Document" );
+    public static final OntClass Document = M_MODEL.createClass(NS + "Document");
     
-    /** <p>A class of Agents.</p> */
-    public static final OntClass Group = M_MODEL.createClass( "http://xmlns.com/foaf/0.1/Group" );
+    public static final OntClass Group = M_MODEL.createClass(NS + "Group");
     
-    /** <p>An image.</p> */
-    public static final OntClass Image = M_MODEL.createClass( "http://xmlns.com/foaf/0.1/Image" );
+    public static final OntClass Image = M_MODEL.createClass(NS + "Image");
     
-    /** <p>A foaf:LabelProperty is any RDF property with texual values that serve as 
-     *  labels.</p>
-     */
-    public static final OntClass LabelProperty = M_MODEL.createClass( "http://xmlns.com/foaf/0.1/LabelProperty" );
+    public static final OntClass LabelProperty = M_MODEL.createClass(NS + "LabelProperty");
     
-    /** <p>An online account.</p> */
-    public static final OntClass OnlineAccount = M_MODEL.createClass( "http://xmlns.com/foaf/0.1/OnlineAccount" );
+    public static final OntClass OnlineAccount = M_MODEL.createClass(NS + "OnlineAccount");
     
-    /** <p>An online chat account.</p> */
-    public static final OntClass OnlineChatAccount = M_MODEL.createClass( "http://xmlns.com/foaf/0.1/OnlineChatAccount" );
+    public static final OntClass OnlineChatAccount = M_MODEL.createClass(NS + "OnlineChatAccount");
     
-    /** <p>An online e-commerce account.</p> */
-    public static final OntClass OnlineEcommerceAccount = M_MODEL.createClass( "http://xmlns.com/foaf/0.1/OnlineEcommerceAccount" );
+    public static final OntClass OnlineEcommerceAccount = M_MODEL.createClass(NS + "OnlineEcommerceAccount");
     
-    /** <p>An online gaming account.</p> */
-    public static final OntClass OnlineGamingAccount = M_MODEL.createClass( "http://xmlns.com/foaf/0.1/OnlineGamingAccount" );
+    public static final OntClass OnlineGamingAccount = M_MODEL.createClass(NS + "OnlineGamingAccount");
     
-    /** <p>An organization.</p> */
-    public static final OntClass Organization = M_MODEL.createClass( "http://xmlns.com/foaf/0.1/Organization" );
+    public static final OntClass Organization = M_MODEL.createClass(NS + "Organization");
     
-    /** <p>A person.</p> */
-    public static final OntClass Person = M_MODEL.createClass( "http://xmlns.com/foaf/0.1/Person" );
+    public static final OntClass Person = M_MODEL.createClass(NS + "Person");
     
-    /** <p>A personal profile RDF document.</p> */
-    public static final OntClass PersonalProfileDocument = M_MODEL.createClass( "http://xmlns.com/foaf/0.1/PersonalProfileDocument" );
+    public static final OntClass PersonalProfileDocument = M_MODEL.createClass(NS + "PersonalProfileDocument");
     
-    /** <p>A project (a collective endeavour of some kind).</p> */
-    public static final OntClass Project = M_MODEL.createClass( "http://xmlns.com/foaf/0.1/Project" );
+    public static final OntClass Project = M_MODEL.createClass(NS + "Project");
     
 }
diff --git a/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Prov_o.java b/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Prov_o.java
index 0f2d196..ce15d87 100644
--- a/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Prov_o.java
+++ b/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Prov_o.java
@@ -22,8 +22,9 @@
 import org.apache.jena.ontology.*;
  
 /**
- * Vocabulary definitions from file:/home/stain/src/incubator-taverna-language/taverna-scufl2-wfdesc/src/main/resources/org/w3/prov-o.ttl 
- * @author Auto-generated by schemagen on 21 Nov 2018 10:58 
+ * Constants from the W3C PROV-O vocabulary
+ * 
+ * @see https://www.w3.org/TR/prov-o/
  */
 public class Prov_o {
     /** <p>The ontology model that holds the vocabulary terms</p> */
@@ -40,482 +41,194 @@
     /** <p>The namespace of the vocabulary as a resource</p> */
     public static final Resource NAMESPACE = M_MODEL.createResource( NS );
     
-    /** <p>The ontology's owl:versionInfo as a string</p> */
-    public static final String VERSION_INFO = "Recommendation version 2013-04-30";
+    public static final ObjectProperty actedOnBehalfOf = M_MODEL.createObjectProperty(NS + "actedOnBehalfOf");
     
-    /** <p>An object property to express the accountability of an agent towards another 
-     *  agent. The subordinate agent acted on behalf of the responsible agent in an 
-     *  actual activity.</p>
-     */
-    public static final ObjectProperty actedOnBehalfOf = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#actedOnBehalfOf" );
+    public static final ObjectProperty activity = M_MODEL.createObjectProperty(NS + "activity");
     
-    public static final ObjectProperty activity = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#activity" );
+    public static final ObjectProperty agent = M_MODEL.createObjectProperty(NS + "agent");
     
-    public static final ObjectProperty agent = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#agent" );
+    public static final ObjectProperty alternateOf = M_MODEL.createObjectProperty(NS + "alternateOf");
     
-    public static final ObjectProperty alternateOf = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#alternateOf" );
+    public static final ObjectProperty atLocation = M_MODEL.createObjectProperty(NS + "atLocation");
     
-    /** <p>The Location of any resource.This property has multiple RDFS domains to suit 
-     *  multiple OWL Profiles. See &lt;a href="#owl-profile"&gt;PROV-O OWL Profile&lt;/a&gt;.</p>
-     */
-    public static final ObjectProperty atLocation = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#atLocation" );
+    public static final ObjectProperty entity = M_MODEL.createObjectProperty(NS + "entity");
     
-    public static final ObjectProperty entity = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#entity" );
+    public static final ObjectProperty generated = M_MODEL.createObjectProperty(NS + "generated");
     
-    public static final ObjectProperty generated = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#generated" );
+    public static final ObjectProperty hadActivity = M_MODEL.createObjectProperty(NS + "hadActivity");
     
-    /** <p>This property has multiple RDFS domains to suit multiple OWL Profiles. See 
-     *  &lt;a href="#owl-profile"&gt;PROV-O OWL Profile&lt;/a&gt;.The _optional_ Activity 
-     *  of an Influence, which used, generated, invalidated, or was the responsibility 
-     *  of some Entity. This property is _not_ used by ActivityInfluence (use prov:activity 
-     *  instead).</p>
-     */
-    public static final ObjectProperty hadActivity = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#hadActivity" );
+    public static final ObjectProperty hadGeneration = M_MODEL.createObjectProperty(NS + "hadGeneration");
     
-    /** <p>The _optional_ Generation involved in an Entity's Derivation.</p> */
-    public static final ObjectProperty hadGeneration = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#hadGeneration" );
+    public static final ObjectProperty hadMember = M_MODEL.createObjectProperty(NS + "hadMember");
     
-    public static final ObjectProperty hadMember = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#hadMember" );
+    public static final ObjectProperty hadPlan = M_MODEL.createObjectProperty(NS + "hadPlan");
     
-    /** <p>The _optional_ Plan adopted by an Agent in Association with some Activity. 
-     *  Plan specifications are out of the scope of this specification.</p>
-     */
-    public static final ObjectProperty hadPlan = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#hadPlan" );
+    public static final ObjectProperty hadPrimarySource = M_MODEL.createObjectProperty(NS + "hadPrimarySource");
     
-    public static final ObjectProperty hadPrimarySource = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#hadPrimarySource" );
+    public static final ObjectProperty hadRole = M_MODEL.createObjectProperty(NS + "hadRole");
     
-    /** <p>The _optional_ Role that an Entity assumed in the context of an Activity. 
-     *  For example, :baking prov:used :spoon; prov:qualified [ a prov:Usage; prov:entity 
-     *  :spoon; prov:hadRole roles:mixing_implement ].This property has multiple RDFS 
-     *  domains to suit multiple OWL Profiles. See &lt;a href="#owl-profile"&gt;PROV-O 
-     *  OWL Profile&lt;/a&gt;.</p>
-     */
-    public static final ObjectProperty hadRole = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#hadRole" );
+    public static final ObjectProperty hadUsage = M_MODEL.createObjectProperty(NS + "hadUsage");
     
-    /** <p>The _optional_ Usage involved in an Entity's Derivation.</p> */
-    public static final ObjectProperty hadUsage = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#hadUsage" );
+    public static final ObjectProperty influenced = M_MODEL.createObjectProperty(NS + "influenced");
     
-    public static final ObjectProperty influenced = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#influenced" );
+    public static final ObjectProperty influencer = M_MODEL.createObjectProperty(NS + "influencer");
     
-    /** <p>Subproperties of prov:influencer are used to cite the object of an unqualified 
-     *  PROV-O triple whose predicate is a subproperty of prov:wasInfluencedBy (e.g. 
-     *  prov:used, prov:wasGeneratedBy). prov:influencer is used much like rdf:object 
-     *  is used.</p>
-     */
-    public static final ObjectProperty influencer = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#influencer" );
+    public static final ObjectProperty invalidated = M_MODEL.createObjectProperty(NS + "invalidated");
     
-    public static final ObjectProperty invalidated = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#invalidated" );
+    public static final ObjectProperty qualifiedAssociation = M_MODEL.createObjectProperty(NS + "qualifiedAssociation");
     
-    /** <p>If this Activity prov:wasAssociatedWith Agent :ag, then it can qualify the 
-     *  Association using prov:qualifiedAssociation [ a prov:Association; prov:agent 
-     *  :ag; :foo :bar ].</p>
-     */
-    public static final ObjectProperty qualifiedAssociation = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#qualifiedAssociation" );
+    public static final ObjectProperty qualifiedAttribution = M_MODEL.createObjectProperty(NS + "qualifiedAttribution");
     
-    /** <p>If this Entity prov:wasAttributedTo Agent :ag, then it can qualify how it 
-     *  was influenced using prov:qualifiedAttribution [ a prov:Attribution; prov:agent 
-     *  :ag; :foo :bar ].</p>
-     */
-    public static final ObjectProperty qualifiedAttribution = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#qualifiedAttribution" );
+    public static final ObjectProperty qualifiedCommunication = M_MODEL.createObjectProperty(NS + "qualifiedCommunication");
     
-    /** <p>If this Activity prov:wasInformedBy Activity :a, then it can qualify how it 
-     *  was influenced using prov:qualifiedCommunication [ a prov:Communication; prov:activity 
-     *  :a; :foo :bar ].</p>
-     */
-    public static final ObjectProperty qualifiedCommunication = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#qualifiedCommunication" );
+    public static final ObjectProperty qualifiedDelegation = M_MODEL.createObjectProperty(NS + "qualifiedDelegation");
     
-    /** <p>If this Agent prov:actedOnBehalfOf Agent :ag, then it can qualify how with 
-     *  prov:qualifiedResponsibility [ a prov:Responsibility; prov:agent :ag; :foo 
-     *  :bar ].</p>
-     */
-    public static final ObjectProperty qualifiedDelegation = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#qualifiedDelegation" );
+    public static final ObjectProperty qualifiedDerivation = M_MODEL.createObjectProperty(NS + "qualifiedDerivation");
     
-    /** <p>If this Entity prov:wasDerivedFrom Entity :e, then it can qualify how it was 
-     *  derived using prov:qualifiedDerivation [ a prov:Derivation; prov:entity :e; 
-     *  :foo :bar ].</p>
-     */
-    public static final ObjectProperty qualifiedDerivation = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#qualifiedDerivation" );
+    public static final ObjectProperty qualifiedEnd = M_MODEL.createObjectProperty(NS + "qualifiedEnd");
     
-    /** <p>If this Activity prov:wasEndedBy Entity :e1, then it can qualify how it was 
-     *  ended using prov:qualifiedEnd [ a prov:End; prov:entity :e1; :foo :bar ].</p>
-     */
-    public static final ObjectProperty qualifiedEnd = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#qualifiedEnd" );
+    public static final ObjectProperty qualifiedGeneration = M_MODEL.createObjectProperty(NS + "qualifiedGeneration");
     
-    /** <p>If this Activity prov:generated Entity :e, then it can qualify how it performed 
-     *  the Generation using prov:qualifiedGeneration [ a prov:Generation; prov:entity 
-     *  :e; :foo :bar ].</p>
-     */
-    public static final ObjectProperty qualifiedGeneration = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#qualifiedGeneration" );
+    public static final ObjectProperty qualifiedInfluence = M_MODEL.createObjectProperty(NS + "qualifiedInfluence");
     
-    /** <p>Because prov:qualifiedInfluence is a broad relation, the more specific relations 
-     *  (qualifiedCommunication, qualifiedDelegation, qualifiedEnd, etc.) should be 
-     *  used when applicable.</p>
-     */
-    public static final ObjectProperty qualifiedInfluence = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#qualifiedInfluence" );
+    public static final ObjectProperty qualifiedInvalidation = M_MODEL.createObjectProperty(NS + "qualifiedInvalidation");
     
-    /** <p>If this Entity prov:wasInvalidatedBy Activity :a, then it can qualify how 
-     *  it was invalidated using prov:qualifiedInvalidation [ a prov:Invalidation; 
-     *  prov:activity :a; :foo :bar ].</p>
-     */
-    public static final ObjectProperty qualifiedInvalidation = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#qualifiedInvalidation" );
+    public static final ObjectProperty qualifiedPrimarySource = M_MODEL.createObjectProperty(NS + "qualifiedPrimarySource");
     
-    /** <p>If this Entity prov:hadPrimarySource Entity :e, then it can qualify how using 
-     *  prov:qualifiedPrimarySource [ a prov:PrimarySource; prov:entity :e; :foo :bar 
-     *  ].</p>
-     */
-    public static final ObjectProperty qualifiedPrimarySource = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#qualifiedPrimarySource" );
+    public static final ObjectProperty qualifiedQuotation = M_MODEL.createObjectProperty(NS + "qualifiedQuotation");
     
-    /** <p>If this Entity prov:wasQuotedFrom Entity :e, then it can qualify how using 
-     *  prov:qualifiedQuotation [ a prov:Quotation; prov:entity :e; :foo :bar ].</p>
-     */
-    public static final ObjectProperty qualifiedQuotation = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#qualifiedQuotation" );
+    public static final ObjectProperty qualifiedRevision = M_MODEL.createObjectProperty(NS + "qualifiedRevision");
     
-    /** <p>If this Entity prov:wasRevisionOf Entity :e, then it can qualify how it was 
-     *  revised using prov:qualifiedRevision [ a prov:Revision; prov:entity :e; :foo 
-     *  :bar ].</p>
-     */
-    public static final ObjectProperty qualifiedRevision = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#qualifiedRevision" );
+    public static final ObjectProperty qualifiedStart = M_MODEL.createObjectProperty(NS + "qualifiedStart");
     
-    /** <p>If this Activity prov:wasStartedBy Entity :e1, then it can qualify how it 
-     *  was started using prov:qualifiedStart [ a prov:Start; prov:entity :e1; :foo 
-     *  :bar ].</p>
-     */
-    public static final ObjectProperty qualifiedStart = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#qualifiedStart" );
+    public static final ObjectProperty qualifiedUsage = M_MODEL.createObjectProperty(NS + "qualifiedUsage");
     
-    /** <p>If this Activity prov:used Entity :e, then it can qualify how it used it using 
-     *  prov:qualifiedUsage [ a prov:Usage; prov:entity :e; :foo :bar ].</p>
-     */
-    public static final ObjectProperty qualifiedUsage = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#qualifiedUsage" );
+    public static final ObjectProperty specializationOf = M_MODEL.createObjectProperty(NS + "specializationOf");
     
-    public static final ObjectProperty specializationOf = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#specializationOf" );
+    public static final ObjectProperty used = M_MODEL.createObjectProperty(NS + "used");
     
-    /** <p>A prov:Entity that was used by this prov:Activity. For example, :baking prov:used 
-     *  :spoon, :egg, :oven .</p>
-     */
-    public static final ObjectProperty used = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#used" );
+    public static final ObjectProperty wasAssociatedWith = M_MODEL.createObjectProperty(NS + "wasAssociatedWith");
     
-    /** <p>An prov:Agent that had some (unspecified) responsibility for the occurrence 
-     *  of this prov:Activity.</p>
-     */
-    public static final ObjectProperty wasAssociatedWith = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#wasAssociatedWith" );
+    public static final ObjectProperty wasAttributedTo = M_MODEL.createObjectProperty(NS + "wasAttributedTo");
     
-    /** <p>Attribution is the ascribing of an entity to an agent.</p> */
-    public static final ObjectProperty wasAttributedTo = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#wasAttributedTo" );
+    public static final ObjectProperty wasDerivedFrom = M_MODEL.createObjectProperty(NS + "wasDerivedFrom");
     
-    /** <p>The more specific subproperties of prov:wasDerivedFrom (i.e., prov:wasQuotedFrom, 
-     *  prov:wasRevisionOf, prov:hadPrimarySource) should be used when applicable.</p>
-     */
-    public static final ObjectProperty wasDerivedFrom = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#wasDerivedFrom" );
+    public static final ObjectProperty wasEndedBy = M_MODEL.createObjectProperty(NS + "wasEndedBy");
     
-    /** <p>End is when an activity is deemed to have ended. An end may refer to an entity, 
-     *  known as trigger, that terminated the activity.</p>
-     */
-    public static final ObjectProperty wasEndedBy = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#wasEndedBy" );
+    public static final ObjectProperty wasGeneratedBy = M_MODEL.createObjectProperty(NS + "wasGeneratedBy");
     
-    public static final ObjectProperty wasGeneratedBy = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#wasGeneratedBy" );
+    public static final ObjectProperty wasInfluencedBy = M_MODEL.createObjectProperty(NS + "wasInfluencedBy");
     
-    /** <p>This property has multiple RDFS domains to suit multiple OWL Profiles. See 
-     *  &lt;a href="#owl-profile"&gt;PROV-O OWL Profile&lt;/a&gt;.Because prov:wasInfluencedBy 
-     *  is a broad relation, its more specific subproperties (e.g. prov:wasInformedBy, 
-     *  prov:actedOnBehalfOf, prov:wasEndedBy, etc.) should be used when applicable.</p>
-     */
-    public static final ObjectProperty wasInfluencedBy = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#wasInfluencedBy" );
+    public static final ObjectProperty wasInformedBy = M_MODEL.createObjectProperty(NS + "wasInformedBy");
     
-    /** <p>An activity a2 is dependent on or informed by another activity a1, by way 
-     *  of some unspecified entity that is generated by a1 and used by a2.</p>
-     */
-    public static final ObjectProperty wasInformedBy = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#wasInformedBy" );
+    public static final ObjectProperty wasInvalidatedBy = M_MODEL.createObjectProperty(NS + "wasInvalidatedBy");
     
-    public static final ObjectProperty wasInvalidatedBy = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#wasInvalidatedBy" );
+    public static final ObjectProperty wasQuotedFrom = M_MODEL.createObjectProperty(NS + "wasQuotedFrom");
     
-    /** <p>An entity is derived from an original entity by copying, or 'quoting', some 
-     *  or all of it.</p>
-     */
-    public static final ObjectProperty wasQuotedFrom = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#wasQuotedFrom" );
+    public static final ObjectProperty wasRevisionOf = M_MODEL.createObjectProperty(NS + "wasRevisionOf");
     
-    /** <p>A revision is a derivation that revises an entity into a revised version.</p> */
-    public static final ObjectProperty wasRevisionOf = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#wasRevisionOf" );
+    public static final ObjectProperty wasStartedBy = M_MODEL.createObjectProperty(NS + "wasStartedBy");
     
-    /** <p>Start is when an activity is deemed to have started. A start may refer to 
-     *  an entity, known as trigger, that initiated the activity.</p>
-     */
-    public static final ObjectProperty wasStartedBy = M_MODEL.createObjectProperty( "http://www.w3.org/ns/prov#wasStartedBy" );
+    public static final DatatypeProperty atTime = M_MODEL.createDatatypeProperty(NS + "atTime");
     
-    /** <p>The time at which an InstantaneousEvent occurred, in the form of xsd:dateTime.</p> */
-    public static final DatatypeProperty atTime = M_MODEL.createDatatypeProperty( "http://www.w3.org/ns/prov#atTime" );
+    public static final DatatypeProperty endedAtTime = M_MODEL.createDatatypeProperty(NS + "endedAtTime");
     
-    /** <p>The time at which an activity ended. See also prov:startedAtTime.</p> */
-    public static final DatatypeProperty endedAtTime = M_MODEL.createDatatypeProperty( "http://www.w3.org/ns/prov#endedAtTime" );
+    public static final DatatypeProperty generatedAtTime = M_MODEL.createDatatypeProperty(NS + "generatedAtTime");
     
-    /** <p>The time at which an entity was completely created and is available for use.</p> */
-    public static final DatatypeProperty generatedAtTime = M_MODEL.createDatatypeProperty( "http://www.w3.org/ns/prov#generatedAtTime" );
+    public static final DatatypeProperty invalidatedAtTime = M_MODEL.createDatatypeProperty(NS + "invalidatedAtTime");
     
-    /** <p>The time at which an entity was invalidated (i.e., no longer usable).</p> */
-    public static final DatatypeProperty invalidatedAtTime = M_MODEL.createDatatypeProperty( "http://www.w3.org/ns/prov#invalidatedAtTime" );
+    public static final DatatypeProperty startedAtTime = M_MODEL.createDatatypeProperty(NS + "startedAtTime");
     
-    /** <p>The time at which an activity started. See also prov:endedAtTime.</p> */
-    public static final DatatypeProperty startedAtTime = M_MODEL.createDatatypeProperty( "http://www.w3.org/ns/prov#startedAtTime" );
+    public static final DatatypeProperty value = M_MODEL.createDatatypeProperty(NS + "value");
     
-    public static final DatatypeProperty value = M_MODEL.createDatatypeProperty( "http://www.w3.org/ns/prov#value" );
+    public static final AnnotationProperty aq = M_MODEL.createAnnotationProperty(NS + "aq");
     
-    public static final AnnotationProperty aq = M_MODEL.createAnnotationProperty( "http://www.w3.org/ns/prov#aq" );
+    public static final AnnotationProperty category = M_MODEL.createAnnotationProperty(NS + "category");
     
-    /** <p>Classify prov-o terms into three categories, including 'starting-point', 'qualifed', 
-     *  and 'extended'. This classification is used by the prov-o html document to 
-     *  gently introduce prov-o terms to its users.</p>
-     */
-    public static final AnnotationProperty category = M_MODEL.createAnnotationProperty( "http://www.w3.org/ns/prov#category" );
+    public static final AnnotationProperty component = M_MODEL.createAnnotationProperty(NS + "component");
     
-    /** <p>Classify prov-o terms into six components according to prov-dm, including 
-     *  'agents-responsibility', 'alternate', 'annotations', 'collections', 'derivations', 
-     *  and 'entities-activities'. This classification is used so that readers of 
-     *  prov-o specification can find its correspondence with the prov-dm specification.</p>
-     */
-    public static final AnnotationProperty component = M_MODEL.createAnnotationProperty( "http://www.w3.org/ns/prov#component" );
+    public static final AnnotationProperty constraints = M_MODEL.createAnnotationProperty(NS + "constraints");
     
-    /** <p>A reference to the principal section of the PROV-CONSTRAINTS document that 
-     *  describes this concept.</p>
-     */
-    public static final AnnotationProperty constraints = M_MODEL.createAnnotationProperty( "http://www.w3.org/ns/prov#constraints" );
+    public static final AnnotationProperty definition = M_MODEL.createAnnotationProperty(NS + "definition");
     
-    /** <p>A definition quoted from PROV-DM or PROV-CONSTRAINTS that describes the concept 
-     *  expressed with this OWL term.</p>
-     */
-    public static final AnnotationProperty definition = M_MODEL.createAnnotationProperty( "http://www.w3.org/ns/prov#definition" );
-    
-    /** <p>A reference to the principal section of the PROV-DM document that describes 
-     *  this concept.</p>
-     */
-    public static final AnnotationProperty dm = M_MODEL.createAnnotationProperty( "http://www.w3.org/ns/prov#dm" );
+    public static final AnnotationProperty dm = M_MODEL.createAnnotationProperty(NS + "dm");
     
-    /** <p>A note by the OWL development team about how this term expresses the PROV-DM 
-     *  concept, or how it should be used in context of semantic web or linked data.</p>
-     */
-    public static final AnnotationProperty editorialNote = M_MODEL.createAnnotationProperty( "http://www.w3.org/ns/prov#editorialNote" );
+    public static final AnnotationProperty editorialNote = M_MODEL.createAnnotationProperty(NS + "editorialNote");
     
-    /** <p>When the prov-o term does not have a definition drawn from prov-dm, and the 
-     *  prov-o editor provides one.</p>
-     */
-    public static final AnnotationProperty editorsDefinition = M_MODEL.createAnnotationProperty( "http://www.w3.org/ns/prov#editorsDefinition" );
+    public static final AnnotationProperty editorsDefinition = M_MODEL.createAnnotationProperty(NS + "editorsDefinition");
     
-    /** <p>PROV-O does not define all property inverses. The directionalities defined 
-     *  in PROV-O should be given preference over those not defined. However, if users 
-     *  wish to name the inverse of a PROV-O property, the local name given by prov:inverse 
-     *  should be used.</p>
-     */
-    public static final AnnotationProperty inverse = M_MODEL.createAnnotationProperty( "http://www.w3.org/ns/prov#inverse" );
+    public static final AnnotationProperty inverse = M_MODEL.createAnnotationProperty(NS + "inverse");
     
-    /** <p>A reference to the principal section of the PROV-DM document that describes 
-     *  this concept.</p>
-     */
-    public static final AnnotationProperty n = M_MODEL.createAnnotationProperty( "http://www.w3.org/ns/prov#n" );
+    public static final AnnotationProperty n = M_MODEL.createAnnotationProperty(NS + "n");
     
-    /** <p>The position that this OWL term should be listed within documentation. The 
-     *  scope of the documentation (e.g., among all terms, among terms within a prov:category, 
-     *  among properties applying to a particular class, etc.) is unspecified.</p>
-     */
-    public static final AnnotationProperty order = M_MODEL.createAnnotationProperty( "http://www.w3.org/ns/prov#order" );
+    public static final AnnotationProperty order = M_MODEL.createAnnotationProperty(NS + "order");
     
-    /** <p>This annotation property links a subproperty of prov:wasInfluencedBy with 
-     *  the subclass of prov:Influence and the qualifying property that are used to 
-     *  qualify it. Example annotation: prov:wasGeneratedBy prov:qualifiedForm prov:qualifiedGeneration, 
-     *  prov:Generation . Then this unqualified assertion: :entity1 prov:wasGeneratedBy 
-     *  :activity1 . can be qualified by adding: :entity1 prov:qualifiedGeneration 
-     *  :entity1Gen . :entity1Gen a prov:Generation, prov:Influence; prov:activity 
-     *  :activity1; :customValue 1337 . Note how the value of the unqualified influence 
-     *  (prov:wasGeneratedBy :activity1) is mirrored as the value of the prov:activity 
-     *  (or prov:entity, or prov:agent) property on the influence class.</p>
-     */
-    public static final AnnotationProperty qualifiedForm = M_MODEL.createAnnotationProperty( "http://www.w3.org/ns/prov#qualifiedForm" );
+    public static final AnnotationProperty qualifiedForm = M_MODEL.createAnnotationProperty(NS + "qualifiedForm");
     
-    public static final AnnotationProperty sharesDefinitionWith = M_MODEL.createAnnotationProperty( "http://www.w3.org/ns/prov#sharesDefinitionWith" );
+    public static final AnnotationProperty sharesDefinitionWith = M_MODEL.createAnnotationProperty(NS + "sharesDefinitionWith");
     
-    public static final AnnotationProperty todo = M_MODEL.createAnnotationProperty( "http://www.w3.org/ns/prov#todo" );
+    public static final AnnotationProperty todo = M_MODEL.createAnnotationProperty(NS + "todo");
     
-    /** <p>Classes and properties used to qualify relationships are annotated with prov:unqualifiedForm 
-     *  to indicate the property used to assert an unqualified provenance relation.</p>
-     */
-    public static final AnnotationProperty unqualifiedForm = M_MODEL.createAnnotationProperty( "http://www.w3.org/ns/prov#unqualifiedForm" );
+    public static final AnnotationProperty unqualifiedForm = M_MODEL.createAnnotationProperty(NS + "unqualifiedForm");
     
-    public static final OntClass Activity = M_MODEL.createClass( "http://www.w3.org/ns/prov#Activity" );
+    public static final OntClass Activity = M_MODEL.createClass(NS + "Activity");
     
-    /** <p>It is not recommended that the type ActivityInfluence be asserted without 
-     *  also asserting one of its more specific subclasses.ActivityInfluence provides 
-     *  additional descriptions of an Activity's binary influence upon any other kind 
-     *  of resource. Instances of ActivityInfluence use the prov:activity property 
-     *  to cite the influencing Activity.</p>
-     */
-    public static final OntClass ActivityInfluence = M_MODEL.createClass( "http://www.w3.org/ns/prov#ActivityInfluence" );
+    public static final OntClass ActivityInfluence = M_MODEL.createClass(NS + "ActivityInfluence");
     
-    public static final OntClass Agent = M_MODEL.createClass( "http://www.w3.org/ns/prov#Agent" );
+    public static final OntClass Agent = M_MODEL.createClass(NS + "Agent");
     
-    /** <p>It is not recommended that the type AgentInfluence be asserted without also 
-     *  asserting one of its more specific subclasses.AgentInfluence provides additional 
-     *  descriptions of an Agent's binary influence upon any other kind of resource. 
-     *  Instances of AgentInfluence use the prov:agent property to cite the influencing 
-     *  Agent.</p>
-     */
-    public static final OntClass AgentInfluence = M_MODEL.createClass( "http://www.w3.org/ns/prov#AgentInfluence" );
+    public static final OntClass AgentInfluence = M_MODEL.createClass(NS + "AgentInfluence");
     
-    /** <p>An instance of prov:Association provides additional descriptions about the 
-     *  binary prov:wasAssociatedWith relation from an prov:Activity to some prov:Agent 
-     *  that had some responsiblity for it. For example, :baking prov:wasAssociatedWith 
-     *  :baker; prov:qualifiedAssociation [ a prov:Association; prov:agent :baker; 
-     *  :foo :bar ].</p>
-     */
-    public static final OntClass Association = M_MODEL.createClass( "http://www.w3.org/ns/prov#Association" );
+    public static final OntClass Association = M_MODEL.createClass(NS + "Association");
     
-    /** <p>An instance of prov:Attribution provides additional descriptions about the 
-     *  binary prov:wasAttributedTo relation from an prov:Entity to some prov:Agent 
-     *  that had some responsible for it. For example, :cake prov:wasAttributedTo 
-     *  :baker; prov:qualifiedAttribution [ a prov:Attribution; prov:entity :baker; 
-     *  :foo :bar ].</p>
-     */
-    public static final OntClass Attribution = M_MODEL.createClass( "http://www.w3.org/ns/prov#Attribution" );
+    public static final OntClass Attribution = M_MODEL.createClass(NS + "Attribution");
     
-    /** <p>Note that there are kinds of bundles (e.g. handwritten letters, audio recordings, 
-     *  etc.) that are not expressed in PROV-O, but can be still be described by PROV-O.</p>
-     */
-    public static final OntClass Bundle = M_MODEL.createClass( "http://www.w3.org/ns/prov#Bundle" );
+    public static final OntClass Bundle = M_MODEL.createClass(NS + "Bundle");
     
-    public static final OntClass Collection = M_MODEL.createClass( "http://www.w3.org/ns/prov#Collection" );
+    public static final OntClass Collection = M_MODEL.createClass(NS + "Collection");
     
-    /** <p>An instance of prov:Communication provides additional descriptions about the 
-     *  binary prov:wasInformedBy relation from an informed prov:Activity to the prov:Activity 
-     *  that informed it. For example, :you_jumping_off_bridge prov:wasInformedBy 
-     *  :everyone_else_jumping_off_bridge; prov:qualifiedCommunication [ a prov:Communication; 
-     *  prov:activity :everyone_else_jumping_off_bridge; :foo :bar ].</p>
-     */
-    public static final OntClass Communication = M_MODEL.createClass( "http://www.w3.org/ns/prov#Communication" );
+    public static final OntClass Communication = M_MODEL.createClass(NS + "Communication");
     
-    /** <p>An instance of prov:Delegation provides additional descriptions about the 
-     *  binary prov:actedOnBehalfOf relation from a performing prov:Agent to some 
-     *  prov:Agent for whom it was performed. For example, :mixing prov:wasAssociatedWith 
-     *  :toddler . :toddler prov:actedOnBehalfOf :mother; prov:qualifiedDelegation 
-     *  [ a prov:Delegation; prov:entity :mother; :foo :bar ].</p>
-     */
-    public static final OntClass Delegation = M_MODEL.createClass( "http://www.w3.org/ns/prov#Delegation" );
+    public static final OntClass Delegation = M_MODEL.createClass(NS + "Delegation");
     
-    /** <p>An instance of prov:Derivation provides additional descriptions about the 
-     *  binary prov:wasDerivedFrom relation from some derived prov:Entity to another 
-     *  prov:Entity from which it was derived. For example, :chewed_bubble_gum prov:wasDerivedFrom 
-     *  :unwrapped_bubble_gum; prov:qualifiedDerivation [ a prov:Derivation; prov:entity 
-     *  :unwrapped_bubble_gum; :foo :bar ].The more specific forms of prov:Derivation 
-     *  (i.e., prov:Revision, prov:Quotation, prov:PrimarySource) should be asserted 
-     *  if they apply.</p>
-     */
-    public static final OntClass Derivation = M_MODEL.createClass( "http://www.w3.org/ns/prov#Derivation" );
+    public static final OntClass Derivation = M_MODEL.createClass(NS + "Derivation");
     
-    public static final OntClass EmptyCollection = M_MODEL.createClass( "http://www.w3.org/ns/prov#EmptyCollection" );
+    public static final OntClass EmptyCollection = M_MODEL.createClass(NS + "EmptyCollection");
     
-    /** <p>An instance of prov:End provides additional descriptions about the binary 
-     *  prov:wasEndedBy relation from some ended prov:Activity to an prov:Entity that 
-     *  ended it. For example, :ball_game prov:wasEndedBy :buzzer; prov:qualifiedEnd 
-     *  [ a prov:End; prov:entity :buzzer; :foo :bar; prov:atTime '2012-03-09T08:05:08-05:00'^^xsd:dateTime 
-     *  ].</p>
-     */
-    public static final OntClass End = M_MODEL.createClass( "http://www.w3.org/ns/prov#End" );
+    public static final OntClass End = M_MODEL.createClass(NS + "End");
     
-    public static final OntClass Entity = M_MODEL.createClass( "http://www.w3.org/ns/prov#Entity" );
+    public static final OntClass Entity = M_MODEL.createClass(NS + "Entity");
     
-    /** <p>It is not recommended that the type EntityInfluence be asserted without also 
-     *  asserting one of its more specific subclasses.EntityInfluence provides additional 
-     *  descriptions of an Entity's binary influence upon any other kind of resource. 
-     *  Instances of EntityInfluence use the prov:entity property to cite the influencing 
-     *  Entity.</p>
-     */
-    public static final OntClass EntityInfluence = M_MODEL.createClass( "http://www.w3.org/ns/prov#EntityInfluence" );
+    public static final OntClass EntityInfluence = M_MODEL.createClass(NS + "EntityInfluence");
     
-    /** <p>An instance of prov:Generation provides additional descriptions about the 
-     *  binary prov:wasGeneratedBy relation from a generated prov:Entity to the prov:Activity 
-     *  that generated it. For example, :cake prov:wasGeneratedBy :baking; prov:qualifiedGeneration 
-     *  [ a prov:Generation; prov:activity :baking; :foo :bar ].</p>
-     */
-    public static final OntClass Generation = M_MODEL.createClass( "http://www.w3.org/ns/prov#Generation" );
+    public static final OntClass Generation = M_MODEL.createClass(NS + "Generation");
     
-    /** <p>Because prov:Influence is a broad relation, its most specific subclasses (e.g. 
-     *  prov:Communication, prov:Delegation, prov:End, prov:Revision, etc.) should 
-     *  be used when applicable.An instance of prov:Influence provides additional 
-     *  descriptions about the binary prov:wasInfluencedBy relation from some influenced 
-     *  Activity, Entity, or Agent to the influencing Activity, Entity, or Agent. 
-     *  For example, :stomach_ache prov:wasInfluencedBy :spoon; prov:qualifiedInfluence 
-     *  [ a prov:Influence; prov:entity :spoon; :foo :bar ] . Because prov:Influence 
-     *  is a broad relation, the more specific relations (Communication, Delegation, 
-     *  End, etc.) should be used when applicable.</p>
-     */
-    public static final OntClass Influence = M_MODEL.createClass( "http://www.w3.org/ns/prov#Influence" );
+    public static final OntClass Influence = M_MODEL.createClass(NS + "Influence");
     
-    /** <p>An instantaneous event, or event for short, happens in the world and marks 
-     *  a change in the world, in its activities and in its entities. The term 'event' 
-     *  is commonly used in process algebra with a similar meaning. Events represent 
-     *  communications or interactions; they are assumed to be atomic and instantaneous.</p>
-     */
-    public static final OntClass InstantaneousEvent = M_MODEL.createClass( "http://www.w3.org/ns/prov#InstantaneousEvent" );
+    public static final OntClass InstantaneousEvent = M_MODEL.createClass(NS + "InstantaneousEvent");
     
-    /** <p>An instance of prov:Invalidation provides additional descriptions about the 
-     *  binary prov:wasInvalidatedBy relation from an invalidated prov:Entity to the 
-     *  prov:Activity that invalidated it. For example, :uncracked_egg prov:wasInvalidatedBy 
-     *  :baking; prov:qualifiedInvalidation [ a prov:Invalidation; prov:activity :baking; 
-     *  :foo :bar ].</p>
-     */
-    public static final OntClass Invalidation = M_MODEL.createClass( "http://www.w3.org/ns/prov#Invalidation" );
+    public static final OntClass Invalidation = M_MODEL.createClass(NS + "Invalidation");
     
-    public static final OntClass Location = M_MODEL.createClass( "http://www.w3.org/ns/prov#Location" );
+    public static final OntClass Location = M_MODEL.createClass(NS + "Location");
     
-    public static final OntClass Organization = M_MODEL.createClass( "http://www.w3.org/ns/prov#Organization" );
+    public static final OntClass Organization = M_MODEL.createClass(NS + "Organization");
     
-    public static final OntClass Person = M_MODEL.createClass( "http://www.w3.org/ns/prov#Person" );
+    public static final OntClass Person = M_MODEL.createClass(NS + "Person");
     
-    /** <p>There exist no prescriptive requirement on the nature of plans, their representation, 
-     *  the actions or steps they consist of, or their intended goals. Since plans 
-     *  may evolve over time, it may become necessary to track their provenance, so 
-     *  plans themselves are entities. Representing the plan explicitly in the provenance 
-     *  can be useful for various tasks: for example, to validate the execution as 
-     *  represented in the provenance record, to manage expectation failures, or to 
-     *  provide explanations.</p>
-     */
-    public static final OntClass Plan = M_MODEL.createClass( "http://www.w3.org/ns/prov#Plan" );
+    public static final OntClass Plan = M_MODEL.createClass(NS + "Plan");
     
-    /** <p>An instance of prov:PrimarySource provides additional descriptions about the 
-     *  binary prov:hadPrimarySource relation from some secondary prov:Entity to an 
-     *  earlier, primary prov:Entity. For example, :blog prov:hadPrimarySource :newsArticle; 
-     *  prov:qualifiedPrimarySource [ a prov:PrimarySource; prov:entity :newsArticle; 
-     *  :foo :bar ] .</p>
-     */
-    public static final OntClass PrimarySource = M_MODEL.createClass( "http://www.w3.org/ns/prov#PrimarySource" );
+    public static final OntClass PrimarySource = M_MODEL.createClass(NS + "PrimarySource");
     
-    /** <p>An instance of prov:Quotation provides additional descriptions about the binary 
-     *  prov:wasQuotedFrom relation from some taken prov:Entity from an earlier, larger 
-     *  prov:Entity. For example, :here_is_looking_at_you_kid prov:wasQuotedFrom :casablanca_script; 
-     *  prov:qualifiedQuotation [ a prov:Quotation; prov:entity :casablanca_script; 
-     *  :foo :bar ].</p>
-     */
-    public static final OntClass Quotation = M_MODEL.createClass( "http://www.w3.org/ns/prov#Quotation" );
+    public static final OntClass Quotation = M_MODEL.createClass(NS + "Quotation");
     
-    /** <p>An instance of prov:Revision provides additional descriptions about the binary 
-     *  prov:wasRevisionOf relation from some newer prov:Entity to an earlier prov:Entity. 
-     *  For example, :draft_2 prov:wasRevisionOf :draft_1; prov:qualifiedRevision 
-     *  [ a prov:Revision; prov:entity :draft_1; :foo :bar ].</p>
-     */
-    public static final OntClass Revision = M_MODEL.createClass( "http://www.w3.org/ns/prov#Revision" );
+    public static final OntClass Revision = M_MODEL.createClass(NS + "Revision");
     
-    public static final OntClass Role = M_MODEL.createClass( "http://www.w3.org/ns/prov#Role" );
+    public static final OntClass Role = M_MODEL.createClass(NS + "Role");
     
-    public static final OntClass SoftwareAgent = M_MODEL.createClass( "http://www.w3.org/ns/prov#SoftwareAgent" );
+    public static final OntClass SoftwareAgent = M_MODEL.createClass(NS + "SoftwareAgent");
     
-    /** <p>An instance of prov:Start provides additional descriptions about the binary 
-     *  prov:wasStartedBy relation from some started prov:Activity to an prov:Entity 
-     *  that started it. For example, :foot_race prov:wasStartedBy :bang; prov:qualifiedStart 
-     *  [ a prov:Start; prov:entity :bang; :foo :bar; prov:atTime '2012-03-09T08:05:08-05:00'^^xsd:dateTime 
-     *  ] .</p>
-     */
-    public static final OntClass Start = M_MODEL.createClass( "http://www.w3.org/ns/prov#Start" );
+    public static final OntClass Start = M_MODEL.createClass(NS + "Start");
     
-    /** <p>An instance of prov:Usage provides additional descriptions about the binary 
-     *  prov:used relation from some prov:Activity to an prov:Entity that it used. 
-     *  For example, :keynote prov:used :podium; prov:qualifiedUsage [ a prov:Usage; 
-     *  prov:entity :podium; :foo :bar ].</p>
-     */
-    public static final OntClass Usage = M_MODEL.createClass( "http://www.w3.org/ns/prov#Usage" );
+    public static final OntClass Usage = M_MODEL.createClass(NS + "Usage");
     
 }
diff --git a/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Roterms.java b/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Roterms.java
index bce8c22..4e23149 100644
--- a/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Roterms.java
+++ b/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Roterms.java
@@ -22,8 +22,9 @@
 import org.apache.jena.ontology.*;
  
 /**
- * Vocabulary definitions from file:/home/stain/src/incubator-taverna-language/taverna-scufl2-wfdesc/src/main/resources/org/purl/wf4ever/wfdesc/roterms.ttl 
- * @author Auto-generated by schemagen on 21 Nov 2018 10:58 
+ * Constants from the Research Object Terms (roterms) vocabulary
+ * 
+ * @see http://wf4ever.github.io/ro/2016-01-28/roterms/
  */
 public class Roterms {
     /** <p>The ontology model that holds the vocabulary terms</p> */
@@ -40,14 +41,31 @@
     /** <p>The namespace of the vocabulary as a resource</p> */
     public static final Resource NAMESPACE = M_MODEL.createResource( NS );
     
-    /** <p>The ontology's owl:versionInfo as a string</p> */
-    public static final String VERSION_INFO = "0.1.0";
     
-    /** <p>The resource requires the given software to function. This property has no 
-     *  particular requirements on how to specify the software, it might be a general 
-     *  requirement (Linux), or a particular software installation (python-minimal 
-     *  2.6.5-0ubuntu1).</p>
-     */
-    public static final ObjectProperty requiresSoftware = M_MODEL.createObjectProperty( "http://purl.org/wf4ever/roterms#requiresSoftware" );
+    public static final OntClass Conclusion = M_MODEL.createClass(NS + "Conclusion");
+    public static final OntClass ExampleRun = M_MODEL.createClass(NS + "ExampleRun");
+    public static final OntClass Hypothesis = M_MODEL.createClass(NS + "Hypothesis");
+    public static final OntClass OptionalInput = M_MODEL.createClass(NS + "OptionalInput");
+    public static final OntClass ProspectiveRun = M_MODEL.createClass(NS + "ProspectiveRun");
+    public static final OntClass ResearchQuestion = M_MODEL.createClass(NS + "ResearchQuestion");
+    public static final OntClass Result = M_MODEL.createClass(NS + "Result");
+    public static final OntClass ResultGenerationRun = M_MODEL.createClass(NS + "ResultGenerationRun");
+    public static final OntClass Sketch = M_MODEL.createClass(NS + "Sketch");
+    public static final OntClass WorkflowValue = M_MODEL.createClass(NS + "WorkflowValue");
     
+    public static final ObjectProperty defaultValue = M_MODEL.createObjectProperty(NS + "defaultValue");
+    public static final ObjectProperty exampleValue = M_MODEL.createObjectProperty(NS + "exampleValue");
+    public static final ObjectProperty ofSemanticType = M_MODEL.createObjectProperty(NS + "ofSemanticType");
+    public static final ObjectProperty ofStructuralType = M_MODEL.createObjectProperty(NS + "ofStructuralType");
+    public static final ObjectProperty performsTask = M_MODEL.createObjectProperty(NS + "performsTask");
+    public static final ObjectProperty previousWorkflow = M_MODEL.createObjectProperty(NS + "previousWorkflow");
+    public static final ObjectProperty requiresDataset = M_MODEL.createObjectProperty(NS + "requiresDataset");
+    public static final ObjectProperty requiresHardware = M_MODEL.createObjectProperty(NS + "requiresHardware");
+    public static final ObjectProperty requiresSoftware = M_MODEL.createObjectProperty(NS + "requiresSoftware");
+    public static final ObjectProperty subsequentWorkflow = M_MODEL.createObjectProperty(NS + "subsequentWorkflow");
+    public static final ObjectProperty technicalContact = M_MODEL.createObjectProperty(NS + "technicalContact");
+
+    public static final DatatypeProperty sampleSize = M_MODEL.createDatatypeProperty(NS + "sampleSize");
+        
 }
+
diff --git a/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Wf4ever.java b/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Wf4ever.java
index c1356a7..4316579 100644
--- a/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Wf4ever.java
+++ b/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Wf4ever.java
@@ -22,8 +22,9 @@
 import org.apache.jena.ontology.*;
  
 /**
- * Vocabulary definitions from file:/home/stain/src/incubator-taverna-language/taverna-scufl2-wfdesc/src/main/resources/org/purl/wf4ever/wfdesc/wf4ever.ttl 
- * @author Auto-generated by schemagen on 21 Nov 2018 10:58 
+ * Constants for the Research Object wf4ever vocabulary
+ * 
+ * @see https://w3id.org/ro/2016-01-28/wf4ever
  */
 public class Wf4ever {
     /** <p>The ontology model that holds the vocabulary terms</p> */
@@ -40,58 +41,50 @@
     /** <p>The namespace of the vocabulary as a resource</p> */
     public static final Resource NAMESPACE = M_MODEL.createResource( NS );
     
-    public static final DatatypeProperty command = M_MODEL.createDatatypeProperty( "http://purl.org/wf4ever/wf4ever#command" );
+    public static final DatatypeProperty command = M_MODEL.createDatatypeProperty(NS + "command");
+
+    public static final DatatypeProperty filePath = M_MODEL.createDatatypeProperty(NS + "filePath");
+
+    public static final DatatypeProperty parameterFilePath = M_MODEL.createDatatypeProperty(NS + "parameterFilePath");
     
-    /** <p>The root of the service. This is not necessarily the 'base' of the service, 
-     *  but should more predictably be accessible for HTTP HEAD. Example: if the REST 
-     *  service template is &lt;http://kronos.ifs.tuwien.ac.at:8080/fex/featureExtractionREST?voucher={voucher}&amp;music={mp3Base64}&gt; 
-     *  then the wf4ever:rootURI is &lt;http://kronos.ifs.tuwien.ac.at:8080/&gt;.</p>
-     */
-    public static final DatatypeProperty rootURI = M_MODEL.createDatatypeProperty( "http://purl.org/wf4ever/wf4ever#rootURI" );
+    public static final DatatypeProperty rootURI = M_MODEL.createDatatypeProperty(NS + "rootURI");
     
-    public static final DatatypeProperty script = M_MODEL.createDatatypeProperty( "http://purl.org/wf4ever/wf4ever#script" );
+    public static final DatatypeProperty script = M_MODEL.createDatatypeProperty(NS + "script");
     
-    public static final DatatypeProperty serviceURI = M_MODEL.createDatatypeProperty( "http://purl.org/wf4ever/wf4ever#serviceURI" );
+    public static final DatatypeProperty serviceURI = M_MODEL.createDatatypeProperty(NS + "serviceURI");
     
-    public static final DatatypeProperty wsdlOperationName = M_MODEL.createDatatypeProperty( "http://purl.org/wf4ever/wf4ever#wsdlOperationName" );
+    public static final DatatypeProperty wsdlOperationName = M_MODEL.createDatatypeProperty(NS + "wsdlOperationName");
     
-    public static final DatatypeProperty wsdlPortName = M_MODEL.createDatatypeProperty( "http://purl.org/wf4ever/wf4ever#wsdlPortName" );
+    public static final DatatypeProperty wsdlPortName = M_MODEL.createDatatypeProperty(NS + "wsdlPortName");
     
-    public static final DatatypeProperty wsdlURI = M_MODEL.createDatatypeProperty( "http://purl.org/wf4ever/wf4ever#wsdlURI" );
+    public static final DatatypeProperty wsdlURI = M_MODEL.createDatatypeProperty(NS + "wsdlURI");
     
-    public static final OntClass BeanshellScript = M_MODEL.createClass( "http://purl.org/wf4ever/wf4ever#BeanshellScript" );
+    public static final OntClass BeanshellScript = M_MODEL.createClass(NS + "BeanshellScript");
     
-    public static final OntClass CommandLineTool = M_MODEL.createClass( "http://purl.org/wf4ever/wf4ever#CommandLineTool" );
+    public static final OntClass CommandLineTool = M_MODEL.createClass(NS + "CommandLineTool");
     
-    public static final OntClass Dataset = M_MODEL.createClass( "http://purl.org/wf4ever/wf4ever#Dataset" );
+    public static final OntClass Dataset = M_MODEL.createClass(NS + "Dataset");
     
-    public static final OntClass Document = M_MODEL.createClass( "http://purl.org/wf4ever/wf4ever#Document" );
+    public static final OntClass Document = M_MODEL.createClass(NS + "Document");
     
-    public static final OntClass File = M_MODEL.createClass( "http://purl.org/wf4ever/wf4ever#File" );
+    public static final OntClass File = M_MODEL.createClass(NS + "File");
+
+    public static final OntClass FileParameter = M_MODEL.createClass(NS + "FileParameter");
     
-    public static final OntClass Image = M_MODEL.createClass( "http://purl.org/wf4ever/wf4ever#Image" );
+    public static final OntClass Image = M_MODEL.createClass(NS + "Image");
+
+    public static final OntClass PythonScript = M_MODEL.createClass(NS + "PythonScript");
+
+    public static final OntClass RScript = M_MODEL.createClass(NS + "RScript");
+
+    public static final OntClass RESTService = M_MODEL.createClass(NS + "RESTService");
+         
+    public static final OntClass Script = M_MODEL.createClass(NS + "Script");
+
+    public static final OntClass SOAPService = M_MODEL.createClass(NS + "SOAPService");
+
+    public static final OntClass WebService = M_MODEL.createClass(NS + "WebService");
     
-    /** <p>A RESTful web service</p> */
-    public static final OntClass RESTService = M_MODEL.createClass( "http://purl.org/wf4ever/wf4ever#RESTService" );
-    
-    public static final OntClass RScript = M_MODEL.createClass( "http://purl.org/wf4ever/wf4ever#RScript" );
-    
-    /** <p>A SOAP service is typically described in a WSDL 1.1 or WSDL 2.0 TODO: Do we 
-     *  need to distinguish between WSDL and SOAP? WSDL 1.1 and WSDL 2.0? RPC/Encoded 
-     *  vs.Wrapped Document/Literal?</p>
-     */
-    public static final OntClass SOAPService = M_MODEL.createClass( "http://purl.org/wf4ever/wf4ever#SOAPService" );
-    
-    public static final OntClass Script = M_MODEL.createClass( "http://purl.org/wf4ever/wf4ever#Script" );
-    
-    /** <p>WebServiceProcess is a wfdesc:Process description, the enactment of which 
-     *  gives rise to a web service call.</p>
-     */
-    public static final OntClass WebService = M_MODEL.createClass( "http://purl.org/wf4ever/wf4ever#WebService" );
-    
-    /** <p>A workflow research object is a research object that contains at least one 
-     *  workflow description.</p>
-     */
-    public static final OntClass WorkflowResearchObject = M_MODEL.createClass( "http://purl.org/wf4ever/wf4ever#WorkflowResearchObject" );
+    public static final OntClass WorkflowResearchObject = M_MODEL.createClass(NS + "WorkflowResearchObject");
     
 }
diff --git a/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Wfdesc.java b/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Wfdesc.java
index ef1209a..cdcc8d5 100644
--- a/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Wfdesc.java
+++ b/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Wfdesc.java
@@ -22,8 +22,9 @@
 import org.apache.jena.ontology.*;
  
 /**
- * Vocabulary definitions from file:/home/stain/src/incubator-taverna-language/taverna-scufl2-wfdesc/src/main/resources/org/purl/wf4ever/wfdesc/wfdesc.ttl 
- * @author Auto-generated by schemagen on 21 Nov 2018 10:58 
+ * Constants for the Research Object wfdesc vocabulary
+ * 
+ * @see https://w3id.org/ro/2016-01-28/wfdesc
  */
 public class Wfdesc {
     /** <p>The ontology model that holds the vocabulary terms</p> */
@@ -40,145 +41,48 @@
     /** <p>The namespace of the vocabulary as a resource</p> */
     public static final Resource NAMESPACE = M_MODEL.createResource( NS );
     
-    /** <p>This property associates a wfdesc:Parameter with an wfdesc:Artifact which 
-     *  can describe the artifact which would be used/generated on execution of the 
-     *  workflow.</p>
-     */
-    public static final ObjectProperty hasArtifact = M_MODEL.createObjectProperty( "http://purl.org/wf4ever/wfdesc#hasArtifact" );
+    public static final ObjectProperty hasArtifact = M_MODEL.createObjectProperty(NS + "hasArtifact");
+
+    public static final ObjectProperty hasConfiguration = M_MODEL.createObjectProperty(NS + "hasConfiguration");    
     
-    /** <p>This property is used to specify the wfdesc:DataLink instances of a given 
-     *  wfdesc:Workflow.</p>
-     */
-    public static final ObjectProperty hasDataLink = M_MODEL.createObjectProperty( "http://purl.org/wf4ever/wfdesc#hasDataLink" );
+    public static final ObjectProperty hasDataLink = M_MODEL.createObjectProperty(NS + "hasDataLink");
+ 
+    public static final ObjectProperty hasImplementation = M_MODEL.createObjectProperty(NS + "hasImplementation");    
     
-    /** <p>This object property is used to specify the wfdesc:Input parameter of a given 
-     *  wfdesc:Process.</p>
-     */
-    public static final ObjectProperty hasInput = M_MODEL.createObjectProperty( "http://purl.org/wf4ever/wfdesc#hasInput" );
+    public static final ObjectProperty hasInput = M_MODEL.createObjectProperty(NS + "hasInput");
     
-    /** <p>This object property is used to specify the wfdesc:Output parameter of a given 
-     *  wfdesc:Process.</p>
-     */
-    public static final ObjectProperty hasOutput = M_MODEL.createObjectProperty( "http://purl.org/wf4ever/wfdesc#hasOutput" );
+    public static final ObjectProperty hasOutput = M_MODEL.createObjectProperty(NS + "hasOutput");
     
-    /** <p>This property is used to specify the wfdesc:Input parameter that acts as a 
-     *  sink from a given wfdesc:DataLink, consuming data from the link.</p>
-     */
-    public static final ObjectProperty hasSink = M_MODEL.createObjectProperty( "http://purl.org/wf4ever/wfdesc#hasSink" );
+    public static final ObjectProperty hasSink = M_MODEL.createObjectProperty(NS + "hasSink");
     
-    /** <p>This property is used to specify the wfdesc:Output parameter that acts as 
-     *  a source to a given wfdesc:DataLink, providing data into the link.</p>
-     */
-    public static final ObjectProperty hasSource = M_MODEL.createObjectProperty( "http://purl.org/wf4ever/wfdesc#hasSource" );
+    public static final ObjectProperty hasSource = M_MODEL.createObjectProperty(NS + "hasSource");
     
-    /** <p>This object property is used to specify that the given workflow contains the 
-     *  given process as part of its definition. Although not a requirement, such 
-     *  sub processes should have wfdesc:DataLink within the containing workflow connecting 
-     *  their parameters with parameters of the containing workflow, or with parameters 
-     *  other contained wfdesc:Process instances. A specialialisation of sub process 
-     *  is wfdesc:hasSubWorkflow where the sub process is a nested wfdesc:Workflow.</p>
-     */
-    public static final ObjectProperty hasSubProcess = M_MODEL.createObjectProperty( "http://purl.org/wf4ever/wfdesc#hasSubProcess" );
+    public static final ObjectProperty hasSubProcess = M_MODEL.createObjectProperty(NS + "hasSubProcess");
     
-    /** <p>This object property is used to associate a wfdesc:Workflow description to 
-     *  another wfdesc:Workflow, specifying that the first workflow has the given 
-     *  sub-workflow as a contained process. This is a specialisation of wfdesc:hasSubProcess.</p>
-     */
-    public static final ObjectProperty hasSubWorkflow = M_MODEL.createObjectProperty( "http://purl.org/wf4ever/wfdesc#hasSubWorkflow" );
+    public static final ObjectProperty hasSubWorkflow = M_MODEL.createObjectProperty(NS + "hasSubWorkflow");
+
+    public static final ObjectProperty hasWorkflowDefinition = M_MODEL.createObjectProperty(NS + "hasWorkflowDefinition");    
     
-    /** <p>wfdesc:Artifact is used to provide information about a class of artifacts. 
-     *  For example, it can be used to specify the datatype of a dataset or the structure 
-     *  of a document. An wfdesc:Artifact is associated with a wfdesc:Parameter using 
-     *  wfdesc:hasArtifact. The distinction between a parameter and artifact is that 
-     *  the parameter can be customized to describe the particular role the artifact 
-     *  plays with regards to the process (and can be linked using wfdesc:DataLink) 
-     *  - while the wfdesc:Artifact can describe the syntactic and semantic datatype.</p>
-     */
-    public static final OntClass Artifact = M_MODEL.createClass( "http://purl.org/wf4ever/wfdesc#Artifact" );
+    public static final OntClass Artifact = M_MODEL.createClass(NS + "Artifact");
+
+    public static final OntClass Configuration = M_MODEL.createClass(NS + "Configuration");
+
+    public static final OntClass DataLink = M_MODEL.createClass(NS + "DataLink");
     
-    /** <p>wfdesc:DataLink is used to represent data dependencies between wfdesc:Process 
-     *  descriptions. It means that the artifact generated at an wfdesc:Output (identified 
-     *  using wfdesc:hasSource) will be used by a wfdescInput (identified using wfdesc:hasSink). 
-     *  The wfdesc:Processes that owns the wfdesc:Parameter instances which are the 
-     *  source and sink of a wfdesc:DataLink must be wfdesc:hasSubProcess of a the 
-     *  same wfdesc:Workflow which wfdesc:hasDataLink the data link, or be be parameters 
-     *  of that same workflow. Thus links can only be made within a wfdesc:Workflow 
-     *  - although ports owned by the workflow itself appear both inside and outside 
-     *  the workflow (in opposite roles).</p>
-     */
-    public static final OntClass DataLink = M_MODEL.createClass( "http://purl.org/wf4ever/wfdesc#DataLink" );
+    public static final OntClass Input = M_MODEL.createClass(NS + "Input");
     
-    public static final OntClass Description = M_MODEL.createClass( "http://purl.org/wf4ever/wfdesc#Description" );
+    public static final OntClass Output = M_MODEL.createClass(NS + "Output");
     
-    /** <p>wfdesc:Input represents an input parameter to a wfdesc:Process. This can be 
-     *  compared to a function parameter, command line argument, files read, or parameter 
-     *  set by a user interface. It is out of scope of wfdesc to define the nature 
-     *  or classification of the parameter, such as giving it a name, position or 
-     *  data type. This can be done with subclasses and/or subproperties.</p>
-     */
-    public static final OntClass Input = M_MODEL.createClass( "http://purl.org/wf4ever/wfdesc#Input" );
+    public static final OntClass Parameter = M_MODEL.createClass(NS + "Parameter");
     
-    /** <p>wfdesc:Output represents an output parameter from a wfdesc:Process. This can 
-     *  be compared to functional return values, stdout/stdin, files written, or results 
-     *  shown in a user interface. It is out of scope of wfdesc to define the nature 
-     *  or classification of the parameter, such as giving it a name, position or 
-     *  data type. This can be done with subclasses and/or subproperties.</p>
-     */
-    public static final OntClass Output = M_MODEL.createClass( "http://purl.org/wf4ever/wfdesc#Output" );
+    public static final OntClass Process = M_MODEL.createClass(NS + "Process");
+
+    public static final OntClass ProcessImplementation = M_MODEL.createClass(NS + "ProcessImplementation");
     
-    /** <p>This class represent a parameter of a wfdesc:Process. A wfdesc:Parameter must 
-     *  be a wfdesc:Input, a wfdesc:Output, or both. A parameter is both an wfdesc:Input 
-     *  and wfdesc:Output when it is used on both sides of a subworkflow - see wfdesc:Workflow 
-     *  and wfdesc:DataLink for details.</p>
-     */
-    public static final OntClass Parameter = M_MODEL.createClass( "http://purl.org/wf4ever/wfdesc#Parameter" );
+    public static final OntClass Workflow = M_MODEL.createClass(NS + "Workflow");
+
+    public static final OntClass WorkflowDefinition = M_MODEL.createClass(NS + "WorkflowDefinition");
     
-    /** <p>A wfdesc:Process is used to describe a class of actions that when enacted 
-     *  give rise to processes. A process can have 0 or more wfdesc:Parameter instances 
-     *  associated using wfdesc:hasInput and wfdesc:hasOutput, signifying what kind 
-     *  of parameters the process will require and return. It is out of scope for 
-     *  wfdesc to classify or specify the nature of the process, this should be done 
-     *  by subclassing and additional subproperties, for instance ex:perlScript or 
-     *  ex:restServiceURI</p>
-     */
-    public static final OntClass Process = M_MODEL.createClass( "http://purl.org/wf4ever/wfdesc#Process" );
-    
-    /** <p>A wfdesc:Workflow is a directed graph in which the nodes are wfdesc:Process 
-     *  instances and the edges (wfdesc:DataLink instances) represent data dependencies 
-     *  between the constituent wfdesc:Process descriptions. A wfdesc:Workflow defines 
-     *  associated wfdesc:Process using wfdesc:hasSubProcess. A specialisation of 
-     *  this property is wfdesc:hasSubWorkflow, signifying that the process is a wfdesc:Workflow 
-     *  itself, which is further described in a similar fashion. As a subclass of 
-     *  wfdesc:Process a wfdesc:Workflow can also define wfdesc:hasInput/wfdesc:hasOutput 
-     *  parameters - these would be inputs taken at workflow execution time, and final 
-     *  outputs of the workflow. (Note: Not all dataflow systems have this concept 
-     *  of workflow parameters) wfdesc:Parameter descriptions are linked using wfdesc:DataLink 
-     *  descriptions associated with the wfdesc:Workflow using wfdesc:hasDataLink. 
-     *  A wfdesc:Parameter defined with wfdesc:hasInput on a wfdesc:Workflow is considered 
-     *  an wfdesc:Input "outside" the workflow (ie. if it is a subworkflow), but an 
-     *  wfdesc:Output "inside" the workflow (where it can be connected to a wfdesc:Input 
-     *  of a wfdesc:Process). Thus such parameters can be linked "through" the workflow 
-     *  without having a "mirrored" port inside. Example: ## @prefix wfdesc: &lt;http://purl.org/wf4ever/wfdesc#&gt; 
-     *  . :outerWorkflow a wfdesc:Workflow ; wfdesc:hasSubWorkflow :innerWorkflow 
-     *  ; wfdesc:hasSubProcess :procA, :procC . :procA a wfdesc:Process ; wfdesc:hasOutput 
-     *  :param1 . :procC a wfdesc:Process ; wfdesc:hasInput :param2 ; wfdesc:hasOutput 
-     *  :param3 . :innerWorkflow a wfdesc:Workflow ; wfdesc:hasInput :param4 ; wfdesc:hasOutput 
-     *  :param5 ; wfdesc:hasProcess :procB . :procB a wfdesc:Process ; wfdesc:hasInput 
-     *  :param6 ; wfdesc:hasOutput :param7 . :innerWorkflow wfdesc:hasDataLink [ wfdesc:hasSource 
-     *  :param4; wfdesc:hasSink :param6 ], [ wfdesc:hasSource :param7; wfdesc:hasSink 
-     *  :param5 ] . :outerWorkflow wfdesc:hasDataLink [ wfdesc:hasSource :param1; 
-     *  wfdesc:hasSink :param4 ], [ wfdesc:hasSource :param5; wfdesc:hasSink :param2 
-     *  ] . ## In this example :param1 is the output of :procA. :param1 is the source 
-     *  in a datalink that goes to the input :param4 of the :innerWorkflow. :param4 
-     *  is however also the source of an inner datalink, going to input :param6 of 
-     *  the nested :procB. From this :param4 is both an wfdesc:Input and wfdesc:Output 
-     *  (which is why these two classes are not disjoint)</p>
-     */
-    public static final OntClass Workflow = M_MODEL.createClass( "http://purl.org/wf4ever/wfdesc#Workflow" );
-    
-    /** <p>A wfdesc:WorkflowInstance is a specialisation of a wfdesc:Workflow description 
-     *  which defines all data/parameters/settings that are required to form a wfprov:WorkflowRun.</p>
-     */
-    public static final OntClass WorkflowInstance = M_MODEL.createClass( "http://purl.org/wf4ever/wfdesc#WorkflowInstance" );
+    public static final OntClass WorkflowInstance = M_MODEL.createClass(NS + "WorkflowInstance");
     
 }
diff --git a/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Wfprov.java b/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Wfprov.java
index 66ddf7a..696fe86 100644
--- a/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Wfprov.java
+++ b/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ontologies/Wfprov.java
@@ -22,8 +22,9 @@
 import org.apache.jena.ontology.*;
  
 /**
- * Vocabulary definitions from file:/home/stain/src/incubator-taverna-language/taverna-scufl2-wfdesc/src/main/resources/org/purl/wf4ever/wfdesc/wfprov.ttl 
- * @author Auto-generated by schemagen on 21 Nov 2018 10:58 
+ * Constants for the Research Object wfprov vocabulary
+ * 
+ * @see https://w3id.org/ro/2016-01-28/wfprov
  */
 public class Wfprov {
     /** <p>The ontology model that holds the vocabulary terms</p> */
@@ -40,68 +41,31 @@
     /** <p>The namespace of the vocabulary as a resource</p> */
     public static final Resource NAMESPACE = M_MODEL.createResource( NS );
     
-    /** <p>This object property is used to associate a wfprov:Artifact to the wfdesc:Parameter 
-     *  description.</p>
-     */
-    public static final ObjectProperty describedByParameter = M_MODEL.createObjectProperty( "http://purl.org/wf4ever/wfprov#describedByParameter" );
+    public static final ObjectProperty describedByParameter = M_MODEL.createObjectProperty(NS + "describedByParameter");
     
-    /** <p>This object property associate a wfprov:Processrun to its wfdesc:Process description 
-     *  .</p>
-     */
-    public static final ObjectProperty describedByProcess = M_MODEL.createObjectProperty( "http://purl.org/wf4ever/wfprov#describedByProcess" );
+    public static final ObjectProperty describedByProcess = M_MODEL.createObjectProperty(NS + "describedByProcess");
     
-    /** <p>This property associates a wfprov:WorkflowRun to its corresponding wfdesc:Workflow 
-     *  description.</p>
-     */
-    public static final ObjectProperty describedByWorkflow = M_MODEL.createObjectProperty( "http://purl.org/wf4ever/wfprov#describedByWorkflow" );
+    public static final ObjectProperty describedByWorkflow = M_MODEL.createObjectProperty(NS + "describedByWorkflow");
     
-    /** <p>This property specifies that a wfprov:ProcessRun used an wfprov:Artifact as 
-     *  an input</p>
-     */
-    public static final ObjectProperty usedInput = M_MODEL.createObjectProperty( "http://purl.org/wf4ever/wfprov#usedInput" );
+    public static final ObjectProperty interactedWith = M_MODEL.createObjectProperty(NS + "interactedWith");
+        
+    public static final ObjectProperty usedInput = M_MODEL.createObjectProperty(NS + "usedInput");
     
-    /** <p>wfprov:wasEnactedBy associates a wfprov:ProcessRun with a wfprov:WorkflowEngine, 
-     *  specifying that the execution of the process was enacted by the engine.</p>
-     */
-    public static final ObjectProperty wasEnactedBy = M_MODEL.createObjectProperty( "http://purl.org/wf4ever/wfprov#wasEnactedBy" );
+    public static final ObjectProperty wasEnactedBy = M_MODEL.createObjectProperty(NS + "wasEnactedBy");
     
-    /** <p>This property specifies that a wfprov:Artifact was generated as an output 
-     *  from a wfprov:ProcessRun</p>
-     */
-    public static final ObjectProperty wasOutputFrom = M_MODEL.createObjectProperty( "http://purl.org/wf4ever/wfprov#wasOutputFrom" );
+    public static final ObjectProperty wasInitiatedBy = M_MODEL.createObjectProperty(NS + "wasInitiatedBy");    
     
-    /** <p>This property specifies that a wfprov:ProcessRun was executed as part of a 
-     *  wfprov:WorkflowRun. This typically corresponds to wfdesc:hasSubProcess in 
-     *  the workflow description.</p>
-     */
-    public static final ObjectProperty wasPartOfWorkflowRun = M_MODEL.createObjectProperty( "http://purl.org/wf4ever/wfprov#wasPartOfWorkflowRun" );
+    public static final ObjectProperty wasOutputFrom = M_MODEL.createObjectProperty(NS + "wasOutputFrom");
     
-    /** <p>An artifact is a data value or item which wfprov:wasOutputFrom of a wfprov:ProcessRun 
-     *  or that the process run used as input (wfprov:usedInput). Such an artifact 
-     *  might also be a ro:Resource if it has been aggregated in the ro:ResearchObject 
-     *  (typically if the artifact was used or generated by a wfprov:WorkflowRun) 
-     *  - but this might always not be the case for intermediate values from wfprov:ProcessRun.</p>
-     */
-    public static final OntClass Artifact = M_MODEL.createClass( "http://purl.org/wf4ever/wfprov#Artifact" );
+    public static final ObjectProperty wasPartOfWorkflowRun = M_MODEL.createObjectProperty(NS + "wasPartOfWorkflowRun");
     
-    /** <p>A process run is a particular execution of a wfdesc:Process description (wfprov:describedByProcess), 
-     *  which can wfprov:usedInput some wfprov:Artifact instances, and produce new 
-     *  artifacts (wfprov:wasOutputFrom). A wfprov:WorkflowRun is a specialisation 
-     *  of this class.</p>
-     */
-    public static final OntClass ProcessRun = M_MODEL.createClass( "http://purl.org/wf4ever/wfprov#ProcessRun" );
     
-    /** <p>A workflow engine is an foaf:Agent that is responsible for enacting a workflow 
-     *  definition (which could be described in a wfdesc:Workflow). The result of 
-     *  workflow enactment gives rise to a wfprov:WorkflowRun.</p>
-     */
-    public static final OntClass WorkflowEngine = M_MODEL.createClass( "http://purl.org/wf4ever/wfprov#WorkflowEngine" );
+    public static final OntClass Artifact = M_MODEL.createClass(NS + "Artifact");
     
-    /** <p>A workflow run is a wfprov:ProcessRun which have been enacted by a wfprov:WorkflowEngine, 
-     *  according to a workflow definition (which could be wfdesc:describedByWorkflow 
-     *  a wfdesc:Workflow). Such a process typically contains several subprocesses 
-     *  (wfprov:wasPartOfWorkflowRun) corresponding to wfdesc:Process descriptions</p>
-     */
-    public static final OntClass WorkflowRun = M_MODEL.createClass( "http://purl.org/wf4ever/wfprov#WorkflowRun" );
+    public static final OntClass ProcessRun = M_MODEL.createClass(NS + "ProcessRun");
+    
+    public static final OntClass WorkflowEngine = M_MODEL.createClass(NS + "WorkflowEngine");
+    
+    public static final OntClass WorkflowRun = M_MODEL.createClass(NS + "WorkflowRun");
     
 }
