セマンティックネットワーク、ARC2およびPHP

セマンティックWebは開発途上にあり、地方のWebスタジオはセマンティックセマンティックの言葉の価格を引き上げていないが、PHPでこの獣を操作するためのツールを見てみましょう。

英語以外の言語分野では、概念と技術全体を理解することができなかったように、ほとんどの用語が適用されなかったことは注目に値します。 一部の人にとって、セマンティックネットワークは、おいしいパンとhtml5の同義語です。一部の人にとっては、RDFの普及、ストレージとデバイスの開発です。

製品のセマンティクスのサポートは、drupal.org、ontowiki.net、semantic-mediawiki.org、talis.comによって発表または実装されています。 さらに、専門のWYSIWYGエディターloomp.orgもあります。

現在(2012年春)、パブリックライブラリであると主張する2つのソリューションがあります。これらはPHPARC2 用のRDF APIです
RAPは、2008年の最新バージョンのより良い時期まで延期されます。 PHP 4バージョンのサポートがあります-これは非常に疑わしい利点ですが、おそらく誰かがそれを必要とするでしょう。 しかし、 このページの後、RAPへの関心は完全に消えました。

理論


安全にスキップしてサンドボックスに移動できる、小さな理論的な紹介コース。

用語集:
例として、「マーシャには赤い車があります」というフレーズと一連のトリプレットを考えてみましょう。
一方、 manmachine 、およびcolorの説明を続けると、4つ以上のフレーズが1つのフレーズから取得されました。 一方、これらのステートメントは、コンピューター処理にとってはるかに簡単です。
RDFは、情報リソースの統一された記述に使用されます。 任意に複雑なモデルの中心にあるのは、1つの概念です。 これにより、ストレージの実装を大幅に簡素化し、クエリの言語を標準化することができます(たとえば、「赤いマシン」の所有者を表示する)。

サンドボックスをまとめる


ARC2ライブラリはボックスとして使用され、 スターターパックは砂として機能します。
サーバーの設定には特別なものは必要ありません。ubuntuの標準のLAMPサーバーで十分です。
少なくとも、PHP 5.3用のlibxml、ソケットモジュールが必要になります。*独自のサーバーアセンブリがある場合は、リポジトリとしてMySqlが必要です。
インストールはわいせつに簡単です、あなたは両方のパッケージを展開し、ファイルtuukka-arc2-starter-pack / config.phpにライブラリarc2へのパスを書く必要があります:
include_once(dirname(__FILE__).'/../arc2/ARC2.php'); 

