<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>В поисках успеха &#187; ARC</title>
	<atom:link href="http://sheremetov.com/tag/arc/feed/" rel="self" type="application/rss+xml" />
	<link>http://sheremetov.com</link>
	<description>Блог оптимистичного менеджера проектов</description>
	<lastBuildDate>Tue, 03 Jan 2012 21:36:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Semantic Web на PHP при помощи библиотеки ARC</title>
		<link>http://sheremetov.com/php/semantic-web-php-arc/</link>
		<comments>http://sheremetov.com/php/semantic-web-php-arc/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 22:16:48 +0000</pubDate>
		<dc:creator>sheremetov</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ARC]]></category>
		<category><![CDATA[RDF]]></category>
		<category><![CDATA[semantic web]]></category>

		<guid isPermaLink="false">http://sheremetov.com/?p=461</guid>
		<description><![CDATA[Прежде чем рассказывать о самой библиотеке, расскажу несколько слов о том что такое Semantic Web (семантическая паутина или web 3.0, как его еще называют), для тех кто не знает. Итак, всемирная паутина продолжает развиваться. С одной стороны, объёмы существующей информации, огромны и кардинальные изменения происходят медленнее, в силу того, что для изменения нужно затрачивать больше усилия. С другой стороны, именно благодаря масштабу [...]]]></description>
			<content:encoded><![CDATA[<p>Прежде чем рассказывать о самой библиотеке, расскажу несколько слов о том что такое Semantic Web (семантическая паутина или web 3.0, как его еще называют), для тех кто не знает.</p>
<p>Итак, всемирная паутина продолжает развиваться. С одной стороны, объёмы существующей информации, огромны и кардинальные изменения происходят медленнее, в силу того, что для изменения нужно затрачивать больше усилия. С другой стороны, именно благодаря масштабу и размаху существующие проблемы становятся очивиднее. Информации становится больше, и найти нужную, упорядочить её становится всё сложнее. Тим Бернерс-Ли, изобретатель существующей версии интернета предлагает свою версию обновленного интернета, называя его Семантической Сетью. Идея новой модели немного непривычно ложится на существующие стереотипы понимания сети. Смысл его в том что документы это не голый текст, а какой-то смысл, изложенный текстом на каком-то языке, или еще шире, графика, видео, суть неважно. Научив машины «понимать» этот смысл мы сможем оперировать с информацией на более высоком уровне, — например делать умозаключения, искать неочевидные решения, избегать излишнего дублирования информации и многое другое. Я сейчас не хочу говорить о том насколько реалистичным является построение Семантической Сети в ближайшее время, пусть копья ломают те, у кого есть на это время и силы, но в узких прикладных областях (например в экспертных системах), эти идеи уже нашли свое применение.</p>
<p><a href="http://sheremetov.com/wp-content/uploads/2010/01/semantic-web.png"><img class="alignnone size-full wp-image-480" title="Классическая иллюстрация, описывающая пирамиду идей на которых строится Семантическая паутина" src="http://sheremetov.com/wp-content/uploads/2010/01/semantic-web.png" alt="semantic-web" width="304" height="258" /></a></p>
<p>Это классическая иллюстрация, описывающая пирамиду идей, на которых строится Семантическая паутина. Видно что в центре идеи находятся онтологии OWL, описывающие взаимосвязи между понятиями (URI). Неймспейсы (namespaces) поволяют одни и те же понятия описывать по разному в рамках разных предметных областей. RDF предлагает простой способ описания взаимосвязей между понятиями в виде троек (триплетов): субъект — предикат — объект. Вот примеры таких троек:</p>
<ul>
<li>крушовице — чешское — пиво</li>
<li>чешское — очень хорошее — пиво</li>
<li>Иннокентий — любит — пиво</li>
</ul>
<p>В этом примере интересно что основываясь на этих данных машина может делать некоторые предположения, — например о том, что Иннокентию, скорее всего, понравится крушовице. То что мы только делаем предположения относительно результата, а не гарантируем его, может смутить, но на самом деле вся информация в сети, это просто предположения а не факты в последней инстанции. OWL расширяет семантику и логику «троек» до классов с описанием взаимодействий внутри этих классов, причем класс может быть определен разными способами:</p>
<ul>
<li>идентификатором класса (URI)</li>
<li>перечислением всех экземпляров класса</li>
<li>ограничением свойства</li>
<li>пересечением 2 и более определений классов</li>
<li>объединением 2 и более определений классов</li>
<li>дополнением определения класса</li>
</ul>
<p>OWL описывает классами предметную область, языком которой можно описать факты, касающиеся предметной области.</p>
<p>Есть два видения развития сети, — первый это постепенное создание онтологий вокруг существующих предметных областей (медицина, право и т.д.), второй — это построение синтаксических анализаторов, способных разбирать обычные тексты и строить онтологии на основании предположений записанных обычным, человеческим языком. При всей футуристичности второго подхода существуют довольно интересные наработки в эту сторону, например <a href="http://wordnet.princeton.edu/">WordNet</a>.</p>
<p>Надо сказать что шум вокруг Semantic Web докатился и до PHP. <a href="http://arc.semsol.org/">ARC</a> развивается с конца 2007 года и, превратился в весьма функциональный инструмент. Вот неполный перечень того что умеет ARC:</p>
<ul>
<li>Web Reader, для построения ботов с поддержкой проки и редиректов</li>
<li>Парсеры: RDF/XML, Turtle, SPARQL + SPOG, Legacy XML, HTML tag soup, RSS 2.0, Google Social Graph API JSON</li>
<li>Сериализаторы: N-Triples, RDF/JSON, RDF/XML, Turtle, SPOG dumps</li>
<li>Сохранение RDF в mysql базу (SPARQL SELECT, ASK, DESCRIBE, CONSTRUCT, + aggregates, LOAD, INSERT, and DELETE)</li>
<li>RDF экстракторы (DC, eRDF, microformats, OpenID, RDFa)</li>
<li>Поддержка SPARQL</li>
</ul>
<p>Код у библиотеки шикарный, и отлаживаться-расширятся она должна очень легко. Но, как говорится, лучше один раз увидеть чем сто раз услышать, — приведу несколько примеров её использования:</p>
<pre class="php"><span style="color: #b1b100;">include_once</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'arc/ARC2.php'</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #0000ff;">$parser</span> = ARC2::<span style="color: #006600;">getRDFParser</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0000ff;">$parser</span>-&gt;<span style="color: #006600;">parse</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'http://www.w3.org/TR/owl-guide/wine.rdf'</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// загружаем онтологию</span>
<a href="http://www.php.net/var_dump"><span style="color: #000066;">var_dump</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$parser</span>-&gt;<span style="color: #006600;">getTriples</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// получаем массив &quot;троек&quot; онтологий вида:</span></pre>
<pre>array(2012) {
  [0]=&gt;
  array(7) {
    ["s"]=&gt;
    string(52) "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine"
    ["p"]=&gt;
    string(47) "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"
    ["o"]=&gt;
    string(38) "http://www.w3.org/2002/07/owl#Ontology"
    ["s_type"]=&gt;
    string(3) "uri"
    ["o_type"]=&gt;
    string(3) "uri"
    ["o_datatype"]=&gt;
    string(0) ""
    ["o_lang"]=&gt;
    string(0) ""
  }
...</pre>
<p>Загруженную онтологию или RDF можно сохранить в N-Triples, RDF/JSON и даже HTML:</p>
<pre class="php"><span style="color: #0000ff;">$ser</span> = ARC2::<span style="color: #006600;">getSer</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'LegacyHTML'</span><span style="color: #66cc66;">&#41;</span>;
<a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> <span style="color: #0000ff;">$ser</span>-&gt;<span style="color: #006600;">getSerializedArray</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$triples</span><span style="color: #66cc66;">&#41;</span>;</pre>
<p>Но самое интересное, что позволяет ARC, это безусловно SPARQL:</p>
<pre class="php"><span style="color: #0000ff;">$config</span> = <a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">&#40;</span>
	<span style="color: #808080; font-style: italic;">/* db */</span>
	<span style="color: #ff0000;">'db_host'</span> =&gt; <span style="color: #ff0000;">'localhost'</span>,
	<span style="color: #ff0000;">'db_name'</span> =&gt; <span style="color: #ff0000;">'db_name'</span>,
	<span style="color: #ff0000;">'db_user'</span> =&gt; <span style="color: #ff0000;">'user'</span>,
	<span style="color: #ff0000;">'db_pwd'</span> =&gt; <span style="color: #ff0000;">'password'</span>,
<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #0000ff;">$store</span> = ARC2::<span style="color: #006600;">getStore</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$config</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>!<span style="color: #0000ff;">$store</span>-&gt;<span style="color: #006600;">isSetUp</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #808080; font-style: italic;">// проверяем инициализацию базы</span>
  <span style="color: #0000ff;">$store</span>-&gt;<span style="color: #006600;">setUp</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">//  если таблицы не были созданы, - они создаются</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">$store</span>-&gt;<span style="color: #006600;">query</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;PREFIX base:
INSERT INTO base:Graph {
	base:testEntity1 base:testPredicate1 'test object 1' .
	base:testEntity1 base:testPredicate2 base:testEntity3 .
	base:testEntity2 base:testPredicate1 'test object 2' .
	base:testEntity2 base:testPredicate2 base:testEntity4 .
	base:testEntity3 rdf:type base:Type1 .
	base:testEntity4 rdf:type base:Type2 .
}
&quot;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// выполняем запрос на добавление &quot;троек&quot;</span>
&nbsp;
<span style="color: #0000ff;">$store</span>-&gt;<span style="color: #006600;">query</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'SELECT *
WHERE {
	?obj ?predic &quot;test object 1&quot; .
}'</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// выполняем запрос</span></pre>
<p>Для того чтобы попробовать «поиграть» с элементами семантического веба, в ваших приложениях, функционала <a href="http://arc.semsol.org/">ARC</a> вполне достаточно. Ну а если вы всерьез заинтересуетесь этой темой, рекомендую обратить внимание на открытый проект <a href="http://jena.sourceforge.net/">Jena</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://sheremetov.com/php/semantic-web-php-arc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

