<?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/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>Szkoła Web 3.0 &#187; Post Tags &#187; filtrowanie</title>
	<atom:link href="http://www.semanticschool.com/tag/filtrowanie/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.semanticschool.com</link>
	<description>Dowiedz się czym jest Sieć Semantyczna</description>
	<lastBuildDate>Mon, 05 Jul 2010 22:45:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<!-- podcast_generator="podPress/8.8" - maintenance_release="8.8.5.3" -->
	<copyright>Copyright &#xA9; Szkoła Web 3.0 2010 </copyright>
	<managingEditor>info@semanticschool.com (Szkoła Web 3.0)</managingEditor>
	<webMaster>info@semanticschool.com (Szkoła Web 3.0)</webMaster>
	<category>posts</category>
	<image>
		<url>http://www.semanticschool.com/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
		<title>Szkoła Web 3.0 &#187; Post Tags &#187; filtrowanie</title>
		<link>http://www.semanticschool.com</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle></itunes:subtitle>
	<itunes:summary>The School of Semantics</itunes:summary>
	<itunes:keywords></itunes:keywords>
	<itunes:category text="Society &amp; Culture" />
	<itunes:author>Szkoła Web 3.0</itunes:author>
	<itunes:owner>
		<itunes:name>Szkoła Web 3.0</itunes:name>
		<itunes:email>info@semanticschool.com</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://www.semanticschool.com/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg" />
		<item>
		<title>SPARQL &#8211; cz. 4: Zaawansowanie filtrowanie</title>
		<link>http://www.semanticschool.com/2010/04/sparql-filtrowanie/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.semanticschool.com/2010/04/sparql-filtrowanie/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 05:45:44 +0000</pubDate>
		<dc:creator>Sebastian Kruk</dc:creator>
				<category><![CDATA[Dla programistów]]></category>
		<category><![CDATA[filtrowanie]]></category>
		<category><![CDATA[funkcje]]></category>
		<category><![CDATA[literal]]></category>
		<category><![CDATA[RDF]]></category>
		<category><![CDATA[sparql]]></category>
		<category><![CDATA[turtle]]></category>
		<category><![CDATA[typy]]></category>
		<category><![CDATA[wyrażenia regularne]]></category>
		<category><![CDATA[xsd]]></category>

		<guid isPermaLink="false">http://www.semanticschool.com/?p=749</guid>
		<description><![CDATA[Po krótkiej przerwie wracamy do cyklu opisującego możliwości SPARQL. Dziś napiszemy o tym jak precyzyjniej definiować schematy poszukiwanych podgrafów wykorzystując do tego celu filtry. Aby zaprezentować różne możliwości mechanizmu filtrowania w SPARQL skorzystamy z bardziej rozbudowanej wersji grafu RDF wykorzystywanego do tej pory. W celu zdefiniowania operacji filtrowania w danym zapytaniu stosujemy operator FILTER. Zacznijmy [...]]]></description>
			<content:encoded><![CDATA[<p>Po krótkiej przerwie wracamy do cyklu opisującego możliwości SPARQL. Dziś napiszemy o tym jak precyzyjniej definiować schematy poszukiwanych podgrafów wykorzystując do tego celu filtry.  <span id="more-749"></span>Aby zaprezentować różne możliwości mechanizmu filtrowania w SPARQL skorzystamy z bardziej rozbudowanej wersji grafu RDF <a href="http://www.semanticschool.com/2010/02/sparql-rodzaje-zapytan/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">wykorzystywanego do tej pory</a>.</p>
<div id="attachment_1051" class="wp-caption aligncenter" style="width: 434px"><a href="http://www.semanticschool.com/sparql-4a-pl.turtle#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="size-full wp-image-1051" title="Przykładowy graf do obrazowania operacji FILTER w SPARQL" src="http://www.semanticschool.com/wp-content/uploads/2010/03/sparql-filter-0.png" alt="Przykładowy graf do obrazowania operacji FILTER w SPARQL" width="424" height="404" /></a><p class="wp-caption-text">Kliknij na graf aby pobrać źródło w formacie Turtle </p></div>
<p>W celu zdefiniowania operacji filtrowania w danym zapytaniu stosujemy operator FILTER.  Zacznijmy od czegoś prostego, np.: znajdźmy takie węzły które mają dla predykatu :e wartość literału większą od 5, a dla predykatu :j datę (jako wartość literału) po 1 marca 2010. Ponieważ nasz RDF nie ma jawnie określonych typów literałów zastosowaliśmy rzutowanie na datę (<code>xsd:dateTime</code>) oraz liczbę całkowitą (<code>xsd:integer</code>).</p>
<pre>PREFIX    : &lt;http://www.semanticschool.com/&gt;
PREFIX xsd:	&lt;http://www.w3.org/2001/XMLSchema#&gt;
SELECT ?x
WHERE { ?x :j ?date;
           :e ?value.
        FILTER ( xsd:dateTime(?date) &gt; xsd:dateTime("2010-03-01T00:00:00Z") &amp;&amp;
                 xsd:integer(?value) &gt; 5 ) }</pre>
<p>W wyniku otrzymamy: <code>?x = :B.</code> W filtrach możemy również używać wyrażenia regularne. Jeżeli np. interesują nas te węzły, które mówią o tym, że <em>Ala coś ma,</em> to zapiszemy to następująco:</p>
<pre>PREFIX :      &lt;http://www.semanticschool.com/&gt;
SELECT ?x
WHERE { ?x :e ?value.
        FILTER regex( ?value, "[Aa]la ma \\S+" ) }</pre>
<p>W wyniku otrzymamy <code>?x = :C</code> oraz <code>?x = :E</code>.  Zauważyliście zapewne, że zapisaliśmy <em>Ala</em> jako "[Aa]la" - to wyrażenie umożliwia nam wybranie tych fraz które zawierają zarówno <em>Ala </em>jak i <em>ala.</em> Jeżeli wielkość liter nie jest dla nas istotna w całej frazie, możemy skorzystać flagi "i", która mówi procesorowi wyrażeń regularnych, że ma ignorować wielkość liter:</p>
<pre>PREFIX :      &lt;http://www.semanticschool.com/&gt;
SELECT ?x
WHERE { ?x :e ?value.
        FILTER regex( ?value, "ala ma \\S+", "i" ) }</pre>
<div>Za pomocą frazy FILTER możemy również tworzyć zapytania SPARQL, które zwracają podgrafy RDF na podstawie właściwości zasobów w grafie. Prześledźmy poszczególne operatory dostępne w frazie FILTER na bazie następującego grafu:</div>
<div id="attachment_1054" class="wp-caption aligncenter" style="width: 504px"><a href="http://www.semanticschool.com/sparql-4b-pl.turtle#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="size-full wp-image-1054" title="Filtrowanie grafu z literałami z określonymi typami i językami" src="http://www.semanticschool.com/wp-content/uploads/2010/03/sparql-filter-1.png" alt="Filtrowanie grafu z literałami z określonymi typami i językami" width="494" height="404" /></a><p class="wp-caption-text">Kliknij na graf aby pobrać źródło w formacie Turtle </p></div>
<p style="text-align: center;">Do dyspozycji mamy zestaw funkcji testujących właściwości podanych węzłów w grafie RDF:</p>
<ul>
<li><strong>isIRI</strong> oraz <strong>isURI</strong> - sprawdza czy podany argument jest zasobem identyfikowanym przez URI/IRI (tzn. nie jest literałem albo bnodem).</li>
<li><strong>isBlank</strong> - sprawdza czy podany argument jest bnodem (nienazwany węzeł).</li>
<li><strong>isLiteral</strong> - sprawdza czy podany argument jest literałem.</li>
<li><strong>sameTerm</strong> - sprawdza czy podane dwa argumenty są tym samym zasobem lub literałem (zobacz <a href="http://www.w3.org/TR/rdf-concepts/" target="_blank">http://www.w3.org/TR/rdf-concepts/</a> po dodatkowe informacje)</li>
<li><strong>langMatches</strong> - sprawdza czy znacznik języka literału podanego jako pierwszy argument znajduje się w zakresie języków podanym w drugim argumencie; jako drugi parametr możemy również podać "*" do oznaczenia każdego niepustego znacznika języka. Więcej na temat porównania znaczników jezyka pod adresem <a href="http://www.ietf.org/rfc/rfc4647.txt" target="_blank">http://www.ietf.org/rfc/rfc4647.txt</a>.</li>
<li>możemy również porównać dwa węzły za pomocą <strong>znaku</strong> <strong>=</strong> (zobacz <a href="http://www.w3.org/TR/rdf-sparql-query/#func-RDFterm-equal" target="_blank">http://www.w3.org/TR/rdf-sparql-query/#func-RDFterm-equal</a> po więcej informacji)</li>
</ul>
<p>Oraz zestaw funkcji za pomocą, których możemy przekształcać podane węzły w grafie RDF do postaci ciągu znaków</p>
<ul>
<li><strong>str</strong> - zwraca ciag znaków reprezentujący dany zasób; np. w przypadku literału będzie to część literału bez znacznika języka czy typu</li>
<li><strong>lang</strong> - zwraca znacznik języka podanego literału (jeśli jest określony)</li>
<li><strong>datatype</strong> - zwraca znacznik typu podanego literału (jeśli jest określony)</li>
</ul>
<p>Dodakowo, poszczególne wyrażenia w ramach jednej frazy FILTER możemy łączyć za pomocą operatorów logicznych AND (wyrażanego jako<strong> &amp;&amp;</strong>) oraz OR (wyrażanego jako <strong>||</strong>).</p>
<p>A teraz czas na kilka przykładów.</p>
<p>Szukamy zasobów "wkazujących" na węzeł :B w naszym grafie, które są identyfikowane przez URI (a nie przez bnode).</p>
<pre>PREFIX    : &lt;http://www.semanticschool.com/&gt;
SELECT ?x
WHERE { ?x ?p :E.
        FILTER ( isBlank(?x) ) }</pre>
<p>Szukamy tych zasobów które wskazują na :E i są bnodami</p>
<pre>PREFIX    : &lt;http://www.semanticschool.com/&gt;
SELECT ?x
WHERE { ?x :g ?y.
        FILTER ( isLiteral(?y) ) }</pre>
<p>Szukamy takich zasobów które wskazują na ten sam inny zasób.</p>
<pre>PREFIX    : &lt;http://www.semanticschool.com/&gt;
SELECT ?x ?y
WHERE { ?x :g ?px.
        ?y :e ?py.
        FILTER ( sameTerm(?px, ?py) ) }</pre>
<p>Pytanie: ile bedzie par wyników dla jeżeli :g, :e zastąpimy przez ?g, ?e ?</p>
<p>Szukamy zasobów wskazujących na literały napisane po Hiszpańsku.</p>
<pre>PREFIX    : &lt;http://www.semanticschool.com/&gt;
SELECT ?x
WHERE { ?x :e ?l.
        FILTER ( langMatches( lang(?l), "ES") ) }</pre>
<p>Pytanie: ile będzie wyników jeżeli będziemy szukali zasobów w dowolnym języku ?</p>
<p>Szukamy takich zasobów które wskazują na literały nie będące określeniem czasu.</p>
<pre>PREFIX xsd:	&lt;http://www.w3.org/2001/XMLSchema#&gt;
SELECT ?x ?l
WHERE { ?x ?p ?l.
        FILTER ( datatype(?l) != xsd:dateTime  ) }</pre>
<p>Na zakończenie trochę bardziej skomplikowany przykład: szukamy takich par różnych zasobów, które wskazują na ten sam literał, oraz dla których dla pierwszego zasobu reprezentacja URI w postaci ciągu znaku występuje w sortowaniu alfabetycznym przed reprezentacja URI drugiego zasobu.</p>
<pre>SELECT ?x ?y
WHERE { ?x ?p1 ?l1.
        ?y ?p2 ?l2.
        FILTER ( isLiteral(?l1) &amp;&amp;
                      isLiteral(?l2) &amp;&amp;
                      ?l1 = ?l2 &amp;&amp;
                      ?x != ?y &amp;&amp;
                      str(?x) &gt; str(?y) ) }</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.semanticschool.com/2010/04/sparql-filtrowanie/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 1.665 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-07-30 18:57:12 -->
