In September 2009, the W3C elevated the Protocol for Web Description Resources (POWDER) artifacts to a Recommendation. POWDER is a great bonus to the Semantic Web and to the larger Internet in general. But what is the specification all about? And why don’t we seem to hear more about it along with RDF and OWL? This article will get you up-to-speed with what you need to know about POWDER.
I always get a kick out of hearing about Semantic Web technologies in use beyond the typical circles of users, advocates, founders, implementers and the like. Good examples include RDF (in general), FOAF (in particular) and tagging. With tagging, I’m stretching it a bit, because it might just be HTML metadata tags but, on a good day, its RDFa and microformats (to me, microformats are still Semantic Web).
Adoption is a beautiful thing.
There is another format that I believe puts simple, quick and powerful semantics in everyday user’s hands. It follows on Jim Hendler’s idea that a little semantics go a long way. The format is called POWDER and was promoted to a W3C Recommendation late last year. I am amazed that I see RDF and OWL in all the usual introductory slide decks on the Semantic Web but I see very few of POWDER or its flexibility. Perhaps it is because POWDER is not a syntax or language on its own but is reusing XML, RDF and OWL and extending their usage. Whatever the answer is, the rest of this article gives a background to what POWDER is, how it can be used and its advantages for the rest of us.
POWDER is short for Protocol for Web Description Resources and is focused on providing information (metadata) about a set of web resources. While that’s a pretty vague description; I believe the description is fitting once you see the breadth of support the recommendation provides. When you think of a web resources, visualize anything that can be referenced with a URI – don’t just think of simple websites and don’t just think of a single endpoint.
The use cases are many: determining applicability of web content for consumer applications (e.g. mobileOK, video streaming, flash support), providing accurate, third-party descriptions of all sorts of web services and more. POWDER’s primer says it best:
From an End User’s Perspective, POWDER:
From a Publisher’s Perspective, POWDER:
From a Service Provider’s Perspective, POWDER:
Web resource metadata (called Description Resources or DRs) are supported with three sets of semantics: POWDER, POWDER-BASE and POWDER-S. POWDER and POWDER-BASE are XML-based and need three pieces of information: basic creator and credential information about the web resources and their DRs, the web resources that are being described (web resources are one or more IRIs and IRI pattern matching strings) and what is being said about those web resources – the DRs themselves. POWDER-S (the S is for semantics) is RDF-based and allows for much richer semantics involvingRDFS and OWL. I appreciate the flexibility of POWDER and POWDER-S and believe this approach can only help promote the recommendation since not everyone is familiar (nor may every be) with Semantic Web formats. Even better is the fact that all POWDER documents can be transformed to POWDER-S documents through a GRDDL transformation.
Getting started with POWDER is straight forward. Below is an example I put together based on a couple of web sites I’m affiliated with:
<?xml version="1.0" encoding="UTF-8"?> <powder xmlns=http://www.w3.org/2007/05/powder# xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:skos="http://www.w3.org/2004/02/skos/core#"> <attribution> <issuedby src="http://www.progeny.net/People/MattFisher/files/foaf.rdf#me"/> <issued>2010-05-19T00:00:00</issued> <validfrom>2010-05-19T00:00:00</validfrom> <validuntil>2011-05-19T00:00:00</validuntil> <certifiedby src="http://authority.example.org"/> <supportedby src="http://supportersofmattstatements.example.org"/> <abouthosts>www.progeny.net www.semwebprogramming.org</abouthosts> </attribution> <dr> <iriset> <includehosts>www.progeny.net</includehosts> <includepathstartswith>/People/MattFisher</includepathstartswith> </iriset> <iriset> <includehosts>www.semwebprogramming.org</includehosts> </iriset> <descriptorset> <dc:Audience>Semantic Web</dc:Audience> <skos:subject>http://dbpedia.org/resource/Category:Semantic_Web </skos:subject> <skos:related>http://semanticweb.org/</skos:related> <displaytext>All resources under www.progeny.net/People/MattFisher and all resources on www.semwebprogramming.org are meant for a Semantic Web audience</displaytext> <displayicon src="http://www.w3.org/Icons/SW/sw-cube.png" /> </descriptorset> </dr> </powder>
This XMLdata is then linked via http://www.progeny.net/People/MattFisher/powder.html with the statement:
<link rel="describedby" href="http://www.progeny.net/People/MattFisher/powder.xml" type="application/powder+xml" />
Returning to our POWDER document, the attribution elements state (in order):
The DR is where we finally see the metadata being applied to a set of IRIs. What’s very useful are the permutations; we can have NIRIs being mapped to MDRs. In the above example we can have a single DR and apply that DR to a set of IRIs. We can also do something akin to the reverse, allowing users to go to great lengths to describe content about a single IRI set with multiple, reusable DRs:
<?xml version="1.0" encoding="UTF-8"?> <powder xmlns="http://www.w3.org/2007/05/powder#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:skos="http://www.w3.org/2004/02/skos/core#"> <attribution> <issuedby src="http://www.progeny.net/People/MattFisher/files/foaf.rdf#me"/> <issued>2010-05-19T00:00:00</issued> <validfrom>2010-05-19T00:00:00</validfrom> <validuntil>2011-05-19T00:00:00</validuntil> <certifiedby src="http://authority.example.org"/> <supportedby src="http://supportersofmattstatements.example.org"/> </attribution>
<dr> <iriset> <includehosts>www.progeny.net</includehosts> <includepathstartswith>/People/MattFisher</includepathstartswith> </iriset> <descriptorset include=”semanticsauce”/> <descriptorset include=”techy”/> </dr>
<descriptorset node=”semanticsauce”> <dc:Audience>Semantic Web</dc:Audience> <skos:subject>http://dbpedia.org/resource/Category:Semantic_Web </skos:subject> <skos:related>http://semanticweb.org/</skos:related> <displaytext>Everything using semanticsauce is chock-full of Semantic Web goodness</displaytext> <displayicon src="http://www.w3.org/Icons/SW/sw-cube.png" /> </descriptorset>
<descriptorset node=”techy”> <dc:Audience>Chemistry Lab Basement Dwellers</dc:Audience> <skos:subject>http://dbpedia.org/resource/Category:Technology </skos:subject> <dc:Subject>Slashdot – nuf said</dc:Subject> <displaytext>If you use techy, do so at your own discretion</displaytext> <displayicon src="http://tinyurl.com/2f8psk6" /> </descriptorset> </powder>
The average user shouldn’t have to concern himself with POWDER-BASE but, for the sake of completeness, the above POWDER XML was converted into POWDER-BASE via i-sieve’s POWDER Validator and is displayed below. The only differences are the use of regex elements that match our iriset data:
<?xml version="1.0" encoding="UTF-8"?> <powder xmlns=http://www.w3.org/2007/05/powder# xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:skos="http://www.w3.org/2004/02/skos/core#"> <attribution> <issuedby src="http://www.progeny.net/People/MattFisher/files/foaf.rdf#me"/> <issued>2010-05-19T00:00:00</issued> <validfrom>2010-05-19T00:00:00</validfrom> <validuntil>2011-05-19T00:00:00</validuntil> <certifiedby src="http://authority.example.org"/> <supportedby src="http://supportersofmattstatements.example.org"/> </attribution> <dr> <iriset> <includeregex>://(([^/?#]*)@)?([^:/?#@] +.)?(www.progeny.net)(:([0-9]+))?/</includeregex> <includeregex>://(([^/?#]*)@)?([^:/?#@]*)(:([0- 9]+))?(/People/MattFisher)</includeregex> </iriset> <descriptorset include=”semanticsauce”/> <descriptorset include=”techy”/> </dr>
<descriptorset node=”semanticsauce”> <dc:Audience>Semantic Web</dc:Audience> <skos:subject>http://dbpedia.org/resource/Category:Semantic_Web </skos:subject> <skos:related>http://semanticweb.org/</skos:related> <displaytext>Everything using semanticsauce is chock-full of Semantic Web goodness</displaytext> <displayicon src="http://www.w3.org/Icons/SW/sw-cube.png" /> </descriptorset> <descriptorset node=”techy”> <dc:Audience>Chemistry Lab Basement Dwellers</dc:Audience> <skos:subject>http://dbpedia.org/resource/Category:Technology </skos:subject> <dc:Subject>Slashdot – nuf said</dc:Subject> <displaytext>If you use techy, do so at your own discretion</displaytext> <displayicon src="http://tinyurl.com/2f8psk6" /> </descriptorset> </powder>
Reusing the same POWDER example, the POWDER-S output , which has been slightly reformatted for display purposes, was generated from the i-sieve POWDER processor:
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:wdrs="http://www.w3.org/2007/05/powder-s#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <rdf:Description rdf:about="http://www.progeny.net/People/ MattFisher/powder.html"> <dc:Audience>Semantic Web</dc:Audience> <skos:subject rdf:resource="http://dbpedia.org/resource/ Category:Semantic_Web" /> <skos:related rdf:resource="http://semanticweb.org/" /> <wdrs:logo rdf:resource="http://www.w3.org/Icons/SW/sw-cube.png" /> <wdrs:text>Everything using semanticsauce is chock-full of Semantic Web goodness</wdrs:text> <dc:Audience>Chemistry Lab Basement Dwellers</dc:Audience> <skos:subject rdf:resource="http://dbpedia.org/resource/ Category:Technology" /> <dc:Subject>Slashdot – nuf said</dc:Subject> <wdrs:logo rdf:resource="http://www.w3.org/Icons/SW/sw-cube.png" /> <wdrs:text>Everything under www.progeny.net/People/MattFisher and everything on www.semwebprogramming.org is meant for a Semantic Web audience</wdrs:text> <wdrs:describedby rdf:resource="http://www.progeny.net/People/ MattFisher/powder.xml"/> </rdf:Description>
<rdf:Description rdf:about="http://www.progeny.net/People/ MattFisher/powder.xml"> <wdrs:issuedby rdf:resource="http://www.progeny.net/People/MattFisher/ files/foaf.rdf#me" /> <wdrs:issued>2010-05-19T00:00:00</wdrs:issued> <wdrs:validfrom>2010-05-19T00:00:00</wdrs:validfrom> <wdrs:validuntil>2011-05-19T00:00:00</wdrs:validuntil> <wdrs:supportedby rdf:resource="http:// supportersofmattstatements.example.org" /> <wdrs:certifiedby rdf:resource="http://authority.example.org" /> </rdf:Description> </rdf:RDF>
Hopefully that’s enough to get your started. There is so much you could do with POWDER but focus on the getting started with small steps. Drop me a line at Semantic Universe and let me know how it works for you.