初心者向けのPHPおよびMySQL用のシンプルなRDFリポジトリ

問題:初心者によるセマンティックネットワークテクノロジーの実際的な開発の複雑さ。



私は、共同の努力を通じて、小さなリポジトリを開始し、リクエストを行う方法を学習できる特定のソリューションを開発することを提案します。



目的:辞書の作成、保存、およびアクセスを理解し、実際の初期レベルでクエリ言語を使用する。



ディスカッションに参加し、最適なソリューションを提案する場合は、新しい情報が一緒に見つかると、この投稿を更新します。 これが初心者向けの小さなチュートリアルになることを願っています。





初期条件:PHP + MySQLの広範囲にわたる、アクセスしやすい、明確で文書化された組み合わせ。 リレーショナルデータベース自体のイデオロギーは、厳密に構造化されていないデータを扱うのにはあまり適していないため、MySQLはRDFリポジトリに最適な選択肢ではないことを知っていますが、別のものは提供していません。



私たちはすべてを一から書き込もうとはしませんが、初心者であり、一般的な原則を理解した上で、何かを素早くやろうとしています。 また、私たちはここで、出会った最初のいくつかの記事を読んだ後に明らかになる基本的な用語を明確にすることを試みません。



PHP + MySQLの唯一の(?)わかりやすいターンキーソリューションはARCです。 インストール全体は、フォルダーをコピーし、スクリプトをアクセスデータとデータベースに接続することで構成されます。

include_once("semantic/arc/ARC2.php");



$config = array(

'db_name' => 'db',

'db_user' => 'user',

'db_pwd' => 'password',

'store_name' => 'arc',

);

$store = ARC2::getStore($config);









次のコードは、作業に必要なテーブルが作成されない場合を作成します。

if (!$store->isSetUp()) {

$store->setUp();

}









理論的には、エンジンがあります。 トリプルの保存、最も一般的な形式でのトリプルの認識、SPARQLでのクエリをサポートし、アクセスポイントを作成します。



RDFは、モデル全体、トリプル、または事実、またはより公式にはトリプレットの形式でデータを表示するための技術の一般名です。 トリプルの直接記録にはいくつかのタイプがあります。元のRDF / XML、N3のようなさまざまな簡単な表記、またはグラフ形式の単なる画像です。 トリプル自体に加えて、述語の意味と関係(オブジェクトのトリプルまたはオブジェクトからサブジェクトへのリンクまたはグラフエッジのタイプ)の合意を作成する必要があるため、それらはRDFスキーマ(RDFS)を使用して記述されます。



言語、またはむしろ、OWLルールのセットは、クラス、それらの関係、および特定のオブジェクト(個人)を使用して、オントロジー全体の概念を提供します。 繰り返しになりますが、OWLはさまざまな方法で表現できます。同じRDF / XML、OWL / XML、関数構文またはマンチェスター構文などです。 OWLは、RDFトリプルのレコードに直面していると言えます。RDFSの記述は、より高いレベルで検討されていますが、習得と理解がより困難です。



多くの記事を読んだ後、オントロジーを記述するための推奨言語はOWLであることがわかりました。 バージョン2はまだ採用されていません(?)。したがって、1を使用します。OWL1の 説明の 翻訳、OWL2の作業バージョンの翻訳を一般的な参照のために使用します。



したがって、辞書、つまりオントロジーの構造の説明を作成する必要があります。 トリプル自体は、データベースのリポジトリに個別に保存します。 もちろん、辞書を開発するときは、既存のものを最大限に活用する必要があります。 しかし、私たちは簡単なことを自分でやろうとしています。



説明付きの条件付き用語の作業ベースがあるとします。 ユーザーが用語を作成し、「含む」などの関係を定義し、説明を追加できるようにします。 したがって、トリプルを記録する必要があります。

1)「期間」-「説明がある」-説明テキスト。

2)「期間」-「含む」-「期間」。

つまり、属性とトリプルの両方のタイプのトリプルを保存してみましょう。 記録された情報のソース、たとえば著者を追加で表示したい場合、OWLもARCも4を直接サポートしていないため(?)、何か特別なものを追加する必要があります。 最も簡単な解決策は、「Author」などのフィールドを「xxx_triple」テーブルに追加することです。 このテーブルでは、ARCはトリプレットを保存し、トリプルを作成するときに値を追加します。



OWLはオブジェクトとそのプロパティによって操作されるため、次を含むテスト辞書を作成する必要があります。

1)クラス「Term」。

2)「含む」という用語の特性。

3)「説明がある」という用語のプロパティ。



オントロジーはさまざまな表記法で説明できます。 OWL / XMLはOWLのオリジナルですが、「古い」ものに変換することもできますが、どこでもRDF / XML形式を使用しました。 オントロジー編集プログラム( Protegeなど)を使用してテストし、RDF / XMLで辞書を作成してみましょう。 すばらしいことは、OwlVizプラグインをProtegeに追加して、ダイアグラムにグラフを表示できるようにすることです。



