tolog updates<br />TMRA 2009, November 12, Leipzig<br />Lars Marius Garshol, &lt;larsga@bouvet.no&gt;<br />
Why an update language?<br />Easier to use than the API<br />empowers new groups of users<br />Potentially better performa...
Why one based on tolog?<br />TMQL was not ready at the time<br />in fact, it still isn’t<br />We have a tolog implementati...
What it contains<br />INSERT: add new data to topic map using CTM<br />DELETE: remove data from topic map<br />MERGE: merg...
The language<br />
DELETE<br />Static form<br />delete lmg<br />Dynamic form<br />delete $person from instance-of($person, person)<br />
Deletion effects<br />Deleting topic removes<br />from scope<br />from topic types<br />objects typed with<br />as reifier...
Delete functions<br />Used for removing values from set properties<br />delete subject-identifier(topic, “http://ex.org/ts...
MERGE<br />Static form<br />MERGE topic1, topic2<br />Dynamic form<br />MERGE $p1, $p2 FROM									instance-of($p1, perso...
INSERT<br />Static form<br />INSERT lmg isa person; - “Lars Marius Garshol” .<br />Dynamic form<br />INSERT 										    ...
Another INSERT example<br />INSERT $topic $psi . FROM							instance-of($topic, $type),						instance-of($type, psi-type),...
Yet another<br />INSERT event-in-year(event: $e, year: $y) FROM start-date($e, $date), 			str:substring($y, $date, 4)<br />
Ugliness with INSERT<br />Other statements can use %parameter% syntax<br />in INSERT this is not possible in the CTM part<...
UPDATE<br />Static form<br />UPDATE value(@3421, “New name”)<br />Dynamic form<br />UPDATE value($TN, “Ontopia”)							FRO...
The UPDATE functions<br />value($object, $string)<br />works on topic name, variant, occurrence<br />resource($object, $st...
Considerations<br />
New API<br />Old API has QueryProcessorIF methods<br />QueryResultIF execute(String)<br />ParsedQueryIF parse(String)<br /...
New access methods<br />Omnigator query plug-in<br />being extended to support updates<br />TMRAP web service<br />being e...
A scripting language?<br />Considering to make a language supporting batches of statements<br />that is, running series of...
Implementation<br />Mostly straightforward...<br />new classes to represent parsed versions of new statements<br />all ref...
Concerns<br />Is it expressive enough?<br />just about any modification can be expressed<br />however, it might require ma...
Current status<br />All four statement types implementated<br />Test suite added<br />Some minor nits still need sorting o...
Future work<br />Start using the language<br />Write documentation!<br />Hand it over to users<br />See how it goes<br />
Upcoming SlideShare
Loading in …5
×

Tolog Updates

4,416 views

Published on

Describes the update language part of the tolog query language for Topic Maps.

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
4,416
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Tolog Updates

  1. 1. tolog updates<br />TMRA 2009, November 12, Leipzig<br />Lars Marius Garshol, &lt;larsga@bouvet.no&gt;<br />
  2. 2. Why an update language?<br />Easier to use than the API<br />empowers new groups of users<br />Potentially better performance than the API<br />Can be embedded in various DSLs<br />Architectural benefits<br />enables JDBC-like API<br />easily accessible over the network<br />
  3. 3. Why one based on tolog?<br />TMQL was not ready at the time<br />in fact, it still isn’t<br />We have a tolog implementation<br />implementing the query part is the biggest job<br />So tolog was the pragmatic choice<br />
  4. 4. What it contains<br />INSERT: add new data to topic map using CTM<br />DELETE: remove data from topic map<br />MERGE: merge objects<br />UPDATE: change existing values<br />
  5. 5. The language<br />
  6. 6. DELETE<br />Static form<br />delete lmg<br />Dynamic form<br />delete $person from instance-of($person, person)<br />
  7. 7. Deletion effects<br />Deleting topic removes<br />from scope<br />from topic types<br />objects typed with<br />as reifier<br />Topic map<br />Topic<br />Name<br />Variant<br />Occurrence<br />Association<br />Role<br />
  8. 8. Delete functions<br />Used for removing values from set properties<br />delete subject-identifier(topic, “http://ex.org/tst”)<br />delete item-identifier(topic, “file://...#tst”)<br />delete subject-locator(topic, “http://ex.org”)<br />Other functions<br />scope($statement, $topic)<br />reifies($reified, $reifier)<br />direct-instance-of($topic, $type)<br />
  9. 9. MERGE<br />Static form<br />MERGE topic1, topic2<br />Dynamic form<br />MERGE $p1, $p2 FROM instance-of($p1, person), instance-of($p2, person), email($p1, $email), email($p2, $email)<br />
  10. 10. INSERT<br />Static form<br />INSERT lmg isa person; - “Lars Marius Garshol” .<br />Dynamic form<br />INSERT tmcl:belongs-to-schema(tmcl:container : $s, tmcl:containee: $c) FROM instance-of($c, tmcl:constraint)<br />
  11. 11. Another INSERT example<br />INSERT $topic $psi . FROM instance-of($topic, $type), instance-of($type, psi-type), topic-name($topic, $name), value($name, $value), str:translate($value, $token, ..., ...), str:concat($psi, “http://psi.example.org/...”)<br />
  12. 12. Yet another<br />INSERT event-in-year(event: $e, year: $y) FROM start-date($e, $date), str:substring($y, $date, 4)<br />
  13. 13. Ugliness with INSERT<br />Other statements can use %parameter% syntax<br />in INSERT this is not possible in the CTM part<br />have to say FROM $a = %a% to translate<br />May need to project away variables used in query but not in CTM<br />right now this is done via an implicit projection<br />not clear whether this will confuse users or not<br />
  14. 14. UPDATE<br />Static form<br />UPDATE value(@3421, “New name”)<br />Dynamic form<br />UPDATE value($TN, “Ontopia”) FROM topic-name(oks, $TN)<br />
  15. 15. The UPDATE functions<br />value($object, $string)<br />works on topic name, variant, occurrence<br />resource($object, $string)<br />works on variant and occurrence<br />
  16. 16. Considerations<br />
  17. 17. New API<br />Old API has QueryProcessorIF methods<br />QueryResultIF execute(String)<br />ParsedQueryIF parse(String)<br />New API adds<br />int update(String)<br />ParsedModificationStatementIF parseUpdate(String)<br />also adds ParsedStatementIF as common interface<br />
  18. 18. New access methods<br />Omnigator query plug-in<br />being extended to support updates<br />TMRAP web service<br />being extended with a tolog-update request<br />
  19. 19. A scripting language?<br />Considering to make a language supporting batches of statements<br />that is, running series of modification statements<br />perhaps also setting variables<br />Not clear what features are needed<br />for loops? if? etc<br />
  20. 20. Implementation<br />Mostly straightforward...<br />new classes to represent parsed versions of new statements<br />all reference the class for SELECT statements for their FROM subqueries<br />...except CTM parsing<br />requires two different Antlr parsers (CTM & tolog)<br />had to split the query string in advance, then pass different pieces to different parsers<br />
  21. 21. Concerns<br />Is it expressive enough?<br />just about any modification can be expressed<br />however, it might require many statements<br />Do INSERT statements need “if”?<br />to handle missing values, for example<br />Rules and templates<br />currently, these cannot be defined in modification statements<br />is that a bug? or a feature?<br />
  22. 22. Current status<br />All four statement types implementated<br />Test suite added<br />Some minor nits still need sorting out<br />
  23. 23. Future work<br />Start using the language<br />Write documentation!<br />Hand it over to users<br />See how it goes<br />

×