<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss1full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:status="http://www.w3.org/2003/06/sw-vocab-status/ns#" xmlns:changeset="http://purl.org/vocab/changeset/schema#" xmlns:ad="http://schemas.talis.com/2005/address/schema#" xmlns:dctype="http://purl.org/dc/dcmitype/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:ddd="http://schemas.talis.com/2005/ddd/db#" xmlns:dir="http://schemas.talis.com/2005/dir/schema#" xmlns:sv="http://schemas.talis.com/2005/service/schema#" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:lib="http://schemas.talis.com/2005/library/schema#" xmlns:rss="http://purl.org/rss/1.0/" xmlns:search="http://a9.com/-/spec/opensearch/1.1/" xmlns:user="http://schemas.talis.com/2005/user/schema#" xmlns:sioc="http://rdfs.org/sioc/ns#" xmlns:terms="http://purl.org/dc/terms/" xmlns:vann="http://purl.org/vocab/vann/" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:blog="http://keithalexander.co.uk/vocab/blog/0.1#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
	<channel rdf:about="/blog/.rss">
	<title>Keith Alexander's SemWebDev Blog SemWebDev Posts RSS Feed</title>
	<link>/blog/.rss</link>
	<description>
		An RSS 1.0 feed of SemWebDev Posts	</description>
	<items>
		<rdf:Seq>
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/abductive-template#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/posh-plain-old-semantic-html#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/twfy-rdf-mapping#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/schema-cache#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/rdfadict#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/eRDFt-tonic#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/erdft-nested-arrays#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/semantic-blogging#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/rdf-vocabularies-best-practices#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/html5-profile#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/2" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/rdf-for-the-rest-of-us-digital-web#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/Exhibit-JSON#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/rest-frameworks-php#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/Why-RDF-Web-Apps#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/mypost1" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/getSemantic#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/erdf-at-a-glance#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/90-days-democratic-data#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/future-of-microformats#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/forms-to-rdf#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/haml#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/microformats-not-semantic-web#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/roundtripleting#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/999" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/semanticweb-image-tagclouds#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/xhtml-cdata#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/use_erdf_why#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/grddl_repository#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/5" />
							<rdf:li rdf:resource="http://blog.logicfish/blog/posts/MyPost1" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/dream-syntax-rdf-in-html#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/ontologies-thoughts#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/erdft#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/mvc-not-designed-for-the-web#post" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/schema-cache" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/semantic-blogging" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/rdf-vocabularies-best-practices" />
							<rdf:li rdf:resource="http://semwebdev.keithalexander.co.uk/blog/posts/xhtml-cdata" />
					</rdf:Seq>
	</items>
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Semwebdev" type="application/rss+xml" /></channel>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/abductive-template#post">
		<title>Abductive reasoning, template generation, and RDF-in-HTML</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/J_E6TkgGmyY/abductive-template</link>
				<description>&lt;div id="post-as-me" class="-foaf-Person"&gt;
	&lt;p&gt;&lt;a href="http://keithalexander.co.uk/#me" rel="owl-sameAs"&gt;I&lt;/a&gt;&amp;#8217;ve written before that I think the &lt;strong&gt;dual context&lt;/strong&gt; of &lt;span class="caps"&gt;RDF&lt;/span&gt;-in-HTML is interesting; the information encoded as eRDF or  RDFa exists in both a &lt;span class="caps"&gt;DOM&lt;/span&gt; tree  and an &lt;span class="caps"&gt;RDF&lt;/span&gt; graph. I mentioned this to &lt;a class="-foaf-Person" rel="foaf-knows" href="http://captsolo.net/info/#me"&gt;CaptSolo&lt;/a&gt; in #swig, and he said that if this context was important, it ought to be retained somehow when extracting the &lt;span class="caps"&gt;RDF&lt;/span&gt;. At the time I thought, yes, you could retain that context, maybe by reifying the triples and annotating the reification with XPath or something like that. But what possible use could that be?&lt;/p&gt;


	&lt;p&gt;Recently, I&amp;#8217;ve been mulling over this problem: Suppose you are developing an &lt;span class="caps"&gt;RDF&lt;/span&gt;-based web application that has these requirements:&lt;/p&gt;


	&lt;ul&gt;
