- From: Stian Soiland-Reyes <soiland-reyes@manchester.ac.uk>
- Date: Mon, 20 Nov 2017 17:12:58 +0000
- To: Jürgen Jakobitsch <juergen.jakobitsch@semantic-web.com>
- Cc: semantic-web@w3.org, Hanscools <hanscools@intergga.ch>
On Sun, 19 Nov 2017 12:21:15 +0100, Jürgen Jakobitsch <juergen.jakobitsch@semantic-web.com> wrote:
> T-BOX:
> y:Rock a rdfs:Class.
> z:Human a rdfs:Class.
> z:BiologicalSex a rdfs:Class.
> z:hasBiologicalSex
> a owl:ObjectProperty;
> rdfs:domain z:Human;
> rdfs:range z:BiologicalSex.
Totally agree that the example didn't make much sense and we can't complain
that we get "wrong" inferences from wrong data.
Sometimes ontology writers mistake rdfs:domain/range" as guidance properties
"type can be" rather than the actual restriction/inference "type must also be".
If that's what you mean, then in RDFS you have to add a new common superclass; or
in an OWL ontology you can make a "combination" domains/ranges using a unionOf
construct, e.g.:
schema:funder a owl:ObjectProperty;
rdfs:domain [
a owl:Class;
owl:unionOf (schema:Organization schema:Person schema:CreativeWork Schema:Event)
] .
However the above is a closed union - no-one can easily extend this with a
class that is not compatible with those listed.
I think that's why schema.org went the other direction and defined their own:
http://schema.org/rangeIncludes
http://schema.org/domainIncludes
Here no "damage" is caused by adding another domainIncludes, although I still
am sceptical about giving rocks biological sex :)
See for instance http://schema.org/funder
which if we run through Gregg's distiller we get:
schema:funder a rdfs:Property;
rdfs:label "funder"@en;
schema:domainIncludes
schema:Organization,
schema:Event,
schema:Person,
schema:CreativeWork;
schema:rangeIncludes
schema:Organization,
schema:Person;
rdfs:comment "A person or organization that supports (sponsors) something through some kind of financial contribution."@en;
rdfs:subPropertyOf schema:sponsor;
rdfa:usesVocabulary schema: .
Thus we don't accidentally infer that a person is also an event and organization,
the domain/range inclusion is just a suggestion that a schema:Person might or
might not have a schema:funder property.
Thus anyone is free to extend the above, e.g.:
schema:funder schema:domainIncludes ex:Food .
..without accidentally inferring that the food is something between a Person or CreativeWork.
In OWL we can do something similar with property restriction on a class, e.g.:
ex:FreeFood a owl:Class;
rdfs:subClassOf ex:Food .
rdfs:subClassOf [
a owl:Restriction;
owl:onProperty schema:funder
owl:minCardinality "1"^^xsd:nonNegativeInteger;
owl:someValuesFrom owl:Thing;
] .
]
This is good for required properties, but this does not tell us that any
ex:Food can have an **optional** funder. One pattern I have observed to document
that:
ex:Food a owl:Class;
rdfs:subClassOf [
a owl:Restriction;
owl:minCardinality "0"^^xsd:nonNegativeInteger;
owl:onProperty schema:funder
] .
(or owl:allValuesFrom owl:Thing, but I think that might be more confusing)
While "minimum 0" is non-sensical from an inference point of view, it is not
wrong, and this hints to humans that 0 (implied: or more) schema:funder can be
on a Person. But again this could be easily misread as "exactly 0 funders"..
You may want to use ShEx or SHACL RDF shapes if you just want to express
schema-like that you expect certain general properties on a specific class.
But I would first suggest the original correspondant uses the two schema.org
variants if they are just doing documentation.
--
Stian Soiland-Reyes
The University of Manchester
http://www.esciencelab.org.uk/
http://orcid.org/0000-0001-9842-9718
Received on Monday, 20 November 2017 17:13:30 UTC