Closed ajnelson-nist closed 2 years ago
core:hasFacet is definitely intended to be an owl:InverseFunctionalProperty. I support formally codifying this in the ontology.
PR #462 contains the implemented solution for this Issue. The SHACL-SPARQL constraint illustrated in the competency questions has also been implemented, using the sketched JSON-LD with some syntax corrections and adjustments.
Background
UCO's
core:Facet
class behaves in manners that do not seem to be explored previously in ontology engineering. Lacking reference implementations in other ontologies, UCO needs to make clear some behaviors.One behavior is explaining what the relationship between a
Facet
andUcoObject
is. Issue 378 sets to codifying the classes as disjoint. Next, we should review how "Shareable" aFacet
instance is.It is possible a user could be tempted to share a
Facet
, for the sake of saving on graph weight when the user knows theFacet
's recorded property data are highly likely to be repeated. One example of this is the set of measurement-based, non-classifying properties inContentDataFacet
, i.e. the size and hashes, but not themimeType
. If a user is hashing file sets where they know many file contents will be repeated, they might be tempted to define and reuse oneFacet
individual.It's possible
core:hasFacet
'srdfs:comment
definition codifies that this is not intended to be permitted, by its use of the word "particular." Nothing that is encoded (i.e. not English) in the ontology prevents this, however.In OWL, the way to commit to this pattern of only-one-"Owner"-
UcoObject
is to declarecore:hasFacet
aowl:InverseFunctionalProperty
. Aowl:FunctionalProperty
(inverse coming in a moment) states that, if:b
is a functional property, then a triple:a :b :x
has only one value for:x
. If there are two triples:a :b :c
and:a :b :d
,:c
and:d
are inferred in OWL to be the same thing. An ontology with those triples is consistent, unless there is also a triple:c owl:differentFrom :d
. Anowl:InverseFunctionalProperty
goes in object-to-subject order instead. If:b
is anowl:InverseFunctionalProperty
, then two triples:y :b :c
and:z :b :c
cause OWL to infer that:y owl:sameAs :z
.core:hasFacet
should become aowl:InverseFunctionalProperty
in order to declare expectations onFacet
"ownership". SHACL enforcement should also be able to cover cases where OWL inferencing may have been applied and caused identity-sharing.Requirements
Requirement 1
A
core:Facet
instance needs to be understood, and enforced, as only being permitted to belong to onecore:UcoObject
instance.Requirement 2
Any implemented SHACL enforcement of a
core:Facet
being associated with only onecore:UcoObject
instance must be able to understandowl:sameAs
designating two nodes "being" the same concept.Risk / Benefit analysis
Benefits
Facet
s prevents issues where a sharedFacet
being modified via association with oneUcoObject
induces unforeseen consequences for anotherUcoObject
.Facet
is a part of one and only oneUcoObject
.Risks
Facet
may be computationally expensive.Competencies demonstrated
Competency 1
Take the following graph as an example.
This graph, with no other supplementary statements and with no OWL inferencing, is inconsistent with (what the proposer understands to be) UCO's intended design of
Facet
s not being shared.Competency Question 1.1
What nodes are in violation of the
core:hasFacet
having only one subject per object?The following query encodes this test:
Result 1.1
kb:facet-1
Competency Question 1.2
Suppose this graph is added:
Now, what nodes are in violation? Note the test must now be encoded to consider
owl:sameAs
:(Note from the submitter - this query has not been tested.)
Result 1.2
No nodes should be returned.
Solution suggestion
core:hasFacet a owl:InverseFunctionalProperty .
sh:NodeShape
, which doesn't necessarily need to be given an IRI, but would have an objects-targeting triplesh:targetObjectsOf core:hasFacet
.Coordination
develop