<?xml version="1.0"?>

<rdf:RDF



// ()

xmlns:test ="http://www.yourdomen.ru/ontology#"

// , ( ?)

xmlns:owl ="http://www.w3.org/2002/07/owl#"

xmlns:rdf ="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"

xmlns:xsd ="http://www.w3.org/2001/XMLSchema#">



//

<owl:Ontology rdf:about="">

</owl:Ontology>



//

<owl:Class rdf:ID="#Termin"/>



//

<owl:ObjectProperty rdf:ID="includes">

//

<rdfs:domain rdf:resource="#Termin"/>

<rdfs:range rdf:resource="#Termin"/>

</owl:ObjectProperty>



<owl:ObjectProperty rdf:ID="#hasDescription">

// : , :

<rdfs:domain rdf:resource="#Termin"/>

<rdfs:range rdf:resource="&xsd;string"/>

</owl:ObjectProperty>



</rdf:RDF>









ARCのSPARQLのリンク:

Semanticweb.narod.ru/3.html

jena.hpl.hp.com/~afs/SPARQL-Update.html

www.w3.org/TR/rdf-sparql-query

arc.semsol.org/docs/v2/sparql+



サブジェクト、オブジェクト、および述語の名前またはアドレスは、IRIによって指定されます(URLのように、単に存在しません)。 IRIは2つの方法で記録されます。

1)プレフィックスを使用します。 プレフィックスは要求の先頭に設定され、目的のIRIに指定されます。 プレフィックス自体の名前は重要ではありません-異なるリクエストでは異なる場合があります。

PREFIX vCard: <www.w3.org/2001/vcard-rdf/3.0#>

vCard:FN






2)山括弧内の相対アドレス:

<somewhere/JohnSmith>





リクエストの開始時に、「/」で終わるIRIの先頭に追加されるベースプレフィックスを指定できます。

BASE <somewhere>

<JohnSmith/>






テキストの述語(リテラル)は、単一引用符または二重引用符で囲まれたテキストによって単に与えられます-それは重要ではありません。 追加の言語とデータ型を指定することもできます。 デフォルトでは、テキストを入力します。

「テキスト」

変数は$記号を使用して示されますか? おそらく使用するのは理にかなっていますか?そのため、$ aaaは二重引用符で囲まれたリクエスト内の変数としてphpによって認識されません。

SELECT ?title WHERE { <A> <B> ?title .}







角括弧または接頭辞「_:」を使用する「中間ノード」を使用して、トリプルをトリプルに配置できます。 例:ミシャの祖父を見つける:

som:haveDad [som:haveDad $ x]

コードに関するコメントはグリッドで指定されます。 リクエスト内のトリプルは常にドットで終わり、中括弧でグループ化されます。 本当にしたい場合は、最初の3つだけに同じサブジェクトを記述し、それ以降はセミコロンで記述できます。

{ <example/book3> dc:title "A new book" ;

dc:creator "ANOther" .}








SPARQL自体には、SELECTコマンドのみが含まれます。 ARCは、AVG / COUNT / MAX / MIN / SUM(SPARQL +)、INSERT、DELETEなど(SPARQL / Update)という単語をクエリで使用できるようにする言語追加機能を使用します。



INSERTコマンド

元の形式:

INSERT { template } [ WHERE { pattern } ]





例:

PREFIX dc: <purl.org/dc/elements/1.1>

INSERT { <example/egbook3> dc:title "This is an example title" . }






リポジトリ内には、グラフと呼ばれるさまざまなプロジェクトのトリプルを格納するためのさまざまな領域があります。 したがって、それらが複数ある場合、リクエストでINTOとグラフURIを使用して目的のグラフを指定できます。

INSERT INTO <example.com> { <#foo> "baz" . }

DATA, — , , . INSERT ?

, ARC :

$rs = $store->query("INSERT INTO

{ <testSubject> <testPredicate> <testObject>.}");

print_r($rs); :

Array ( [query_type] => insert [result] => Array ( [t_count] => 1 [load_time] => 0.158 ) [query_time] => 0.283192873001 )






, id , .

: () , , db/testSubject .

INSERT , CONSTRUCT:

INSERT INTO <example.com/inferred>

CONSTRUCT { ?s foaf:knows ?o .} WHERE { ?s xfn:contact ?o .}








SELECT

$query = "SELECT ?poo WHERE { ?poo <testPredicate> <testObject> . }";

if ($row = $store->query($query, 'row')) echo $row['poo'];






'row' — . arc.semsol.org/docs/v2/store . (poo). , SELECT, . , . .



------------------------------------------------------

, .

, . , - . .

PS , - : & gt ; , <code> - ...











All Articles