&lt;li&gt;The application has to display certain &lt;em&gt;known&lt;/em&gt; types of resources in a particular way.&lt;/li&gt;
&lt;li&gt;The application  has to accept and store types of resources that may be &lt;em&gt;unknown&lt;/em&gt; to you, the developer.&lt;/li&gt;
&lt;li&gt;The application has to be smart enough to display those unknown types in a reasonable way.&lt;/li&gt;
&lt;/ul&gt;


	&lt;p&gt;Ideally, what you want is to be able to mark up the things you know about, that are most important to your application. And for the unknown types, imagine if your application could magically know how to represent them sensibly, based on how you had marked up similar properties in the past.&lt;/p&gt;


	&lt;p&gt;Maybe this is where retaining the &lt;strong&gt;dual context&lt;/strong&gt; even after the triples have been extracted, could come in handy?&lt;/p&gt;


	&lt;p&gt;If you mark-up your templates with eRDF or RDFa, then you are encoding how your application should represent specific combinations of triple predicates. Extract that knowledge, perhaps as &lt;a href="http://www.w3.org/2005/04/fresnel-info/"&gt;fresnel&lt;/a&gt; , or maybe by annotating the triples with XPath or &lt;span class="caps"&gt;HTML&lt;/span&gt; snippets, find a best fit from the groups of data triples to the groups of  template triples, and use that stored knowledge of dual context to generate new templates.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m not exactly sure how you&amp;#8217;d do it &amp;#8211; I imagine it&amp;#8217;d be pretty complicated. Probably the simplest way would be to figure out how to parse eRDF into fresnel, and from there you could push that through an existing fresnel engine; there&amp;#8217;s even one in &lt;span class="caps"&gt;PHP&lt;/span&gt;, called Horus (I think, by &lt;a class="-foaf-Person" rel="rel-knowsByReputation" href="http://sites.wiwiss.fu-berlin.de/suhl/ueber_uns/team/chris_bizer.htm#me"&gt;Chris Bizer&lt;/a&gt;, though &lt;a href="http://sites.wiwiss.fu-berlin.de/suhl/bizer/rdfapi/tutorial/horus/index.htm"&gt;the link&lt;/a&gt; seems to have broken).&lt;/p&gt;


	&lt;p&gt;Why not just start off doing the whole thing in fresnel then? Well you could (in fact it&amp;#8217;s just this sort of thing that fresnel seems to be designed for), but to my mind it might be a bit abstract, and not leave you with as much control over the output as templating would &amp;#8211; so maybe this could be a way to get the best of both worlds.&lt;/p&gt;


	&lt;p&gt;Maybe it&amp;#8217;s a daft idea. I don&amp;#8217;t have an immediate practical reason to try to develop it, but it seemed interesting as a thought exercise if nothing else.&lt;/p&gt;

    &lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/J_E6TkgGmyY" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/abductive-template#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/posh-plain-old-semantic-html#post">
		<title>POSH: Plain Old Semantic HTML</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/cD-pAUlSc5k/posh-plain-old-semantic-html</link>
				<description>&lt;p&gt;It seems that a while ago, I coined a new acronym: &lt;a href=\"http://microformats.org/wiki/posh\"&gt;&lt;abbr title=\"Plain Old Semantic HTML\"&gt;POSH&lt;/abbr&gt;&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Surprisingly (I think the acronym sounds quite unappealing&lt;a href=\"#fn-1\"&gt;[1]&lt;/a&gt;) it’s gained some currency, but already there seems to be some slippage in meaning.&lt;/p&gt;


	&lt;p&gt;The meaning that I intended was this: 
		&lt;strong&gt;(x)HTML used as a data format&lt;/strong&gt;; writing HTML so that the data in the document can be parsed or transformed into another specific format.
		&lt;!-- Similar to &lt;span class=\"caps\"&gt;POX&lt;/span&gt; being a subset of &lt;span class=\"caps\"&gt;XML&lt;/span&gt;, covering the less formal aspect (I understand &lt;span class=\"caps\"&gt;POX&lt;/span&gt; as being &lt;span class=\"caps\"&gt;XML&lt;/span&gt; without namespaces, DTDs, Schemata, etc), &lt;span class=\"caps\"&gt;POSH&lt;/span&gt; is &lt;span class=\"caps\"&gt;HTML&lt;/span&gt; that uses semantic patterns; the &lt;strong&gt;&amp;#8216;plain old&amp;#8217;&lt;/strong&gt; part is supposed to distinguish it from &lt;span class=\"caps\"&gt;HTML&lt;/span&gt; that is merely semantically correct (in that it uses elements as the spec intends); it is also supposed to distinguish it from specific terms for formalised patterns like microformats, eRDF and RDFa.
				 --&gt;
		&lt;/p&gt;
		

	&lt;p&gt;Some people seem to be using it in a similar way (Jeremy Keith &lt;a href=\"http://adactio.com/journal/1287\"&gt;talks about &lt;span class=\"caps\"&gt;POSH&lt;/span&gt; patterns&lt;/a&gt; ), but the &lt;a href=\"http://microformats.org/wiki/posh\"&gt;&lt;span class=\"caps\"&gt;POSH&lt;/span&gt; page on the µf wiki&lt;/a&gt;  seems to suggest that it’s just a new way of saying Semantic &lt;span class=\"caps\"&gt;HTML&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;Regardless of the precise meaning of &lt;span class=\"caps\"&gt;POSH&lt;/span&gt;, it’s good to see a concerted effort to explain that microformats aren’t, can’t be, and shouldn’t be, an answer to every semantic html need.&lt;/p&gt;
	&lt;p&gt;Perhaps this is an answer to the problem I raised in an earlier post &lt;a href=\"http://semwebdev.keithalexander.co.uk/blog/posts/future-of-microformats\"&gt;µf: How many is enough&lt;/a&gt;  (Microformats can only encompass a small number of semantic html conventions; yet everyone and his dog wants a new microformat for their own knowledge domain; how can the Microformats community remain relevant if they can’t keep up with what people are doing with semantic html).&lt;/p&gt;


	&lt;p&gt;The two small objections I have with the way the microformateers are presenting &lt;span class=\"caps\"&gt;POSH&lt;/span&gt; is that:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;It seems to be just a new buzzword for Semantic &lt;span class=\"caps\"&gt;HTML&lt;/span&gt;, rather than having a usefully distinct meaning.&lt;/li&gt;
		&lt;li&gt;Talk of &lt;a href=\"http://microformats.org/wiki/posh#The_POSH_Process\"&gt;a ‘Process’&lt;/a&gt; and ‘Checklists’, and badges and things makes it seem a bit &lt;em&gt;prescriptive&lt;/em&gt; – here’s what you have to do to be in our club. When in fact it’s really a &lt;em&gt;descriptive&lt;/em&gt; term for what you may’ve been doing for ages anyway (but didn’t have a term for before).&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;(Not that I think it’s up to me to tell people how to use or promote &lt;span class=\"caps\"&gt;POSH&lt;/span&gt;, I just thought that if I’m being credited with coming up with the acronym, I’d like to put on record what I mean/t by &lt;span class=\"caps\"&gt;POSH&lt;/span&gt;).&lt;/p&gt;
	
&lt;img alt=\"diagram of subclasses of html\" src=\"http://semwebdev.keithalexander.co.uk/blog/images/posh.png\"/&gt;

	&lt;p&gt;It’ll be interesting to see if this gives a greater currency to the idea of semantic html patterns.&lt;/p&gt;

&lt;hr/&gt;
&lt;div class=\"notes\"&gt;
	&lt;h2&gt;Notes&lt;/h2&gt;
	&lt;ol&gt;
		&lt;li id=\"fn-1\"&gt;Although the French version, &lt;abbr title=\"Code HTML \"&gt;CHIC&lt;/abbr&gt;, is quite cute.&lt;/li&gt;
	&lt;/ol&gt;
&lt;/div&gt;

&lt;div class=\"tags\"&gt;
	&lt;a href=\"http://www.technorati.com/posts/tag/posh\" rel=\"tag\"&gt;&lt;/a&gt;
	&lt;a href=\"http://www.technorati.com/posts/tag/Semantic+HTML\" rel=\"tag\"&gt;&lt;/a&gt;
	&lt;a href=\"http://www.technorati.com/posts/tag/microformats\" rel=\"tag\"&gt;&lt;/a&gt;
	&lt;a href=\"http://www.technorati.com/posts/tag/µf\" rel=\"tag\"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/cD-pAUlSc5k" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/posh-plain-old-semantic-html#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/twfy-rdf-mapping#post">
		<title>TheyWorkForYou.com - Low hanging fruit for the Semantic Web?</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/JA8xQLthjX0/twfy-rdf-mapping</link>
				<description>&lt;p&gt;&lt;ins&gt;
Update:	Graham Higgins set up a &lt;a href=\"http://www.knowledgeforge.net/project/semwebparlparse/\"&gt;kforge project for the further development of the parlparse rdf mapping&lt;/a&gt;.
&lt;/ins&gt;&lt;/p&gt;
 &lt;p&gt;Anybody interested in figuring out an RDF mapping for &lt;a href=\"http://www.theyworkforyou.com/\" class=\"external text\" title=\"http://www.theyworkforyou.com/\" &gt;TheyWorkForYou&lt;/a&gt;? 
&lt;/p&gt;

&lt;p&gt;I think this is a dataset that would really benefit from being availble as RDF - it\'s of wide public interest, it can usefully be related to lots of other data of lots of different types, from lots of different sources. &lt;/p&gt;

&lt;p&gt;The XML is available &lt;a href=\"http://ukparse.kforge.net/parlparse/\" class=\"external text\" title=\"http://ukparse.kforge.net/parlparse/\" rel=\"nofollow\"&gt;here&lt;/a&gt;, and it wouldn\'t be hard to write XSLT to RDF/XML (I\'ve done some preliminary XSLT already).
&lt;/p&gt;&lt;p&gt;We\'d just need to decide what ontologies to use, and what URIs to use for MPs, Parties, Constituencies, etc (it\'s mostly possible to use the fragment identifiers in the XML files, but perhaps wikipedia pages for the other entities?).
&lt;/p&gt;

&lt;p&gt;I\'ve put up a &lt;a href=\"http://www.getsemantic.com/wiki/Brainstorming\"&gt;section for it on the brainstorming page of the GetSemantic Wiki&lt;/a&gt; - not sure if that\'s the best place to start the discussion or not. But if you\'d like to be involved somehow, or discuss it, or just leave some useful links, please do so.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/JA8xQLthjX0" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/twfy-rdf-mapping#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/schema-cache#post">
		<title>Schema-cache: a store of RDF vocabularies</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/4rmvEcSpNKo/schema-cache</link>
				<description>&lt;div id="post-as-me"&gt;
	&lt;p&gt;	&lt;a href="http://keithalexander.co.uk/#me" rel="owl-sameAs"&gt;I&lt;/a&gt; needed a &lt;span class="foaf-interest"&gt;SPARQL&lt;/span&gt;able store for &lt;span class="caps"&gt;RDF&lt;/span&gt; &lt;span&gt;vocabularies&lt;/span&gt; so that I could do things like retrieve  labels for data displayed in my UI (vocabulary authors take note &amp;#8211; 
this doesn&amp;#8217;t work very well because most vocabulary terms don&amp;#8217;t actually have human-readable labels).&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://iandavis.com/#ian" rel="rel-colleagueOf"&gt;iand&lt;/a&gt; thought a store full of schemas sounded like it might be a good idea, so he set up one on
&lt;a href="http://www.talis.com/tdn/node/1365"&gt;Bigfoot&lt;/a&gt; (the &lt;a rel="foaf-workplaceHomepage" href="http://talis.com/"&gt;Talis&lt;/a&gt; platform &amp;#8211; if you&amp;#8217;d like to play with a bigfoot store yourself, 
 &lt;a href="http://dannyayers.com/me" rel="rel-colleagueOf"&gt;danja&lt;/a&gt; can sort you out with one).&lt;/p&gt;

&lt;p&gt; I filled it up with some more schemas, and wrote 
a web page interface to it to make it a bit easier to browse and search. If you're interested, you can take a look at the  &lt;a href="http://schemacache.test.talis.com/" rel="foaf-made"&gt;schema-cache&lt;/a&gt;; it's only a test version and there may be ugliness and broken bits  (I&amp;#8217;d appreciate  an e-mail to &lt;span class="foaf-mbox"&gt;&lt;span&gt;keithalexander&lt;/span&gt;&lt;span&gt;@&lt;/span&gt;keithalexander.co&lt;span&gt;.&lt;/span&gt;uk&lt;/span&gt;  if you find any).&lt;/p&gt;

	&lt;p&gt;So now I&amp;#8217;m wondering what interesting things might be done with it &amp;#8211; what kind of interface to the data could make it easier to shop for vocabulary?&lt;/p&gt;
	
	&lt;p&gt; To run with that metaphor, would a &amp;#8216;shopping cart&amp;#8217; be handy? You could browse around, building up a collection of terms, and then have different options for exporting them, as an &lt;span class="caps"&gt;OWL&lt;/span&gt;/RDFS template, as a chunk of namespaces for using with &lt;span class="caps"&gt;RDF&lt;/span&gt;/XML or RDFa, or &lt;span class="caps"&gt;SPARQL&lt;/span&gt;/turtle prefixes, or eRDF &lt;link&gt;s &amp;#8211; would that be useful? What are the problems that vocabulary shoppers face, and how can those problems be addressed?&lt;/p&gt;


	&lt;p&gt;If you've got any ideas  I'd love to hear them (either in the comments, or in an e-mail).&lt;/p&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/4rmvEcSpNKo" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/schema-cache#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/rdfadict#post">
		<title>RDFa(dict) : An RDFa parser in Python</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/BPkitAV9Z_g/rdfadict</link>
				<description>&lt;p&gt;&lt;a href=\"http://cheeseshop.python.org/pypi/rdfadict/0.3\"&gt;RDFadict&lt;/a&gt; is a python library that extracts triples from RDFa, and provides a pretty nice looking API for accessing them.&lt;/p&gt;
&lt;p&gt;It looks like it would be fairly easy, if anyone were inclined, to implement a simple RDFa to SPARQL and back templating system (as I have done with eRDF) with it. Should anyone care to try, the basic steps of the system (as I implemented it at least) are:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Parse the template into triples&lt;/li&gt;
	&lt;li&gt;Process the triples\' nodes into SPARQL variables, IRIs or Literals. (eg: &lt;var&gt;{$name}&lt;/var&gt; becomes &lt;var&gt;$name&lt;/var&gt;, &lt;var&gt;{$person.name}&lt;/var&gt; becomes &lt;var&gt;$person_name&lt;/var&gt;).&lt;/li&gt;
	&lt;li&gt;Sort them into separate queries as appropriate. (I created separate queries for each new &lt;code&gt;for&lt;/code&gt; loop, using a variable naming convention to indicate the nesting of the loops in the template - you may prefer a different approach).&lt;/li&gt;
	&lt;li&gt;Execute the queries, nesting the results in an associative array, as indicated by the aforementioned variable naming scheme.&lt;/li&gt;
	&lt;li&gt;Pass the results array back to the template for displaying.&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/BPkitAV9Z_g" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/rdfadict#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/eRDFt-tonic#post">
		<title>eRDF-T with Tonic and Smarty</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/8K-Q1XIKXI8/eRDFt-tonic</link>
				<description>&lt;p&gt;I’ve hammered together some classes that lets you use eRDF templating within the Tonic framework. The dependencies are:&lt;/p&gt;

	&lt;ul&gt;
		&lt;li&gt;&lt;a href=\"http://arc.web-semantics.org/home\"&gt;ARC appmosphere RDF classes for PHP MySQL&lt;/a&gt;&lt;/li&gt;

		&lt;li&gt;&lt;a href=\"http://tonic.sourceforge.net/\"&gt;Tonic RESTful Framework&lt;/a&gt;&lt;/li&gt;

		&lt;li&gt;&lt;a href=\"http://smarty.php.net\"&gt;Smarty&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;

	&lt;p&gt;The code I’ve written is:&lt;/p&gt;

	&lt;ul&gt;
		&lt;li&gt;lib/erdft_parser.php : a class that reads in an erdf template, generates and executes sparql queries, and returns a results associative array&lt;/li&gt;

		&lt;li&gt;lib/eRdfResource.php : for GET requests, this passes the template to the parser, and the results array to Smarty. For POST requests, it takes the POST associative array, processes it with the functions named in the @class attributes of the html form inputs, transforms it to RDF/XML and saves it to the ARC store&lt;/li&gt;

		&lt;li&gt;lib/FormProcessor.class.php : a simple class in which you can define the functions to pass the form values through.&lt;/li&gt;

		&lt;li&gt;lib/ArcAdapter.php : a wrapper class for the ARC api to tie it in with Tonic’s idioms and conventions&lt;/li&gt;

		&lt;li&gt;lib/deleteErdfResource.php : a class for deleting ARC RDF resources - POST the iri of a graph to a location that uses this class and the graph will be deleted.&lt;/li&gt;

		&lt;li&gt;namespaces.meta : a list of namespace = uri values. Define the namespaces you use in the eRDF templates here.&lt;/li&gt;
	&lt;/ul&gt;

	&lt;p&gt;It’s still pretty rough and alpha state, but if anyone would like to play with it, I’d love to hear comments, suggestions, bugs and bug fixes.&lt;/p&gt;

	&lt;p&gt;So, here’s a simple Blog how-to:&lt;/p&gt;

	&lt;p&gt;(I’ve bundled &lt;a href=\"http://semwebdev.keithalexander.co.uk/blog/code/erdft/eRDFT.tar.gz\"&gt;tonic, smarty, arc and my code + the blog tutorial code&lt;/a&gt; up in a package so you don’t need to cut and paste, or spend ages trying to install things.)&lt;/p&gt;

	&lt;h2 id=\"1_configuration\"&gt;1. Configuration&lt;/h2&gt;

	&lt;h3 id=\"configure_tonic\"&gt;Configure Tonic&lt;/h3&gt;

	&lt;p&gt;dispatch.php&lt;/p&gt;
	&lt;pre&gt;
    &lt;code&gt;
        require_once \'tonic/tonic.php\';

        $tonic =&amp; new Tonic();
        $tonic-&gt;config[\'users\'][\'root\'][\'password\'] = \'mypassword\';
        $tonic-&gt;config[\'virtual\'][\'/\'] = array(\'/templates/blog-post-list.html\', array(\'class\' =&gt; \'eRdfResource\'));
        $tonic-&gt;config[\'virtual\'][\'/Posts/[^/]+\'] = array(\'/templates/blog-post.html\', array(\'class\' =&gt; \'eRdfResource\'));
        $tonic-&gt;config[\'virtual\'][\'/admin/\'] = array(\'/admin/post-list.html\', array(\'class\' =&gt; \'eRdfResource\', \'owl:sameAs\' =&gt; \'/Posts\',\'permission\'=&gt;\'6666\'));
        $tonic-&gt;config[\'virtual\'][\'/admin/delete\'] = array(\'/admin/delete.html\', array(\'class\' =&gt; \'deleteErdfResource\',\'permission\'=&gt;\'6666\'));
        $tonic-&gt;config[\'virtual\'][\'/admin/[^/]+\'] = array(\'/admin/post-form.html\', array(\'class\' =&gt; \'eRdfResource\', \'owl:sameAs\' =&gt; \'/Posts\',\'permission\'=&gt;\'6666\'));

        $tonic-&gt;init();

        $tonic-&gt;load();

        $tonic-&gt;exec();
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;&lt;code&gt;$tonic-&gt;config[\'users\'][\'root\'][\'password\'] = \'mypassword\';&lt;/code&gt; sets the root password for the app.&lt;/p&gt;

	&lt;p&gt;&lt;code&gt;$tonic-&gt;config[\'virtual\'][\'/admin/[^/]+\'] = array(\'/admin/post-form.html\', array(\'class\' =&gt; \'eRdfResource\', \'owl:sameAs\' =&gt; \'/Posts\',\'permission\'=&gt;\'6666\'));&lt;/code&gt; (and the other lines like this) define the urls you want your app to use, then the template the resource representation will use at that url, then an array of metadata. We tell it to use the eRDFResource class. The owl:sameAs property, when set, will let the eRdfResource use the data from the other url for an alternative representation of the resource. In this case, we are using it to say that /admin/foo should pull in data from the graph at /Posts/foo (instead of displaying it for reading, we will display it in a form for editing). In addition, you can set a metadata property called &lt;var&gt;redirect_url&lt;/var&gt; - on a successful posting, the user will be redirected to this location. For info about permissions and other standard Tonic stuff, see the &lt;a href=\"http://tonic.sourceforge.net/docs/\"&gt;Tonic docs&lt;/a&gt;.&lt;/p&gt;

	&lt;h3 id=\"configure_arc\"&gt;Configure ARC&lt;/h3&gt;

	&lt;p&gt;edit the database connection details in lib/arc/arc_config.php&lt;/p&gt;

	&lt;h2 id=\"2_write_a_template_for_all_the_pages_to_use\"&gt;2. Write a template for all the pages to use&lt;/h2&gt;

	&lt;p&gt;templates/erdft.xhtml&lt;/p&gt;
	&lt;pre&gt;
&lt;code&gt;    &lt;!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"
        \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"&gt;
    &lt;html lang=\"en\"&gt;
        &lt;head  profile=\"http://purl.org/NET/erdf/profile\"&gt;
             &lt;link rel=\"stylesheet\" type=\"text/css\" href=\"{$tonic-&gt;baseUrl}/templates/tonic.css\"/&gt;
                {foreach from=$css item=\"style\"}&lt;link rel=\"stylesheet\" type=\"text/css\" href=\"{if $style|truncate:\"1\":\"\":true == \'/\'}{$tonic-&gt;baseUrl}{/if}{$style}\"/&gt;{/foreach}
           {foreach from=$resource-&gt;ns key="ns" item="href"}
        &lt;link rel="schema.{$ns}" href="{$href}"/&gt;
            {/foreach}
            &lt;base href="{$resource-&gt;base_href()}"/&gt;
            {if $resource-&gt;owlSameAs}&lt;link href="{$resource-&gt;owlSameAs}" rel="owl-sameAs"/&gt;{/if}
        &lt;title&gt;{$resource-&gt;title|escape}&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        {$resource-&gt;getBody()}
    &lt;/body&gt;
&lt;/html&gt;
&lt;/code&gt;
&lt;/pre&gt;


	&lt;h2 id=\"3_write_the_admin_section\"&gt;3. Write the admin Section&lt;/h2&gt;

	&lt;p&gt;admin/post-list.html&lt;/p&gt;
	&lt;pre&gt;
&lt;code&gt;
    &lt;h1&gt;Admin Blog Posts&lt;/h1&gt;
    &lt;ul&gt;
    {foreach from=\"$blogs\" item=\"blog\"}
        &lt;li id=\"{$blog.uri|base64_encode}\" class=\"-blog-Post\"&gt;

            &lt;h2 class=\"dc-title\"&gt;
                &lt;a href=\"{$blog.uri|replace:\'Posts\':\'admin/Posts\'}\"&gt;{$blog.title}&lt;/a&gt;
            &lt;/h2&gt;
            &lt;div class=\"blog-contents\"&gt;
                {$blog.contents}
            &lt;/div&gt;
            &lt;form action=\"delete\" method=\"post\" accept-charset=\"utf-8\"&gt;
                &lt;input type=\"hidden\" name=\"iri\" value=\"{$blog.uri}\"/&gt;
                &lt;input type=\"submit\"  value=\"Delete\" /&gt;
            &lt;/form&gt;
        &lt;h3&gt;Comments&lt;/h3&gt;
        &lt;ul&gt;
            {foreach from=$blog.comments item=\"blog__comment\"}
            &lt;li class=\"blog-comment -blog-Comment\" id=\"{$blog__comment.iri_optional}\"&gt;
                &lt;span class=\"dc-creator\"&gt;{$blog__comment.creator}&lt;/span&gt;
                &lt;p class=\"blog-contents\"&gt;{$blog__comment.contents}&lt;/p&gt;
                &lt;form action=\"delete\" method=\"post\" accept-charset=\"utf-8\"&gt;
                    &lt;input type=\"hidden\" name=\"iri\" value=\"{$blog__comment.iri}\"/&gt;
                    &lt;input type=\"submit\"  value=\"Delete\" /&gt;
                &lt;/form&gt;
            &lt;/li&gt;
            {/foreach}
        &lt;/ul&gt;
        &lt;/li&gt;
    {/foreach}
    &lt;/ul&gt;
    &lt;a href=\"{$resource-&gt;base_href()}Posts/-change-my-name-\"&gt;New&lt;/a&gt;
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;As you can see, the html uses eRDF to define the semantics of the smarty variables in the template. As I explained in my last post, the ‘blog_comment’ syntax tells the erdft parser how to nest the arrays, so that Smarty can display it when the data comes back. We can use the Smarty functions after the pipe character | to format the values that get passed into the variables. I’ve used base64_encode to avoid having full urls in the @ids of html elements (which is invalid html), and a replace function to change the blog post url into the url to edit the post.&lt;/p&gt;

	&lt;p&gt;/admin/post-form.html&lt;/p&gt;
	&lt;pre&gt;
&lt;code&gt;    &lt;form action=\"{$resource-&gt;base_href()}\" method=\"post\" accept-charset=\"utf-8\"&gt;
    &lt;fieldset&gt;
        &lt;legend&gt;Blog Post: &lt;/legend&gt;
        &lt;label&gt;Blog Uri &lt;input name=\"rdf:RDF[blog:Post][rdf:about]\" value=\"{$this-&gt;owlSameAs}\" class=\"f_set_iri uri\"/&gt; &lt;/label&gt;
        &lt;span&gt;(edit this to the uri you want the post to appear at)&lt;/span&gt;
        &lt;label&gt;Title &lt;input type=\"text\" name=\"rdf:RDF[blog:Post][dc:title]\" value=\"{$title}\" class=\"dc-title\" title=\"{$title}\" /&gt;&lt;/label&gt;
        &lt;label&gt;Contents &lt;textarea name=\"rdf:RDF[blog:Post][blog:contents]\" title=\"{$contents}\" class=\"blog-contents\"&gt;{$contents}&lt;/textarea&gt;&lt;/label&gt;
        &lt;input type=\"submit\" value=\"Save\"/&gt;&lt;/fieldset&gt;
    &lt;/form&gt;
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;The points to notice here are: - the @names use square brackets to create an associative array structure that mimics RDF/XML - it is transformed to RDF/XML on the server. - the class names that begin with &lt;var&gt;f_&lt;/var&gt; are names of functions that will process the value on the server. &lt;var&gt;f_set_iri&lt;/var&gt; sets the graph iri to this value.&lt;/p&gt;

	&lt;h2 id=\"4_write_the_frontend\"&gt;4. Write the frontend&lt;/h2&gt;

	&lt;p&gt;/templates/blog-post-list.html (the names and location of the template files are irrelevant, as long as you tell Tonic where to find them in &lt;code&gt;dispatch.php&lt;/code&gt;)&lt;/p&gt;
	&lt;pre&gt;
&lt;code&gt;    &lt;h1&gt;Blog Posts&lt;/h1&gt;
    &lt;ul&gt;
    {foreach from=\"$blogs\" item=\"blog\"}
    &lt;li id=\"{$blog.uri|base64_encode}\" class=\"-blog-Post\"&gt;&lt;span class=\"dc-title\"&gt;&lt;a href=\"{$blog.uri}\" rel=\"owl-sameAs\"&gt;{$blog.title}&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
    {/foreach}
    &lt;/ul&gt;
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;/templates/blog-post.html&lt;/p&gt;
	&lt;pre&gt;
&lt;code&gt;            &lt;h1 class=\"dc-title\"&gt;{$title}&lt;/h1&gt;
            &lt;div class=\"blog-contents\"&gt;
                {$blogtext}
            &lt;/div&gt;
            &lt;hr/&gt;
                {foreach from=\"$comments\" item=\"comment\"}
                &lt;div class=\"blog-comment -blog-Comment\" id=\"{$comment.id_optional}\"&gt;
                    &lt;span class=\"dc-creator\"&gt;{$comment.creator}&lt;/span&gt;
                    &lt;div class=\"blog-contents\"&gt;{$comment.contents}&lt;/div&gt;
                &lt;/div&gt;
                {/foreach}
        &lt;form action=\"{$resource-&gt;base_href()}\" method=\"post\" accept-charset=\"utf-8\"&gt;
        &lt;fieldset class=\"comment\"&gt;
            &lt;legend&gt;Comment?&lt;/legend&gt;
            &lt;input type=\"hidden\" name=\"rdf:RDF[blog:Post][rdf:about]\" value=\"{$resource-&gt;base_href()}\" /&gt;
            &lt;input type=\"hidden\" name=\"rdf:RDF[blog:Post][blog:comment][blog:Comment][rdf:about]\" value=\"{$resource-&gt;base_href()}#comment-{$smarty.now}\" class=\"f_set_iri f_set_redirect\"/&gt;       &lt;label&gt;Name 
            &lt;input 
                type="text" 
                name="rdf:RDF[blog:Post][blog:comment][blog:Comment][dc:creator]" 
            /&gt;
        &lt;/label&gt;
        &lt;label&gt;Comment
            &lt;textarea    name="rdf:RDF[blog:Post][blog:comment][blog:Comment][blog:contents]" 
                        cols="50" 
                        rows="30"&gt;&lt;/textarea&gt;
        &lt;/label&gt;
        &lt;input type="submit" value="Comment &amp;amp;rarr;"/&gt;
        &lt;/fieldset&gt;
    &lt;/form&gt;
&lt;/code&gt;

&lt;/pre&gt;


&lt;p&gt;

Again, much the same as before. I use a smarty {$smarty.now} to autogenerate an id number for the comment iri - which is a pretty bad idea on reflection, as a user would be able to edit that value in the input and overwrite a previous comment. If I were you, I would write a function to autogenerate the comment iri during processing. The &lt;kbd&gt;$comment.iri_optional&lt;/kbd&gt; syntax means that the variable is optional: a post doesn’t _have_ to have comments.

&lt;/p&gt;

	&lt;h2 id=\"5_finished\"&gt;5. Finished&lt;/h2&gt;

That should be just about it. Add new namespaces to namespaces.meta - play around with the permissions and other meta data, either in the config array in dispatch, or in .meta files (eg: blog-post.html.meta is the metadata for the representation displayed by blog-post.html).

&lt;h2&gt;Things I\'d like to develop further&lt;/h2&gt;
&lt;ul&gt;
	&lt;li&gt;
		Caching. I think this might already be handled sufficiently by tonic - though I haven\'t really checked this out yet. It might be good to cache the generated SPARQL queries in such a way that they could be edited by the developer in special circumstances ( as suggested by shellac on #swig ).
	&lt;/li&gt;
	&lt;li&gt;
		Aggregate functions - count, max, min. Not entirely sure what the syntax should be here. It\'s important that the markup that generates the query also remains semantically correct in displaying the results.
	&lt;/li&gt;
	&lt;li&gt;
		Implement FILTER.
	&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/8K-Q1XIKXI8" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/eRDFt-tonic#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/erdft-nested-arrays#post">
		<title>eRDF-T and Nested Arrays</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/Y_-nKDCQ-uA/erdft-nested-arrays</link>
				<description>&lt;p&gt;In my previous post on an idea I had for &lt;a href="/blog/posts/erdft.html"&gt;eRDF-T - deriving SPARQL queries from an eRDF template, retrieving the data, and injecting them back into the template -&lt;/a&gt;, I mentioned that deriving multiple queries from a page would be necessary if you wanted to do thing like nested associative arrays and aggregate functions. &lt;/p&gt;

&lt;p&gt;I spent a while puzzling over how to separate out the triples and variables from the template into sensible query-able groups - sifting through the triples depending on how they related to one another, adding in pseudo properties to the template to help. And then I had a  simpler, and (I think) better idea: I could use the naming conventions of the template&amp;#8217;s variables to denote how they should be grouped.&lt;/p&gt;

&lt;p&gt;As I see it, basically what I&amp;#8217;m trying to do is map from the graph structure of RDF to the tree structure of XML and nested arrays. SPARQL returns its results in a tabular structure, so you need to put together several SPARQL result-sets to get a tree-like structure. I can let the eRDF-t processor know how to separate the triples and nest the results by naming my variables like this: &lt;var&gt;$org__member.name&lt;/var&gt;. The processor can then create an &lt;var&gt;orgs&lt;/var&gt; group, which will contain a &lt;var&gt;members&lt;/var&gt; group. The processor gets the results for the &lt;var&gt;orgs&lt;/var&gt; array, and for each &lt;var&gt;org&lt;/var&gt;, queries for the members relating to it (how they are related is defined through the eRDF properties), retrieving (at least), a value under the key/heading &amp;#8216;name&amp;#8217;. So the name of the first member of the first group can be found at &lt;var class="php-code"&gt;$data[&amp;#8216;orgs&amp;#8217;][0][&amp;#8216;members&amp;#8217;][0][&amp;#8216;name&amp;#8217;]&lt;/var&gt;.&lt;/p&gt;

&lt;p&gt;So the Smarty code, as you would  write it, would look like: 
&lt;/p&gt;

&lt;pre&gt;
    &lt;code&gt;
        {foreach from="$orgs" item="org"}
            {foreach from="$org__members" item="org__member"}
            {$org__member.name}
            {/foreach}
        {/foreach}
    &lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;
The &lt;code&gt;$row.key&lt;/code&gt; syntax tells the eRDF-t processor how to group together variables into a rows, and tells Smarty which values in the row to display. The double underscores in the array names tell the eRDF-t processor how the results should be nested - but are, of course, irrelevant to Smarty. I should say, Smarty isn&amp;#8217;t integral to the technique. You could just pass different regular expressions to the eRDF parser&amp;#8217;s constructor if you wanted to use another templating engine, or native PHP or whatever.&lt;/p&gt;
&lt;p&gt;With eRDF, this might look like:&lt;/p&gt;

&lt;pre&gt;
    &lt;code&gt;
	&amp;lt;ul&amp;gt;
&lt;var class="smarty loop"&gt;        {foreach from=&amp;quot;$orgs&amp;quot; item=&amp;quot;org&amp;quot;}
&lt;/var&gt;        &amp;lt;li class=&amp;quot;-foo-Org&amp;quot; id=&amp;quot;{$org.id}&amp;quot;&amp;gt; 
		&amp;lt;ul class=&amp;quot;foo-members&amp;quot;&amp;gt;  
	   &lt;var class="smarty loop"&gt;{foreach from=&amp;quot;$org__members&amp;quot; item=&amp;quot;org__member&amp;quot;}&lt;/var&gt;
            	  &amp;lt;li id=&amp;quot;{org__member.id}&amp;quot; class=&amp;quot;foaf-name&amp;quot;&amp;gt;{$org__member.name}&amp;lt;/li&amp;gt;
            &lt;var class="smarty loop"&gt;{/foreach}&lt;/var&gt;
	 	&amp;lt;/ul&amp;gt; 
	  &amp;lt;/li&amp;gt;
&lt;var class="smarty loop"&gt;        {/foreach}
&lt;/var&gt;	&amp;lt;/ul&amp;gt;
    &lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt; Which would convert to a query like:&lt;/p&gt;
&lt;code class="sparql"&gt;
	SELECT $id WHERE $id rdf:type &amp;lt;http://example.com/foo#Org&amp;gt; .
&lt;/code&gt;
&lt;p&gt;And for each of those  result rows, generate a subsequent query like:&lt;/p&gt;
&lt;code class="sparql"&gt;SELECT $id $name WHERE $id foaf:name $name .&lt;/code&gt;

&lt;p&gt;Which would create a results array like: &lt;/p&gt;
&lt;pre&gt;&lt;samp class="php"&gt;
&lt;var&gt;orgs&lt;/var&gt; =&gt; (
  &lt;var&gt;0&lt;/var&gt; =&gt; (
    &lt;var&gt;id&lt;/var&gt; =&gt; "org_1",
   &lt;var&gt;members&lt;/var&gt; =&gt; (
      &lt;var&gt;0&lt;/var&gt; =&gt; (
        &lt;var&gt;id&lt;/var&gt; =&gt; "member_1",
        &lt;var&gt;name&lt;/var&gt; =&gt; "John Smith"
        )
      )
    ) 
  )
	&lt;/samp&gt;&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/Y_-nKDCQ-uA" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/erdft-nested-arrays#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/semantic-blogging#post">
		<title>Semantic Blogging</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/y7DHwZVqlDw/semantic-blogging</link>
				<description>&lt;div id="me"&gt;&lt;a href="http://keithalexander.co.uk/#me" rel="owl-sameAs"&gt;&lt;/a&gt;

                	&lt;p&gt;Pretty much from the start of this blog, I&amp;#8217;ve used eRDF to annotate the structure of the site (with &lt;span class="caps"&gt;SIOC&lt;/span&gt; and DC mainly). More recently, I started making more of an effort to mark-up  the contents of the posts as well.&lt;/p&gt;


	&lt;p&gt;Why would I go to the trouble? Well, mainly as an experiment, to see what the process was like, and what the possibilities are. I&amp;#8217;ve not noticed many other people doing it, which is understandable because it does involve extra hassle, and perhaps not any clear benefits as yet. It&amp;#8217;s a bit of a shame from my point of view because a &lt;span class="caps"&gt;GRDDL&lt;/span&gt;/RDFa/eRDF enabled web, where you can create human-readable web pages that describe concepts, which semantically link to other concepts, seems like quite a neat idea;  unfortunately &lt;span class="caps"&gt;GRDDL&lt;/span&gt;-able  web pages to link to are not (yet) the norm, even in the &lt;span class="caps"&gt;RDF&lt;/span&gt;-enthusiast enclave of the web.&lt;/p&gt;


	&lt;h2&gt;Magic&lt;/h2&gt;


	&lt;p&gt;I wasn&amp;#8217;t really expecting anything magical to happen, so I was pleasantly surprised recently when browsing through the &lt;a href="http://doapstore.org/"&gt;&lt;span class="caps"&gt;DOAP&lt;/span&gt; Store&lt;/a&gt; to find a &lt;a href="http://doapstore.org/view.php?uri=http%3A%2F%2Fsemwebdev.keithalexander.co.uk%2Fblog%2Fposts%2Frest-frameworks-php%23tonic"&gt;description of a software project that I had published on this blog&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;After I&amp;#8217;d written it, I must have run it through &lt;a href="http://triplr.org/"&gt;triplr&lt;/a&gt; to check the &lt;span class="caps"&gt;RDF&lt;/span&gt; was right, and then clicked my &lt;a href="http://pingthesemanticweb.com"&gt;PingTheSemanticWeb&lt;/a&gt; bookmarklet. And now some of the information was there on another web site &amp;#8230; magic!&lt;/p&gt;


	&lt;p&gt;Now you might be thinking that I&amp;#8217;m too easily impressed, that what happened there was not much different to what news feed syndication has been doing for years. And that&amp;#8217;s sort of true; the same ends could have been achieved had I been publishing, say, a special &lt;span class="caps"&gt;XML&lt;/span&gt; format (or microformat) for describing software projects, and the &lt;span class="caps"&gt;DOAP&lt;/span&gt; store harvested that. Except I didn&amp;#8217;t publish a special format, I just added some annotation to my &lt;span class="caps"&gt;XHTML&lt;/span&gt;, which describes not only software projects, but blog posts, people, magazine articles, and anything else I blog about. So the &lt;span class="caps"&gt;DOAP&lt;/span&gt; store can take the information about software, the &lt;span class="caps"&gt;SIOC&lt;/span&gt; browser could take the information about web-sites, blog posts,  and online communities, a &lt;span class="caps"&gt;FOAF&lt;/span&gt; browser could take the information about people, and so on. But crucially, what I&amp;#8217;m publishing isn&amp;#8217;t just a bunch of disparate information that happens to be on the same page &amp;#8211; it&amp;#8217;s all linked together semantically, so, for example, a Technology Blogs aggregator could pick out all the blog posts that describe certain software projects. There&amp;#8217;s semantic context to be harvested.&lt;/p&gt;


	&lt;h2&gt;Writing inline semantic content&lt;/h2&gt;


	&lt;p&gt;If you want to express the contents of your blog posts as &lt;span class="caps"&gt;RDF&lt;/span&gt;, you probably want a technique that lets you embed the semantics as you write the contents, rather than create, say, snippets of turtle about it at the end (though actually, it might be worth trying that just to see if it really is more effort or not).&lt;/p&gt;


	&lt;p&gt;I started off with eRDF, partly because:&lt;/p&gt; 

&lt;ul&gt;
&lt;li&gt;I had &lt;span id="bengee" class="foaf-knows -foaf-Person"&gt;&lt;a href="http://bnode.org/" rel="foaf-homepage foaf-made" class="foaf-nick"&gt;bengee&lt;/a&gt;&amp;#8217;s &lt;a rel="foaf-made" href="http://arc.web-semantics.org/documentation/erdf_parser"&gt;eRDF parser&lt;/a&gt;&lt;/span&gt; already to hand (though I have since also found &lt;a href="http://www.avthasselt.sohosted.com/rdfamonkey/"&gt;an RDFa parser in php&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;I didn&amp;#8217;t like the idea of my pages not validating as &lt;span class="caps"&gt;XHTML&lt;/span&gt; &amp;#8211; though now there is RDFa support in the &lt;span class="caps"&gt;W3C&lt;/span&gt;&amp;#8217;s validators (which unfortunately I still couldn&amp;#8217;t get to work)  &lt;/li&gt;
&lt;li&gt; I wanted to be able to style semantically cross-browser, and &lt;span class="caps"&gt;IE6&lt;/span&gt; doesn&amp;#8217;t do arbitrary attribute selectors (though &lt;span class="caps"&gt;IE6&lt;/span&gt; support is not really an issue for the visitors to these web pages &amp;#8211; - but classname selectors are still more friendly to write)&lt;/li&gt;
&lt;li&gt; RDFa wasn&amp;#8217;t (and isn&amp;#8217;t) finalised yet. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the last reason, I&amp;#8217;m glad I didn&amp;#8217;t start using RDFa yet, because there have been changes in the syntax, such as the change from @class to denote rdf:type, to the new attribute @instanceof, and it would have been really annoying to have to lose the semantics, or go back and make those changes.&lt;/p&gt;


	&lt;p&gt;One limitation of eRDF that I needed to work around for my blog posts is that it can&amp;#8217;t express &lt;span class="caps"&gt;XHTML&lt;/span&gt; in literals. RDFa can, so I tried that, using a &lt;span class="caps"&gt;GRDDL&lt;/span&gt; profile for RDFa (hmm, can&amp;#8217;t find it now &amp;#8211; there were several), in addition to the eRDF profile, but &lt;a href="http://triplr.org"&gt;triplr&lt;/a&gt; didn&amp;#8217;t like it (with or without the eRDF profile as well). So I gave up and decided to provide the &lt;span class="caps"&gt;RDF&lt;/span&gt;/XML myself, using bengee&amp;#8217;s eRDF parser, and specifically replacing the plain literal version of the sioc:contents with the full &lt;span class="caps"&gt;HTML&lt;/span&gt; version.&lt;/p&gt;


	&lt;p&gt;The down-side is that the eRDF parser doesn&amp;#8217;t know  about &lt;em&gt;all&lt;/em&gt; the rules of eRDF, some of which are not documented any where, and which I only found out when testing out my javascript eRDF parser for Operator on Ian Davis&amp;#8217;s home page (specifically, @href and @id work the same when it comes to determining the subject).&lt;/p&gt;


	&lt;p&gt;Another option I considered was some kind of semantic wiki-style markup that could parse into both &lt;span class="caps"&gt;HTML&lt;/span&gt; and &lt;span class="caps"&gt;RDF&lt;/span&gt;, but I couldn&amp;#8217;t really think of a syntax that would be as powerful as &lt;span class="caps"&gt;HTML&lt;/span&gt;, and still be much simpler (not so much so as to make writing a parser worthwhile).&lt;/p&gt;


	&lt;h2&gt;How to write about stuff semantically&lt;/h2&gt;


	&lt;p&gt;A fairly common thing I wanted to mark up was the relationship between me and the thing I was linking to. Now, if I just did &lt;code&gt;&amp;lt;a rel="foaf-knows" ...&lt;/code&gt; the subject would be the blog post, rather than me, so I do something like this:&lt;/p&gt;


&lt;pre&gt;
&lt;code&gt;
&amp;lt;div id="surrogate-me"&amp;gt;
    &amp;lt;a rel="owl-sameAs" href="http://keithalexander.co.uk/#me"&amp;gt;&amp;lt;/a&amp;gt;
    ...some stuff ...
    &amp;lt;a rel="foaf-knows" href="http://example.com/somebody/#me"&amp;gt;&amp;lt;span class="foaf-name"&amp;gt;Someone's name&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;        
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;I can of course do the same thing when wanting to describe other people or things, and their relationships to other people, things, or documents. In such a case, I might want to relate those things to the blog post, to indicate that this blog post is &lt;em&gt;about&lt;/em&gt; that person or thing:&lt;/p&gt;


&lt;pre&gt;
 &lt;code&gt;
&amp;lt;div class="sioc-about" id="joe-bloggs"&amp;gt;
    &amp;lt;p&amp;gt;
        &amp;lt;a rel="foaf-homepage rdfs-seeAlso" href="http://example.com/joe-bloggs/home/"&amp;gt;
            &amp;lt;span class="foaf-name"&amp;gt;Joe Bloggs&amp;lt;/span&amp;gt;
        &amp;lt;/a&amp;gt; is a fictional example ... 
    &amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;        
&lt;/code&gt;
&lt;/pre&gt;

In this case Joe Bloggs doesn&amp;#8217;t already have a &lt;span class="caps"&gt;URI&lt;/span&gt;, but by using @id for the subject, my eRDF is minting one for him in the url space defined by my &lt;code&gt;&amp;lt;base href=""/&amp;gt;&lt;/code&gt; element. If he already has a &lt;span class="caps"&gt;URI&lt;/span&gt;, I can do:
&lt;pre&gt;
&lt;code&gt;
    &amp;lt;a rel="owl-sameAs" href="http://example.com/joe-bloggs/#me"&amp;gt;
        &amp;lt;span class="foaf-name"&amp;gt;Joe Bloggs&amp;lt;/span&amp;gt;
    &amp;lt;/a&amp;gt; is a fictional example ...
&lt;/code&gt;
&lt;/pre&gt;

Unfortunately a lot of (non-information) resource URIs resolve to &lt;span class="caps"&gt;RDF&lt;/span&gt;/XML pages, rather than &lt;span class="caps"&gt;HTML&lt;/span&gt;, and I don&amp;#8217;t want to send &lt;span class="caps"&gt;HTML&lt;/span&gt; browsers to &lt;span class="caps"&gt;RDF&lt;/span&gt;/XML pages purely for the sake of my generated triples. So I do something like:
&lt;pre&gt;
&amp;lt;div class="sioc-about" id="joe-bloggs"&amp;gt;
&amp;lt;a rel="owl-sameAs" href="http://example.com/joe-bloggs/#me"&amp;gt;&amp;lt;/a&amp;gt;
    &amp;lt;p&amp;gt;
        &amp;lt;a rel="foaf-homepage rdfs-seeAlso" href="http://example.com/joe-bloggs/home/"&amp;gt;
            &amp;lt;span class="foaf-name"&amp;gt;Joe Bloggs&amp;lt;/span&amp;gt;
        &amp;lt;/a&amp;gt; is a fictional example ... 
    &amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;        
&lt;/pre&gt;

	&lt;p&gt;In RDFa of course, I could use the @about to describe external resources without hyperlinking to the &lt;span class="caps"&gt;URI&lt;/span&gt;, which is more succinct, but there is arguably an advantage in taking the trouble to mint that extra local #joe-bloggs &lt;span class="caps"&gt;URI&lt;/span&gt;, in that it provides a sort of light-weight provenance chain back to the page that made the statement. I also like the idea of minting URIs that can resolve to both human and machine readable descriptions of the resource identified by the &lt;span class="caps"&gt;URI&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;If all I wanted was to link semantically to a Joe Bloggs&amp;#8217; &lt;span class="caps"&gt;URI&lt;/span&gt;, but I wanted to make the hyperlink to his &lt;span class="caps"&gt;HTML&lt;/span&gt; homepage instead, I &lt;em&gt;think&lt;/em&gt; I could do this in RDFa:&lt;code&gt; &amp;lt;a rel=&amp;quot;foaf:knows&amp;quot; href=&amp;quot;http://example.com/joe-bloggs/home/&amp;quot; resource=&amp;quot;http://example.com/joe-bloggs/#me&amp;quot;&amp;gt;Joe Bloggs&amp;lt;/a&amp;gt; &lt;/code&gt; which is quite concise, but I think (correct me if I&amp;#8217;m wrong RDFa-ers) then I can&amp;#8217;t state the relationships between Joe&amp;#8217;s &lt;span class="caps"&gt;URI&lt;/span&gt;, his homepage &lt;span class="caps"&gt;URL&lt;/span&gt;, and the literal &amp;#8220;Joe Bloggs&amp;#8221;, so I&amp;#8217;d probably opt for a more verbose but informative construction.&lt;/p&gt;


	&lt;h2&gt;Future Plans&lt;/h2&gt;


	&lt;h3&gt;New Backend&lt;/h3&gt;


	&lt;p&gt;At some point I&amp;#8217;ll probably try to cadge another Bigfoot store, write a better blogging engine for it, and move my blog there. Since I already publish the blog as &lt;span class="caps"&gt;RDF&lt;/span&gt;/XML, importing it should be pretty simple (just &lt;span class="caps"&gt;POST&lt;/span&gt; all the &lt;span class="caps"&gt;RDF&lt;/span&gt; into the store).&lt;/p&gt;


	&lt;p&gt; 
		At the moment, the blog is just stored in the file-system. A SPARQLable backend would make it possible to do more interesting dynamic things, like generating a &lt;span class="caps"&gt;FOAF&lt;/span&gt; document for me from my blogging activity. I don&amp;#8217;t particularly like the idea of manually creating and maintaining a foaf file. But a document with statements about me and my social network (such as it is) aggregated from my posts, and possibly other online  accounts (like Twitter via &lt;span class="foaf-knows -foaf-Person" id="tom"&gt;&lt;a href="http://www.tommorris.org/blog/#me" rel="owl-sameAs"&gt;&lt;span class="foaf-name rdfs-label"&gt;Tom Morris&lt;/span&gt;&lt;/a&gt;&amp;#8217;s &lt;a rel="foaf-made" href="http://tools.opiumfield.com/twitter/tommorris/rdf"&gt;Twitter -&amp;gt;RDF service&lt;/a&gt; )&lt;/span&gt;, so that &lt;span class="caps"&gt;RDF&lt;/span&gt;-aware web sites like &lt;a href="http://revyu.com"&gt;Revyu&lt;/a&gt; could be pointed at it, is a lot more appealing. (coincidentally,  &lt;a href="http://danbri.org/words/2007/09/03/170"&gt;danbri&lt;/a&gt; just blogged a very similar sentiment.)&lt;/p&gt;


	&lt;p&gt;Another thing I&amp;#8217;d like to do  is, when parsing the eRDF from the posts, reify it to provide provenance about when the statements were made, by whom (ie: me ), in which post, and that kind of thing.&lt;/p&gt;


	&lt;p&gt;One thing I&amp;#8217;m wondering about though, is how to deal with information that &lt;em&gt;was&lt;/em&gt; true, but isn&amp;#8217;t anymore. If I say that I&amp;#8217;m &lt;a href="http://xmlns.com/foaf/0.1/based_near"&gt;based near&lt;/a&gt; somewhere, and then I move away, how can I give my dynamic &lt;span class="caps"&gt;FOAF&lt;/span&gt; page the smarts to know which statements replace older statements, and which augment the graph?&lt;/p&gt;


	&lt;p&gt;It&amp;#8217;d also be nice to have a general data browser section, for searching through the data  from the posts and elsewhere. After all, people often say that they use their blogs as a place to collect information about themselves, store links and ideas. With semantic annotation, that should become an even more interesting proposition.&lt;/p&gt;


	&lt;p&gt;It&amp;#8217;s also pretty useful to have a human-readable rendition of the extracted semantic data, to help discover if you&amp;#8217;ve made any mistakes in the semantic mark-up.&lt;/p&gt;


	&lt;h3&gt;Semantic Link Previews&lt;/h3&gt;


	&lt;p&gt;I&amp;#8217;m quite jealous of Frédérick Giasson&amp;#8217;s &lt;a href="http://fgiasson.com/blog/index.php/2007/09/01/blogs-wordpress-zitgist-and-the-semantic-web/"&gt;Semantic Hyperlink Plugin for Wordpress&lt;/a&gt; so it might be nice to have something like that built in. And because I&amp;#8217;m annotating my &lt;span class="caps"&gt;HTML&lt;/span&gt; semantically, the link preview thing could also show how the linked-to resource relates to the resource linking to it.&lt;/p&gt;


	&lt;h3&gt;hGRDDL&lt;/h3&gt;


	&lt;p&gt;&lt;a href="http://lists.w3.org/Archives/Public/public-rdf-in-xhtml-tf/2006Apr/0069.html"&gt;hGRDDL&lt;/a&gt; is a proposal/technique that Ben Adida came up with for transforming  GRDDLable &lt;span class="caps"&gt;HTML&lt;/span&gt; pages into RDFa (rather than &lt;span class="caps"&gt;RDF&lt;/span&gt;/XML). I&amp;#8217;d like to support that when the RDFa syntax is finalised.&lt;/p&gt;


	&lt;h3&gt;Better Admin/Editor&lt;/h3&gt;


	&lt;p&gt;One of the tricky/tedious things about writing semantically annotated blog posts is finding appropriate terms for what you want to describe, and then adding the namespaces to your document or template. With eRDF, you have to put all the schemas you&amp;#8217;re using in the head of the document. With RDFa, you can add namespaces anywhere, which can be more conveniently ad hoc, though if you need to use that namespace again in another post, you&amp;#8217;d have to cut and paste it in again.&lt;/p&gt;


	&lt;p&gt;What I want is to build an ajax interface to schema-cache into the editing pane, to somehow make the process easier and more streamlined &amp;#8211; to be able to look up schema definitions, and insert new namespace declarations without changing tab. I&amp;#8217;d also like for the namespace declarations to be dynamic &amp;#8211; to only declare the namespaces actually used in that document.&lt;/p&gt;


	&lt;h2&gt;Is Semantic Blogging Viable?&lt;/h2&gt;


	&lt;p&gt;It&amp;#8217;d be pretty good if more people embedded more data into their markup when blogging, but it does involve an extra investment of time, effort, and expertise, so what kind of return can bloggers expect on that?&lt;/p&gt;


	&lt;p&gt;For some, perhaps the thrill of seeing their data magically float off into the semantic web will be an incentive (at least until the novelty wears off, and/or spammers catch on and make things more complicated ).&lt;/p&gt;


	&lt;p&gt;Maybe if things like Frédérick Giasson&amp;#8217;s &lt;a href="http://fgiasson.com/blog/index.php/2007/09/01/blogs-wordpress-zitgist-and-the-semantic-web/"&gt;Semantic Hyperlink Plugin for Wordpress&lt;/a&gt; become more popular, there will be more of an incentive to make your own pages semantically rich ones to link to.&lt;/p&gt;


	&lt;p&gt;Some might find it useful as an ad hoc way of recording statements about themselves and their activities, so that they can be dynamically retrieved later.&lt;/p&gt;


	&lt;p&gt;But as things stand, semantic blogging still needs a certain amount of expertise. I wonder if blogging tools will develop interfaces intuitive enough for people to blog semantically without needing to understand how to write &lt;span class="caps"&gt;RDF&lt;/span&gt; and &lt;span class="caps"&gt;HTML&lt;/span&gt;. &lt;a href="http://kantenwerk.org/shift"&gt;Shift&lt;/a&gt; is an interesting step in that direction &amp;#8211; in that it lets you drag and drop items from desktop address books and calendars into RDFa snippets you can drop into your text editor. At this stage though, you still need to be able not to baulk at all the angle brackets of an RDFa snippet, and you&amp;#8217;d probably need at least some kind of understanding of RDFa syntax to use it. What these tools will need, I imagine, are ways of visually representing the underlying semantics of enriched documents, such that the general user can understand and care about getting them right.&lt;/p&gt;


	&lt;p&gt;More important than that though, are motivations strong enough to  get people to embed semantics. Probably, if people do it at all, they won&amp;#8217;t bother to mark up every bit of information, just the things that they particularly want to share, or index for their own reuse later (which, come to think of it, is the purpose behind a large chunk of web 2.0 sites).&lt;/p&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/y7DHwZVqlDw" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/semantic-blogging#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/rdf-vocabularies-best-practices#post">
		<title>Suggestions to Authors of RDF Vocabularies</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/O-sM4_Z-auc/rdf-vocabularies-best-practices</link>
				<description>&lt;p&gt;Working on &lt;a href=\"http://schemacache.test.talis.com/\"&gt;Schema-Cache&lt;/a&gt;, it was interesting to work with Ontologies and Schema as data, rather than my more usual mode of reading them as documents. It was also a little more difficult than I might have hoped, so I thought I’d lay out what some of the difficulties were here, in case any schema authors (or budding schema authors) care to take note and make their vocabularies more user (and &lt;em&gt;developer&lt;/em&gt;!) friendly.&lt;/p&gt;


	&lt;h2&gt;Use Absolute URIs&lt;/h2&gt;


	&lt;p&gt;When I tried to save  a lot of the vocabularies straight into Bigfoot, I got nasty error messages and problems because the vocabularies used relative URIs. The &lt;a href=\"http://www.w3.org/TR/rdf-syntax-grammar/#section-baseURIs\"&gt;&lt;span class=\"caps\"&gt;RDF&lt;/span&gt; Specification&lt;/a&gt; doesn’t permit this in &lt;span class=\"caps\"&gt;RDF&lt;/span&gt;/XML – you can’t use &lt;code&gt;\"\"&lt;/code&gt; or &lt;code&gt;\"#foo\"&lt;/code&gt; without setting an &lt;code&gt;xml:base&lt;/code&gt;.&lt;/p&gt;


	&lt;p&gt;To get round this, I set the base (as the &lt;span class=\"caps\"&gt;URI&lt;/span&gt; the document was parsed from) manually, using bengee’s &lt;span class=\"caps\"&gt;ARC RDF&lt;/span&gt;/XML parser, and then reserialising as &lt;span class=\"caps\"&gt;RDF&lt;/span&gt;/XML, which I could &lt;span class=\"caps\"&gt;POST&lt;/span&gt; to Bigfoot. This isn’t a good thing for you (as a publisher) to make me (as a consumer) do. Firstly it’s annoying and more hoops to jump through. Secondly, you probably publish your &lt;span class=\"caps\"&gt;RDF&lt;/span&gt; at more than one &lt;span class=\"caps\"&gt;URL&lt;/span&gt; – one will be the canonical one (perhaps with http://purl.org) and another might by the location that redirects to. Both of us want me to use the canonical &lt;span class=\"caps\"&gt;URL&lt;/span&gt;, but you have to tell me what it is by setting the xml:base.&lt;/p&gt;

&lt;ins&gt;&lt;p&gt;
In the comments, Morten, explains that I\'m wrong about the spec not permitting relative URIs without an xml:base - he\'s right of course. However, I stand by the broader point that it is undesirable to do so because it makes it harder to consume the RDF, and might accidentally result in different URIs being used for the same terms.
&lt;/p&gt;&lt;/ins&gt;

	&lt;h2&gt;rdfs:isDefinedBy&lt;/h2&gt;


	&lt;p&gt;Remember to use this property to link a term back to the vocabulary that it belongs to. It’s really handy to have a formal link between a term, and the vocabulary that describes it, but &lt;a href=\"http://schemacache.test.talis.com/services/sparql?query=PREFIX+rdf%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%0D%0APREFIX+rdfs%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0D%0APREFIX+owl%3A%3Chttp%3A%2F%2Fwww.w3.org%2F2002%2F07%2Fowl%23Class%3E%0D%0ADESCRIBE+%3Fs%0D%0AWHERE%0D%0A%7B%0D%0A++%7B%3Fs+a+rdfs%3AClass+.%7D%0D%0A++UNION%0D%0A++%7B%3Fs+a+rdfs%3AProperty+.%7D%0D%0A++UNION%0D%0A++%7B%3Fs+a+owl%3AClass+.+%7D%0D%0A%0D%0AOPTIONAL+%7B+%3Fs+rdfs%3AisDefinedBy+%3Fvocab+%7D%0D%0AFILTER%28%21bound%28%3Fvocab%29%29+.%0D%0AFILTER%28%21regex%28str%28%3Fs%29%2C%22wordnet%22%29%29%0D%0A%7D%0D%0A+%0D%0ALIMIT+500%09%09%09%09\"&gt;quite a few terms do not link back to their vocabularies&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;This isn’t compulsory of course, but I’d consider it good practice – because once your vocabulary is out of it’s document form, and into an &lt;span class=\"caps\"&gt;RDF&lt;/span&gt; store, it can be tricky to join it all back up again (you’d have to rely on string matching on the namespace, which makes things a bit more complicated).&lt;/p&gt;


	&lt;h2&gt;vann&lt;/h2&gt;


	&lt;p&gt;&lt;a href=\"http://purl.org/vocab/vann/\"&gt;vann&lt;/a&gt; is a small vocabulary of properties for annotating vocabularies. These are the properties you can use to make your vocabulary descriptions a little richer.&lt;/p&gt;


&lt;ul&gt;
    &lt;li&gt;&lt;a href=\"http://purl.org/vocab/vann/#changes\"&gt;changes&lt;/a&gt; – A reference to a resource that describes changes between this version of a vocabulary and the previous.&lt;/li&gt;
    &lt;li&gt;&lt;a href=\"http://purl.org/vocab/vann/#usageNote\"&gt;usageNote&lt;/a&gt; – A reference to a resource that provides information on how this resource is to be used.&lt;/li&gt;
    &lt;li&gt;&lt;a href=\"http://purl.org/vocab/vann/#example\"&gt;example&lt;/a&gt; – A reference to a resource that provides an example of how this resource can be used.&lt;/li&gt;
    &lt;li&gt;&lt;a href=\"http://purl.org/vocab/vann/#preferredNamespaceUri\"&gt;preferredNamespaceUri&lt;/a&gt; – The preferred namespace &lt;span class=\"caps\"&gt;URI&lt;/span&gt; to use when using terms from this vocabulary in an &lt;span class=\"caps\"&gt;XML&lt;/span&gt; document.&lt;/li&gt;
    &lt;li&gt;&lt;a href=\"http://purl.org/vocab/vann/#preferredNamespacePrefix\"&gt;preferredNamespacePrefix&lt;/a&gt; – The preferred namespace prefix to use when using terms from this vocabulary in an &lt;span class=\"caps\"&gt;XML&lt;/span&gt; document.&lt;/li&gt;
&lt;/ul&gt;

	&lt;p&gt;I think it would be nice to see the preferred namespace properties in particular &lt;a href=\"http://schemacache.test.talis.com/services/sparql?query=PREFIX+rdf%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%0D%0APREFIX+rdfs%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0D%0APREFIX+owl%3A%3Chttp%3A%2F%2Fwww.w3.org%2F2002%2F07%2Fowl%23Class%3E%0D%0ADESCRIBE+%3Fvocab+%0D%0AWHERE%0D%0A%7B%0D%0A%3Fvocab+%3Chttp%3A%2F%2Fpurl.org%2Fvocab%2Fvann%2FpreferredNamespaceUri%3E+%3Fns%0D%0A%7D%0D%0A+%0D%0ALIMIT+500%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09\"&gt;get wider usage&lt;/a&gt; amongst vocabulary authors; a possible use case is for &lt;span class=\"caps\"&gt;RDF&lt;/span&gt; (re)serialisers to be able to use nice prefixes, rather than generated ns1, ns2, style prefixes.&lt;/p&gt;


	&lt;h2&gt;Labels!&lt;/h2&gt;


	&lt;p&gt;Most important, and most neglected of all I think, are labels. The definition (well, the rdfs:comment ;) ) for &lt;a href=\"http://www.w3.org/2000/01/rdf-schema#label\"&gt;rdfs:label&lt;/a&gt; is &lt;q&gt;A human-readable name for the subject&lt;/q&gt;. And yet  there are no shortage of &lt;a href=\"http://schemacache.test.talis.com/services/sparql?query=PREFIX+rdf%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%0D%0APREFIX+rdfs%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0D%0APREFIX+owl%3A%3Chttp%3A%2F%2Fwww.w3.org%2F2002%2F07%2Fowl%23Class%3E%0D%0ADESCRIBE+%3Fterm%0D%0AWHERE%0D%0A%7B%0D%0A%3Fterm+rdfs%3Alabel+%3Flabel+.%0D%0AFILTER%28regex%28str%28%3Flabel%29%2C%22%5Ba-z%5D%5BA-Z%5D%22%29%29+.%0D%0A%7D%0D%0A+%0D%0ALIMIT+600%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09\"&gt;terms that use camel-casing in their labels&lt;/a&gt; 
rather than something that looks like it was intended to actually be read (rather than merely recognised) by humans. Perhaps I’m over interpreting the rubric here – in fact, even the &lt;a href=\"http://www.w3.org/2000/01/rdf-schema#\"&gt;&lt;span class=\"caps\"&gt;RDFS&lt;/span&gt; Vocabulary&lt;/a&gt; is disappointing in this regard.&lt;/p&gt;


	&lt;p&gt;However if developers are to make use of the power, flexibility, and self-descriptiveness of &lt;span class=\"caps\"&gt;RDF&lt;/span&gt; data, we need to be able to bring in labels for our data that we aren’t ashamed to display in our user-interfaces. If you have a look at some of the pages in &lt;a href=\"http://schemacache.test.talis.com/\"&gt;Schema-Cache&lt;/a&gt; you’ll see what I mean. The page pulls in the rdfs:labels for the data it’s displaying, but the labels simply aren’t very good!&lt;/p&gt;


	&lt;p&gt;I’ve talked about this a few time on irc with &lt;a rel=\"foaf-knows\" class=\"-foaf-Person\" href=\"http://fgiasson.com/#me\"&gt;fgiasson&lt;/a&gt; who seems to be doing similar sorts of things and experiencing the same kind of frustration. Thankfully, he’s an author of a number of large vocabularies himself, so has ample opportunity to put this into practice. But as the number of &lt;span class=\"caps\"&gt;RDF&lt;/span&gt; developers and &lt;span class=\"caps\"&gt;RDF&lt;/span&gt; applications grows, there will be more and more need for vocabularies to be aware of the uses they enable for their terms and the data they describe.&lt;/p&gt;


	&lt;p&gt;So you can greatly improve the usability of your vocabulary by thinking of your users’ users when writing your labels. And you don’t need to stop at one label – it will also become important to provide labels with translations into different languages. You can also help interface developers even more by using &lt;a href=\"http://www.wasab.dk/morten/#me\" rel=\"foaf:knows\"&gt;Morten Frederiksen&lt;/a&gt;\'s  &lt;a href=\"http://purl.org/net/vocab/2004/03/label\"&gt;label vocabulary&lt;/a&gt;, which provides properties for singular and plural labels – and now &lt;strong&gt;inverse labels&lt;/strong&gt; (singular and plural)! (Inverse labels reduce the need, and associated complexity, for inverse properties; they solve the problem of what text to show next to a link to a resource that, in the &lt;span class=\"caps\"&gt;RDF&lt;/span&gt;,  links in to the current resource).&lt;/p&gt;


	&lt;h2&gt;A New Mailing List for &lt;span class=\"caps\"&gt;RDF&lt;/span&gt; schema development!&lt;/h2&gt;


	&lt;p&gt;Somewhat related to this, &lt;a rel=\"foaf:knows\" href=\"http://iandavis.com/#ian\"&gt;Ian Davis&lt;/a&gt; has today started a new &lt;a href=\"http://groups.google.com/group/rdf-schema-dev\"&gt;mailing list for rdf schema development&lt;/a&gt; . As the description says, the list is:&lt;/p&gt;


&lt;blockquote&gt;&lt;p&gt;A place for authors of &lt;span class=\"caps\"&gt;RDF&lt;/span&gt; schemas to gather and talk shop. The focus is on smaller schemas that don’t already have an established community so discussion of improvements to &lt;span class=\"caps\"&gt;FOAF&lt;/span&gt;, SIOC, &lt;span class=\"caps\"&gt;DOAP&lt;/span&gt; and the like are off topic, although reference to those schemas and their designs is not.&lt;/p&gt;&lt;/blockquote&gt;

	&lt;p&gt;I’m really  looking forward to reading the threads on this list, and the advice and best practices for schema development that emerge.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/O-sM4_Z-auc" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/rdf-vocabularies-best-practices#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/html5-profile#post">
		<title>HTML5 and the future of @profile</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/PtBvR3VyFjg/html5-profile</link>
				<description>&lt;p&gt;&lt;a href="http://tom.opiumfield.com/blog/"&gt;Tom Morris&lt;/a&gt; has written &lt;a href="http://tom.opiumfield.com/blog/2007/05/15#When:08:46:09"&gt;a post decrying the HTML5 working group's decision to drop the @profile attribute&lt;/a&gt;. I thoroughly agree.&lt;/p&gt;

&lt;p&gt;The point that @profile has remained relatively obscure all these years is worth noting, but (as Tom says) does &lt;em&gt;not&lt;/em&gt; mean that it should be thoughtlessly dropped from future specifications. It&amp;#8217;s not that @profile is &lt;em&gt;useless&lt;/em&gt;, it&amp;#8217;s that its &lt;em&gt;use&lt;/em&gt; hasn&amp;#8217;t been clearly defined and explained.&lt;/p&gt;

&lt;p&gt;The concept behind @profile has come of age now, and it&amp;#8217;s the right time to define and push the idea. It needn&amp;#8217;t necessarily be @profile in its current form; that could possibly be revised; perhaps HTML 5 could make it a new element, or allow it as an attribute on elements beyond &lt;code&gt;head&lt;/code&gt; (to make it more suitable for use in constrained authoring environments like CMSs). But don&amp;#8217;t leave HTML 5 without a mechanism to allow &lt;strong&gt;decentralised html data formats&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To ignore the principle of addressable html metadata profiles because &lt;a href="http://microformats.org/" title="microformats"&gt;one particular (and unabashedly limited) approach to data in html&lt;/a&gt; seems to get along ok without it, is either arrogant, or ignorant. (Besides which, it's distinctly at odds with the &lt;a href="http://www.w3.org/TR/grddl/"&gt;GRDDL&lt;/a&gt; CR specification).&lt;/p&gt;

&lt;p&gt;Most of the people that get interested in microformats, they&amp;#8217;re not, I don't think, especially interested in contact details or calendar events &lt;em&gt;per se&lt;/em&gt;. But they love the idea of making data extractable from their html. Many of them even go to the trouble of creating their &lt;em&gt;own&lt;/em&gt; formats, some complete with specification documents and examples and everything, hoping that their format will be endorsed by the Microformats community (which it almost inevitably won&amp;#8217;t be). &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;@profile&lt;/strong&gt; lets  any html author develop and formalise their own formats, exposing their data clearly and reliably to user-agents. Microformats doesn&amp;#8217;t, because without something in the HTML spec like @profile, microformats authors have to rely on the conventions they are using being &lt;em&gt;common knowledge&lt;/em&gt; to user agents. And there are only so many conventions that common knowledge can accommodate.&lt;/p&gt;

&lt;p&gt;So if the Working Group take the time to look at @profile properly, and work out a way to let authors specify the semantics and transformation/parsing scenarios that apply to their documents (converting, not just to RDF, but to other formats as well), they could turn the humble @profile into one of the most exciting and innovative features of HTML5.&lt;/p&gt;

&lt;p&gt;(If they don't, we'll just have to invent a microformat for pointing to profile URIs).&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/PtBvR3VyFjg" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/html5-profile#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/2">
		<title>MyPost2</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/dw0oVa4riBc/2</link>
				<description>Test 2 test34 test 34&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/dw0oVa4riBc" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/2</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/rdf-for-the-rest-of-us-digital-web#post">
		<title>RDF article @ Digital Web</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/behKxFKHaOg/rdf-for-the-rest-of-us-digital-web</link>
				<description>&lt;p id="translation" class="-frbr-Manifestation"&gt;
&lt;ins&gt;
My &lt;a rev="frbr-translation" href="http://www.digital-web.com/articles/rdf_for_the_rest_of_us/"&gt;article about RDF&lt;/a&gt; was translated into french:  &lt;a rel="owl-sameAs" href="http://www.biologeek.com/journal/index.php/rdf-pour-tous-du-publicateur-au-developpeur-web"&gt;&lt;span class="dc-title"&gt;RDF pour tous : du publicateur au développeur web&lt;/span&gt;&lt;/a&gt;
&lt;/ins&gt;
&lt;/p&gt;
        &lt;p id="me"&gt;
&lt;a href="http://keithalexander.co.uk/#me" rel="owl-sameAs"&gt;&lt;/a&gt;
If you are a reader of this blog, I doubt you will learn much from it, but I wrote an article for &lt;a class="-sioc-Site" href="http://www.digital-web.com/#res"&gt;Digital Web&lt;/a&gt; entitled &lt;a rel="foaf-made" class="-foaf-Document" href="http://www.digital-web.com/articles/rdf_for_the_rest_of_us/"&gt;&lt;q class="dc-title"&gt;RDF for the rest of us&lt;/q&gt;&lt;/a&gt;, which was published yesterday. I tried to explain the basics of why you would want to publish, and develop with RDF, and followed with a tutorial on using eRDF.  One especially nice thing was that the article's editor, &lt;a rel="foaf-knows" class="-foaf-Person" href="http://www.digital-web.com/about/staff/matthew_pennell/#person"&gt;&lt;span class="foaf-name"&gt;Matthew Pennell&lt;/span&gt;&lt;/a&gt;, went to the trouble of adding eRDF markup to the contributors' profiles. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/behKxFKHaOg" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/rdf-for-the-rest-of-us-digital-web#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/Exhibit-JSON#post">
		<title>Exhibit your RDF databases!</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/GE3mfSq-ltc/Exhibit-JSON</link>
				<description>&lt;p&gt;
	I've written a short script that reads in an &lt;a href="http://simile.mit.edu/wiki/Exhibit/Understanding_Exhibit_Database"&gt;Exhibit JSON template file&lt;/a&gt;, and turns it into SPARQL queries, queries a local &lt;a href="http://arc.web-semantics.org/home"&gt;ARC&lt;/a&gt; RDF store, and injects the results back into the &lt;var&gt;items &lt;/var&gt; array of the JSON template, which it then outputs.
&lt;/p&gt;
&lt;p&gt;
	The script will generate a new query for every item it finds in the items array. The format of the template is the same as a normal Exhibit JSON file, except:&lt;/p&gt; 
	&lt;ul&gt;
		&lt;li&gt; you need to specify your types and properties in the &lt;var&gt;"types"&lt;/var&gt; and &lt;var&gt;"properties"&lt;/var&gt; objects, and give them an "uri" property, containing the uri of the RDF Class or Property in the database. &lt;ins&gt;Actually, this is still normal to Exhibit, which can use these URIs in its RDF/XML exporter (though the exporter apparently needs a bit of work before it will do this for the rdf:types).&lt;/ins&gt;&lt;/li&gt;
		&lt;li&gt;In each &lt;var&gt;item&lt;/var&gt;, use empty strings for values that should be variables in the query&lt;/li&gt;
		&lt;li&gt;The value of the "label" property should be the name of another property from the properties object.&lt;/li&gt;
	&lt;/ul&gt; 
&lt;p&gt;Here is an example:
&lt;/p&gt;

	&lt;code&gt;
		&lt;pre&gt;
			{

			    types: {
			        "Person": {
						uri: "http://xmlns.com/foaf/0.1/Person",
			            pluralLabel:  "People"
			        }
			    },
			    properties: {
			      
			        "name": {
						"uri": "http://xmlns.com/foaf/0.1/name",
			            label:        "Name",
			            valueType:    "item"
			        },
					"email": {
						"uri": "http://xmlns.com/foaf/0.1/mbox",
			            label:        "E-Mail",
						"pluralLabel": "e-mails",
			            valueType:    "uri",
			        },
					 "knows": {
							"uri": "http://xmlns.com/foaf/0.1/knows",
				            label:        "Knows",
				            valueType:    "item"
				        },
			    },
			    items: [
					{
						"type":	"Person",
						"label": "name",
						"name": "",
						"knows": "",
					},
					{
							"type":	"Person",
							"label": "name",
							"email": "",
							"name": "",
					}
			    ]
			}
			
		&lt;/pre&gt;
	&lt;/code&gt;
&lt;p&gt;You can see this in use at this &lt;a href="http://semwebdev.keithalexander.co.uk/exhibit.html"&gt;basic Exhibit&lt;/a&gt;, and have a look at &lt;a href="http://semwebdev.keithalexander.co.uk/blog/code/erdft/json2sparql.phps"&gt;the json-to-sparql-and-back script itself&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;What's the point? It's easy to write SPARQL queries.&lt;/h2&gt;
&lt;p&gt; It &lt;em&gt;is&lt;/em&gt; pretty easy to do this manually anyway (in  part, at least, because of the RDF-like nature of Exhibit's data structure), and I can't pretend the script does anything technically complicated or clever, but if you're putting up an Exhibit anyway, this script can let you remain in that mindset, or indeed make Exhibits from RDF datastores  without knowing SPARQL at all - or even very much about RDF (beyond the concept of letting URI's identify concepts).&lt;/p&gt;
&lt;p&gt;
	Where this idea could really become cool though, is if there was a web service to which you could send your json template and the location of a SPARQL endpoint, and get back a nice full Exhibit database object.
&lt;/p&gt;
&lt;p&gt;
	If you coupled this with some of SIMILE's other products (Piggybank and Solvent), then you've got a relatively easy way to present the data you've screenscraped, without doing any server-side coding &lt;em&gt;at all&lt;/em&gt;. You could just scrape your data, save it to SIMILE's databank, and write your Exhibit with a call to the webservice, sending the query to your SIMILE databank. In fact, the webservice bit isn't even totally necessary - you could maybe use &lt;a href="http://thefigtrees.net/lee/sw/sparql.js"&gt;Lee Feigenbaum's sparql.js library to fetch the results&lt;/a&gt;, and the rest of the code would be trivial to rewrite in javascript too (though there are the cross-site XMLHttpRequest security restrictions you'd have to contend with).
&lt;/p&gt;
&lt;h3&gt;Safer than SPARQL, easier and more open than an API&lt;/h3&gt;
&lt;p&gt;This also offers a minor solution to another problem: I might want to provide open access to my RDF data (or some of it), but I'm not going to put up a public SPARQL endpoint. If I gave you an endpoint to my ARC RDF store for instance, you could easily write (or miswrite!) a query that would give the database &lt;em&gt;a lot&lt;/em&gt; to think about for a long time. I also probably wouldn't want you to see &lt;em&gt;all&lt;/em&gt; my data, if I'm storing user account details and things in there (there are actually some ways around this with Arc, involving splitting sensitive properties into different tables).&lt;/p&gt;

&lt;p&gt;It would be easy to provide an Exhibit JSON endpoint instead. You could predefine the properties and types objects of the classes and properties that you want to make available to the public, and publish what they are. And because there's no need for a DISTINCT in the generated query (Exhibit does a lovely job of smooshing together objects with the same id), and you can choose the LIMIT and set it relatively low, it shouldn't (I &lt;em&gt;think&lt;/em&gt;, correct me if I'm mistaken!) be possible to send an Exhibit JSON query that would result in a hugely expensive query.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/GE3mfSq-ltc" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/Exhibit-JSON#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/rest-frameworks-php#post">
		<title>PHP RESTful Frameworks</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/r7hGKixo9FM/rest-frameworks-php</link>
				<description>&lt;h2&gt;PHP RESTful Frameworks&lt;/h2&gt;

&lt;p id="konstruct-intro"&gt;&lt;a href="#konstruct" rel="owl-sameAs"&gt;&lt;/a&gt;
Yesterday I spotted a new &lt;span class="dc-description"&gt;PHP RESTful framework&lt;/span&gt; (&lt;a href="http://www.konstrukt.dk/"&gt;Konstrukt&lt;/a&gt;), which is interesting, because it sells itself in much the same way as &lt;a href="http://tonic.sourceforge.net/" rel="rdfs-seeAlso"&gt;Tonic&lt;/a&gt;, the framework I'm using at the moment (&lt;span class="framework-feature"&gt;transparent use of HTTP&lt;/span&gt;, &lt;span class="framework-feature"&gt;lightweight&lt;/span&gt;, &lt;span class="framework-feature"&gt;flexible&lt;/span&gt;). I haven't dug around in the code yet, but it looks interesting.
&lt;/p&gt;
&lt;p&gt;The crucial points of difference between konstruct and tonic seem to be that Tonic:&lt;/p&gt;
&lt;div id="tonic-summary"&gt;&lt;a href="#tonic" rel="owl-sameAs"&gt;&lt;/a&gt;
	&lt;ul&gt;
&lt;li class="framework-feature"&gt;Uses Smarty for templating (by default, though you can use something else fairly easily&lt;/li&gt;
&lt;li class="framework-feature"&gt;Allows Regexes in URL patterns&lt;/li&gt;
&lt;li class="framework-feature"&gt;Has a concept of &amp;#8216;metadata&amp;#8217;. Metadata includes properties like &amp;#8220;last modified&amp;#8221;, &amp;#8220;created&amp;#8221;, &amp;#8220;template&amp;#8221;, and &amp;#8220;title&amp;#8221;, which can be assigned  manually or programmatically to resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;Whereas konstruct:&lt;/p&gt;
&lt;div id="konstruct-summary"&gt;&lt;a href="#konstruct" rel="owl-sameAs"&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li class="framework-feature"&gt;Uses PHP as the templating language (by default)&lt;/li&gt;
&lt;li class="framework-feature"&gt;Has a programmatic form builder class&lt;/li&gt;
&lt;li class="framework-feature"&gt;implements built in support for 18n&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;p&gt;There's also another PHP REST framework/toolkit called dbscript, which is a REST wrapper for database CRUD. I've included the descriptions of the 3 below, marked up with eRDF+doap mainly. &lt;/p&gt;
&lt;hr/&gt;
&lt;div id="konstruct" class="sioc-about -doap-Project -framework-Framework"&gt;
&lt;h2 class="doap-name rdfs-label"&gt;&lt;a href="http://www.konstrukt.dk/" rel="doap-homepage"&gt;Konstrukt&lt;/a&gt;&lt;/h2&gt;
	&lt;div class="doap-description"&gt;
	&lt;span class="doap-shortdesc"&gt;
	A &lt;span class="framework-design"&gt;REST&lt;/span&gt;-ful framework of controllers for &lt;span class="doap-programming-language"&gt;&lt;span class="doap-programming-language"&gt;PHP&lt;/span&gt;5&lt;/span&gt;.
	&lt;/span&gt;
	&lt;h3&gt;Key Aspects&lt;/h3&gt;
	&lt;ul&gt;
		&lt;li class="framework-feature"&gt;Controllers are resources&lt;/li&gt;
		&lt;li class="framework-feature"&gt;URI-to-controller-mapping gives your application a logical structure&lt;/li&gt;
		&lt;li class="framework-feature"&gt;Routing based on logic rather than rules&lt;/li&gt;
		&lt;li class="framework-feature"&gt;Nested controllers supports composite view rendering&lt;/li&gt;
		&lt;li class="framework-feature"&gt;Formcontroller provides filtering and validation&lt;/li&gt;
	&lt;/ul&gt;

	&lt;h3&gt;Design Goals&lt;/h3&gt;

	&lt;ul&gt;
		&lt;li class="framework-principle"&gt;Embrace HTTP rather than hide it&lt;/li&gt;
		&lt;li class="framework-principle"&gt;Enable the programmer, rather than automating&lt;/li&gt;
		&lt;li class="framework-principle"&gt;Favour aggregation over code-generation or config-files&lt;/li&gt;
		&lt;li class="framework-principle"&gt;Encourage encapsulation, and deter use of global scope&lt;/li&gt;
		&lt;li class="framework-principle"&gt;Limit focus to the controller layer&lt;/li&gt;
	&lt;/ul&gt;
&lt;a href="http://konstrukt.svn.sourceforge.net/svnroot/konstrukt" rel="doap-repository" class="-doap-SVNRepository"&gt;Konstruct SVN Repository&lt;/a&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;div id="tonic" class="sioc-about -doap-Project -framework-Framework"&gt;
&lt;h2&gt;&lt;a class="doap-name" href="http://tonic.sourceforge.net/" rel="doap-homepage"&gt;Tonic&lt;/a&gt; &lt;span class="doap-shortdesc"&gt;A &lt;strong class="framework-design"&gt;REST&lt;/strong&gt;ful Web App Development Framework&lt;/span&gt;&lt;/h2&gt;

&lt;div class="doap-description"&gt;
&lt;p&gt;Tonic is an open source less is more, RESTful Web application development and Web site management &lt;span class="doap-programming-language"&gt;PHP&lt;/span&gt; script designed to do things "the right way", where resources are king and the framework gets out of the way and leaves the developer to get on with it.
&lt;/p&gt;
&lt;p&gt;Tonic helps you develop Web applications that embrace the way the Web really works, enabling your applications to scale, extend and work with other systems easily.
&lt;/p&gt;
&lt;/div&gt;

&lt;dl&gt;
	&lt;dt class="framework-principle"&gt;Everything is a resource&lt;/dt&gt;&lt;dd&gt;Tonic works exclusively with resources, a resource is simply a piece of data with some metadata accessable by a URL using HTTP methods. Everything within a Tonic system is a resource and so can be handled via the standard HTTP interface.&lt;/dd&gt;
	&lt;dt class="framework-principle"&gt;Domain modelling through resources&lt;/dt&gt;&lt;dd&gt;When modelling your problem domain within a Tonic system, every domain object is a resource or a collection of resources.&lt;/dd&gt;
	&lt;dt class="framework-principle"&gt;Keep it simple, stupid!&lt;/dt&gt;&lt;dd&gt;Following the Unix philosophy of many small parts working together via a common interface, Tonic uses resources as it's "programs" and HTTP as it's "streams" to enable you to build complexity out of simplicity.&lt;/dd&gt;
&lt;/dl&gt;

&lt;h3&gt;Main features&lt;/h3&gt;

	&lt;p&gt;Tonic embraces a number of standard Web features and best practices, as well as features, principles and ideas taken from PHP, Unix, and other software design patterns:&lt;/p&gt;

&lt;ul&gt;
	&lt;li class="framework-feature"&gt;Resource editing via HTTP PUT and DELETE methods (or via the Resource::save() and Resource::remove() PHP methods)&lt;/li&gt;
	&lt;li class="framework-feature"&gt;Easy to extend via new resource classes&lt;/li&gt;
	&lt;li class="framework-feature"&gt;HTTP basic and digest authentication&lt;/li&gt;
	&lt;li class="framework-feature"&gt;Resource method permissions to provide authorisation to individual resource methods&lt;/li&gt;
	&lt;li class="framework-feature"&gt;Output templating via Smarty&lt;/li&gt;
	&lt;li class="framework-feature"&gt;Output caching via HTTP 304 response codes and modified headers&lt;/li&gt;
	&lt;li class="framework-feature"&gt;Extendable resource storage types via adapters&lt;/li&gt;
	&lt;li class="framework-feature"&gt;Content negotiation&lt;/li&gt;
	&lt;li class="framework-feature"&gt;Match multiple URLs to a single resource&lt;/li&gt;
	&lt;li class="framework-feature"&gt;Follows Unix modular design principles&lt;/li&gt;
&lt;/ul&gt;
&lt;a href="http://tonic.cvs.sourceforge.net/tonic/" rel="doap-repository" class="-doap-CVSRepository"&gt;Tonic CVS Repository&lt;/a&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;div id="dbscript" class="sioc-about -doap-Project -framework-Framework"&gt;

&lt;h2 class="rdfs-label doap-name"&gt;&lt;a rel="doap-homepage" href="http://dbscript.net/"&gt;dbscript&lt;/a&gt;&lt;/h2&gt;
	&lt;p class="doap-shortdesc"&gt;&lt;span class="framework-design"&gt;REST&lt;/span&gt;ful crud framework for &lt;span class="doap-programming-language"&gt;php&lt;/span&gt; 4/5&lt;/p&gt;
&lt;div class="doap-description"&gt;
&lt;p&gt;dbscript is a web development framework, it helps php programmers take advantage of efficient design patterns and idioms from other dynamic languages and frameworks.
&lt;/p&gt;

&lt;p&gt;for example, the Mapper and Route classes work together to map actions and records to distinct urls. among the many advantages of routes are the automatic named routes: url_for( resource ).&lt;/p&gt;
&lt;p&gt;
&lt;span class="framework-feature"&gt;restful urls&lt;/span&gt;, &lt;span class="framework-feature"&gt;http-style controllers&lt;/span&gt;, &lt;span class="framework-feature"&gt;atompub/html introspection documents&lt;/span&gt; and &lt;span class="framework-feature"&gt;content-negotiation&lt;/span&gt; are among the sophisticated features of this programmer-centric development tool.
&lt;/p&gt;
&lt;p&gt;
the framework is &lt;strong class="framework-feature"&gt;a database abstraction layer&lt;/strong&gt;, with &lt;span class="framework-feature"&gt;built-in adapters for PostgreSQL and MySQL&lt;/span&gt;.&lt;/p&gt;
	&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/r7hGKixo9FM" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/rest-frameworks-php#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/Why-RDF-Web-Apps#post">
		<title>Why RDF Ought to make Web Apps easier to build</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/qAdb3OWoqnI/Why-RDF-Web-Apps</link>
				<description>&lt;p&gt;Some too-hasty thoughts on why it ought to be fundamentally easier to build web apps based on RDF, instead of relational databases:&lt;/p&gt;

&lt;h2 id="rdf_is_the_web"&gt;RDF &lt;em&gt;is&lt;/em&gt; the Web&lt;/h2&gt;

&lt;p&gt;Unlike the relational database, RDF is designed to be part of the Web, to &lt;em&gt;be&lt;/em&gt; the Web. Its standard method of unique identifier is the same as the Web&amp;#8217;s. &lt;/p&gt;

&lt;p&gt;A GET request of a URI to your web app is a request for a representation of a resource.&lt;/p&gt;

&lt;p&gt;Typically, your web app has to deconstruct the URI being requested into distinct parts so it can go:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;this bit means use &lt;em&gt;this&lt;/em&gt; controller code&lt;/li&gt;
&lt;li&gt;and then call &lt;em&gt;this&lt;/em&gt; method&lt;/li&gt;
&lt;li&gt;which will retrieve &lt;em&gt;these&lt;/em&gt; bits of data (maybe using &lt;em&gt;this&lt;/em&gt; part of the URI as a parameter)&lt;/li&gt;
&lt;li&gt;and assign them to &lt;em&gt;those&lt;/em&gt; variables&lt;/li&gt;
&lt;li&gt;to populate &lt;em&gt;that&lt;/em&gt; template&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fair enough. Frameworks will often use some naming conventions to shield the developer from the first two. But it still leaves a lot of grunt work.&lt;/p&gt;

&lt;p&gt;With an RDF-based web app, the URI being requested is &lt;em&gt;in itself&lt;/em&gt; an identifier for the &lt;strong&gt;resource&lt;/strong&gt; being requested. So the framework can identify and retrieve the resource &lt;em&gt;for&lt;/em&gt; you, leaving you to represent it.&lt;/p&gt;

&lt;h2 id="rdf_represents_all_data_in_the_same_way_triples"&gt;RDF Represents All Data In the Same Way (Triples!)&lt;/h2&gt;

&lt;p&gt;This means that you can use the same code for saving user account data as for saving catalogue stock items, chemical formulae and blog posts. Which means less code to write and more tools to share.&lt;/p&gt;

&lt;h2 id="rdf_data_is_its_own_metadata"&gt;RDF data is its own metadata&lt;/h2&gt;

&lt;p&gt;When you take data out of a relational database, it loses the semantics that the database schema gave it. So you have to write a lot of domain-specific code preserving your interpretation of the data&amp;#8217;s semantics. RDF can keep its semantics right to the users&amp;#8217; screen if you want (for example, using RDFa or eRDF) (and even beyond: see Benjamin Nowack&amp;#8217;s &lt;a href="http://www.sparqlets.org/clipboard/"&gt;Web Clipboard &lt;/a&gt; ). So again, this means a potential for more generic tools and libraries, and less domain-specific code.&lt;/p&gt;

&lt;h2&gt;RDF is flexible&lt;/h2&gt;

&lt;p&gt;RDF can be a lot more flexible because it is self-describing, and doesn't rely on a larger structure, such as an XML tree, or a relational schema of tables, to give it its meaning. You don't &lt;em&gt;have&lt;/em&gt; to know at the start of a project whether a relationship is one to many, or many to many, or know where everything fits into the DOM tree. This should mean less to set up for the developer, and a more rapid prototyping and development process.&lt;/p&gt;
&lt;p&gt;
	(Although, this flexibility &lt;em&gt;can&lt;/em&gt; be problematic later, as the data is less consistent and predictable.)
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/qAdb3OWoqnI" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/Why-RDF-Web-Apps#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/mypost1">
		<title>MyPost1</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/IcyS7Xy0YTI/mypost1</link>
				<description>My Post 1&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/IcyS7Xy0YTI" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/mypost1</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/getSemantic#post">
		<title>getSemantic.com</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/qmmK92t0ywU/getSemantic</link>
				<description>&lt;p&gt;Thought I\'d put out a plug here to &lt;a href=\"http://getSemantic.com/\"&gt;getSemantic&lt;/a&gt;, which is a community wiki and irc channel (freenode.net #getSemantic ) that seems to be all about semantic data formats (mainly html formats that can be serialised into RDF). There\'s a &lt;a href=\"http://www.getsemantic.com/wiki/GetSemantic_Introduction\"&gt;list of general aims&lt;/a&gt; on the wiki, the most general and mission-statementy of which is probably: &lt;q cite=\"http://www.getsemantic.com/wiki/GetSemantic_Introduction\"&gt;[GetSemantic will] be a bridge not only between &lt;strong&gt;microformats&lt;/strong&gt;, &lt;strong&gt;rdf&lt;/strong&gt; and the &lt;strong&gt;semweb&lt;/strong&gt; communities, but between users and all three.&lt;/q&gt; &lt;/p&gt;

&lt;p&gt;My hope is that getSemantic will also become a good place to learn about how to build web sites with semweb tech, discuss best practices, and solve problems; a community that can answer questions like:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;I know how to build web apps with PHP&amp;MySQL/Rails/Turbogears/Coldfusion: How do I get started building a web application using RDF? (or:)&lt;/li&gt;
	&lt;li&gt;I know how to build web apps with PHP&amp;MySQL/Rails/Turbogears/Coldfusion: why should I &lt;em&gt;want&lt;/em&gt; to build a web application using RDF?&lt;/li&gt;
	&lt;li&gt;What\'s the best toolkit/pattern for doing what I want to do?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Or even (and especially) basic things like: &lt;/p&gt;
&lt;blockquote&gt;
	&lt;span&gt;
		I want to publish some data as RDF, but I\'m not sure how, can someone show me?
	&lt;/span&gt;
&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/qmmK92t0ywU" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/getSemantic#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/erdf-at-a-glance#post">
		<title>eRDF at a glance: a beginners\' introduction</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/ZBIlAmawKKE/erdf-at-a-glance</link>
				<description>&lt;p&gt;This is intended as an easy demonstration of the basics of eRDF.&lt;/p&gt;

&lt;h3&gt;eRDF&lt;/h3&gt;
&lt;textarea id=\"erdf\" rows=\"30\" cols=\"50\" name=\"erdf\"&gt;&lt;/textarea&gt;

&lt;fieldset&gt;&lt;label&gt;FOAF Classes: &lt;br/&gt;
	&lt;select name=\"foaf-classes\" id=\"foaf-classes\" multiple=\"multiple\"&gt;
 &lt;option&gt;Agent &lt;/option&gt; 
 &lt;option&gt;Document &lt;/option&gt; 
 &lt;option&gt;Group &lt;/option&gt; 
 &lt;option&gt;Image &lt;/option&gt; 
 &lt;option&gt;OnlineAccount &lt;/option&gt; 
 &lt;option&gt;OnlineChatAccount &lt;/option&gt; 
 &lt;option&gt;OnlineEcommerceAccount &lt;/option&gt; 
 &lt;option&gt;OnlineGamingAccount &lt;/option&gt; 
 &lt;option&gt;Organization &lt;/option&gt; 
 &lt;option selected=\"selected\"&gt;Person &lt;/option&gt; 
 &lt;option&gt;PersonalProfileDocument &lt;/option&gt; 
 &lt;option&gt;Project &lt;/option&gt; 
&lt;/select&gt;&lt;/label&gt;
&lt;button onclick=\"add_foaf_class();\"&gt;Make a Thing&lt;/button&gt;&lt;/fieldset&gt;
&lt;fieldset&gt;&lt;label&gt;FOAF properties: &lt;br/&gt;
	&lt;select name=\"foaf-properties\" id=\"foaf-properties\" multiple=\"multiple\"&gt;
&lt;option&gt;accountName&lt;/option&gt; 
 &lt;option&gt;accountServiceHomepage&lt;/option&gt; 
 &lt;option&gt;aimChatID&lt;/option&gt; 
 &lt;option&gt;based_near&lt;/option&gt; 
 &lt;option&gt;birthday&lt;/option&gt; 
 &lt;option&gt;currentProject&lt;/option&gt; 
 &lt;option&gt;depiction&lt;/option&gt; 
 &lt;option&gt;depicts&lt;/option&gt; 
 &lt;option&gt;dnaChecksum&lt;/option&gt; 
 &lt;option&gt;family_name&lt;/option&gt; 
 &lt;option&gt;firstName&lt;/option&gt; 
 &lt;option&gt;fundedBy&lt;/option&gt; 
 &lt;option&gt;geekcode&lt;/option&gt; 
 &lt;option&gt;gender&lt;/option&gt; 
 &lt;option&gt;givenname&lt;/option&gt; 
 &lt;option&gt;holdsAccount&lt;/option&gt; 
 &lt;option&gt;homepage&lt;/option&gt; 
 &lt;option&gt;icqChatID&lt;/option&gt; 
 &lt;option&gt;img&lt;/option&gt; 
 &lt;option&gt;interest&lt;/option&gt; 
 &lt;option&gt;isPrimaryTopicOf&lt;/option&gt; 
 &lt;option&gt;jabberID&lt;/option&gt; 
 &lt;option&gt;knows&lt;/option&gt; 
 &lt;option&gt;logo&lt;/option&gt; 
 &lt;option&gt;made&lt;/option&gt; 
 &lt;option&gt;maker&lt;/option&gt; 
 &lt;option&gt;mbox&lt;/option&gt; 
 &lt;option&gt;mbox_sha1sum&lt;/option&gt; 
 &lt;option&gt;member&lt;/option&gt; 
 &lt;option&gt;membershipClass&lt;/option&gt; 
 &lt;option&gt;msnChatID&lt;/option&gt; 
 &lt;option&gt;myersBriggs&lt;/option&gt; 
 &lt;option selected=\"selected\"&gt;name&lt;/option&gt; 
 &lt;option&gt;nick&lt;/option&gt; 
 &lt;option&gt;page&lt;/option&gt; 
 &lt;option&gt;pastProject&lt;/option&gt; 
 &lt;option&gt;phone&lt;/option&gt; 
 &lt;option&gt;plan&lt;/option&gt; 
 &lt;option&gt;primaryTopic&lt;/option&gt; 
 &lt;option&gt;publications&lt;/option&gt; 
 &lt;option&gt;schoolHomepage&lt;/option&gt; 
 &lt;option&gt;sha1&lt;/option&gt; 
 &lt;option&gt;surname&lt;/option&gt; 
 &lt;option&gt;theme&lt;/option&gt; 
 &lt;option&gt;thumbnail&lt;/option&gt; 
 &lt;option&gt;tipjar&lt;/option&gt; 
 &lt;option&gt;title&lt;/option&gt; 
 &lt;option&gt;topic&lt;/option&gt; 
 &lt;option&gt;topic_interest&lt;/option&gt; 
 &lt;option&gt;weblog&lt;/option&gt; 
 &lt;option&gt;workInfoHomepage&lt;/option&gt; 
 &lt;option&gt;workplaceHomepage&lt;/option&gt; 
 &lt;option&gt;yahooChatID&lt;/option&gt;
&lt;/select&gt;
&lt;/label&gt;
&lt;label&gt;property value: &lt;input type=\"text\" name=\"property-value\" id=\"property-value\"/&gt;&lt;/label&gt;
&lt;button onclick=\"javascript:add_foaf_property();\"&gt;Add a Property&lt;/button&gt;&lt;/fieldset&gt;

&lt;br style=\"clear:both\"/&gt;

&lt;p&gt;To Use this Form:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Choose the &lt;em&gt;type&lt;/em&gt; of thing you want to describe (eg: &lt;em&gt;Person&lt;/em&gt;), and click the button&lt;/li&gt;
	&lt;li&gt;Move the cursor inside the new div element&lt;/li&gt;
	&lt;li&gt;Choose the property of the thing you are describing (eg: &lt;em&gt;name&lt;/em&gt;), enter a value, and press the button. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This a &lt;strong&gt;limited&lt;/strong&gt; example of eRDF - it is possible to do much more sophisticated things than this allows. Read &lt;a href=\"http://research.talis.com/2005/erdf/wiki/Main/RdfInHtml\"&gt;the eRDF spec&lt;/a&gt; for more information. &lt;/p&gt;

&lt;p&gt;Now to put the eRDF into an html page so that an eRDF parser can understand it, make sure the &lt;code&gt;head&lt;/code&gt; has this attribute: &lt;code&gt;profile=\"http://purl.org/NET/erdf/profile\"&lt;/code&gt;, and contains  &lt;code&gt;links&lt;/code&gt; declaring the vocabularies you are using:
	&lt;pre&gt;
		&lt;code&gt;
&lt;link rel="schema.foaf" href="http://xmlns.com/foaf/0.1/" /&gt;
		&lt;/code&gt;
	&lt;/pre&gt;
	&lt;/p&gt;

&lt;p&gt;
	&lt;button id=\"fill-html\" onclick=\"full_html()\"&gt;Show Full HTML&lt;/button&gt;
&lt;/p&gt;
&lt;h3&gt;Full eRDF HTML Document&lt;/h3&gt;
&lt;textarea id=\"html\"&gt;&lt;/textarea&gt;

&lt;p&gt;
	Basically what I\'m trying to show here is that to describe something with eRDF, you:
&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Pick a vocabulary (here we\'re using &lt;a href=\"http://xmlns.com/foaf/0.1/\"&gt;FOAF&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Give the containing element (which represents the Thing you are describing) an id, and a &lt;strong&gt;Class type&lt;/strong&gt; (note that Class types in eRDF are indicated by prefixing the vocabulary term classname with a hyphen).
		&lt;/li&gt;
	&lt;li&gt;Within that element, give the child elements containing describe properties of your thing eRDF style classnames. &lt;strong&gt;(Here, choose the property from the list, enter a value, and press the button).&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;script type=\"text/javascript\" charset=\"utf-8\"&gt;
	//
	function insertAtCursor(myField, myValue) {
	//IE support
	if (document.selection) {
	myField.focus();
	sel = document.selection.createRange();
	sel.text = myValue;
	}
	//MOZILLA/NETSCAPE support
	else if (myField.selectionStart || myField.selectionStart == \'0\') {
	var startPos = myField.selectionStart;
	var endPos = myField.selectionEnd;
	myField.value = myField.value.substring(0, startPos)
	+ myValue
	+ myField.value.substring(endPos, myField.value.length);
	} else {
	myField.value += myValue;
	}
	}

var counter = 1;

function add_foaf_property(){
	var target = document.getElementById(\'erdf\');
	var val = document.getElementById(\'foaf-properties\').value;
	var prop_val = document.getElementById(\'property-value\').value;
	document.getElementById(\'property-value\').value = \'\';
	prop = \'&lt;span class=\"foaf-\'+val+\'\"&gt;\'+prop_val+\'&lt;/span&gt;\\r\\n&lt;/div&gt;\';
	if(target.value.match(\'-foaf\')){
		target.value = target.value.replace(/&lt;\\/div&gt;([^&lt;]*)$/, prop);
	}
	else
	{
		alert(\'Make a Thing First\');
	}
	
};

function add_foaf_class(){
	var target = document.getElementById(\'erdf\');
	var val = document.getElementById(\'foaf-classes\').value;
	var id = \"Thing-\"+counter++;
	insertAtCursor(target, \'&lt;div id=\"\'+id+\'\" class=\"-foaf-\'+val+\'\"&gt; \\r\\n&lt;!-- now add properties --&gt;\\t\\r\\n&lt;/div&gt;\');
};

function full_html()
{
	var erdf = document.getElementById(\'erdf\').value;
	var html = \'&lt;html xmlns=\"http://www.w3.org/1999/xhtml\"&gt;\\r\\n\\t&lt;head profile=\"http://purl.org/NET/erdf/profile\"&gt;\\r\\n\\t\\t&lt;link rel=\"schema.foaf\" href=\"http://xmlns.com/foaf/0.1/\" /&gt;\\r\\n\\t&lt;/head&gt;\\r\\n&lt;body&gt;\\r\\n\'+erdf+\'\\r\\n&lt;/body&gt;\\r&lt;/html&gt;\';
	document.getElementById(\'html\').value = html;
}
//	
&lt;/script&gt;
&lt;style type=\"text/css\" media=\"screen\"&gt;
	fieldset { width: 18em; margin: 0; float: right; clear: right;}
	select {height: 6em;}
	* { font-family: \"gill-sans\", \"trebuchet ms\",  sans-serif; }
	textarea {width: 40em; margin: auto; display: block; clear:both; height: 18em;}
	h3
	{
		clear:both;
	}
	label
	{
		display: block;
	}
	li
	{
		margin-left: 2em;
		color: #444;
		margin: 1em;
	}
	button, label
	{
		font-size: large;
		padding: 0.5em;
		display: block;
		margin: auto;
		margin-top: 1em;
		
	}
	#erdf
	{
		float: left;
		width: 25em
	}
	fieldset * { font-size: small; !important}
&lt;/style&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/ZBIlAmawKKE" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/erdf-at-a-glance#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/">
		<title>yrdy</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/04lB7Wv0f5c/</link>
				<description>yrdyyy&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/04lB7Wv0f5c" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/90-days-democratic-data#post">
		<title>If the government published machine-readable data, we could ....</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/IphtJFxncco/90-days-democratic-data</link>
				<description>&lt;p&gt;&lt;a href="http://www.mysociety.org/moin.cgi/TomSteinberg#top"&gt;Tom Steinberg&lt;/a&gt;, of &lt;a href="http://www.mysociety.org/"&gt;MySociety&lt;/a&gt; fame, started a google groups mailing list, for discussing action to get our governments to produce better, machine-readable, data, with which civic hackers could do interesting things. In his inaugral post, he pointed to a &lt;a href="http://www.mysociety.org/moin.cgi/NinetyDays"&gt;list of things that could be enabled if only the data was published in a machine-readable format&lt;/a&gt;. He went on to say:&lt;/p&gt;
&lt;blockquote cite="Tom Steinberg; http://groups.google.com/group/90-days/browse_thread/thread/758df9109bca4c26"&gt;&lt;p&gt;In particular, I'd like to hear from the semantic web people what
sorts of things &lt;em&gt;can only be delivered to end users&lt;/em&gt; through a semantic
approach.&lt;/p&gt;
&lt;/blockquote&gt;
(my emphasis)
&lt;p&gt;Interesting question isn't it?&lt;/p&gt;

&lt;p&gt;When I first read it, I was a bit stumped actually; I tend to think more about what semantic web technologies can do for me as a developer than what they can do for the end-user. As I mulled it over though, I realised that the main advantage of RDF (interoperability) is one that can be passed from the developer onto the end-user. The developer no-longer has to be the one to definitively provide all the data-sources of an application; s/he can devolve some of that responsibility to the user, give them the choice to bring other data into the mix - much like &lt;a href="http://www.w3.org/2005/ajar/tab#" class="-doap-Project"&gt;Tabulator&lt;/a&gt; does.&lt;/p&gt;

&lt;p&gt;The example I gave on the mailing list was this:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
I listen to a programme on the bbc featuring  several politicians expressing their views on an issue, and I wonder what the voting history of those politicans has been with regards to that issue.
&lt;/p&gt;
&lt;p&gt;
So I go to the &lt;a href="http://catalogue.bbc.co.uk/catalogue/infax/#site" class="-sioc-Site"&gt;bbc catalogue&lt;/a&gt;, copy the URL of the RDF description of that programme, and paste into the (RDF-enabled) &lt;a class="-sioc-Site" href="http://www.theyworkforyou.com/#site"&gt;TWFY&lt;/a&gt; site .&lt;/p&gt;
&lt;p&gt;
I then select a few options, press a button or two, and get back a report on how the politicans that featured in that programme had voted on legislation surrounding the issue discussed in the programme.
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A feature like that (I think) can only be delivered to end users through a semantic web
approach, &lt;em&gt;by definition&lt;/em&gt;.  &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/IphtJFxncco" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/90-days-democratic-data#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/future-of-microformats#post">
		<title>Microformats: How Many Is Enough?</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/yEc-vmSmqds/future-of-microformats</link>
				<description>&lt;p&gt;You know the scene: XML guru scratches beard and says, &lt;q&gt;Microformats, eh? No namespacing? Won&amp;#8217;t scale.&lt;/q&gt;&lt;/p&gt;

&lt;p&gt;&lt;q&gt;Ah&lt;/q&gt;, says a Microformateer, &lt;q&gt;but they aren&amp;#8217;t &lt;em&gt;designed&lt;/em&gt; to! &lt;/q&gt;and scoots off to write an hReview about the new hBIB proposal.&lt;/p&gt;

&lt;p&gt;The point of course, is that the Microformats movement aims to develop only a limited number of standards for the most commonly published types of data on the web. They simply won\'t produce too many microformats.&lt;/p&gt;

&lt;p&gt;But how many &lt;em&gt;is&lt;/em&gt; too many? When will there be just enough that the most common needs are met, and microformat-metadata is still comprehensible, cohesive and maintainable enough for publishers and parsers to use?&lt;/p&gt;

&lt;p&gt;People, after all, love microformats. Hyped on the potential for amazing cool things that can be done with a few commonly understood semantics for html, they want more. They have other data besides calendars and address books, and they want to do amazing cool things with that too. They want to mint their own Microformat, and see people do amazing cool things with it. &lt;/p&gt;

&lt;p&gt;But how many of these will make it into the official Microformats canon? Precious few it seems. That perfect number of microformats, it seems, may already have been reached (or very nearly): though a few have made it to being &lt;a href=\"http://microformats.org/wiki/Main_Page#Specifications\"&gt;specifications&lt;/a&gt;, there have been no new approved specifications in the wiki since about &lt;a href=\"http://microformats.org/wiki?title=Main_Page&amp;oldid=575\"&gt;July 2005&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So, if it&amp;#8217;s not un-microformatishly unpragmatic to think past today\'s problems, what &lt;em&gt;does&lt;/em&gt; the future hold for Microformats? Can the canon react to the formats that people publish and the tools that they make, maintain its significance, &lt;em&gt;and&lt;/em&gt; prevent the occurrence of &lt;strong&gt;too many microformats&lt;/strong&gt;?&lt;/p&gt;
&lt;a href=\"http://technorati.com/tags/microformats\" rel=\"tag\"&gt;microformats&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/yEc-vmSmqds" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/future-of-microformats#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/forms-to-rdf#post">
		<title>Processing HTML Form Values to RDF</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/EO1d2v29QUw/forms-to-rdf</link>
				<description>&lt;h2&gt;Generic Form Processing&lt;/h2&gt;
&lt;p&gt;In an earlier post, I explained briefly &lt;a href=\"http://semwebdev.keithalexander.co.uk/blog/posts/erdft.html\"&gt;how I imagined a generic form processor could work&lt;/a&gt;. And this is basically how it works in the code I have written. I did consider having the semantics of the form names derived from eRDF class names (instead of a structured @name on the input element), but decided that it was better to separate input and output at the expense of a bit of repetition (to put a previous value into a form for editing, you have to describe the structure twice: with the @class for appearing in the html, and @name for being saved again.)&lt;/p&gt;
&lt;p&gt;I think it is better to separate input and output of forms because you may want to display a value in the form that will be saved with different semantics that it was retrieved with - or indeed, you might not want to save it at all - you may just need the value for processing some other part of the form.&lt;/p&gt;

&lt;h3&gt;Other Details of the Form Processor&lt;/h3&gt;
&lt;p&gt;
	The form processor class is where you write functions/methods for processing and validating your form values. 
	If the function is passed a value that shouldn\'t validate, you can add an error message to the class\'s $errors array. 	An error will stop the form values from being saved to the datastore. The POST array is available to the form processor class for accessing and modifying, as is the iri to which the data should be saved, and the redirection_url - where the user can be redirected when the form has been saved.
&lt;/p&gt;
&lt;p&gt;
	One other important point is that, at the moment, everything under the \'rdf:RDF\' key of the POSTed array is converted to RDF/XML before it is saved (anything outwith that can be used for processing, but not saved), which means that if the input makes the XML invalid, it won\'t parse, and won\'t be saved. So I have had to convert XML special characters to entities on  submission, and convert them back again if they are pulled into the template for display. This is a shame because it would be much preferable for the eRDF-T code, and the forms-to-rdf code to be independent of each other. The other solution would be to stick the contents in a cdata section, and only escape any cdata markers in the submitted values. All this because there isn\'t any way to save data through the ARC code without it going through an XML parser at some stage. And although it probably wouldn\'t be that hard to figure out the SQL needed to insert the values directly into the MySQL database in which the ARC store resides, and write some code to take the form array and save it directly, I don\'t have any real practical need to at the moment. Besides which, ARC2 is in the works - so maybe that will provide an easy way to do this.
&lt;/p&gt;



&lt;p&gt;Anyway, any constructive criticism of this approach to forms would be gratefully accepted.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/EO1d2v29QUw" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/forms-to-rdf#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/haml#post">
		<title>HAML - a markup abstraction language - and triples notation?</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/mcDtCfnLv2k/haml</link>
				<description>&lt;p&gt;I thought I didn&amp;#8217;t like markup abstraction for templating; 
	abstracting away from &lt;span class="caps"&gt;HTML&lt;/span&gt; leaves
you with less control of your markup, and source code that looks quite
different to what you get when you press View Source, so can be harder to
debug &amp;#8211; that was my thinking. But &lt;a
href="http://haml.hamptoncatlin.com/about"&gt;&lt;span
class="caps"&gt;HAML&lt;/span&gt;&lt;/a&gt; has caught my interest (for now at least). 
&lt;/p&gt;

&lt;p&gt;It gives you tersity for the common cases, but the power to make your
markup how you like it when you don&amp;#8217;t. It also looks quite readable
by default because it uses a pythonic system of significant white
space.&lt;/p&gt;

	&lt;p&gt;And it struck me that there are two possibilities in &lt;span
class="caps"&gt;HAML&lt;/span&gt; of interest to the &lt;span
class="caps"&gt;RDF&lt;/span&gt;-inclined web developer:&lt;/p&gt; 

&lt;h2&gt;A triples notation, with embedded &lt;span class="caps"&gt;HTML&lt;/span&gt;&lt;/h2&gt;

 &lt;pre&gt;&lt;code&gt;
#me.-foaf-Person
  .foaf-firstName Keith
  .foaf-lastName Alexander &lt;/code&gt;&lt;/pre&gt;

&lt;p&gt; That&amp;#8217;s eRDF in &lt;span
class="caps"&gt;HAML&lt;/span&gt;, though that just comes out as nested divs, so
you&amp;#8217;d probably want to use some different tags, and write it as:&lt;/p&gt;

  &lt;pre&gt;&lt;code&gt; #me.-foaf-Person
  %span.foaf-name
    %span.foaf-firstName Keith
    %span.foaf-lastName Alexander 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can of course use variables as well as literals - anything after an &lt;code&gt;=&lt;/code&gt; will be interpreted as ruby. &lt;/p&gt;

	&lt;h2&gt;Automatic &lt;span class="caps"&gt;RDF&lt;/span&gt;-in-HTML&lt;/h2&gt;
	&lt;p&gt;Now, &lt;span class="caps"&gt;HAML&lt;/span&gt; doesn&amp;#8217;t do this of
course, but I reckon it wouldn&amp;#8217;t take too much tweaking to make it
do so. Take a look at this example from the &lt;cite&gt;&lt;a href="http://haml.hamptoncatlin.com/docs/haml"&gt;&lt;span class="caps"&gt;HAML&lt;/span&gt;
docs&lt;/a&gt;&lt;/cite&gt;:&lt;/p&gt;
	&lt;blockquote&gt;
		&lt;p&gt;&lt;pre&gt;&lt;code&gt;
 # file: app/controllers/users_controller.rb
 def show
   @user = CrazyUser.find(15)
 end

 # file: app/views/users/show.haml
 %div[@user] 

 # is compiled to: 
 &amp;lt;div class="crazy_user" id="crazy_user_15"&amp;gt; 
 &amp;lt;/div&amp;gt;  

&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
	&lt;/blockquote&gt;
	&lt;p&gt;Basically, you populate the @user variable with an object, and
the templating engine takes the class type and the id of the object to
create the html attributes of the div.&lt;/p&gt;
	&lt;p&gt;What I&amp;#8217;m thinking is, similar to the eRDF-T system
I&amp;#8217;ve blogged about previously, you can have a controller that, on
being passed the &lt;span class="caps"&gt;URL&lt;/span&gt; being requested by the
user, uses that &lt;span class="caps"&gt;URL&lt;/span&gt; as a resource &lt;span
class="caps"&gt;URI&lt;/span&gt; to retrieve data about from the triple store. The
controller could then (using ActiveRDF for instance, since we&amp;#8217;re
using ruby already) create an object with that data &amp;#8211; or methods to
retrieve it on the fly &amp;#8211; and assign it to a @resource variable.&lt;/p&gt;
You could then (after tweaking &lt;span class="caps"&gt;HAML&lt;/span&gt;) write
templates something like:  &lt;pre&gt;&lt;code&gt; %div[@resource]
  %h1 = @resource.dc::title &lt;/code&gt;&lt;/pre&gt;
	&lt;p&gt;Which&amp;#8217;d render as:&lt;/p&gt; 
	&lt;pre&gt;&lt;code&gt; 
 &amp;lt;div id="article-1" class="-sioc-Post"&amp;gt; 
  &amp;lt;h1 class="dc-title"&amp;gt;
		How to make friends and influence people
  &amp;lt;/h1&amp;gt;
 &amp;lt;/div&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
	To make dynamic web pages, you basically have to specify 3 things:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;The data that you need. &lt;/li&gt;
	&lt;li&gt;The format of the output document.&lt;/li&gt;
	&lt;li&gt;Where the dynamic data goes in the output document.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	In MVC style web apps, you typically split the first task over two stages: querying the database in the model, anid assigning the data to variables in the controller. The second and third steps are spread over the controller and view: putting data into variables, and embedding the variables in the output format..
&lt;/p&gt;
&lt;p&gt;
By using the approach above, you can specify all three in the one template. This might sound like a &lt;em&gt;bad&lt;/em&gt; thing because &lt;strong&gt;separation of concerns&lt;/strong&gt; is, after all, a &lt;em&gt;good&lt;/em&gt; thing. But we aren't talking here about a mess of ad hoc SQL queries, tag soup, global variables, and &lt;code&gt;print&lt;/code&gt; statements. And I'm not sure that MVC is &lt;strong&gt;separating concerns&lt;/strong&gt; in this case. It seems more like it's dragging out a process across &lt;em&gt;extra&lt;/em&gt; stages that could be performed generically by a script exploiting sensible naming conventions (eg:the &lt;code&gt;@resource&lt;/code&gt; object has dynamically added methods named after the rdf properties they access), rather than requiring rather predictable configuration by the programmer. &lt;/p&gt;

&lt;p&gt; I think this could be an improvement over the eRDF-T approach because
you still get semantic markup, you still only have to express those semantics once, but you get more flexibility when it comes to computed values (which are awkward to express as triples), the syntax is terser, and possibly more maintainable, and by decoupling the &lt;strong&gt;input semantics&lt;/strong&gt; from the &lt;strong&gt;output semantics&lt;/strong&gt;, it's easier to apply to non-html formats, and gives the template author more choice.&lt;/p&gt;
&lt;p&gt;So does this make markup abstraction worthwhile?&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/mcDtCfnLv2k" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/haml#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/microformats-not-semantic-web#post">
		<title>Microformats aren\'t an answer to the Semantic Web.</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/-layvNlKglg/microformats-not-semantic-web</link>
				<description>&lt;p&gt;I often &lt;a href=\"http://blog.wired.com/monkeybites/2007/07/tim-berners-lee.html\"&gt;see&lt;/a&gt; Microformats described as being &lt;q&gt;the lower-case semantic web&lt;/q&gt;, which is a nice sound bite that seems to have given a lot of people the impression that &lt;span class=\"caps\"&gt;HTML&lt;/span&gt; marked up with Microformats &lt;em&gt;is&lt;/em&gt; somehow a light-weight, but sufficient (in an &lt;q&gt;80/20&lt;/q&gt; kind of way) version of the Semantic Web &amp;#8211; a semantic web, perhaps, that gets the basics right, but forgoes the &lt;q&gt;formal&lt;/q&gt; stuff that no-one really needs anyway.&lt;/p&gt;


	&lt;p&gt;But it doesn&amp;#8217;t get the basics right.&lt;/p&gt;


	&lt;h2&gt;Basics of a Semantic Web&lt;/h2&gt;


	&lt;p&gt;I think the basic requirements for the semantic web include:&lt;/p&gt;


	&lt;h3&gt;Things have URIs&lt;/h3&gt;


	&lt;p&gt;If data is to be any use, we need to know what the data is about; we need it to be uniquely identifiable. On the web, this is done with URIs. URIs also need to identify &lt;em&gt;only one&lt;/em&gt; thing &amp;#8211; which means you need different URIs for a web page, and for the things the web page is about.&lt;/p&gt;


	&lt;p&gt;It&amp;#8217;s also crucial to the idea of &lt;a href=\"http://sites.wiwiss.fu-berlin.de/suhl/bizer/pub/LinkedDataTutorial/\"&gt;Linked Data on the web&lt;/a&gt; that you can follow those URIs to get more information about the resource they identify.&lt;/p&gt;


	&lt;p&gt;&lt;a href=\"http://research.talis.com/2005/erdf/wiki/Main/RdfInHtml\"&gt;eRDF&lt;/a&gt; has the ideal default behaviour with regard to this; every resource you describe with eRDF has a &lt;span class=\"caps\"&gt;URI&lt;/span&gt; with a hash in it, identifying it as a &lt;a href=\"http://sites.wiwiss.fu-berlin.de/suhl/bizer/pub/LinkedDataTutorial/#howname\"&gt;non-information resource&lt;/a&gt;, and de-references to a description of the resource that is both human and machine-readable.&lt;/p&gt;


	&lt;p&gt;Microformats don&amp;#8217;t encourage the use of URIs when describing things, and seem to provide, at best, &lt;a href=\"http://microformats.org/wiki/uid\"&gt;a pretty fuzzy approach to identity&lt;/a&gt; which &lt;a href=\"http://www.oreillynet.com/xml/blog/2005/11/xfn_delusions_of_grandeur.html\"&gt;doesn&amp;#8217;t distinguish a resource from a web-page&lt;/a&gt;, and doesn&amp;#8217;t facilitate linked data on the web (&lt;a href=\"http://microformats.org/wiki/uid-brainstorming#UIDs_that_are_URLs\"&gt;&lt;strong&gt;rel-uid&lt;/strong&gt;s point &lt;em&gt;away&lt;/em&gt; from the resource descriptions they identify&lt;/a&gt;).&lt;/p&gt;


	&lt;h3&gt;Semantics are decentralised&lt;/h3&gt;


	&lt;p&gt;The web is decentralised by nature; the semantics of a semantic web need to be decentralised too, not defined in &lt;a href=\"http://microformats.org\"&gt;one central place&lt;/a&gt;. Centralised doesn&amp;#8217;t scale. Centralised semantics aren&amp;#8217;t democratic, limit expression, and are (probably) inevitably debased as people abuse those semantics to fit their own purposes.&lt;/p&gt;


	&lt;h3&gt;There is a consistent syntax for structuring all data&lt;/h3&gt;


	&lt;p&gt;If we have a standard shape for data (eg: triples) then we can mix, merge, and manipulate all data using that shape, in the same way, irrespective of its semantics. This is crucial to data being interoperable in the web. Providing a tightly defined atomic structure for data is what allows the semantics to be decentralised and machine-readable, it&amp;#8217;s an important part of what allows the semantic web to scale, and for developers to build an infrastructure of tools and software.&lt;/p&gt;


	&lt;p&gt;Microformats don&amp;#8217;t have a consistent model, and in fact seem philosophically opposed to the idea. This makes them hard to parse, and much of the problems experienced by authors of microformatted data occur because of uncertainty as to how different microformats can be related to, and embedded in, each other &amp;#8211; precisely because there is no underlying data model.&lt;/p&gt;


	&lt;h2&gt;&lt;span class=\"caps\"&gt;GRDDL&lt;/span&gt;, Microformats, and the Semantic Web&lt;/h2&gt;


	&lt;p&gt;Another related claim that deserves some scrutiny is the idea that people can just &lt;a href=\"http://microformats.org/discuss/mail/microformats-discuss/2006-June/004259.html\"&gt;write microformats and &lt;span class=\"caps\"&gt;GRDDL&lt;/span&gt; will magically bring them into the Semantic Web&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;There are some problems with this:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Microformats have been negligent in providing, and encouraging the use of, profile URIs &amp;#8211; and &lt;a href=\"http://dannyayers.com/2007/07/18/re-cowpaths-of-the\"&gt;Microformats need profiles for &lt;span class=\"caps\"&gt;GRDDL&lt;/span&gt; to work&lt;/a&gt;. &lt;/li&gt;
		&lt;li&gt;Of the basic requirements outlined above, &lt;span class=\"caps\"&gt;GRDDL&lt;/span&gt; only really helps transform microformats into a consistent syntax. There is still more to do.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h3&gt;Priming Microformats for &lt;em&gt;a&lt;/em&gt; semantic web&lt;/h3&gt;


	&lt;p&gt;Asides from declaring &lt;span class=\"caps\"&gt;GRDDL&lt;/span&gt; profiles, I think to make your microformats part of a semantic web, you need to:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;h4&gt;Give them URIs&lt;/h4&gt; 

&lt;p&gt;In practice, I think this is best achieved by using @&lt;strong&gt;id&lt;/strong&gt;s on the container elements of hCard, hCal, et cetera, and make sure that the &lt;span class=\"caps\"&gt;GRDDL&lt;/span&gt; transformation uses those @ids to construct the &lt;span class=\"caps\"&gt;URI&lt;/span&gt;.&lt;/p&gt;&lt;/li&gt;

		&lt;li&gt;&lt;h4&gt;Tie Down the Semantics&lt;/h4&gt; 
&lt;p&gt;The Microformats specifications give very broad, vague semantics. An hCard might, for instance, be describing a person, organisation, place, or a vCard. So you need to be sure that your &lt;span class=\"caps\"&gt;GRDDL&lt;/span&gt; transformation  uses vocabulary terms that reflect either the &lt;em&gt;specific&lt;/em&gt; meaning you intend, or the &lt;em&gt;broader&lt;/em&gt; semantics of the microformat specification.&lt;/p&gt; 
&lt;p&gt; If you are using multiple inter-related microformats, make sure that that the GRDDLed rendition relates them in the way you expect them to be related.&lt;/p&gt;
&lt;p&gt; The implication of this is that the machine-readable semantics are being defined by your &lt;span class=\"caps\"&gt;GRDDL&lt;/span&gt; transformation rather than the microformat specification(s).&lt;/p&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;So in other words, Microformats are not, in themselves, building, or contributing to, the semantic web. They &lt;a href=\"http://www-sop.inria.fr/acacia/personnel/Fabien.Gandon/tmp/grddl/grddl-introduction-v3\"&gt;can&lt;/a&gt; be &lt;a href=\"http://www.w3.org/2003/g/talk62/slides#(1)\"&gt;made&lt;/a&gt; to join the semantic web, but this requires extra effort on the part of individual authors &amp;#8211; it does not come &amp;#8216;for free&amp;#8217; with doing microformats.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/-layvNlKglg" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/microformats-not-semantic-web#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/roundtripleting#post">
		<title>Roundtripleting</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/BZJOTMV-SBU/roundtripleting</link>
				<description>&lt;p&gt;&lt;q&gt;&lt;dfn&gt;Roundtripleting&lt;/dfn&gt; is the process of dynamically generating documents whereby the dynamic contents are retrieved with queries derived from the document template\'s own semantics.&lt;/q&gt;&lt;/p&gt;

&lt;p&gt;Or that\'s what I\'m calling it for now anyway :) . The name is supposed to evoke the ideas of &lt;strong&gt;Roundtripping&lt;/strong&gt;, &lt;strong&gt;Templating&lt;/strong&gt;, and &lt;strong&gt;Semantics&lt;/strong&gt;. It\'s a bit of a weird concept, so I\'m inclined to think that it needs a weird label; a purely descriptive term would either be too ambiguous, or too verbose.&lt;/p&gt;

&lt;p&gt;Let me know if you can think of something better.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/BZJOTMV-SBU" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/roundtripleting#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/999">
		<title>Mine999</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/rKiIPxmTIeI/999</link>
				<description>Test 9999 test&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/rKiIPxmTIeI" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/999</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/semanticweb-image-tagclouds#post">
		<title>Good Tagging, Bad Tagging, and the Semantic Web\'s Image problem</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/avmrcmCk-o0/semanticweb-image-tagclouds</link>
				<description>&lt;p&gt;A major part of the negative press and misunderstanding surrounding the &lt;a rel=\"tag\" href=\"http://technorati.com/tag/Semantic+Web\"&gt;Semantic Web&lt;/a&gt;, the reason people think it won’t work, is that they assume that &lt;span class=\"caps\"&gt;RDF&lt;/span&gt; is something that you publish for &lt;em&gt;other people&lt;/em&gt;&lt;a href=\"#fn1\"&gt;[1]&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;The reason that (according to Tim from &lt;a href=\"http://librarything.com\"&gt;LibraryThing&lt;/a&gt;) &lt;a href=\"http://www.librarything.com/thingology/2007/02/when-tags-works-and-when-they-dont.php\"&gt;Amazon.com’s tagging doesn’t work&lt;/a&gt;, is that on Amazon.com, tagging is something you do for &lt;em&gt;other people&lt;/em&gt; (to help Amazon’s customers). On LibraryThing, you tag for &lt;em&gt;yourself&lt;/em&gt; first, and the network can benefit as a consequence.&lt;/p&gt;


	&lt;p&gt;&lt;span class=\"caps\"&gt;RDF&lt;/span&gt; is directly useful to data authors because:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;It’s a &lt;em&gt;flexible&lt;/em&gt; data model. This makes it especially useful for modelling complex, heterogeneous, and changeable data structures. This flexibility is also useful when prototyping, or in the early stages of development, and the domain is not yet completely understood.&lt;/li&gt;
		&lt;li&gt;It uses &lt;em&gt;shared vocabularies&lt;/em&gt;. This means that, where a domain has already been modelled, you don’t need to do as much work. Nor do you have to invest wholesale into an existing schema (as you would with relational databases, or &lt;span class=\"caps\"&gt;XML&lt;/span&gt;). With &lt;span class=\"caps\"&gt;RDF&lt;/span&gt;, you can cherry-pick the terms that suit you from various vocabularies, and fill in any gaps yourself.&lt;/li&gt;
		&lt;li&gt;It lets you &lt;em&gt;link data&lt;/em&gt;. This is useful for merging your data with data from other sources.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;So what I would like to see; what I think would cut down on the strawman-slaying; what would encourage greater adoption and development of semantic web technologies, is less of the ‘grand visions’, of the amazing hypothetical end-user experiences of the semantic web, and more tutorials and explanations of how semantic web technologies help developers solve real problems – big &lt;em&gt;and&lt;/em&gt; small.&lt;/p&gt;


	&lt;p&gt;Grand visions are good too of course, but if we web developers are to help build a more semantic web, we need to have our bellies rubbed and our hands held. We need to be shown how &lt;span class=\"caps\"&gt;RDF&lt;/span&gt; (and other semweb technologies) can be a &lt;em&gt;solution&lt;/em&gt; to our current problems, not &lt;em&gt;an extra problem&lt;/em&gt; to solve for the sake of possible future benefits.&lt;/p&gt;

&lt;hr/&gt;

	&lt;p id=\"fn1\"&gt;&lt;sup&gt;1&lt;/sup&gt; ... in order, apparently, to produce some massive, impossible, globally-consistent body of knowledge for an Artificially Intelligent brain to process, and deliver us better search results.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/avmrcmCk-o0" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/semanticweb-image-tagclouds#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/xhtml-cdata#post">
		<title>CDATA in XHTML</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/h4VydWa3dlU/xhtml-cdata</link>
				<description>&lt;p&gt;
I\\\'ve just been looking at options for embedding arbitrary (RDF) literals within an XHTML document, and I wondered what would happen if I put the literal inside a &lt;a href=\\\"http://en.wikipedia.org/wiki/CDATA#CDATA_sections_in_XML\\\"&gt;CDATA section&lt;/a&gt;:
&lt;/p&gt;
&lt;p&gt;I tested in Firefox 2, Opera 9, and Safari 3, serving as &lt;code&gt;text/html&lt;/code&gt;, and as &lt;code&gt;text/xml&lt;/code&gt;. All these three browsers behaved properly (displaying cdata as content, not markup) with &lt;code&gt;text/xml&lt;/code&gt;, but only Opera did this with &lt;code&gt;text/html&lt;/code&gt;; Firefox displayed nothing, and Safari treated the content within the CDATA section as markup (nasty).&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/h4VydWa3dlU" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/xhtml-cdata#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/use_erdf_why#post">
		<title>Why use eRDF?</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/C2upyDCL59U/use_erdf_why</link>
				<description>&lt;h2&gt;Make your &lt;span class=\"caps\"&gt;HTML&lt;/span&gt; a Data Source.&lt;/h2&gt;


	&lt;p&gt;The idea of using semantic xhtml to let your web page be your &lt;span class=\"caps\"&gt;API&lt;/span&gt; has been around for quite a while now, and there have been various blog posts and presentations on the subject by  &lt;a href=\"http://tantek.com/presentations/20040928sdforumws/semantic-xhtml.html\"&gt;Tantek Çelik&lt;/a&gt;, &lt;a href=\"http://allinthehead.com/retro/301/can-your-website-be-your-api\"&gt;Drew McLellan&lt;/a&gt;, &lt;a href=\"http://www.glennjones.net/Post/825/DestroyingWalledGardens-MicroformatssyndicationandAPI%e2%80%99s.htm\"&gt;Glen Jones&lt;/a&gt;, and &lt;a href=\"http://morethanseven.net/posts/working-example-of-microformats-as-an-api/\"&gt;MoreThanSeven&lt;/a&gt;. While that argument has largely been centred around Microformats supplemented by custom semantic html patterns, &lt;a href=\"http://research.talis.com/2005/erdf/wiki/Main/RdfInHtml\"&gt;eRDF&lt;/a&gt; offers you a lot more if you want to &lt;q&gt;make your web page your &lt;span class=\"caps\"&gt;API&lt;/span&gt;&lt;/q&gt;.&lt;/p&gt;


	&lt;p&gt;If you markup your &lt;span class=\"caps\"&gt;XHTML&lt;/span&gt; with eRDF, I immediately have a choice of three formats I can consume it in:&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;&lt;strong&gt;&lt;span class=\"caps\"&gt;XHTML&lt;/span&gt;&lt;/strong&gt;, which, of course, is &lt;span class=\"caps\"&gt;XML&lt;/span&gt;, so I can use &lt;span class=\"caps\"&gt;XML&lt;/span&gt; tools to get the data out. Even if I only want to consume the data in this format, I&amp;#8217;m still glad you used eRDF because the class-names are &lt;em&gt;really&lt;/em&gt; semantic; I can look up the meanings of your terms in the vocabularies you linked to in the &lt;code&gt;head&lt;/code&gt;; your use of eRDF has also meant that every entity you describe has an &lt;code&gt;@id&lt;/code&gt;, and I&amp;#8217;ll often find this useful in processing your data.&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;&lt;span class=\"caps\"&gt;RDF&lt;/span&gt;/XML&lt;/strong&gt;. This is &lt;span class=\"caps\"&gt;XML&lt;/span&gt; too, but with all the non-data stuff taken out, and the semantics are expressed (largely) in the element names rather than the attribute values. And as well as using it as &lt;span class=\"caps\"&gt;XML&lt;/span&gt; with &lt;span class=\"caps\"&gt;XML&lt;/span&gt; tools and libraries, I can use it as &lt;span class=\"caps\"&gt;RDF&lt;/span&gt;, with &lt;a href=\"http://sites.wiwiss.fu-berlin.de/suhl/bizer/toolkits/index.htm\"&gt;&lt;span class=\"caps\"&gt;RDF&lt;/span&gt; tools and libraries&lt;/a&gt;, and mash it up with other &lt;span class=\"caps\"&gt;RDF&lt;/span&gt; data.&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;&lt;span class=\"caps\"&gt;PHP&lt;/span&gt;&lt;/strong&gt; I can use the &lt;a href=\"http://arc.web-semantics.org/documentation/erdf_parser\"&gt;&lt;span class=\"caps\"&gt;ARC&lt;/span&gt; eRDF parser in &lt;span class=\"caps\"&gt;PHP&lt;/span&gt;&lt;/a&gt; to parse eRDF into native &lt;span class=\"caps\"&gt;PHP&lt;/span&gt; arrays, without any XSLTing.  Of course, I could also use any language with &lt;span class=\"caps\"&gt;XSLT&lt;/span&gt; and an &lt;span class=\"caps\"&gt;RDF&lt;/span&gt;/XML parser.&lt;/li&gt;
	&lt;/ol&gt;


	&lt;h2&gt;&lt;em&gt;Really&lt;/em&gt; Semantic class-names.&lt;/h2&gt;


	&lt;p&gt;eRDF class-names are &lt;em&gt;really&lt;/em&gt; semantic. Not only do they describe the contents of the element, but the term with which they describe can be looked up. If you really want to, you can look at the source code, look up the vocabularies cited, and see exactly what each term means.&lt;/p&gt;


	&lt;p&gt;This has a number of benefits for making your markup both more interoperable, and more maintainable.&lt;/p&gt;


	&lt;h3&gt; Consistency for &lt;span class=\"caps\"&gt;CSS&lt;/span&gt;&lt;/h3&gt;


	&lt;p&gt;By re-using existing vocabularies, such as &lt;a href=\"http://xmlns.com/foaf/0.1/\"&gt;foaf&lt;/a&gt;, &lt;a href=\"http://rdfs.org/sioc/spec/\"&gt;sioc&lt;/a&gt;, and &lt;a href=\"http://purl.org/dc/terms/\"&gt;dc&lt;/a&gt;, your class-names are more likely to be consistent within and between projects, making your &lt;span class=\"caps\"&gt;CSS&lt;/span&gt; more maintainable and re-usable, than if you used ad hoc class-names of your own devising (&lt;a href=\"http://westciv.typepad.com/dog_or_higher/2005/11/real_world_sema.html\"&gt;a 2005 survey of semantic html attribute use&lt;/a&gt; found very little consistency in class and id values).&lt;/p&gt;


	&lt;h3&gt; Platform for Javascript widgetry and wizardry&lt;/h3&gt;


	&lt;p&gt;Javascript too can benefit from consistent class-names &amp;#8211; not only does it make it easier to maintain, but it opens up possibilities for a common platform for javascript widgets and snippets that do things with specific kinds of information.&lt;/p&gt;


	&lt;p&gt;Some possibilities, like &lt;span class=\"caps\"&gt;DHTML&lt;/span&gt; calendar and map widgets reading events and co-ordinates embedded in the same page, and  turning them into an interactive presentation, are possible using microformats for the necessary semantic hooks, but the possibilities are more limited, not only in what things you can describe, but in how you relate them.&lt;/p&gt;


	&lt;p&gt;The idea here is that if you make your html really semantic, you can get widgets &amp;#8216;for free&amp;#8217;; they can simply plug in to your page and add functionality, without you needing to make special changes to your mark-up. To be honest, this is currently more potentiality than actuality, though as a sort of example, I have created &lt;a href=\"http://semwebdev.keithalexander.co.uk/erdf-exhibit.html\"&gt;a page that takes its data marked up in eRDF, and creates a &lt;span class=\"caps\"&gt;SIMILE&lt;/span&gt; Exhibit&lt;/a&gt; from it.&lt;/p&gt;


	&lt;h2&gt;Where the Web of Documents and the Web of Data meet&lt;/h2&gt;


	&lt;p&gt;I think the concept of &lt;span class=\"caps\"&gt;RDF&lt;/span&gt;-in-HTML, stitching the web of data tightly together with the web of documents, offers a number of interesting possibilities for user-interface design, especially the idea of &lt;a href=\"http://www.sparqlets.org/clipboard/\"&gt;Web Clipboards&lt;/a&gt; &amp;#8211; where you can copy and paste, not just text, but &lt;em&gt;information&lt;/em&gt; with semantics still intact after pasting.&lt;/p&gt;


	&lt;p&gt;Another possibility &amp;#8211; and one which could be nicely combined with Web Clipboards &amp;#8211; is using javascript (AJAX) to follow links to eRDF pages, parse them (probably on the server-side for the sake of speed and cross-domain capability), and feed the data back into the current page. I&amp;#8217;ve put together a &lt;a href=\"http://semwebdev.keithalexander.co.uk/snap.html\"&gt;small example&lt;/a&gt; in the style of &lt;a href=\"http://www.snap.com/about/shots.php\"&gt;those link previews you get now in wordpress&lt;/a&gt;, only for data.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/C2upyDCL59U" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/use_erdf_why#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/grddl_repository#post">
		<title>LazyWeb Request :: GRDDL / Scraper Repository</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/5FAwQYUZFtY/grddl_repository</link>
				<description>&lt;p&gt;&lt;a href="http://simile.mit.edu/piggy-bank"&gt;PiggyBank&lt;/a&gt; (if you&amp;#8217;ve not come across it) is a firefox extension that (coupled with &lt;a href="http://simile.mit.edu/Solvent"&gt;Solvent&lt;/a&gt;) lets you write/reuse screenscrapers that match up to url regular expression  patterns to transform &lt;span class="caps"&gt;HTML&lt;/span&gt; pages into &lt;span class="caps"&gt;RDF&lt;/span&gt; that you can then import into Piggybank (which is an &lt;span class="caps"&gt;RDF&lt;/span&gt; database that lives within the browser). You can share scrapers via the Simile Wiki.&lt;/p&gt;


	&lt;p&gt;This is pretty great, but is limited to the client-side. What I want is a web service with a rest &lt;span class="caps"&gt;API&lt;/span&gt; to a repository of screen scrapers, using the same url pattern matching system. There would need to be some way of letting you specify or work out which scraper(s) you want to use in cases where more than one scraper matches the url. Perhaps  that part could be partly based on a &lt;span class="caps"&gt;FOAF&lt;/span&gt; trust system ?&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/5FAwQYUZFtY" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/grddl_repository#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/5">
		<title>test5</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/zzZ4YKS84zk/5</link>
				<description>Test 5 -- test 5&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/zzZ4YKS84zk" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/5</feedburner:origLink></item>
			<item rdf:about="http://blog.logicfish/blog/posts/MyPost1">
		<title>test</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/sCvQqXruPQU/MyPost1</link>
				<description>test&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/sCvQqXruPQU" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://blog.logicfish/blog/posts/MyPost1</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/dream-syntax-rdf-in-html#post">
		<title>Musings on my ideal syntax for RDF-in-HTML</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/OT6q3l6-0YI/dream-syntax-rdf-in-html</link>
				<description>&lt;p&gt;Looking again at the &lt;a href="http://bnode.org/blog/2007/02/12/comparison-of-microformats-erdf-and-rdfa"&gt;bnode comparison of µf, eRDF and RDFa&lt;/a&gt; I&amp;#8217;ve been thinking about the relative advantages and disadvantages of eRDF and RDFa a bit. The great thing about &lt;span class="caps"&gt;GRDDL&lt;/span&gt; of course, is that if I come up with a syntax  of my own that I prefer, I can just write a stylesheet and get on with it. I don&amp;#8217;t need to evangelise it, or even document it.&lt;/p&gt;


	&lt;p&gt;Whether or not it&amp;#8217;s worth the extra effort (over using an established syntax like eRDF or RDFa) is another matter of course ;).&lt;/p&gt;


	&lt;p&gt;I think my dream syntax would mainly be quite similar to eRDF, but enabling a few of the things that RDFa does.&lt;/p&gt;

&lt;h2&gt;What I like about eRDF&lt;/h2&gt;

	&lt;p&gt;The main thing I like about eRDF is that &lt;strong&gt;all visible text and images&lt;/strong&gt; are described with class-names. The class names, moreover, don&amp;#8217;t contain any characters that need to be escaped in &lt;span class="caps"&gt;CSS&lt;/span&gt;. This is actually an extremely clever feature of eRDF. It encourages good separation of style and content; you can start with your content, mark it up with html and eRDF, and then when you come to style it, you have a lot of hooks to style something according to what it is.&lt;/p&gt;

&lt;p&gt;
	I just read a post to public-rdf-in-xhtml-tf by someone concerned about &lt;a rel="vote-against" href="http://www.mail-archive.com/public-rdf-in-xhtml-tf@w3.org/msg00911.html"&gt;@class being used for semantics instead of presentation&lt;/a&gt;. I've seen this argument play out in a few places, and I'd just like to add, not only is @class for semantics in the html spec, not only is it good practice for maintainability and so on, &lt;strong&gt;it's good practise for &lt;em&gt;design&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt; A principle of good design is creating visual similarities between similar types of information; so it's a good idea to style, say, e-mail addresses the same way, and if you can use &lt;code&gt;.foaf-mbox&lt;/code&gt; as your style hook, then so much easier for you. When I write CSS, semantic class-names make it easy for me to style elements by the type of information they contain, which helps the user visually identify them, and helps make the design consistent and clean. eRDF class names are even better because they come from shared vocabularies, which are easier to remember, understand, and re-use across projects than the ad hoc conventions I'd use otherwise.
&lt;/p&gt;

&lt;h2&gt;What I like about RDFa&lt;/h2&gt;

&lt;p&gt;The main things I like about RDFa are:
&lt;/p&gt;	&lt;ul&gt;
	&lt;li&gt;You can declare namespaces at any stage in the document (if you&amp;#8217;re blogging or something, you don&amp;#8217;t need to edit the template whenever you want to use a new vocabulary).&lt;/li&gt;
		&lt;li&gt;You can describe resources external to the document (eRDF&amp;#8217;s support for this is limited).&lt;/li&gt;
		&lt;li&gt;You can choose to have &lt;span class="caps"&gt;HTML&lt;/span&gt; and &lt;span class="caps"&gt;XML&lt;/span&gt; content in your object literals (eRDF only takes the text content).&lt;/li&gt;
	&lt;/ul&gt;

&lt;h2&gt;A mix of eRDF and RDFa ?&lt;/h2&gt;
	&lt;p&gt;So what I want is a syntax that:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;uses class-names to describe all visible text and images&lt;/li&gt;
		&lt;li&gt;is element agnostic &amp;#8211; (perhaps making the technique useful beyond pure (x)HTML). I feel that the semantics of html elements, and the semantics of RDF triples are qualitatively different, and I'd rather keep them separate. (In a little more detail, if an eRDF-style classname exists on an element, the object is, in order of preference: the @src, or @value, or child element(s) with @selected or @checked, or @id, or @title, or inner contents of the element).&lt;/li&gt;
		&lt;li&gt;gives me control over exactly which triples are generated (I don&amp;#8217;t really like eRDF&amp;#8217;s generation of rdfs:label triples from anchors)&lt;/li&gt;
		&lt;li&gt;lets me declare vocabularies anywhere in the document &amp;#8211; not sure how to do this: &lt;span class="caps"&gt;XML&lt;/span&gt; namespacing feels a little wrong if you&amp;#8217;re not  using the colon separator. Also, as Ian Davis said about creating eRDF: &lt;blockquote&gt;&lt;p&gt;I wanted to be mindful that I wasn&amp;#8217;t inserting URIs into class attributes but that I was mapping values from class attributes to URIs. Sort of a subtle point. The point is that I&amp;#8217;m not trying to change or extend &lt;span class="caps"&gt;HTML&lt;/span&gt;, but add hints about how it can be interpreted as &lt;span class="caps"&gt;RDF&lt;/span&gt;.&lt;/p&gt;&lt;cite&gt;&lt;a href="http://www.mail-archive.com/public-rdf-in-xhtml-tf@w3.org/msg00211.html"&gt;Ian Davis, &lt;i&gt;Re: RDFa reliance on namespace declaration&lt;/i&gt;, Fri, 16 Jun 2006 04:23:08 -0700&lt;/a&gt;&lt;/cite&gt; &lt;/blockquote&gt; An alternative is to allow schema declarations in anchor tags as well as link elements. This is semantically right, but structurally feels a bit messy.&lt;/li&gt;
		&lt;li&gt;lets me choose to have &lt;span class="caps"&gt;HTML&lt;/span&gt;/XML content, or strip the tags. Not sure about the best syntax for that &amp;#8211; maybe an extension to the class-name syntax, eg: sioc-contents-XML when you want all the tags in the output preserved.&lt;/li&gt;
		&lt;li&gt;lets me describe external resources, at least a bit. I don&amp;#8217;t want to have to use non-HTML attributes like @about if I don&amp;#8217;t want to. I think if descendant elements of an &lt;em&gt;href&lt;/em&gt;ed element have an eRDF-style class-name, the subject would be the @href, rather than the nearest IDed ancestor of the anchor. This is limited (unless you want to make massive portions of your document links), but would allow more semantic annotation of hyper links. Perhaps you could use @about, or owl-sameAs for larger portions of description. &lt;/li&gt;
		&lt;li&gt;ideally the html would validate. It&amp;#8217;s not the worst thing in the world if it doesn&amp;#8217;t in every situation (I would maybe sacrifice validation for the occasional @about), but it would be nice.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;What would your ideal &lt;span class="caps"&gt;RDF&lt;/span&gt;-in-HTML syntax be like?&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/OT6q3l6-0YI" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/dream-syntax-rdf-in-html#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/ontologies-thoughts#post">
		<title>Some thoughts on Ontologies</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/J_Iee5-9hfk/ontologies-thoughts</link>
				<description>&lt;div id="post-is-me"&gt;&lt;a href="http://keithalexander.co.uk/#me" rel="owl-sameAs"&gt;&lt;/a&gt;

&lt;p&gt;Lately, partly because of what &lt;a href="http://bel-epa.com/gjh/#gjh" class="-foaf-Person" rel="foaf-knows"&gt;Graham Higgins&lt;/a&gt; and I have been doing on the &lt;a rel="foaf-interest" href="http://www.knowledgeforge.net/project/semwebparlparse/"&gt;&lt;span class="caps"&gt;RDF&lt;/span&gt; mapping of the &lt;span class="caps"&gt;TWFY&lt;/span&gt; data&lt;/a&gt;, I&amp;#8217;ve been thinking about some considerations when writing ontologies, so I thought I&amp;#8217;d write them down here so I can be corrected where I&amp;#8217;m wrong.&lt;/p&gt;


	&lt;h2&gt; Labels&lt;/h2&gt;


	&lt;h3&gt;Readable Labels&lt;/h3&gt;
&lt;p&gt;It&amp;#8217;s quite important to make sure that the &lt;strong&gt;rdfs:label&lt;/strong&gt;s  are nice and human-readable. If you are writing an &lt;span class="caps"&gt;RDF&lt;/span&gt;-based application, since &lt;span class="caps"&gt;RDF&lt;/span&gt; is self-describing, you shouldn&amp;#8217;t need to hard-code labels for values, you should be able to use the rdfs:label of the term that describes your data. Think how well the rdfs:label would read in a table header, or the label of a form widget.&lt;/p&gt;


	&lt;h3&gt;Plural Labels&lt;/h3&gt;


	&lt;p&gt;&lt;a href="http://www.wasab.dk/morten/#me" rel="rel-knowsByReputation" class="-foaf-Person"&gt;Morten Frederkisen&lt;/a&gt; has a &lt;a href="http://www.wasab.dk/morten/2004/03/label"&gt;charmingly compact vocabulary to help with labels&lt;/a&gt;, which can be used to define the singular and/or plural version of your term&amp;#8217;s label.&lt;/p&gt;


	&lt;h3&gt;Inverse Labels&lt;/h3&gt;


	&lt;p&gt;One problem I&amp;#8217;ve found with labels is when you want to display a link back to the &amp;#8216;parent&amp;#8217; of the current resource, how do you explain to the user what the relationship of the current resource is back to its parent?&lt;/p&gt;


Easy, you create an inverse property, and do something like this:
&lt;pre&gt;

DESCRIBE  ?inverse ?parent
WHERE {
?parent ?property &lt;#current&gt; .
?inverse owl:inverseOf ?property .
?inverse rdfs:label ?inverseLabel
}

&lt;/pre&gt;

	&lt;p&gt;But then you are authoring some more data, and are tempted to use your inverse term, and all of a sudden, it&amp;#8217;s a little more complicated to query your data because you have to look for both the backwards and the forwards version of any particular property you are interested in. Worse, you might stand accused of creating an &lt;a href="http://dig.csail.mit.edu/breadcrumbs/node/61"&gt;Anti-Pattern&lt;/a&gt;, and find that Tim Berners-Lee has already said it was &lt;a href="http://dig.csail.mit.edu/breadcrumbs/node/72"&gt;unnecessary to define both backwards and forwards links&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;q&gt;The &lt;em&gt;only&lt;/em&gt; loss in not having both&lt;/q&gt;, he says, &lt;q&gt;is that there is no label for the reverse link.&lt;/q&gt;&lt;/p&gt;


	&lt;p&gt;Which is precisely what we want the inverse property for. &lt;a rel="rel-knowsByReputation " href="http://www4.wiwiss.fu-berlin.de/dblp/resource/person/100007"&gt;timbl&lt;/a&gt; mentions that he has got round this by declaring an unnamed inverse predicate, and giving it a label.&lt;/p&gt;


	&lt;p&gt;A simpler version is suggested a couple of times in the comments (by &lt;a href="http://www.sequencetech.com/"&gt;shibl&lt;/a&gt; and Alexander Pohoyda) &amp;#8211; just give the predicate a &amp;#8216;reverseLabel&amp;#8217; property&lt;/p&gt;


	&lt;h3&gt;Obvious Labels and the Marketing of Knowledge Description&lt;/h3&gt;


	&lt;p&gt;A consideration that ontologies with ambitions for wider adoption need to take into account is how to market their terms at data authors shopping for definitions. I write an ontology that perfectly suits your needs, but you don&amp;#8217;t realise that because I haven&amp;#8217;t described the terms in such a way that you easily recognise their connection with your domain.&lt;/p&gt;


	&lt;p&gt;This might be especially likely if my ontology is a very general one, and you are looking to describe a particular subset of that domain. Someone might go looking for an ontology to describe the components of their blog. Now, arguably the best ontology for this (insofar as interoperability goes) would be &lt;a href="http://rdfs.org/sioc/"&gt;&lt;span class="caps"&gt;SIOC&lt;/span&gt;&lt;/a&gt; (I&amp;#8217;m currently using it for this blog). They have a nice shiny website, documentation, tools, a mailing list and an irc channel. But if our definition-shopper searches for &lt;kbd&gt;blog&lt;/kbd&gt; in &lt;a href="http://swoogle.umbc.edu/index.php?option=com_frontpage&amp;service=search&amp;queryType=search_swt&amp;searchString=blog&amp;searchStart=1"&gt;Swoogle&lt;/a&gt; or  &lt;a href="http://schemaweb.info/"&gt;schemaweb&lt;/a&gt;, or even &amp;#8216;blog ontology&amp;#8217; in &lt;a href="http://www.google.co.uk/search?q=blog+ontology"&gt;Google&lt;/a&gt;, &lt;span class="caps"&gt;SIOC&lt;/span&gt; doesn&amp;#8217;t feature at all. &lt;/p&gt;

&lt;p&gt;Even if they browse through the ontology itself, they still might not grasp its utility for their purposes, since they are skimming for words like &amp;#8220;Blog&amp;#8221; and &amp;#8220;Blog Roll&amp;#8221;, and may fail to immediately see the relevance of more abstract terms like &amp;#8220;Forum&amp;#8221; and &amp;#8220;Container&amp;#8221; (SIOC has more specific terms as well; they are kept in a &lt;a href="http://rdfs.org/sioc/types"&gt;separate types module&lt;/a&gt; ).&lt;/p&gt;


	&lt;h2&gt;Human Readable Semantics vs. Machine Readable Semantics&lt;/h2&gt;


	&lt;p&gt;Another potential hazard of Ontologies, both for those writing them, and those using them, is that there can be  disparity between  the human-readable semantics (in the labels and comments), and the machine-readable semantics (how the terms relate to other terms). &lt;a href="http://xmlns.com/foaf/spec/#term_name"&gt;foaf:name&lt;/a&gt; for instance, is most commonly understood and used to describe the name of a person or organisation, actually has much broader machine-readable semantics &amp;#8211; and can belong to any resource that has the rdf:type &lt;a href="http://www.w3.org/2002/07/owl#Thing"&gt;owl:Thing&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;With &lt;a rel="rdf-type" href="http://xmlns.com/foaf/spec/#term_Person"&gt;foaf:Person&lt;/a&gt;, the human-readable semantics say that it doesn&amp;#8217;t matter &lt;q cite="http://xmlns.com/foaf/spec/#term_Person"&gt;whether they&amp;#8217;re alive, dead, real, or imaginary&lt;/q&gt;, yet the machine readable semantics say that a person is a &lt;a href="http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing"&gt;spatial thing&lt;/a&gt;.  So is Gandalf from Lord of the Rings a SpatialThing with a &amp;#8216;spatial extent&amp;#8217; ? Arguably he does, but his spatial extent is imaginary too. (Maybe it&amp;#8217;s just the nature of the semweb/kr game for things to be curiously metaphysical).&lt;/p&gt;

&lt;p&gt; It&amp;#8217;s quite possible that this doesn&amp;#8217;t appear so contradictory to the authors of the spec (since this is human interpretation of natural language, there is bound to be some variation in understanding), but the larger point I&amp;#8217;d draw from this, is that while &lt;a href="http://esw.w3.org/topic/SweoIG/TaskForces/CommunityProjects/LinkingOpenData"&gt;shared vocabularies and open linked data&lt;/a&gt; are marvellous and everything, there is a cost.&lt;/p&gt;

&lt;p&gt; If you&amp;#8217;d like to use a particular term, you have to make sure it means what you want to say first, and chase down the machine readable and human readable semantics of both that term, and the terms it relates to. Otherwise you diminish the value of your data, and any dataset that uses it.  And if you are writing an ontology, you can help the term shoppers by trying to ensure that your human-readable semantics reflect the machine-readable semantics  transparently and unambiguously.&lt;/p&gt;

&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/J_Iee5-9hfk" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/ontologies-thoughts#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/erdft#post">
		<title>eRDF as Query and Report language</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/ZRdLaMDRQzo/erdft</link>
				<description>&lt;p&gt;I was doing some Smarty templating, marking up the html with &lt;a href="http://research.talis.com/2005/erdf/wiki/Main/RdfInHtml" title="embedded RDF - a syntax for encoding triples in HTML"&gt;eRDF&lt;/a&gt; so that I could easily pull the data into the database as triples later. 
And then I thought about having to write SPARQL queries afterwards, and populate and assign variables, and embed those variables in the template.&lt;/p&gt;

&lt;p&gt;It struck me that there would be a great duplication of effort here - I would specify some variables and triples in the SPARQL query to define the data I would get back, and then I&amp;#8217;d be specifying  triples with variables - the same triples - again in the eRDF HTML.&lt;/p&gt;

&lt;p&gt;How can you cut out the repetition? Is it possible that the eRDF template can already contain all the information you need to query the datastore, and fill the template with the results? I hacked up a quick proof of concept to find out:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
&amp;lt;p id=&amp;quot;me&amp;quot;&amp;gt; My name is &amp;lt;span class=&amp;quot;foaf-name&amp;quot;&amp;gt;?name&amp;lt;/span&amp;gt; &amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;can generate:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
&amp;lt;#me&amp;gt; foaf:name ?name
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;from which you can derive the SPARQL:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
SELECT ?name
WHERE
{
    &amp;lt;#me&amp;gt; foaf:name ?name
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;from which you can get the result:&lt;/p&gt;

&lt;pre&gt;&lt;samp&gt;
 __________________
|   name          |
-------------------
| Keith Alexander |

&lt;/samp&gt;&lt;/pre&gt;

&lt;p&gt;Push the value into the right place in the template (where the name of the variable is the name of the result column), and you get:
&lt;samp&gt;
&amp;lt;p id=&amp;quot;me&amp;quot;&amp;gt; My name is &amp;lt;span class=&amp;quot;foaf-name&amp;quot;&amp;gt;Keith Alexander&amp;lt;/span&amp;gt; &amp;lt;/p&amp;gt;
&lt;/samp&gt;&lt;/p&gt;

&lt;p&gt;So far so good.&lt;/p&gt;

&lt;p&gt;But what about multiple results? It seemed to me that if I wanted (as you generally do), to have a page with both one-to-one relations (eg: for a CD description - price, artist, record company, release date), and one-to-many relations (eg: the tracks on the album), you ought to do more than one query: one for the top-level single relations, and one for each list. I figured that I could use a pseudo &amp;#8216;list item&amp;#8217; property (as well as rdf:li), on which an algorithm could determine that all things relating to that list item would feature in a multi-row result set, and should be moved to a different query. And I spent a while this afternoon scratching my head trying to hit upon a decent way to do that, until &lt;a href="http://dannyayers.com/"&gt;danja&lt;/a&gt; and shellac in the #swig irc channel pointed out that the single relations could ignore the extra rows. So that made it easier, at least for now. I put together a template using a Smarty foreach loop, with some code that fills the appropriate variables with either an array or a single value depending on a variable naming convention, makes a few changes to the template ready to be passed to Smarty, which does the rest. I even put in support for OPTIONAL clauses&lt;/p&gt;

&lt;h3&gt;How far can you go with this though?&lt;/h3&gt;
&lt;p&gt;Even so far, this system could actually be pretty powerful - coupled with a regular templating engine, you can process and format the variables in the template before the page is served.&lt;/p&gt;
&lt;p&gt;I think  it will be necessary to break it up into multiple queries, in order to allow things like nested loops, and a COUNT or AVG feature syntax (that's one of the nice things about using Arc's mysql based store - if SPARQL isn't powerful enough yet, you can get the SQL underlying it instead - and since we are writing eRDF rather than SPARQL, it doesn't really matter how we get the results). On the SPARQL side, it wouldn't be too hard to implement a FILTER - perhaps a variable naming convention like $foo_filter_regex_BAR where BAR is a constant defined in a file for such things. Or perhaps a pseudo-property, like sparql-filter: &lt;pre&gt;
	&amp;lt;p id=&amp;quot;{$person_id}&amp;quot;&amp;gt;
		&amp;lt;span class=&amp;quot;foaf-name&amp;quot;&amp;gt;{$name}&amp;lt;/span&amp;gt;
		&amp;lt;br class=&amp;quot;sparql-filter&amp;quot; title=&amp;quot;FILTER regex(str($name), &amp;apos;John&amp;apos;)&amp;quot;/&amp;gt;
	&amp;lt;/p&amp;gt;
	&lt;/pre&gt;
	(the eRDF template processor would know how to translate that into a query).
&lt;/p&gt;
&lt;h3 id="rdf-html-forms"&gt;What about Forms?&lt;/h3&gt;
&lt;p&gt;
	A similar approach could be used for dealing with forms. By using input names that return associative arrays, you can easily generate arbitrary RDF/XML from the post data, eg:
&lt;/p&gt;
&lt;pre&gt;&lt;samp&gt;
	&amp;lt;form action=&amp;quot;erdft_submit&amp;quot; method=&amp;quot;post&amp;quot; accept-charset=&amp;quot;utf-8&amp;quot;&amp;gt;
		&amp;lt;label for=&amp;quot;name&amp;quot;&amp;gt;Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;rdf:RDF[foaf:Person][foaf:name]&amp;quot;/&amp;gt;&amp;lt;/label&amp;gt;
		&amp;lt;label for=&amp;quot;name&amp;quot;&amp;gt;Email: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;rdf:RDF[foaf:Person][foaf:mbox]&amp;quot;/&amp;gt;&amp;lt;/label&amp;gt;
		&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Submit&amp;quot;&amp;gt;
	&amp;lt;/form&amp;gt;
	&lt;/samp&gt;&lt;/pre&gt;
&lt;p&gt;Can generate: &lt;/p&gt;
&lt;pre&gt;
	&lt;samp&gt;
	&amp;lt;rdf:RDF xmlns:foaf=&amp;quot;http://xmlns.com/foaf/0.1/#&amp;quot;&amp;gt;
		&amp;lt;foaf:Person&amp;gt;
			&amp;lt;foaf:name&amp;gt;John Smith&amp;lt;/foaf:name&amp;gt;
			&amp;lt;foaf:mbox&amp;gt;john@example.com&amp;lt;/foaf:mbox&amp;gt;
		&amp;lt;/foaf:Person&amp;gt;
	&amp;lt;/rdf:RDF&amp;gt;
	&lt;/samp&gt;
&lt;/pre&gt;
&lt;p&gt; - and that can then be saved to your data store.&lt;/p&gt;
&lt;p&gt;
	For validation and processing, the form page would be parsed by the controller, so it knew what inputs to expect, and it would also pull class names from the form input/select/textarea/button elements that would tell the controller what function to run the value of that widget through. The naming could follow a convention like &lt;samp&gt;f_valid_email&lt;/samp&gt;, and the controller would choose the &lt;var&gt;valid_email()&lt;/var&gt; function stored in a separate file. Personally, I think this might be preferable to defining models with validation criteria for each property (as CakePHP does, for example), as this can get ugly if you want different validation criteria for different circumstances.
&lt;/p&gt;
&lt;h3&gt;Is it worth it?&lt;/h3&gt;
&lt;p&gt;Ultimately I suppose, you can invent workarounds and fixes and things for just about anything if you want.
&lt;br/&gt;	But should you?&lt;br/&gt;
Would this be a good method of web development?
&lt;/p&gt;
&lt;h3&gt;Advantages&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;Follows the &lt;abbr title="Don't Repeat Yourself"&gt;DRY&lt;/abbr&gt; principle.&lt;/li&gt;
	&lt;li&gt;By simply putting eRDF into your template, you get the query and variable setting for free, and your output is then &lt;em&gt;also&lt;/em&gt; easily reinterpreted as RDF.&lt;/li&gt;
	&lt;li&gt;Less Mental Overhead: instead of thinking, &lt;q&gt;how do I get my data from the store? &lt;/q&gt; &lt;q&gt;where do I put it on the page?&lt;/q&gt; and possibly &lt;q&gt;how do I mark it up semantically? &lt;/q&gt;, you just put the variables in the page where you want them to go, and describe  them semantically with eRDF.&lt;/li&gt;
	&lt;li&gt;You get to do all or most of the work in your HTML files, instead of spread across Models, Views and Controllers. I personally think this seems preferable to an alternative approach, whereby HTML would be generated programmatically - I want control over my HTML.&lt;/li&gt;
	&lt;li&gt;Where the eRDF template approach is insufficient, it is still possible to tweak the query by hand in the 'controller' code.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Disadvantages&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;It violates the 'Separation of Concerns' principle of programming. This isn't necessarily a disadvantage because separation of concerns is mainly to avoid repetition and ease maintenance.&lt;/li&gt;
	&lt;li&gt;It is more processor-intensive, so you would probably want to cache pages and queries for better performance.&lt;/li&gt;
	&lt;li&gt;It shares the limitations of eRDF: of course you could take the same approach with RDFa, or some other form (Benjamin Nowack's &lt;a href="http://bnode.org/blog/tag/m4sh"&gt;M4SH wiki-syntax&lt;/a&gt;?), which might prove more expressive (I chose eRDF because the Arc classes already provided an eRDF parser; I like being able to use the properties and classes as css hooks).&lt;/li&gt;
	&lt;li&gt;In the ordinary run of things, you likely weren't fussy about expressing the precise semantics of your content in html - in which case, learning to do it in eRDF &lt;em&gt;will&lt;/em&gt; incur a bit of mental overhead.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Try it out&lt;/h2&gt;
&lt;p&gt;If you want, you can have a go with &lt;a href="/blog/code/erdft/"&gt;the code I've written so far&lt;/a&gt;.
It's still pretty basic alpha stuff, but if you want to look it over, I'd be delighted to hear comments, suggestions and improvements.
For that code, you'll need &lt;a href="http://smarty.php.net/"&gt;Smarty&lt;/a&gt; and &lt;a href="http://arc.web-semantics.org/home"&gt;the ARC PHP RDF classes&lt;/a&gt;. If you don't want to use Smarty, you can rewrite the regular expressions that define the syntax for the sparql variables (these can be passed as arguments to the class) to use native php syntax instead - just make the first match be a valid sparql variable.
&lt;/p&gt;
&lt;p&gt;You'll also need an Arc mysql triplestore set up, with data in it, if the code is to do anything. Again, you pass the path to your datastore config file as a parameter to the eRDFT class (see &lt;a href="/blog/code/erdft/erdft-smarty.phps"&gt;erdft-smarty.phps&lt;/a&gt;).&lt;/p&gt;
&lt;h3&gt;Limitations&lt;/h3&gt;
&lt;p&gt;
	Currently, it only generates one big query, which gets you one big data table as a result.
	Also, properties can't be variables - only subjects and objects. I couldn't think of a way that you could express properties in eRDF so that they would be visible to the user anyway. Still, it would be nice to have variable/unknown properties. Perhaps a syntax like 'erdft-?foo'.
&lt;/p&gt;
&lt;h2&gt;Future Ideas for eRDF-to-SPARQL-and-back-again&lt;/h2&gt;
&lt;p&gt;
	I'll probably knock up a Resource class so it can be used with the &lt;a href="http://tonic.sourceforge.net/"&gt;Tonic PHP REST library/framework&lt;/a&gt;, and do the nice automagic form processing things I described above. Then I guess I'll see if I can actually use it for more than "hello world" stuff.
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/ZRdLaMDRQzo" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/erdft#post</feedburner:origLink></item>
			<item rdf:about="http://semwebdev.keithalexander.co.uk/blog/posts/mvc-not-designed-for-the-web#post">
		<title>Patterns Designed for the Web</title>
		<link>http://feedproxy.google.com/~r/Semwebdev/~3/SIhFr_j43zI/mvc-not-designed-for-the-web</link>
				<description>&lt;p&gt;Bill de hÓra recently blogged about  how &lt;a href=\"http://www.dehora.net/journal/2007/07/earned_value.html\"&gt;frameworks designed to work with the web are more effective&lt;/a&gt; than those designed to work around it. While I agree with that general sentiment, what I noticed was that all the frameworks mentioned called themselves &lt;strong&gt;&lt;abbr title=\"Model View Controller\"&gt;&lt;span class=\"caps\"&gt;MVC&lt;/span&gt;&lt;/abbr&gt;&lt;/strong&gt;.&lt;/p&gt;


	&lt;p&gt;As &lt;a class=\"-foaf-Person\" href=\"http://www.nooranch.com/synaesmedia/wiki/wiki.cgi?PhilJones#\"&gt;Phil Jones&lt;/a&gt; observes, 
&lt;a href=\"http://www.nooranch.com/synaesmedia/wiki/wiki.cgi?ModelViewController\"&gt;&lt;span class=\"caps\"&gt;MVC&lt;/span&gt; was designed for developing desktop software in the Smalltalk environment&lt;/a&gt; It wasn&amp;#8217;t designed for the web.&lt;/p&gt;


	&lt;p&gt;&lt;span class=\"caps\"&gt;MVC&lt;/span&gt; was designed for dynamically manipulating interfaces in a state-ful local environment, not serving (and retrieving) documents in a stateless distributed environment.&lt;/p&gt;


	&lt;p&gt;That doesn&amp;#8217;t mean that it&amp;#8217;s necessarily terrible &amp;#8211; those who develop &lt;span class=\"caps\"&gt;MVC&lt;/span&gt; web frameworks &lt;em&gt;do&lt;/em&gt; manage to hack around the inconsistencies and come up with software that is popularly acclaimed, and effective; but I suspect that that is rather in spite of, than because of, the &lt;span class=\"caps\"&gt;MVC&lt;/span&gt; pattern.&lt;/p&gt;


	&lt;p&gt;&lt;span class=\"caps\"&gt;MVC&lt;/span&gt; is popular, I think, because we like to have patterns to follow, so we can have a system for structuring code. It makes it easier to plan, separate responsibilities, maintain code, and add features if we know where everything is supposed to go. Unfortunately, on the web, the meaning of &lt;span class=\"caps\"&gt;MVC&lt;/span&gt; becomes stretched, and it&amp;#8217;s by no means clear any more where everything should go.&lt;/p&gt;


	&lt;p&gt;Personally, I&amp;#8217;ve found &lt;span class=\"caps\"&gt;MVC&lt;/span&gt; frameworks particularly unhelpful for much more than the relational database &lt;span class=\"caps\"&gt;CRUD&lt;/span&gt; operations they are optimised for &amp;#8211; it&amp;#8217;s often not clear where the other stuff ought to fit in the stack. &lt;span class=\"caps\"&gt;RDF&lt;/span&gt;, for instance, does not fit comfortably into the &lt;span class=\"caps\"&gt;MVC&lt;/span&gt; stack because, being self-describing, and of consistent structure, it does not need application-specific model classes to carry its semantics from the database into the code. In fact, those model classes would only get in the way of the benefits of &lt;span class=\"caps\"&gt;RDF&lt;/span&gt;&amp;#8217;s flexibility&lt;/p&gt;


	&lt;p&gt;Worse than uncertainty, is the risk that using the wrong pattern leads you to spread  out over several components what is more logically contained in one, or adding unnecessary layers of abstraction, making the code harder to write, understand and maintain.&lt;/p&gt;


	&lt;p&gt;So my guess is that &lt;a href=\"http://www.oreillynet.com/xml/blog/2005/09/semantic_rails_semantic_django.html\"&gt;using Semantic Web technologies for the &lt;em&gt;M&lt;/em&gt; in &lt;span class=\"caps\"&gt;MVC&lt;/span&gt;&lt;/a&gt; is not the most productive route forward. But what is? Jones suggests &lt;a href=\"http://www.nooranch.com/synaesmedia/wiki/wiki.cgi?WebServiceDesignPatterns\"&gt;three alternative emerging patterns&lt;/a&gt;:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Data and Template&lt;/li&gt;
		&lt;li&gt;&lt;span class=\"caps\"&gt;REST&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;Pipes and Filters&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;However, much as I like those concepts, they don&amp;#8217;t, I think, really offer a sufficient alternative to &lt;span class=\"caps\"&gt;MVC&lt;/span&gt; as a pattern for structuring code. What is needed from a pattern (if patterns are needed at all), is a broad structure for separating out code into components, that follows what developers actually need to do to create a  (designed for the) web application, with a minimum of redundancy, complexity, and abstraction.&lt;/p&gt;


	&lt;p&gt;What would an application development pattern &amp;#8216;designed for the web&amp;#8217; look like ?&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Semwebdev/~4/SIhFr_j43zI" height="1" width="1"/&gt;</description>
	<feedburner:origLink>http://semwebdev.keithalexander.co.uk/blog/posts/mvc-not-designed-for-the-web#post</feedburner:origLink></item>
	</rdf:RDF>
