4

Pat は概念として Mike の電話番号を知っており、RDF/OWL の具体的な電話番号 1112223333 ではないとどのように言えばよいでしょうか?

パットがマイクの電話番号を知っていることをメアリーが知っていると述べることができるボーナスポイント....

4

3 に答える 3

4

適切なプロパティを使用すると、「知っている」とrdf具体化を使用できます。

:Pat :knows [ 
  rdf:subject :Mike ;
  rdf:predicate :telephoneNumber ;
  rdf:object <tel:1112223333> 
]

具象化を好む人はほとんどいませんが、この種のことについては大丈夫です。2番目のケースでは、二重具体化をお楽しみください。

:Mary :knows [
  rdf:subject :Pat ;
  rdf:predicate :knows ;
  rdf:object [
    rdf:subject _:b1 ;
    rdf:predicate rdf:subject ;
    rdf:object :Mike ;
    rdf:subject _:b2 ;
    rdf:predicate rdf:predicate ;
    ... sanity barrier exceeded ...
  ]
]

単一のグラフの外に出て満足している場合は、人生はもっと簡単です。いくつかのファイルを作成できます。

ファイル1:

:Mary :knowsContentsOf <FILE2>

FILE2:

:Mike :telephoneNumber <tel:1112223333>

または、単一のファイルエンベロープに貼り付けて、ファイルのフラグメントを指すこともできます。これは基本的に、名前付きグラフがSPARQLで提供するものです。

于 2012-10-29T17:19:34.970 に答える
3

以下についてはどうですか(楽しみのために有効なOWL DLを使用):

# 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
    ] .

メアリーについてのあなたの他の声明は、私たちが単に「もの」を知ることについて話しているのではなく、知識に関する知識について話しているため、より困難です。これは、OWL と RDF で行うには非常に不便です。しかし、次のオントロジーを使用して、OWL DL でそれを行うという課題に固執しましょう。

<>  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 .

問題は、推論の面であまり得られないことです。user205512 と cygri の回答はもっともらしい代替案ですが、推論の点でもあまり役に立ちません。

より多くの推論機能が必要な場合は、次のようなクレイジーなことを行うことができます (OWL 2 DL または 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
    ] .
于 2012-11-01T10:21:59.273 に答える
2

名前付きグラフでこれを解決します。「Mike の電話番号は 1112223333 です」というトリプルを 1 つの名前付きグラフに貼り付け、「Pat はその名前付きグラフを知っている」というデフォルト グラフに別のトリプルを挿入します。

OWL は名前付きグラフをサポートしていませんが、SPARQL 1.0 と RDF 1.1 はサポートしていますが、標準の構文はまだありません。そのため、さまざまなグラフを個別のファイルから SPARQL ストアに個別にロードする必要があります。

于 2012-10-29T06:39:21.047 に答える