[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[higgins-dev] [IdAS] filter language: XPath/SPARQL


I've been thinking about the filter language, and (as usual) have come up with more questions than answers. My plan was to use the recently-posted Example Ontology (http://spwiki.editme.com/ExampleContextOntology) as a springboard to compare XPath expressions and SPARQL expressions. Didn't quite get there...


For the following discussion, I will ONLY be considering the filter used in Context.getSubjects(filter).

-----
Question 1: Is the filter expression intended to apply to (a) the entire Context (i.e., the result of the filter should be the set of DigitalSubjects that match), or (b) to a DigitalSubject (i.e., look at each DigSub and add it to the list if the filter is true)?


If (a) then we might have matches to nodes (objects) that aren't DigSubs. If (b), we can't take advantage of SPARQL expressions that let you control the ordering, number, etc., of the results. Going forward, I'll assume that it's (b).


-----
Question 2: Is there a canonical RDF/XML representation of any given RDF graph? The Primer (http://www.w3.org/TR/rdf-primer/) lists many abbreviations that can be used, and so there are many possible XML representation of a given graph. For example, let's assume that the example Person type only has two elements: firstname and surname. The subject could be represented either as:


<rdf:Description rdf:about="urn:jim-sermersheim">
      <jim:firstname>Jim</jim:firstname>
</rdf:Description>

<rdf:Description rdf:about="urn:jim-sermersheim">
      <jim:surname>Sermersheim</jim:surname>
</ref:Description>

Or as the following:

<rdf:Description rdf:about="urn:jim-sermersheim">
      <jim:firstname>Jim</jim:firstname>
      <jim:surname>Sermersheim</jim:surname>
</ref:Description>

In the second case, an XPath expression '.[jim:firstname="Jim" and jim:surname="Sermersheim"]' would work, but in the first case it wouldn't. (I apologize if I don't get the XPath syntax quite right -- I'm a newbie.) Is there a way to handle the first case in XPath? If the "canonical" RDF/XML representation combines all nodes with the same rdf:about attribute, then maybe this is OK.

In both cases, the following SPARQL query would be fine: { ?x jim:firstname "Jim" . ?x jim:surname "Sermersheim" }.

Another case is the representation of type. In Paul's example, we say that urn:jim-sermersheim is a Person as follows:

<rdf:Description rdf:about="urn:jim-sermersheim">
      ...
      <rdf:type>
            <rdf:Description rdf:about="&jim;Person>
      </rdf:type>
</rdf:Description>

But in the Primer, they tend to use the following:

<rdf:Description rdf:about="urn:jim-sermersheim">
      ...
      <rdf:type rdf:resource="http://www.novell.com/jim#Person"; />
</rdf:Description>


In one case the type is an element, and in the other it's an attribute. How would you use XPath in this case?



-----
Question 3: In the example, hasPostalAddress is a separate object. The postal address information is not an XML descendent of the jim-sermersheim node, and there's no link back to the jim-sermersheim node from the jims-address node.


Given this schema, how would one search for all DigSubs from a particular city?

In SPARQL, you'd say: { ?x jim:hasPostalAddress ?addr . ?addr jim:city "Provo" }.

Is there a way to do this in XPath? I wasn't able to figure it out, based on my limited research.