ライブラリフォルダーの名前はsemsol-arc2-xxxxxxxからsimple arc2に、 tuukka-arc2-starter-pack-xxxxxxxからtuukka-arc2-starter-packに変更されました。
config.phpのパスに加えて、データベース設定を登録する必要があります。以下のセクションがこれを担当します。
 $arc_config = array( /* MySQL database settings */ 'db_host' => 'localhost', //  'db_user' => 'root', //   'db_pwd' => '', // ,     'db_name' => 'arc2test', //    //... 


スターターパッケージがWebサーバーディレクトリにインストールされている場合、 localhost / tuukka-arc2-starter-pack / endpoint.phpを要求すると、要求を送信するためのフォームが表示されます。
コンソールを介してリクエストを送信できます。そのためには、ファイルtuukka-arc2-starter-pack / cli.php (chmod + x cli.php)の実行を有効にする必要があります
結果形式を除いて、コンソールまたはWebの下から開始することに大きな違いはありません。
WebサンドボックスはXMLを返します。

実験用ネズミはエリック・ミラーのページになります
ページのソースコードでは、ダウンロード用のデータへのリンクが重要です。
  <link rel="meta" type="application/rdf+xml" title="Contact" href="contact" /> 

最初に行うことは、クエリを使用してリポジトリにデータを追加することです。
 LOAD <http://www.w3.org/People/EM/contact#me> 

コンソールから起動するには、 tuukka-arc2-starter-packフォルダーで次のコマンドを実行します。
 ./cli.php "LOAD <http://www.w3.org/People/EM/contact#me>" 

答えは次のようになります。
 Loaded 32 triples 

Webインターフェース経由でこれ:
 <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> <head> <!-- query time: 0.3139 sec --> </head> <inserted>32</inserted> </sparql> 


データのアップロードに成功しました。リポジトリのすべての名前をリクエストします。
 PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name WHERE { ?x foaf:name ?name } 
答えは:
 name Eric Miller 

技術的には、クエリ言語はSQLに多少似ていますが、1つの重要な違いがあります。
SQLはデータを含むテーブルへのクエリの言語でありSPARQLはグラフへのクエリの言語です

リポジトリにあるすべてのニックネームと連絡先メールボックスをリクエストします。
 PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name ?nick ?mbox WHERE { ?x foaf:name ?name . ?x foaf:nick ?nick . x foaf:mbox ?mbox } 
答えは:
 name nick mbox Eric Miller em mailto:em@w3.org 


使い慣れた連絡先すべてのリストを取得します。
 PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name ?knows WHERE { ?x foaf:name ?name . ?x foaf:knows ?knows } 
答えは:
 name knows Eric Miller http://www.w3.org/People/Berners-Lee/card#i Eric Miller http://www.w3.org/People/Connolly/#me Eric Miller http://www.w3.org/People/djweitzner/public/foaf.rdf#DJW 


最後の連絡先のデータをダウンロードする-ダニエルワイツナー:
 LOAD <http://www.w3.org/People/djweitzner/public/foaf.rdf#DJW> 
答えは:
 Loaded 113 triples 


おなじみの連絡先をすべて再度確認します
 PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name ?knows WHERE { ?x foaf:name ?name . ?x foaf:knows ?knows } 
答えは:
 name knows Eric Miller http://www.w3.org/People/Berners-Lee/card#i Eric Miller http://www.w3.org/People/Connolly/#me Eric Miller http://www.w3.org/People/djweitzner/public/foaf.rdf#DJW Daniel Weitzner _:b279264211_arc8d9fb5 Daniel Weitzner _:b2309778025_arc8d9fb6 Daniel Weitzner _:b420706296_arc8d9fb9 Daniel Weitzner _:b2549551164_Tim Daniel Weitzner _:b2407349360_arc8d9fb10 Daniel Weitzner _:b1728586196_DanC Daniel Weitzner _:b4168748262_arc8d9fb11 Daniel Weitzner _:b1634950492_arc8d9fb12 

奇妙な人格はダニエルを知っています。

ダニエルのニックネームを学びます:
 PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?nick WHERE { ?x foaf:name 'Daniel Weitzner' . ?x foaf:nick ?nick } 
答え
 nick Danny 


通常、Webソースから情報を収集するタスクは、いくつかの方法で解決されます。
  1. データを含むソースを見つける
  2. データを取得(正規表現、ツリークエリを使用)またはサイト所有者から取得(RSS、API)
  3. 便利なストレージに保存
  4. データの使用-受信と処理

このソリューションには1つの大きな欠点があります-各ソースに対してデータ収集を実装する必要があります。
その結果、実装(グラバー、ストレージ、リクエスト)の数が非常に多くなる可能性があります。
APIが存在することでプロセスが大幅に簡素化されますが、統合と標準化について考える必要はありません(さらに、APIは必ずしもデータではありません)。

セマンティックネットワークの概念は、エリックミラーの連絡先ページのようなソースの存在を前提としています。これは、コンテンツの操作に便利です。
これは今日と昨日との違いです。

戦いに


ARC2ライブラリをさらに詳しく見てみましょう。
Ericのページからデータを受け取り、生の形式で表示するコード:
 include_once("arc2/ARC2.php"); $parser = ARC2::getRDFParser(); $parser->parse('http://www.w3.org/People/EM/contact#me'); print_r($parser->getTriples()); //print_r($parser->getSimpleIndex()); #  - 


結論:
 Array ( [0] => Array ( [s] => http://www.w3.org/People/EM/contact#me [p] => http://www.w3.org/1999/02/22-rdf-syntax-ns#type [o] => http://xmlns.com/foaf/0.1/Person [s_type] => uri [o_type] => uri [o_datatype] => [o_lang] => ) [1] => Array ( [s] => http://www.w3.org/People/EM/contact#me [p] => http://www.w3.org/1999/02/22-rdf-syntax-ns#value [o] => Eric Miller, em@w3.org [s_type] => uri [o_type] => literal [o_datatype] => [o_lang] => ) //.... ) 

トリプレット配列の構造が指定されています:
getTriples()の代わりにgetSimpleIndex()を使用すると、出力がより意味のあるものになります。
 Array ( [http://www.w3.org/People/EM/contact#me] => Array ( [http://www.w3.org/1999/02/22-rdf-syntax-ns#type] => Array ( [0] => http://xmlns.com/foaf/0.1/Person ) [http://www.w3.org/1999/02/22-rdf-syntax-ns#value] => Array ( [0] => Eric Miller, em@w3.org ) [http://xmlns.com/foaf/0.1/name] => Array ( [0] => Eric Miller ) //... ) ) 


リクエスト(config.phpからコピー)の例では、サンドボックスリポジトリを使用します。
 $config = array( /* db */ 'db_host' => 'localhost', 'db_user' => 'root', 'db_pwd' => '', 'db_name' => 'arc2test1', /* store name (= table prefix) */ 'store_name' => 'sandbox', ); /* instantiation */ $store = ARC2::getStore($config); $q = ' PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?nick WHERE { ?x foaf:nick ?nick .} '; $rows = $store->query($q); print_r($rows); print_r($store->getErrors()); 

結果:
 Array ( [query_type] => select [result] => Array ( [variables] => Array ( [0] => nick ) [rows] => Array ( [0]=> Array ( [nick] => em [nick type] => literal ) [1]=> Array ( [nick] => Danny [nick type]=> literal ) ) ) [query_time] => 0.060401201248169 ) 


次に、必要に応じて配列を操作します。

興味深いことはこれで終わりではありません。ARC2ライブラリには多くの興味深い機能があり、セマンティクスについてはさらに10年間論文を書くことができますが、これはすべて記事の範囲外です。
しかし、会議が開催されたことを願っています。
ご清聴ありがとうございました!

Source: https://habr.com/ru/post/J142159/


All Articles