http://www.ldodds.com/wordtin/wordtinWordtin: Leigh Dodds's Personal Wikien-usDataMergingWithRDFhttp://www.ldodds.com/wordtin/wiki/DataMergingWithRDFAn unknown author created this page on Fri Apr 27 16:09:04 GMT 2007:<br /><hr /><br /><p><i>This page contains draft notes towards an essay on how data merging is carried out with RDF and Semantic Web technologies</i>
</p><p>Everyone (including myself) always says that data merging is "easier" with RDF and Semantic Web technologies. But there's very little documentation that explicitly backs up that argument. Most of the discussion involves hand waving such as "it all magically happens when we use the same identifiers"
</p>
<p>But RDF, along with a smattering of OWL and a rules language, supports a range of declarative approaches to data integration.
</p>
<p>Laying out the options will hopefully highlight where the "easier" data merging happens. It'll also highlight where there's still room for improvement. And perhaps also suggest where people need to focus on just the useful bits of OWL.
</p>
<h3 id="section-DataMergingWithRDF-WhereWeShareTheSameIdentifiers">Where We Share the Same Identifiers</h3>
<h3 id="section-DataMergingWithRDF-WhereWeHaveDifferentIdentifiers">Where We Have Different Identifiers</h3>
<h4 id="section-DataMergingWithRDF-...butHaveACommonPrimaryKey">...but have a common "primary key"</h4>
<h4 id="section-DataMergingWithRDF-...butOurResourcesAreAPrimaryKeyThemselves">...but our resources are a "primary key" themselves</h4>
<h4 id="section-DataMergingWithRDF-...whereWeCanInferARelationship">...where we can infer a relationship</h4>12007-04-27T16:09:04ZAn unknown authorhttp://www.ldodds.com/wordtin/PageInfo.jsp?page=DataMergingWithRDFMainhttp://www.ldodds.com/wordtin/wiki/MainAn unknown author created this page on Fri Apr 27 15:48:44 GMT 2007:<br /><hr /><br /><p>My online research notebook.
</p><p><a class="wikipage" href="/wordtin/wiki/DataMergingWithRDF">DataMergingWithRDF</a>
</p>
<p><a class="wikipage" href="/wordtin/wiki/LinkAnnotations">LinkAnnotations</a>
</p>
<h3 id="section-Main-12thOctober2005">12th October 2005</h3>
<p><a class="wikipage" href="/wordtin/wiki/UniqueNamesAssumption">UniqueNamesAssumption</a>
</p>
<h3 id="section-Main-2ndFebruary2005">2nd February 2005</h3>
<p><a class="wikipage" href="/wordtin/wiki/TwinkleNotes">TwinkleNotes</a>
</p>
<h3 id="section-Main-6thJanuary2005">6th January 2005</h3>
<p><a class="wikipage" href="/wordtin/wiki/OnlineAccountToBookmarkletGenerator">OnlineAccountToBookmarkletGenerator</a>
</p>
<h3 id="section-Main-24thFebruary">24th February</h3>
<p><a class="wikipage" href="/wordtin/wiki/CocoonHTMLGenerator">CocoonHTMLGenerator</a>
</p>
<h3 id="section-Main-18thSeptember">18th September</h3>
<p><a class="wikipage" href="/wordtin/wiki/InstantMessagingClients">Instant Messaging Clients</a> -- for reference
</p>
<h3 id="section-Main-26thAugust">26th August</h3>
<p>Some related notes on an essay/article I'm formulating. Will probably end up in the 'blog.
</p>
<p><a class="wikipage" href="/wordtin/wiki/APIsAndEmergence">APIsAndEmergence</a>
</p>
<p><a class="wikipage" href="/wordtin/wiki/OpenWorldModel">OpenWorldModel</a>
</p>
<h3 id="section-Main-13thJune">13th June</h3>
<p><a class="wikipage" href="/wordtin/wiki/ExtractingMetadataFromOfficeDocuments">ExtractingMetadataFromOfficeDocuments</a>
</p>
<h3 id="section-Main-30thApril">30th April</h3>
<p><a class="wikipage" href="/wordtin/wiki/CommunityTopicBuilding">CommunityTopicBuilding</a>
</p>
<h3 id="section-Main-17thMarch">17th March</h3>
<p><a class="wikipage" href="/wordtin/wiki/Bookmarklet">Bookmarklet</a>; <a class="wikipage" href="/wordtin/wiki/BookmarkletBootloader">Bookmarklet Bootloader</a>; <a class="wikipage" href="/wordtin/wiki/BookmarkletAsIntermediary">Bookmarklet As Intermediary</a>
</p>
<h3 id="section-Main-26thJanuary">26th January</h3>
<p>Some notes on <a class="wikipage" href="/wordtin/wiki/LittleLanguages">Little Languages</a>. Here's a little language called <a class="external" href="http://www.ldodds.com/blog/archives/000012.html">Spooky</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> for making project structures using Ant
</p>
<h3 id="section-Main-20thDecember">20th December</h3>
<p>First <a class="external" href="http://www.ldodds.com/foaf/foaf-a-matic-beta-1.zip">beta release of the FOAF-a-Matic Mark 2</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> is available. Currently it only handles creation of FOAF data so the import options aren't available. Thats next!
</p>
<p>The intention for this beta is to gain feedback on the user interface and basic application. Should be better than looking at screen shots anyway!
</p>
<h3 id="section-Main-16thDecember">16th December</h3>
<p>Added <a class="wikipage" href="/wordtin/wiki/FOAFaMaticChangelog">FOAF-a-matic Mark 2 Change Log</a>.
</p>
<h3 id="section-Main-13thDecember">13th December</h3>
<p>More notes in the <a class="wikipage" href="/wordtin/wiki/FOAFaMaticMark2">FOAFaMaticMark2</a> page indicating my progress, couple of extra thoughts prompted by excellent feedback from <tt>rdfweb-dev</tt> amongst others, and some new screen shots. Beta code will be available Real Soon Now -- I really want to get the Friends data entry stuff completed first. Won't take long I promise...
</p>
<p>Growing to like Thinlets more and more, and will probably be able to produce some helper classes for others work with the API, e.g. for dialog management, table data entry, etc. Thinking about writing a tutorial as well.
</p>
<h3 id="section-Main-11thDecember">11th December</h3>
<p>Added page for the <a class="wikipage" href="/wordtin/wiki/FOAFaMaticMark2">FOAFaMaticMark2</a>. A GUI FOAF editing tools built around the Thinlet framework.
</p>
<h4 id="section-Main-9thDecember">9th December</h4>
<p>I've been working with Java user interfaces a bit recently, taking a more detailed look at Swing than I have previously, and finding it a lot more pleasant experience than I remembered.
</p>
<p>I've been building a scriptable user interface and application framework. ostensibly as a jumping off point for some day job utilities I'd like to build, but I'm thinking about open sourcing it instead. I'm quite pleased with how its progressing.
</p>
<p>I've also been taking a closer look at the <a class="external" href="http://www.thinlet.com">Thinlet</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> framework which I quite like, but it has some quirks which I'd love to see ironed out. Here are some <a class="wikipage" href="/wordtin/wiki/NotesOnThinlets">NotesOnThinlets</a> (thanks to <a class="external" href="http://www.citnames.com/blog">Danny Ayers</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> for prompting me to write these up)
</p>
<p>Note to self: should I switch to using <a class="external" href="http://www.snipsnap.org">SnipSnap</a><img class="outlink" src="/wordtin/images/out.png" alt="" />?
</p>
<h4 id="section-Main-12thSeptember">12th September</h4>
<p>Here's some work I did a while back on automatically <a class="wikipage" href="/wordtin/wiki/GeneratingJSPTagLibraryDocumentation">Generating JSP Tag Library Documentation</a>.
</p>
<p>It bugs me slightly that none of the Java web application configuration formats (web.xml, JSP tag library descriptors, ejb-jar.xml, etc) use namespaces. If Sun caught up a bit with the XML world then we could freely mix together configuration options with documentation, etc.
</p>
<p><a class="wikipage" href="/wordtin/wiki/RDFDataMining">RDF Data Mining</a>
</p>
<h4 id="section-Main-10thSeptember">10th September</h4>
<p>A list of <a class="wikipage" href="/wordtin/wiki/XMLWikis">XML Wikis</a>
</p>
<h4 id="section-Main-5thSeptember">5th September</h4>
<p>Finished tinkering with the CSS and reworking the pages. Thanks to Andrew May for helping me out with various CSS tips and particularly a hack using @import that stopped the site crashing Netscape 4.7 (it still looks ugly, but you can read it). And thanks to the Dulux paint catalogue for helping me choose a background colour. We're not painting the kitchen this colour after all, so I decided to use its (<a class="external" href="http://www.fredtek.com/tech/webdev/colors.htm">web safe</a><img class="outlink" src="/wordtin/images/out.png" alt="" />) equivalent here.
</p>
<p>Now to get on with some work, as well as rolling out the same page design across the rest of the site. Will probably use a combination of Ant and XSLT to manage the static portions.
</p>
<h4 id="section-Main-29thAugust">29th August</h4>
<p>A while back I posted a brief summary of an Architectural Forms discussion to XML-DEV. I've pulled that summary into this site, so I can expand on it and make it into a more fully-fledged article.
</p>
<p>See: <a class="wikipage" href="/wordtin/wiki/ArchitecturalForms">ArchitecturalForms</a>
</p>
<p>Nearly finished the page redesign for this site. Basically I've just refactored the JSPWiki JSP pages into chunks that I find more manageable, made them (hopefully) XHTML compliant, and altered the CSS styling. It's the latter I'm still tinkering with mostly.
</p>
<p>btw, only I can post here, it's not a public Wiki, its a private notebook.
</p>
<h4 id="section-Main-23rdAugust">23rd August</h4>
<p>I downloaded the <a class="external" href="http://www.topologi.com">Topologi</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> Collaborative Markup Editor. Here are my
notes about <a class="wikipage" href="/wordtin/wiki/HackingTME">Hacking TME</a> to add custom plugins.
</p>
<h4 id="section-Main-21stAugust">21st August</h4>
<p>Migrating content from personal Wiki into here shortly. Not sure whether to leave this as complete open access or restrict things in some way. I may try activating the <a class="createpage" href="/wordtin/Edit.jsp?page=RCSFileProvider" title="Create "RCSFileProvider"">RCSFileProvider</a>.
</p>
<p>Also need to tweak the layout of these pages so they look a bit nicer.
</p>
<p>I did gather together a large amount of notes about <a class="wikipage" href="/wordtin/wiki/Cocoon">Cocoon</a> which I've actually donated to the <a class="external" href="http://www.outerthought.net/wiki/">CocoDocoWiki</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> as a means to bootstrap that community. Seems to have worked.
</p>
<p>Added the notes I took whilst at the <a class="wikipage" href="/wordtin/wiki/XMLEurope2002">XML Europe 2002</a> conference.
</p>
<p>Start of a comparison of <a class="wikipage" href="/wordtin/wiki/XMLPipelineFrameworks">XML Pipeline Frameworks</a>
</p>
<p />12007-04-27T15:48:44ZAn unknown authorhttp://www.ldodds.com/wordtin/PageInfo.jsp?page=MainLinkAnnotationshttp://www.ldodds.com/wordtin/wiki/LinkAnnotationsAn unknown author created this page on Mon Mar 12 21:56:13 GMT 2007:<br /><hr /><br /><ul><li>In what different ways can links be annotated to convey useful information to a user?
</li><li>What different systems and/or techniques are available to build on?
</li><li>How might a document be annotated with additional links?
</li></ul><h4 id="section-LinkAnnotations-AdaptiveNavigation">Adaptive Navigation</h4>
<p>From <a class="external" href="http://www.cs.brown.edu/memex/ACM_HypertextTestbed/papers/25.html">Adaptive Navigation</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> we get:
</p>
<ul><li>directional guidance, e.g. "next", "previous". How is direction determined? Must it only be by the original author or publisher?
</li><li>sorting of links, based on some measure of relevance? Its easy to extra links, but how does one specify their relevance, or the goal that one is working towards?
</li><li>changing anchors, using symbols or colours to indicate their target (e.g. in-site, off-site) or again based on a measure of relevance
</li><li>hiding or disabling or removing "non-relevant" links
</li></ul><h4 id="section-LinkAnnotations-DirectLinkAnnotation">Direct Link Annotation</h4>
<ul><li>Adding title attributes to anchors during authoring to add description/comments
</li><li>Dynamically fetching information to populate title attributes, e.g. mattb's script on hackdiary fetches del.icio.us top tags for that page
</li><li>popup menus triggered by mouse overs, hover, or link selection offer a richer means of annotating links
</li></ul><h4 id="section-LinkAnnotations-Previews">Previews</h4>
<p><a class="external" href="http://www.snap.com/about/spa1B.php">Snap Preview Anywhere</a><img class="outlink" src="/wordtin/images/out.png" alt="" />, note: <a class="external" href="http://technology.guardian.co.uk/weekly/story/0,,2017953,00.html">backlash</a><img class="outlink" src="/wordtin/images/out.png" alt="" />
</p>
<p><a class="external" href="http://www.websnapr.com/">WebSnapr</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> and <a class="external" href="http://www.frequency-decoder.com/2006/10/25/link-preview-v2/">Link Preview</a><img class="outlink" src="/wordtin/images/out.png" alt="" />
</p>
<p>See also Matt Webb on "taste", <a class="external" href="http://interconnected.org/notes/2006/06/reboot8/senses/?p=8">here</a><img class="outlink" src="/wordtin/images/out.png" alt="" />, sampling the ends of a link.
</p>
<p><a class="external" href="http://www.readwriteweb.com/archives/web_previews_overview.php">Discussion of web previews on readwriteweb</a><img class="outlink" src="/wordtin/images/out.png" alt="" />
</p>
<p><a class="external" href="http://www.cooliris.com/Site/index.html">Cooliris</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> (browser plugin)
</p>
<p><a class="external" href="http://www.syntactica.com/">iReader</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> from Syntactica uses text analysis to summarise a site. <a class="external" href="http://www.readwriteweb.com/archives/ireader_content_previews.php">Review on readwriteweb</a><img class="outlink" src="/wordtin/images/out.png" alt="" />
</p>
<h4 id="section-LinkAnnotations-Statistics">Statistics</h4>
<p><a class="external" href="http://www.recommendedwebtools.com/index.php/191/mybloglog-introduces-clicktagging/">Click Tagging</a><img class="outlink" src="/wordtin/images/out.png" alt="" />
</p>
<p />12007-03-12T21:56:13ZAn unknown authorhttp://www.ldodds.com/wordtin/PageInfo.jsp?page=LinkAnnotationsUniqueNamesAssumptionhttp://www.ldodds.com/wordtin/wiki/UniqueNamesAssumptionAn unknown author created this page on Wed Oct 12 09:37:45 GMT 2005:<br /><hr /><br /><p>What is the Unique Names Assumption?
</p><p>And how does it apply to RDF and SPARQL?
</p>
<p>Or: why can't I have aggregate functions in SPARQL? E.g. COUNT?
</p>
<h4 id="section-UniqueNamesAssumption-Context">Context</h4>
<p>Comment from Andrew Newman (showed up on planetrdf, but disappeared from blog?):
</p>
<p><i>'
...purists would probably say that it shouldn't be possible to write (SQL) queries that are semantically inconsistent.
</i></p>
<p><i>To me this would be similar to extending SPARQL with COUNT for example with out resolving the semantic inconsistencies between the RDF model and one that assumes unique names.</i>
</p>
<p>Comment from Dan Connolloy in <a class="external" href="http://lists.w3.org/Archives/Public/public-rdf-dawg/2005AprJun/0023">evaluating SPARQL w.r.t an RDF query language survey</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> (5th April 2005):
</p>
<p><i>
Count the number of authors of a publication.
</i></p>
<p><i>nope.
</i></p>
<p><i>unique names assumption.
</i>
</p>
<p>Whereas Jeen Broekstra <a class="external" href="http://lists.w3.org/Archives/Public/public-rdf-dawg/2005AprJun/0036.html">responded</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> by saying:
</p>
<p><i>
I have trouble with this. I think that defining a counting operation that does not count entities, but simply labels (URIs, bNodes, literals), would be useful. This does not make any unique names assumption, AFAICS. Counting would simply be a way of retrieving the number of results a query would give, without giving the actual result.
</i>
</p>
<h4 id="section-UniqueNamesAssumption-AdditionalNotes">Additional Notes</h4>
<p>This <a class="external" href="http://logic.stanford.edu/classes/cs157/2005fall/lectures/lecture15.pdf">presentation on Equality in logic</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> (Warning: PDF!) describes the UNA as:
</p>
<p><i>
In many applications, one makes the assumption that
every object has a unique name. This is called the
unique names assumption (UNA). The upshot is that
a difference in name implies a difference in referent.
</i></p>
<p><i>σ= τ ⇔ σi = τi
</i></p>
<p><i>The unique names assumption is not true in general!!!
</i>
</p>
<p>This document, <a class="external" href="http://metadata-standards.org/metadata-stds/Document-library/Documents-by-number/WG2-N0851-N0900/WG2-N0873-XMDR-Whitepaper-on-Ontologies-and-Formal-Statements-for-ISOIEC-11179-discussions.htm">Ontologies and Formal Statements for ISO/IEC 11179</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> (19th Sept 2005) says:
</p>
<p><i>
...it is necessary to specify whether the unique name assumption holds for a particular ontology.
</i></p>
<p><i>The unique names assumption (UNA) asserts that different names for objects implies that they are different individuals, i.e., individuals do not have aliases. Such an assumption is used in equality testing. Unique names are called "keys" in database parlance.
</i></p>
<p><i>The absence of the unique names assumption implies that individuals may have many names and that no inference of distinctness may be drawn by the observation of differing names. On the World Wide Web (WWW) unique names assumptions are not valid, because hosts may have more than one name, and files may have multiple links to them. In many file systems which support multiple links to a file the UNA does not hold. Finally, in email systems a user may have multiple email addresses (identities).
</i>
</p>
<p><a class="external" href="http://www.w3.org/TR/2004/REC-owl-guide-20040210/#term_uniqueName">OWL does not have a unique names assumption</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> (see this <a class="external" href="http://www.w3.org/2001/sw/WebOnt/webont-issues.html#I5.18-Unique-Names-Assumption-Support-in-OWL">resolved issue description</a><img class="outlink" src="/wordtin/images/out.png" alt="" />)
</p>
<p>See also Andrew Newmans posting: <a class="external" href="http://morenews.blogspot.com/2005/03/why-different-things-are-same.html">Why Different Things Are the Same</a><img class="outlink" src="/wordtin/images/out.png" alt="" />, in which he notes:
</p>
<p><i>
So using cardinality restrictions, systems can infer that if you have two values for a property when the ontology defines you should have one, it's not that you've broken cardinality, it's that those values are actually the same/equal. In Paul's example sameAs isn't required - firstPropertyOne and firstPropertyTwo are the same. This seems weird, completely backwards and very non-intuitive.
</i>
</p>
<h4 id="section-UniqueNamesAssumption-Conclusions">Conclusions</h4>
<p>I'm with Jeen, a mechanism to just count labels would be a useful one. I can (just about!) understand the wider issues for ontologies, reasoning, etc. But for a query language it would just be useful to be able to perform some aggregate operations on the results.
</p>
<p>E.g. count number of solutions.
</p>
<p />12005-10-12T09:37:45ZAn unknown authorhttp://www.ldodds.com/wordtin/PageInfo.jsp?page=UniqueNamesAssumptionOnlineAccountToBookmarkletGeneratorhttp://www.ldodds.com/wordtin/wiki/OnlineAccountToBookmarkletGeneratorAn unknown author created this page on Fri Jun 17 08:58:13 GMT 2005:<br /><hr /><br /><h4 id="section-OnlineAccountToBookmarkletGenerator-Introduction">Introduction</h4>
<p>FOAF has classes and properties that can be used to relate a person to an online account that they have with a given service.
</p>
<p>Many services provide their users with bookmarklets that allow them to interact with their functionality. And increasingly these services are RESTful, meaning the URLs typically include the users account name.
</p>
<p>Many people write additional, improved bookmarklets that supplement or extend the basic functionality of these services, sometimes in conjunction with other services. It's often difficult to track all these extra facilities.
</p>
<p>Wouldn't it be nice if one could use a browser extension that serves you with all the latest bookmarklets for your services, without your having to track them all down?
</p>
<h4 id="section-OnlineAccountToBookmarkletGenerator-ImplementationNotes">Implementation Notes</h4>
<p>Craft an RDF document to describe the bookmarklets.
</p>
<p>Write some code to process a FOAF description, containing <a class="createpage" href="/wordtin/Edit.jsp?page=OnlineAccount" title="Create "OnlineAccount"">OnlineAccount</a> information, merging that with the above to generate usable Javascript.
</p>
<p>Output these links as an RSS feed, so that they can be subscribed to using the Firefox Live Bookmark facility. <i>Firefox doesn't allow this, presumably because of potential security breaches</i>
</p>
<p>Output these links as a bookmarks file so they can be easily imported into Firefox.
</p>
<h4 id="section-OnlineAccountToBookmarkletGenerator-DescribingTheBookmarklets">Describing the Bookmarklets</h4>
<pre>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:js="http://purl.org/net/schemas/js/">
<rdf:Description rdf:about="http://del.icio.us">
<dc:title>del.icio.us</dc:title>
<js:hasBookmark rdf:nodeID="#del-popup"/>
<js:hasBookmark rdf:nodeID="#expt"/>
</rdf:Description>
<js:Bookmarklet rdf:nodeID="#del-popup">
<rdf:label>Popup Post to Del.icio.us<rdf:label>
<js:code>javascript:......$accountName....</js:code>
</js:Bookmarklet>
<js:Bookmark rdf:nodeID="#expt">
<rdf:label>extisp.icio.us</rdf:label>
<js:url>http://kevan.org/extispicious.cgi?name=$accountName</js:url>
</js:Bookmark>
</rdf:RDF>
</pre>
<p />
<p>Generating the bookmarks is just a matter of merging this file with the users FOAF description. The <tt>accountServiceHomepage</tt> property will link the user's <tt><a class="createpage" href="/wordtin/Edit.jsp?page=OnlineAccount" title="Create "OnlineAccount"">OnlineAccount</a></tt> to the bookmarklet data. The code need only replace occurences of $accountName in the bookmark(let) data to generate the
working Javascript code.
</p>
<p>The value of the <tt>js:url</tt> and <tt>js:code</tt> properties will obviously need XML escaping.
</p>
<p>As a nicety the service should sort the bookmark(let)s by the <tt>dc:title</tt> of the service name.
</p>
<p />12005-06-17T08:58:13ZAn unknown authorhttp://www.ldodds.com/wordtin/PageInfo.jsp?page=OnlineAccountToBookmarkletGeneratorTwinkleNoteshttp://www.ldodds.com/wordtin/wiki/TwinkleNotesAn unknown author created this page on Wed Feb 02 20:48:21 GMT 2005:<br /><hr /><br /><h4 id="section-TwinkleNotes-FeatureRequests">Feature Requests</h4>
<ul><li>Unzip package into subdirectory, not current directory
</li></ul><h4 id="section-TwinkleNotes-Bugs">Bugs</h4>
<ul><li>Problem with opening files with spaces in path:
</li></ul><pre>
<jeen> com.hp.hpl.jena.shared.JenaException: Can't open: file:/C:/Documents%20and%20Set
<jeen> tings/Jeen/My%20Documents/rdf/foaf.rdf
<jeen> at com.hp.hpl.jena.util.FileManager.readModel(FileManager.java:280)
<jeen> (sorry for the flood)
</pre>
<p>Note: can't reproduce this
</p>
<ul><li>Problem with optionals
</li></ul><pre>
<danbri> PREFIX dc: <http://purl.org/dc/elements/1.1/>
<danbri> PREFIX foaf: <http://xmlns.com/foaf/0.1/>
<danbri> SELECT ?name ?url
<danbri> FROM <http://danbri.org/danbri.rdf>
<danbri> WHERE (?p foaf:name ?name) [ (?p foaf:homepage ?url) ]
...
<danbri> com.hp.hpl.jena.shared.ClosedException: already closed
<danbri> at com.hp.hpl.jena.graph.impl.GraphBase.checkOpen(GraphBase.java:62)
<danbri> at com.hp.hpl.jena.graph.impl.GraphBase.find(GraphBase.java:223)
<danbri> at com.hp.hpl.jena.graph.query.PatternStage.nest(PatternStage.java:131)
</pre>
<p />12005-02-02T20:48:21ZAn unknown authorhttp://www.ldodds.com/wordtin/PageInfo.jsp?page=TwinkleNotesLeftMenuhttp://www.ldodds.com/wordtin/wiki/LeftMenuAn unknown author created this page on Thu Jan 06 21:15:50 GMT 2005:<br /><hr /><br /><p><a class="wikipage" href="/wordtin/wiki/Main">Home</a><br />
<a class="wikipage" href="/wordtin/wiki/About">About</a><br />
<a class="wikipage" href="/wordtin/wiki/FindPage">Search</a><br />
<a class="wikipage" href="/wordtin/wiki/RecentChanges">Recent Changes</a><br />
</p><hr />
<p><a class="wikipage" href="/wordtin/wiki/UnusedPages">Unused pages</a><br />
<a class="wikipage" href="/wordtin/wiki/UndefinedPages">Undefined pages</a>
</p>
<hr />
<p><b>Nearby</b>
</p>
<p><a class="external" href="http://www.ldodds.com">ldodds.com</a><img class="outlink" src="/wordtin/images/out.png" alt="" /><br />
<a class="external" href="http://www.ldodds.com/blog">Lost Boy</a><img class="outlink" src="/wordtin/images/out.png" alt="" /><br />
</p>
<p />12005-01-06T21:15:50ZAn unknown authorhttp://www.ldodds.com/wordtin/PageInfo.jsp?page=LeftMenuCocoonHTMLGeneratorhttp://www.ldodds.com/wordtin/wiki/CocoonHTMLGeneratorAn unknown author created this page on Tue Feb 24 13:59:44 GMT 2004:<br /><hr /><br /><p>Some notes on the <a class="external" href="http://cocoon.apache.org">Cocoon</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> HTML generator.
</p><h4 id="section-CocoonHTMLGenerator-Links">Links</h4>
<ul><li><a class="external" href="http://cocoon.apache.org/2.1/userdocs/generators/html-generator.html">Cocoon Wiki docs</a><img class="outlink" src="/wordtin/images/out.png" alt="" />
</li><li><a class="external" href="http://sourceforge.net/projects/jtidy">JTidy</a><img class="outlink" src="/wordtin/images/out.png" alt="" />
</li><li><a class="external" href="http://www.w3.org/People/Raggett/tidy/">HTML Tidy</a><img class="outlink" src="/wordtin/images/out.png" alt="" />
</li></ul><h4 id="section-CocoonHTMLGenerator-Features">Features</h4>
<ul><li>Can generate XHTML/XML from a local file or remote URL
</li><li>Configured as generator in sitemap, including reference to properties file for configuring JTidy:
</li></ul><pre>
<map:generator type="html" src="org.apache.cocoon.generation.HTMLGenerator">
<jtidy-config>jtidy.properties</jtidy-config>
</map:generator>
</pre>
<ul><li>multiple JTidy configs supported by using multiple generator definitions
</li><li>caches results based on last modified date of document
</li></ul><h4 id="section-CocoonHTMLGenerator-Options">Options</h4>
<p>Useful options when screen-scraping
</p>
<p>Preserves original case of elements and attributes, unless you switch it off with <tt>uppercase-tags</tt>, <tt>uppercase-attributes</tt> (HTML/XHTML only)
</p>
<ul><li><tt>add-xml-space=true|false</tt> -- generate <tt>xml:space="preserve"</tt> attributes for <tt>pre, style, script</tt>. Ensures that whitespace is preserved correctly (as there's no DTD to check it against)
</li><li><tt>clean=true|false</tt> -- remove presentational markup, and use styles instead. Useful for reducing amount of markup you need to wade through
</li><li><tt>numeric-entities</tt> -- use numeric entities rather than named entities. Useful as you don't have to worry about declarations.
</li><li><tt>enclose-text/enclose-block-text</tt>
</li><li><tt>char-encoding</tt>
</li><li><tt>doctype</tt>
</li><li><tt>output-xhtml</tt> -- sets doctype and default namespace. Case is alway preserved, other options ignored
</li><li><tt>output-xml</tt>
</li></ul>12004-02-24T13:59:44ZAn unknown authorhttp://www.ldodds.com/wordtin/PageInfo.jsp?page=CocoonHTMLGeneratorInstantMessagingClientshttp://www.ldodds.com/wordtin/wiki/InstantMessagingClientsAn unknown author created this page on Thu Sep 18 13:55:43 GMT 2003:<br /><hr /><br /><p>A list of Java instant messaging client libraries. Not intended to be exhaustive, just some I've come across while Googling.
</p><h4 id="section-InstantMessagingClients-AIM">AIM</h4>
<ul><li><a class="external" href="http://joust.kano.net/">Joust</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> -- low level OSCAR api
</li><li><a class="external" href="http://jaimlib.sourceforge.net/">jaimlib</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> -- supports TOC protocol
</li><li><a class="external" href="http://jaimbot.sourceforge.net/">jaimbot</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> -- Java AIM bot, includes a library
</li><li><a class="external" href="http://simpleaim.sourceforge.net/">SimpleAIM</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> -- console AIM client
</li></ul><h4 id="section-InstantMessagingClients-MSN">MSN</h4>
<ul><li><a class="external" href="http://jmsn.sourceforge.net/">JMSN</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> -- MSN messenger clone, not actually a library, but there's likely to be stuff to reuse
</li><li><a class="external" href="http://msnj.sourceforge.net/">MSNj</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> -- another MSN library, looks quite old
</li><li><a class="external" href="http://www.sfu.ca/~tonyt/projects/jmml.html">jmml</a><img class="outlink" src="/wordtin/images/out.png" alt="" />
</li></ul><h4 id="section-InstantMessagingClients-Yahoo">Yahoo</h4>
<p>??
</p>
<h4 id="section-InstantMessagingClients-Jabber">Jabber</h4>
<ul><li><a class="external" href="http://www.jivesoftware.com/xmpp/smack/">Smack</a><img class="outlink" src="/wordtin/images/out.png" alt="" />
</li><li><a class="external" href="http://sourceforge.net/projects/javajabberc">jabberc</a><img class="outlink" src="/wordtin/images/out.png" alt="" />
</li><li>...and probably a million more...
</li></ul><p />
<p />12003-09-18T13:55:43ZAn unknown authorhttp://www.ldodds.com/wordtin/PageInfo.jsp?page=InstantMessagingClientsMusicBrainzhttp://www.ldodds.com/wordtin/wiki/MusicBrainzAn unknown author created this page on Fri Sep 12 15:28:20 GMT 2003:<br /><hr /><br /><p>Query url: <tt><a class="external" href="http://mm.musicbrainz.org/cgi-bin/mq_2_1.pl">http://mm.musicbrainz.org/cgi-bin/mq_2_1.pl</a><img class="outlink" src="/wordtin/images/out.png" alt="" /></tt>
</p><p>Query Examples: <a class="external" href="http://www.musicbrainz.org/MM/mq_examples.html">http://www.musicbrainz.org/MM/mq_examples.html</a><img class="outlink" src="/wordtin/images/out.png" alt="" />
</p>12003-09-12T15:28:20ZAn unknown authorhttp://www.ldodds.com/wordtin/PageInfo.jsp?page=MusicBrainzJavaAndPGPhttp://www.ldodds.com/wordtin/wiki/JavaAndPGPAn unknown author created this page on Tue Sep 09 21:07:17 GMT 2003:<br /><hr /><br /><p>Random links collated whilst surfing for a PGP API in Java...
</p><h4 id="section-JavaAndPGP-JCE">JCE</h4>
<p><a class="external" href="http://java.sun.com/products/jce/index-14.html">Java Cryptography Extension</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> -- doesn't seem to support PGP out of the box, basically for legal (export) reasons, but there may be other service provider implementations lurking out there...
</p>
<p>The <a class="external" href="http://cryptix.org/products/jce/index.html">Cryptix JCE implementation</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> has some form of "openpgp" support. This is a clean-room implementation of JCE. There's also <a class="external" href="http://www.cryptix.org/products/openpgp/index.html">Cryptix PGP</a><img class="outlink" src="/wordtin/images/out.png" alt="" />. This is still in alpha and has a good feature list, although key servers aren't currently supported. Last Alpha was released on 5th Feb 2003.
</p>
<p><a class="external" href="http://www.geocities.com/slimpgp/">SlimPGP</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> seems to offer the desired functionality as it <i>provides a simple command line interface that can be used to create <a class="createpage" href="/wordtin/Edit.jsp?page=OpenPGP" title="Create "OpenPGP"">OpenPGP</a> keys, encrypt/decrypt files and digital sign/verify texts</i>.
</p>
<p><a class="external" href="http://www.bouncycastle.org/">BouncyCastle.org</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> (<i>redirected there from openjce.org</i>). Another clean-room JCE implementation. No sign of PGP. Although the <a class="external" href="https://www.hushmail.com/services.php?subloc=downloads">Hush Encryption Engine</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> includes an <a class="createpage" href="/wordtin/Edit.jsp?page=OpenPGP" title="Create "OpenPGP"">OpenPGP</a> implementation designed to work with this API.
</p>
<p><a class="external" href="http://www.cryptography.ch/uni/pgpjava/">pgpjava</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> hooks into PGP using JNI. I'd rather avoid this if possible. I'd really like a pure Java API as deployment will be less of a PITA.
</p>
<h4 id="section-JavaAndPGP-Related">Related</h4>
<ul><li>PGP Message Exchange formats (RFC 1991)
</li><li>Open PGP Message Format (RFC 2440)
</li><li><a class="external" href="http://mindprod.com/jgloss/pgp.html">Nice description of PGP</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> (hey I don't use this stuff everyday you know! :)
</li></ul><p />
<p />
<p />
<p />
<p />
<p />12003-09-09T21:07:17ZAn unknown authorhttp://www.ldodds.com/wordtin/PageInfo.jsp?page=JavaAndPGPFMMark2Featureshttp://www.ldodds.com/wordtin/wiki/FMMark2FeaturesAn unknown author created this page on Tue Sep 09 20:15:50 GMT 2003:<br /><hr /><br /><p>A list of features for the <a class="wikipage" href="/wordtin/wiki/FOAFaMaticMark2">FOAFaMaticMark 2</a>
</p><h4 id="section-FMMark2Features-Implemented">Implemented</h4>
<ol><li><b>FOAF data entry</b>
<ol><li>Basic FOAF properties (similar to FOAF-a-matic Mark 1)
</li></ol></li><li>Add Friends -- <i>DONE</i>
</li><li><b>FOAF file export</b> to file, screen, clipboard
<ol><li>export as RDF/XML -- <i>Generates FOAF to window, file, or copies to clipboard</i>
</li><li>export as N3
</li></ol></li><li><b>FOAF file import</b> from file only currently.
<ol><li>Load and edit FOAF file
</li><li>Supports <tt>foaf:maker</tt>
</li><li>Add friend from another FOAF file
</li></ol></li><li><b>Other Import Options</b>
<ol><li>Very simple vCard import
</li></ol></li><li>Web Browser Integration
</li><li>Simple HTTP GET Response module, including ability to add friends from an Autodiscovery bookmarklet
</li></ol><h4 id="section-FMMark2Features-TODO">TODO</h4>
<ol><li>Add Documents
</li><li>Add Projects
</li><li><b>Internationalisation support</b> -- allow the text/instructions to be easily translated
</li><li><b>"Advanced" export options</b>
<ol><li>Export as VCard
</li><li>Export as Yahoo Mail format
</li></ol></li><li><b>"Advanced" import options</b>
<ol><li>Import from Yahoo Mail format
</li><li>Import from Advogato profile
</li><li>Import from RSS file (with embedded FOAF)
</li><li>Import (friends) from OPML, etc.
</li></ol></li><li><b>Publishing of FOAF files</b>
<ol><li>Adding entries to <a class="createpage" href="/wordtin/Edit.jsp?page=FOAFBulletinBoard" title="Create "FOAFBulletinBoard"">FOAFBulletinBoard</a>
</li><li>FTP to website
</li><li>FOAFnaut/Explorer pinging
</li></ol></li><li><b>Plugin API</b> to allow pluggable import/export options (amongst other things) will be useful to allow metadata harvesting from lots of different sources.
</li><li>Signing and web-of-trust stuff
</li></ol><h4 id="section-FMMark2Features-Suggestions">Suggestions</h4>
<p>Suggestions from the rest of the FOAF community
</p>
<ol><li><tt>nearestAirport</tt> property (<a class="external" href="http://groups.yahoo.com/group/rdfweb-dev/message/474">suggested by Jim Ley</a><img class="outlink" src="/wordtin/images/out.png" alt="" />)
</li><li>Libby Miller <a class="external" href="http://groups.yahoo.com/group/rdfweb-dev/message/473">suggested</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> image annotation as a useful feature. I could add extraction of metadata from an annotated image for stuffing into a FOAF description.
</li></ol><h4 id="section-FMMark2Features-RandomIdeas">Random Ideas</h4>
<p>Random stuff that might be cool to add
</p>
<ol><li>Publishing direct to a weblog? -- can't find any XML-RPC/SOAP APIs that would allow this though...Should probably look at the Blogger API 2 discussions.
</li><li>Code generation direct from the FOAF schema -- shouldn't be <i>too</i> difficult as I've had this one in mind whilst building the framework
</li><li>FOAF Finger support.
</li></ol><p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />12003-09-09T20:15:50ZAn unknown authorhttp://www.ldodds.com/wordtin/PageInfo.jsp?page=FMMark2FeaturesFOAFaMaticChangeloghttp://www.ldodds.com/wordtin/wiki/FOAFaMaticChangelogAn unknown author created this page on Tue Sep 09 20:15:26 GMT 2003:<br /><hr /><br /><p>If you want to follow my progress developing the <a class="wikipage" href="/wordtin/wiki/FOAFaMaticMark2">FOAF-a-Matic Mark 2</a> then this is my change log...
</p><p><b>9th September</b>
</p>
<p>Er, where did the year go? Easily distracted that's me. Basically the code is much cleaner, it now uses Jena 2 and I've created a simple Java Bean abstraction layer between the RDF data and the GUI. Whether this is a good idea or not remains to be seen. It hides the RDF details for ordinary Java developers, but at the expense of not exposing all that data.
</p>
<p>Considering applying code generation techniques to automatically generate this bean layer to limit potential 'drift' between the API and the RDF vocabulary...
</p>
<p>Aiming for beta-2, which will wow nobody, before end of September...
</p>
<p><b>13th January</b>
</p>
<p>Todays mutterings <a class="external" href="http://www.ldodds.com/blog/archives/000004.html">on my new blog</a><img class="outlink" src="/wordtin/images/out.png" alt="" />.
</p>
<p>In code terms I've now got the friends data export working through Jena, so I'm basically on a par with beta-1 again (yawn), but with a better model and a good idea of how to add all the remaining functionality I want to have in for beta-2 (yay!).
</p>
<p><b>11th January</b>
</p>
<p>Following the mention in the Guardian there have been a few downloads of <tt>beta-1</tt>. I've added a note next to the download link warning folk of the bug in the foaf:mbox property serialization. Imperative I get the next release out quickly so I don't befoul the FOAF waters with dodgy RDF.
</p>
<p>I've set up <a class="external" href="http://groups.yahoo.com/group/foaf-a-matic/">a yahoo groups mailing list</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> for reporting new releases of the software, reporting bugs, etc.
</p>
<p>Back to hacking...
</p>
<p><b>27th December</b>
</p>
<p>Have thrown away custom internal model in favour of using <a class="external" href="http://www.hpl.hp.com/semweb/jena-top.html">Jena</a><img class="outlink" src="/wordtin/images/out.png" alt="" />, which I probably should have looked at to start with. Quite pleased that the basics only took a couple of hours (although I've broken a chunk of functionality). Makes me think that the code refactoring I've done as I've gone along is a Good Thing.
</p>
<ul><li><tt>com.ldodds.foaf.thinlet.model</tt> package now largely redundant apart from a few helpers. Have extended the Jena <tt>Model</tt> interface to provide a few helpers, and have extended the in-memory implementation to support these.
</li><li>Basic FOAF generation (i.e. personal info) now works entirely off of an in-memory Jena model, Friend data is currently thrown away.
</li><li>N3 export now works (comes free with Jena)
</li><li>Loading of data from file also basically works, again this is provided by Jena. Grabbing from URLs, etc should be similarly easy. Grabbing data from a Friends FOAF file will involve just creating a model for their data, and grabbing the requisite statements...
</li><li>Deactivated HTTP interface until finished Jena-related refactoring.
</li><li>Planning beta-2 for sometime early January...
</li><li>Final note to self: check out <a class="external" href="http://www.amk.ca/xml/foaf-author.html">this proposal</a><img class="outlink" src="/wordtin/images/out.png" alt="" />. I was planning on adding an "export" feature to the FOAF-a-Matic which would generate Dublin Core descriptions for embedding in web pages. This could be an alternative option if it takes off (and similarly is another location to grab FOAF data for the FOAF Autodiscovery feature).
</li><li>Further final note to self (and the <a class="createpage" href="/wordtin/Edit.jsp?page=LazyWeb" title="Create "LazyWeb"">LazyWeb</a>): someone ought to make an 'Autodiscovery Bookmarklet Generator' application. It would take the details of the tag (e.g. <tt>LINK</tt>/<tt>META</tt>), info on appropriate attributes, and the end-point of look-up service, and generate a bookmarklet. Would ensure people are following 'the rules' of how to link to/embed extra content in (X)HTML...A meta-tool basically.
</li></ul><p><b>22nd December</b>
</p>
<ul><li>Grabbed some sample FOAF data, ranging in complexity, for testing.
</li><li>Added a simple HTTP server. First step in providing "FOAF Autodiscovery" feature. The latter is awaiting the FOAF loading code (just started this), but there is a feature to dump your FOAF data into the browser.
</li><li>Corrected stupid bug in which <tt>mbox</tt> property was being created as a literal not a resource. <tt>mbox_sha1sum</tt> works correctly
</li><li>Also added a clear button to allow friend entry fields to be reset
</li><li>Corrected bug reported by Libby Miller, friend entry fields weren't being cleared after entering a new Friend
</li></ul><p />
<p><b>20th December</b>
</p>
<ul><li><a class="external" href="http://www.ldodds.com/foaf/foaf-a-matic-beta-1.zip">beta-1</a><img class="outlink" src="/wordtin/images/out.png" alt="" />
</li><li>Made the <a class="createpage" href="/wordtin/Edit.jsp?page=FOAFPropertyBuilder" title="Create "FOAFPropertyBuilder"">FOAFPropertyBuilder</a> aware of the "hide email addresses" preference.
</li><li>Altered code to export friend data.
</li><li>Added support for entering/updating friend information
</li><li>Improved table handling code with extra utility methods
</li></ul><p><b>16th December</b>
</p>
<ul><li>Think I might use <a class="external" href="http://creativecommons.org/licenses/by/1.0">the Attribution license</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> for licensing the FOAF-a-Matic. It'll be open source, I'd just like acknowledgement for having written it in the first place.
</li><li>Now that I'm happy with the infrastructure I can finally add the support for foaf:knows.
</li><li>Added helper class for working with the Thinlet table component.
</li><li>Added a Services class for mediating access to useful components (e.g. UI, preferences, etc). This paves the way for scripted plugins as I can register this object (and hence its contents) with the Bean Scripting Framework.
</li></ul><p><b>15th December</b>
</p>
<ul><li>Aiming for first beta this week. Need to add ant scripts, etc.
</li><li>Decided to add support for importing LDIF format (seems to be what Mozilla use for address books). Fairly simple format.
</li><li>This <a class="external" href="http://www.stcsig.org/usability/topics/articles/he-checklist.html">heuristic evaluation</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> might be worth a look.
</li><li>Added empty implementation for N3 exporter.
</li><li>Added <tt>Tables</tt> class for dynamically adding/removing rows in a table
</li><li>Abstracted the main Thinlet API (plus some helpers) into a separate interface: should help manage API changes, as that API is still changing
</li><li>Divided processing for saving data into <i>generation</i> and <i>export</i>. The later deals with actually turning the model into RDF (and later N3) and stuffing it into a stream. The <i>generation</i> aspect wraps this to ensure the model is valid and then orchestrate the export so the data goes to the right place (e.g. file, clipboard, screen).
</li><li>More package and class level refactorings. This might seem like wheel spinning but the code design is improving quite a bit. Ended up losing helper package as the new classes got split up and distributed elsewhere.
</li></ul><p><b>12th December</b>
</p>
<ul><li>Uploaded new screenshots
</li><li>Stole another of Ians FOAF graphics. Note to self: create CREDITS.txt and LICENSES.txt
</li><li>Added helper package, and created a number of helpers by refactoring code out of the main Thinlet class. These include a <tt><a class="createpage" href="/wordtin/Edit.jsp?page=DialogManager" title="Create "DialogManager"">DialogManager</a></tt> and an <tt><a class="createpage" href="/wordtin/Edit.jsp?page=ExportCoordinater" title="Create "ExportCoordinater"">ExportCoordinater</a></tt>. Might well be able to spin out some Thinlet based utility classes along the way.
</li><li>Prototyped code to add/remove friends from table on Friends tabs. Working with multiple, non-contiguous selections. Note to self: could we end up with a lot of data here?
</li><li>More re-organisation of the packages
</li></ul><p><b>11th December</b>
</p>
<ul><li>Reworked package structure to make things a bit clearer.
</li><li>Altered screen generation code to use a new pop-up window.
</li><li>Added new face icons for fields. Yellow for ordinary fields, green for required, and red as a validation cues.
</li><li>Moved icons and XML files for GUI into separate packages
</li><li>Added new menu items (Load, Save, Help, Tools) for forthcoming features, and rejigged display of tabs. Must update screenshots.
</li><li>Added dialog management code to FOAFThinlet making it easier to show/close dialogs. Some of this could probably be factored out into a base class and/or utility classes.
</li></ul><p />12003-09-09T20:15:26ZAn unknown authorhttp://www.ldodds.com/wordtin/PageInfo.jsp?page=FOAFaMaticChangelogFMRoadmaphttp://www.ldodds.com/wordtin/wiki/FMRoadmapAn unknown author created this page on Tue Sep 09 20:11:42 GMT 2003:<br /><hr /><br /><p>Where I attempt to prioritise <a class="wikipage" href="/wordtin/wiki/FMMark2Features">my feature list</a>, alongside implementation notes...
</p><h4 id="section-FMRoadmap-Beta2">Beta 2</h4>
<p>Stabilise current code to reach beta-2.
</p>
<h4 id="section-FMRoadmap-UsePicocontainer">Use picocontainer</h4>
<p>At the moment the framework has some "shared services", e.g. access to the GUI, preferences, etc. This handled using a Services class and a bunch of static accessor methods to get hold of the shared state.
</p>
<p>I don't like this, so am going to switch to using <a class="external" href="http://www.picocontainer.org">picocontainer</a><img class="outlink" src="/wordtin/images/out.png" alt="" />. This will allow more flexibility, and will provide the basics of a plugin API
</p>
<h4 id="section-FMRoadmap-BuildPluginAPI">Build plugin API</h4>
<p>I envisage implementing a plugin system as follows:
</p>
<ul><li>Plugins are packaged as separate jars, e.g. with a "plugin.xml" file.
</li><li>At startup a picocontainer is created for plugins. This will give them access to the shared services
</li><li>Populate that container by using <tt><a class="createpage" href="/wordtin/Edit.jsp?page=ClassLoader" title="Create "ClassLoader"">ClassLoader</a>.getResources</tt> to load all "plugin.xml" files (which may just be a format that nanocontainer can load). Picocontainer than then resolve their dependencies.
</li><li>Beef up shared services, including access to the internal web server.
</li></ul><h4 id="section-FMRoadmap-ImplementFoafDocumentFoafImageEtcSupport">Implement foaf:Document, foaf:Image, etc support</h4>
<p>Try implementing these as plugins. Encourage creation of new plugins to allow addition of metadata about books, films, music, etc, including ratings.
</p>
<h4 id="section-FMRoadmap-SigningAndEncryption">Signing and Encryption</h4>
<p>This is a must. I should be able to indicate which information I want public and private, and which communities the private information is published for.
</p>
<p>Requires a decent Java PGP library. See <a class="wikipage" href="/wordtin/wiki/JavaAndPGP">Java and PGP</a> for research notes
</p>
<p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />12003-09-09T20:11:42ZAn unknown authorhttp://www.ldodds.com/wordtin/PageInfo.jsp?page=FMRoadmapFOAFaMaticMark2http://www.ldodds.com/wordtin/wiki/FOAFaMaticMark2An unknown author created this page on Tue Sep 09 20:04:58 GMT 2003:<br /><hr /><br /><p>This is a quick and dirty project page for the FOAF-a-Matic Mark 2: a reworking of my original Javascript <a class="external" href="http://www.ldodds.com/foaf/foaf-a-matic">FOAF-a-matic</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> as a desktop GUI application.
</p><p>The application will be released as open source, using <a class="external" href="http://creativecommons.org/licenses/by/1.0">the Attribution license</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> from the <a class="external" href="http://www.creativecommons.org">Creative Commons</a><img class="outlink" src="/wordtin/images/out.png" alt="" />
</p>
<p>I've included some screen shots of the work in progress and my current feature list. Comments are very welcome. Please send comments directly <a class="external" href="mailto:ldodds@ingenta.com">to me</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> and/or the <a class="external" href="mailto:rdfweb-dev@vapours.rdfweb.org">rdfweb-dev mailing list</a><img class="outlink" src="/wordtin/images/out.png" alt="" />. (You can't add comments directly to this Wiki).
</p>
<h4 id="section-FOAFaMaticMark2-FeaturesAndRoadmap">Features and Roadmap</h4>
<p>See <a class="wikipage" href="/wordtin/wiki/FMMark2Features">FMMark2Features</a> for a list of features that I want to implement.
</p>
<p>See <a class="wikipage" href="/wordtin/wiki/FMRoadmap">FMRoadmap</a> for a rough plan on how I intend to get there.
</p>
<h4 id="section-FOAFaMaticMark2-Progress">Progress</h4>
<p>See <a class="wikipage" href="/wordtin/wiki/FOAFaMaticChangelog">FOAFaMaticChangelog</a> for the dirty details.
</p>
<h4 id="section-FOAFaMaticMark2-RandomDesignNotes">Random Design Notes</h4>
<p>The code is written in Java and uses the <a class="external" href="http://www.thinlet.com">Thinlet</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> framework for building the user interface (I've got some separate <a class="wikipage" href="/wordtin/wiki/NotesOnThinlets">NotesOnThinlets</a>). I'm aiming
to have several versions of the application for use in different environments, e.g. background "desktop FOAF collector", authoring tool, import/export tool, applet, etc.
</p>
<p>I'm building it in <a class="external" href="http://www.eclipse.org">Eclipse</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> and using <a class="external" href="http://www.junit.org">Junit</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> to write the tests. Building is done via <a class="external" href="http://jakarta.apache.org/ant">Ant</a><img class="outlink" src="/wordtin/images/out.png" alt="" />.
</p>
<p>RDF parsing is handled using the <a class="external" href="http://www.hpl.hp.com/semweb/jena.htm">Jena 2 toolkit</a><img class="outlink" src="/wordtin/images/out.png" alt="" />.
</p>
<p>I'm trying to make the UI as friendly as possible, having recently read <a class="external" href="http://www.amazon.com/exec/obidos/ASIN/1568843224/">About Face</a><img class="outlink" src="/wordtin/images/out.png" alt="" />. I've borrowed an idea from there which means that validation errors are signalled to the user without (too many) annoying dialogs -- the UI is updated to include visual cues (change of icons and tooltips) if there were problems.
</p>
<h4 id="section-FOAFaMaticMark2-ScreenShots">Screen Shots</h4>
<p>Startup Screen, showing initial help text. This could probably look at little better.<br />
<img class="inline" src="http://www.ldodds.com/img/foafthinlet1.jpg" alt="Startup Screen" />
</p>
<p>Personal data entry tab, entering my details...<br />
<img class="inline" src="http://www.ldodds.com/img/foafthinlet2.jpg" alt="Data Entry" />
</p>
<p>Entering friends will look something like this...<br />
<img class="inline" src="http://www.ldodds.com/img/foafthinlet3.jpg" alt="Friend Data Entry" />
</p>
<p>Oops forgot to enter my email address, so the software flags an error. Note the red face indicating the problem field, and the tooltip text explaining the problem in a grammatically incorrect way :)<br />
<img class="inline" src="http://www.ldodds.com/img/foafthinlet4.jpg" alt="Validation Problem" />
</p>
<p>Aah, finally we've got some FOAF data to look at...<br />
<img class="inline" src="http://www.ldodds.com/img/foafthinlet5.jpg" alt="Screen view" />
</p>
<h4 id="section-FOAFaMaticMark2-Downloads">Downloads</h4>
<p><b>IMPORTANT</b>: There is a bug in beta-1 which causes the <tt>foaf:mbox</tt> property to be incorrectly serialized, so the generated results aren't correct <i>unless' you chose to encrypt the email addresses, in which case the FOAF is correct. As this is the default I hope it hasn't bitten too many people. This will be fixed in the next release.
</i></p>
<ul><li><a class="external" href="http://www.ldodds.com/foaf/foaf-a-matic-beta-1.zip">beta-1</a><img class="outlink" src="/wordtin/images/out.png" alt="" />
</li></ul><h4 id="section-FOAFaMaticMark2-Links">Links</h4>
<p>Things for me to read (i.e. places to steal good ideas from)...
</p>
<ul><li><a class="external" href="http://jibbering.com/foaf-chump/">FOAF Chump</a><img class="outlink" src="/wordtin/images/out.png" alt="" />
</li><li><a class="external" href="http://www.tecknik.net/autofoaf/">FOAF Autocreation</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> -- I'd considered something like this, but it relies on FOAF autodiscovery. How widely deployed is that I wonder? Could we pick up something from the RSS file as a fall-back/alternative? E.g. <tt>rss:link</tt>, <tt>dc:creator</tt>
</li><li><a class="external" href="http://chimpen.com/msn2foaf/">msn2foaf</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> -- Grabbing contacts from MSN messenger. Yahoo have a feature where you can download your address book as a CSV file which I was going to use. This looks like a much friendlier alternative for MSN users.
</li><li><a class="external" href="http://www.perceive.net/pages/page/articles/year/2002/month/12#9">Using nearestAirport in FOAF</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> -- a handy guide to using the <tt>nearestAirport</tt> property to put yourself on the <a class="external" href="http://jibbering.com/2002/8/foaf-people-map.svg">FOAF map</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> (requires SVG)
</li><li>Eric Vitiello has some interesting stuff in <a class="external" href="http://www.perceive.net/xml/foaf.rdf">his FOAF description</a><img class="outlink" src="/wordtin/images/out.png" alt="" /> which it would be nice to support: adding an rdf:Description, trust metrics, license, etc.
</li></ul><p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />
<p />12003-09-09T20:04:58ZAn unknown authorhttp://www.ldodds.com/wordtin/PageInfo.jsp?page=FOAFaMaticMark2