vocabulary <http://flandersmake.be/cdf/vocabulary/pt#> as pt {
	
	extends <http://flandersmake.be/cdf/vocabulary/acyclic#> as acyclic
	extends <http://flandersmake.be/cdf/vocabulary/immutable#> as immutable
	extends <http://flandersmake.be/cdf/vocabulary/ftg#> as ftg
	extends <http://flandersmake.be/cdf/vocabulary/object_diagram#> as object_diagram

	extends <http://www.w3.org/2001/XMLSchema#> as xsd
	
	aspect Event :> immutable:Thing [
		restricts scalar property hasTimestamp to exactly 1
	]
	
	scalar property hasTimestamp [
		domain Event
		range xsd:dateTimeStamp
		functional
	]
	
	relation entity HappenedAfter :> acyclic:Acyclic [
		from Event
		to Event
		forward happenedAfter
		reverse happenedBefore
		asymmetric
		irreflexive
	]

	aspect Artifact :> immutable:Thing []
	
	// InternalArtifact: All model elements exist as descriptions in the ontology, are checked for consistency with their vocabulary, and can be part of SPARQL queries.
	concept InternalArtifact :> Artifact, object_diagram:Model []
	
	// ExternalArtifact: We only keep the model as an immutable file, that we don't interpret any further. The immutable::UUID property is a URI of the file.
	concept ExternalArtifact :> Artifact []
	
	concept StartEvent :> Event []
	concept EndEvent :> Event [
		restricts relation ended to exactly 1
	]
	
	// We use 'past tense' for all relations on events, because they are historical in nature.
	
	relation entity Started [
		from StartEvent
		to ftg:Transformation
		forward started
		reverse wasStartedBy
		asymmetric
		irreflexive
		functional
	]
	relation entity Ended [
		from EndEvent
		to StartEvent
		forward ended
		reverse wasEndedBy
		asymmetric
		irreflexive
		functional
	]

	relation entity Consumed [
		from StartEvent
		to Artifact
		forward consumed
		reverse wasConsumedBy
		asymmetric
		irreflexive
	]
	relation entity Produced [
		from EndEvent
		to Artifact
		forward produced
		reverse wasProducedBy
		asymmetric
		irreflexive
	]
}