Open ajnelson-nist opened 9 months ago
Wow, indeed! This is very interesting - ROBOT ownly wraps OWL API, so it will have to be raised there.. But just searching through the OWL API https://github.com/owlcs/owlapi repo shows no mention of owl:onProperties - and I have to be honest, despite working extensively with OWL over the last 10 years, I didnt even know of its existence.
@matthewhorridge @ignazio1977 maybe you have some insight?
Rings a bell, need to Google a bit.
So, the thing I had in mind was datatype n-arity - the OWL specs say that owl:onProperties is to be used to map restrictions with multiple properties, and those are defined as restrictions where the number of properties matches the n-arity of the datatype.
But, there's no defined datatype with n-arity more than 1 (to my knowledge - it's been a few years since last time I looked it up). Integers certainly are not.
The error reported is because of a parsing failure, not because of an actual recognised violation. I'm not sure if owl:onProperties would be accepted, but it won't work with integers, I believe. So, as is, I think the owlapi is failing, but that input shouldn't pass anyway. It's failing wrongly, so to speak.
Thank you @ignazio1977 , I'd only guessed at what datatype to use from syntactic form.
Would something like a latitude-longitude coordinate pair work?
Ah, perhaps it's not possible to demonstrate owl:onProperties
, if a datatype of arity ≥ 2 is needed? I'm a little fuzzy on "Data range" vs "datatype" in light of OWL 2 deprecating owl:DataRange
.
Implementations are not required to support the IRI
owl:onProperties
, but may support it in order to realize n-ary dataranges with arity ≥ 2 (see Sections 7 and 8.4 of the OWL 2 Structural Specification [OWL 2 Specification] for further information).
Source: https://www.w3.org/TR/2012/REC-owl2-rdf-based-semantics-20121211/#Vocabulary_Terms
Each data range is associated with a positive arity, which determines the size of the tuples in the data range. All datatypes have arity one. This specification currently does not define data ranges of arity more than one; however, by allowing for n-ary data ranges, the syntax of OWL 2 provides a "hook" allowing implementations to introduce extensions such as comparisons and arithmetic.
Source: https://www.w3.org/TR/2012/REC-owl2-syntax-20121211/#Data_Ranges
Emphasis added.
Actually, the rest of Section 7, "Data Ranges" looks less gloomy for this property than I thought. Please pardon my last comment.
I have been doing some testing of general OWL syntax, and came across a curiosity as I was enumerating usages of OWL "Sequences" from the document OWL 2 Web Ontology Language Mapping to RDF Graphs (Second Edition).
The predicate
owl:onProperties
occurs four times in that file. It maps the OWL constructDataAllValuesFrom
andDataSomeValuesFrom
from a single propertty to multiple properties in oneowl:Restriction
.I tried writing an exemplar class to verify I was understanding the syntax, but I get an error from
validate-profile
, though things look consistent with the tables in that W3C document. From a quickgrep
over the ROBOT source, I don't see occurrences ofonProperties
, but I also couldn't catchonProperty
by eye because[a|A]nnotationProperty
happens to cover it too. Is this just a missed OWL property?For issue reproduction, my input graph is:
My test command with ROBOT version 1.9.5 is:
An example of my test output is:
I am fine with this test input being added to unit tests, and I do not require crediting. All the same, acknowledgement would be appreciated.