What about the following (using valid OWL DL for entertainment):
# assume prefixes defined <> a owl:Ontology . :Person a owl:Class . :PhoneNumber a owl:Class . :knowsThing a owl:ObjectProperty; rdfs:domain :Person . :belongsTo a owl:ObjectProperty; rdfs:range :Person . :Mike a :Person . :Pat a :Person; :knowsThing [ a :PhoneNumber; :belongsTo :Mike ] .
Your other expression about Mary is more complicated, because we are not just talking about knowing βthings,β we are talking about knowing about knowledge, which is very inconvenient to do in OWL and RDF. But let's turn to the task of doing this in OWL DL with the following ontology:
<> a owl:Ontology . :Person a owl:Class . :PhoneNumber a owl:Class . :knowsThing a owl:ObjectProperty; rdfs:domain :Person . :knownBy a owl:AnnotationProperty; rdfs:range :Person . :belongsTo a owl:ObjectProperty; rdfs:range :Person . :Mike a :Person . :Pat a :Person; :knowsThing _:mikesnumber . _:mikesnumber a :PhoneNumber; :belongsTo :Mike . :Mary a :Person . [] a owl:Annotation; owl:annotatedSource :Pat; owl:annotatedProperty :knowsThing; owl:annotatedTarget _:mikenumber; :knownBy :Mary .
The problem is that it does not make you much sense. user205512 and cygri answers are plausible alternatives, but they don't get you in terms of reasoning.
For more reasonable features, you can use some crazy things (only works with OWL 2 DL or OWL Full):
:subject a owl:ObjectProperty; rdfs:domain :Statement . :predicate a owl:ObjectProperty; rdfs:domain :Statement . :object a owl:ObjectProperty; rdfs:domain :ObjectStatement . :dataObject a owl:DatatypeProperty; rdfs:domain :DataStatement . :hasPhone a owl:DatatypeProperty . :knowsFact a owl:ObjectProperty; rdfs:domain :Person; rdfs:range :Statement . :ObjectStatement a owl:Class; rdfs:subClassOf [ owl:onProperty :object; owl:cardinality 1 ] . :DataStatement a owl:Class; rdfs:subClassOf [ owl:onProperty :dataObject; owl:cardinality 1 ] . :Statement a owl:Class; owl:unionOf ( :ObjectStatement :DataStatement ); rdfs:subClassOf [ owl:onProperty :subject; owl:cardinality 1 ], [ owl:onProperty :predicate; owl:cardinality 1 ] . :Person a owl:Class . :Pat :knowsFact [ :subject :Mike; :predicate :hasPhone ] . :Mary :knowsFact [ :subject :Pat; :predicate :knowsFact; :object [ :subject :Mike; :predicate :hasPhone ] .
source share