-
Notifications
You must be signed in to change notification settings - Fork 0
Description
In #278, I replaced all the properties by the ones defined in PMDco. However, there is one significant change that has to be addressed for the recipe ontology. In my old implementation, the triples looked like this1:
flowchart LR
output_state_1 -- rdfs:subClassOf --> uri_1
process_1 -- has_part --> output_state_1 -- has_participant --> some_data_or_thing_2
process_2 -- has_part --> input_state_2 -- has_participant --> some_data_or_thing_2
input_state_2 -- rdfs:subClassOf --> uri_2
Again: This is T-box, i.e. rdfs:subClassOf is to be replaced by a in the a-box.
But @joergwa stated it has to be like this:
flowchart LR
process_1 -- has_part --> output_state_1 -- has_participant --> some_data_or_thing_2
process_2 -- has_part --> input_state_2 -- has_participant --> some_data_or_thing_2
some_data_or_thing_2 -- rdfs:subClassOf --> uri_1
some_data_or_thing_2 -- rdfs:subClassOf --> uri_2
Quite obviously uri_1 must be a subclass of uri_2. I have already stated this problem in #278, but so far I haven't found a really convincing solution for the validation method, because pretty obviously from the graph above, you cannot know which of the two URI's was defined for the input and which one for the output (or one was defined in the first place).
In the followup discussion with @joergwa, I was going more towards the direction of validating during the graph construction, but in the end I think I would like to stick to the following two points:
- Validation runs once the recipe ontology is fully constructed
- Nodes should be recoverable from the recipe ontology (not directly related to the problem I'm dealing with here, but creates an important condition)
Based on this, I thought about using owl restriction for this part as well, i.e.
flowchart LR
process_1 -- has_part --> output_state_1 -- has_participant --> some_data_or_thing_2
process_2 -- has_part --> input_state_2 -- has_participant --> some_data_or_thing_2
some_data_or_thing_2 -- rdfs:subClassOf --> uri_1
input_state_2 -- rdfs:subClassOf --> Bnode
Bnode -- rdfs:subClassOf --> restriction[owl:Restriction]
Bnode -- owl:onProperty --> has_participant
Bnode -- owl:someValuesFrom --> uri_2
I asked ChatGPT whether this makes sense. The answer: No. The reason is pretty simple: input_state_2 - has_participant - uri_2 makes sense only if input_state_2 is an instance. In other words, this triple basically means "there may be an instance of input_state_2 which may have an instance of uri_2 connected via has_participant". I can understand why. After all, the workflow recipe is also a bit like an instantiation itself as well. Anyway, ChatGPT told me that it's not invalid, even if it makes little sense, so I'm gonna stick to this expression, because this (probably) allows me to run validation, and fulfills the two conditions that I stated above.
Footnotes
-
I replaced
participates_inbyhas_participant, because the expression becomes easier for the OWL restriction ↩