<div dir="ltr">In a quick review sounds good. But I think there are two missing things:<div><br><div><font face="arial, helvetica, sans-serif">1) Special values like <b><i>nexif:flash</i></b> and other nexif ontologies needs an special treatment like the one in Nepoogle.</font></div>


</div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">2) Direct and inverse relations (nesting using QueryParser documentation).</font></div><div>
<font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Actually QueryParser only support one level, "<b>nmm:Movie</b><font color="#000000"><span style="line-height:16px;white-space:pre-wrap"><b>:(title:Avengers)</b>", but any levels must be supported like in Nepoogle and I think that syntax it's not really clever because parentheses are needed to establish precedence. In Nepoogle I using "->" and "<-" so "<b>nmm:Movie:(title:Avengers)</b>" in Nepoogle </span></font><span style="line-height:16px;white-space:pre-wrap">is "<b>nmm:Movie->nie:title:Avengers</b>".</span></font></div>


<div><span style="line-height:16px;white-space:pre-wrap;font-family:monospace"><br></span></div><div><font color="#000000"><span style="line-height:16px;white-space:pre-wrap"><font face="monospace">
</font><font face="courier new, monospace">    SELECT DISTINCT ?r
    WHERE {

      ?r nmm:Movie ?x1 . ?x1 nie:title ?v . FILTER(bif:contains(?v, "'Avengers'")) .

    }</font></span></font><span style="line-height:16px;white-space:pre-wrap;font-family:monospace">
</span></div><div><span style="line-height:16px;white-space:pre-wrap;font-family:monospace"><br></span></div><div><font color="#000000" style="font-family:arial,helvetica,sans-serif"><span style="line-height:16px;white-space:pre-wrap">And an inverse method is needed to solve several situations, for example to display all albums released in a year because this information is not in <b><i>nmm:MusicAlbum</i></b> but in <i><b>nmm:MusicPiece</b></i>. In Nepoogle the syntax is "</span></font><span style="font-family:arial,helvetica,sans-serif"><b>albums: nmm:musicAlbum<-released:2012</b>".</span><br>


</div><div><span style="font-family:Times"><br></span></div><div><div><font color="#000000" face="courier new, monospace">SELECT DISTINCT ?r AS ?id</font></div><div><font color="#000000" face="courier new, monospace">WHERE {</font></div>


<div><font color="#000000" face="courier new, monospace"><br></font></div><div><font color="#000000" face="courier new, monospace">  {</font></div><div><font color="#000000" face="courier new, monospace"><br></font></div>


<div><font color="#000000" face="courier new, monospace">    SELECT DISTINCT ?r</font></div><div><font color="#000000" face="courier new, monospace">    WHERE {</font></div><div><font color="#000000" face="courier new, monospace"><br>


</font></div><div><font color="#000000" face="courier new, monospace">      ?r rdf:type nmm:MusicAlbum . ?r nie:title ?v . </font></div><div><font color="#000000" face="courier new, monospace"><br></font></div><div><font color="#000000" face="courier new, monospace">    }</font></div>


<div><font color="#000000" face="courier new, monospace"><br></font></div><div><font color="#000000" face="courier new, monospace">  }  {</font></div><div><font color="#000000" face="courier new, monospace"><br></font></div>


<div><font color="#000000" face="courier new, monospace">    SELECT DISTINCT ?r</font></div><div><font color="#000000" face="courier new, monospace">    WHERE {</font></div><div><font color="#000000" face="courier new, monospace"><br>


</font></div><div><font color="#000000" face="courier new, monospace">      ?x1 nmm:musicAlbum ?r . {</font></div><div><font color="#000000" face="courier new, monospace">          ?x1 nie:contentCreated ?v . FILTER(bif:year(?v) = 2012) .</font></div>


<div><font color="#000000" face="courier new, monospace">        } UNION {</font></div><div><font color="#000000" face="courier new, monospace">          ?x1 nmm:releaseDate ?v . FILTER(bif:year(?v) = 2012) .</font></div>


<div><font color="#000000" face="courier new, monospace">      }</font></div><div><font color="#000000" face="courier new, monospace"><br></font></div><div><font color="#000000" face="courier new, monospace">    }</font></div>


<div><font color="#000000" face="courier new, monospace"><br></font></div><div><font color="#000000" face="courier new, monospace">  }</font></div><div><font face="courier new, monospace"><br></font></div><div><font color="#000000" face="courier new, monospace">}</font></div>


<div style><font face="arial, helvetica, sans-serif"><br></font></div><div style><font face="arial, helvetica, sans-serif"><b>nie:contentCreated</b> is the old method to store the release date in <b>nmm:MusicPiece</b>.</font></div>


<div style="font-family:Times"><br></div><div style="font-family:Times">Shortcuts are a good idea and I'm using it extensively on Nepoogle because is more comfortable write <b>pa</b> than <b>performeralbum</b> or <b>ht</b> than <b>hasTag</b>. # it's a little bit unclear but this could be solved with a good documentation.<br>


</div><div style="font-family:Times"><br></div><div style="font-family:Times">And a final question. As != means not equal and not exists so how are you planning to detect when one must be used? In Nepoogle I hardcoded this, and I don't like it, but I don't know any method to determine when and ontology is storing a value or a resource.</div>


</div><div><font color="#000000" face="monospace"><span style="line-height:16px;white-space:pre-wrap"><br></span></font></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, May 29, 2013 at 4:26 PM, Denis Steckelmacher <span dir="ltr"><<a href="mailto:steckdenis@yahoo.fr" target="_blank">steckdenis@yahoo.fr</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>On 05/29/2013 04:07 PM, Ivan Čukić wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Denis,<br>
<br>
The proposal looks quite nice. If I may, I'd suggest a shorthand for the<br>
hasTag - for example #dog to mean hasTag:dog.*<br>
<br>
One of the reasons (apart from greater usability) is that according to the<br>
proposal hasTag:red herring would mean either<br>
  - hasTag:"red herring"<br>
  - hasTag:red contains:herring (implied property contains)<br>
  - hasTag:red hasTag:herring (implied property hasTag)<br>
<br>
By allowing a shorthand for hasTag, you remove the need for that property to<br>
be an implied one.<br>
<br>
<br>
Cheerio,<br>
Ivan<br>
<br>
* firefox uses + for this, but I guess that # is more widely known thanks to<br>
twitter-like services.<br>
<br>
</blockquote>
<br></div>
Hi,<br>
<br>
This is a great idea ! A string beginning with a # could be considered to be a tag and nothing else, and the lexer can be made to end #-prefixed strings at the first space encountered (thus making them one-word strings).<br>



<br>
I would not remove the implied hasTag, though, as I think that the parser must remain friendly to very non-technical people that don't know the hashtag syntax or don't know they can use it in a Nepomuk query field. If I type "holidays" in KRunner, and I have a "holidays" tag, the most pertinent result would be the list of my documents having been tagged as "holidays".<span><font color="#888888"><br>



<br>
Denis.</font></span><div><div><br>
______________________________<u></u>_________________<br>
Nepomuk mailing list<br>
<a href="mailto:Nepomuk@kde.org" target="_blank">Nepomuk@kde.org</a><br>
<a href="https://mail.kde.org/mailman/listinfo/nepomuk" target="_blank">https://mail.kde.org/mailman/<u></u>listinfo/nepomuk</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Best wishes,<div>Ignacio</div><div><br></div>
</div></div>