[tmql-wg] Hello and proposal
Stefan Lischke
lischke@ivs.tu-berlin.de
Tue, 23 Mar 2004 17:59:21 +0100
Hello TMQL Community,
My Name is Stefan Lischke, i'm interested in TopicMaps, artificial
intelligence and XML stuff.
I'm involved in the OpenSource projects:
XTM4XMLDB(TMAPI impl with native XML:DB backend)
tinyTIM(small in memory TMAPI impl)
TMAPI(Topic Map Api)
I just want to say hello to this Community, cause i'm also interested in
a TopicMap Query Language.
I want to tell you about my experience with sorts of query languages i used:
Writing xtm4xmldb gave me the opportunity to use XPath as a Query
languages on the TopicMaps, cause i used a native XML:DB (OpenSource
project eXist) as backend. [for faster access i split up topicmaps into
small XTM pieces, so once a TopicMap is imported there are all Topics
and all Associations in small XML snippets].
Using XPath on this TopicMap is now very fast.
I don't know if you are involved with the TMAPI IndexAPI, thats an API
to have fast access for example to all Occurrences of a Type, or fast
access to BaseNames by BaseNameString.
I implemented these Indexes with XPath and with eXist retrieval is
really fast also when there are Millions of Topics.
Since this year eXist also offers XQuery to Query the DB with more
inbuilt logic. with xtm4xmldb i'm now able to use XQuery to retrieve
TopicMap Fragments.
I have played a little bit with that and also used XSLT's alot ontop of XTM.
My experience shows me, that working with XPath ontop of XTM is pain in
the a**, cause you only have the TopicID as reference. so if you want to
have a Topic of a special Type, you have to know the XML TopicID of this
type.
/topicMap/topic[instanceOf/topicRef/@xlink:href='#typeID']
thats not very topicmapish,. We should specify the Typing Topic for
example by its subject locator not with its id, which varies for example
in the OKS. with XPath it would look like:
/topic[substring-after(instanceOf/topicRef/@xlink:href,'#') =
/topic[subjectIdentity/resourceRef/@xlink:href='typeURI']/@id]
Is everybody convinced now, that pure XPath should not be used to Query
TopicMaps?
I propose the following:
We should create shortcuts that can be expanded to those above.
If we have shortcuts, we could use them in XQuery too, but we also have
to create shortcuts for XQuery for example for creating Topics.
Here is an Example thats pure XQuery from
http://130.83.186.203/exist/xquery/xquery.xq
for $city in /mondial//city[name&='tre*']
return
<result>
{$city}
<country>{$city/ancestor::country/name}</country>
<province>{$city/ancestor::province/name}</province>
</result>
I just make a pseudo TopicMap Example from it using some XPath shortcuts
which i proposed above:
for $topic1 in $topicmap.topic.type='typeURI'
for $topic2 in $topicmap.topic.subjectLocator='somethingURI'
return
<association>
<instanceOf>
<topicRef @xlink:href="#someAssoc"/>
</instanceOf>
<member>
<topicRef xlink:href=$topic1.id/>
</member>
<member>
<topicRef xlink:href=$topic2.id/>
</member>
</association>
Now we have to create XQuery shortcuts to create the Association:
for $topic1 in $topicmap.topic.type='typeURI'
for $topic2 in $topicmap.topic.subjectLocator='somethingURI'
return
association($topicmap.topic.subjectLocator='someAssocURI', $topic1,
$topic2)
With that we could have a TMQL ontop of XPath and XQuery. We could use
sinful function from XPath and XQuery like substring, count and so on
and we don't have to write a TMQL engine by ourself, we just have to
expand the "shortcuts" and use XPath and XQuery impl.
Hope that helps,
I apologies if something like this has gone through the Mailinglist before.
yours Stefan