Thank You JohnnyB

I received a new comment today to my post, Confluence. The post was based on a trip I took last year to Cairo, Illinois, and the comment was from a man who signed himself JohnnyB:

I grew up in Illinois in the 1960s and remember the race riots in Cairo in 1967 and 1969 and the white flight that followed. The town went from a bustling community of 11,000, about 70% white, to a bombed-out, burned-out, shuttered, near ghost town of about 3,600, about 70 percent black. They have a great high school basketball team, despite the fact that the school is nearly bankrupt, they don’t have weight or training rooms and seldom hold home games because teams from other towns are afraid to enter Cairo. Amazing that such decline could take place in an incredible location at the confluence of two of America’s great waterways and along a major North-South Interstate highway.

Confluence is one of the few posts I have that I keep in moderation rather than closed to comments. There isn’t anything in it to attract the spammers, and from time to time, someone drops in and writes something that just stops me. Like today.

City Street

JohnnyB came to my site when he searched on the term “race riots Cairo Illinois”. My post is about half way down in the first page of the returned search results. Among the entries higher up was one for an NPR article related to a CD that released last year: Stace England’s Greetings from Cairo, Illinois.

This album is a collection of songs that reflect a variety of genres: ranging from old blues to modern folk rock. In it, England seeks to re-tell the history and story of Cairo, Illinois–the town that the artist refers to as the most fascinating town in America. I can agree with England, having been through it on a hot summer day, with the hot, white light of the sun reflecting off of broken brick and cracked cement; with a hand lettered sign pointing to cat city–an old office building taken over by wild cats. There’s something about Cairo. Something that both pulls you in, and then pushes you away when you get too close.

Mansion Two

Having grown up in Cairo, NPR journalist Rachael Jones writes about her initial reluctance to listen to England’s album.

The last thing I expected to feel listening to Greetings From Cairo, Illinois was pride. Before hearing the first song, I almost dismissed musician Stace England as a well-meaning but clueless interloper who thought he had figured out all of Cairo’s problems over a few beers.

But England wasn’t just some fly by night troubadour trying to profit from Cairo’s woes. With the help of 50 other local musicians and singers, England had employed an impressive musical range to try and explain the puzzle that is Cairo.

Robert Baird of of the now defunct Harp Magazine, wrote of the CD:

It’s best to run from CD booklets whose notes begin with declarations like, “Cairo, Illinois, is the most fascinating town in America.” But here, Illinois native and former House Afire member Stace England takes Americana to its most literal extreme and paints a song-history of former full-throttle river town Cairo (pronounced Kay-Ro). It swings from massed-chorus gospel (the traditional “Goin’ Down to Cairo”) and blues (Henry Spaulding’s “Cairo Blues”) to originals like the guitar-scratching funk of “Jesse’s Comin’ to Town” (for Jesse Jackson) and finally the rocked-up alt-country of “Prosperity Train,” which is definitely not stopping in Cairo anytime soon. The latter tune, the one best able to stand by itself outside the album’s concept, is enlivened by the voice and attitude of Jason Ringenberg of Scorchers fame. Along the way we meet General U.S. Grant, an “equal opportunity lynch mob” and the Committee of Ten Million, a racist organization called “White Hats” thanks to the pale hard hats they wore. Fascinating.

After a visit to England’s site and weblog, I checked and sure enough, the album was listed in both iTunes and eMusic. I downloaded it from eMusic and spent the last few hours listening to it; more than once with several songs, such as Grant Slept Here:

Ullyses S. Grant slept here.
He was a hard chargin’, hard drinkin’, smoking civil war stud.
Marching his troops in the Mississippi mud.

And White Hats, with a chorus of:

White hats and minds full of hate,
equality is going to have to wait.
We live by the gun, and that’s the way you might die, boy.

White Hats is about the 1967 race riot that left the town gasping its dying breath. It’s these riots that JohnnyB references in his comment. Hearing White Hats and the other music on the album was like listening to the song that ran through my head when I walked through Cairo that summer afternoon. It combines both a hope and a despair, because for all the surreal destruction of the town, there is something there. Something…fascinating.

Gem Theater

From my comments, another traveler through the town, Dawn, wrote:

Thank you for sharing your visit of Cairo, Illinois. My boyfriend and I got off Interstate 57 late last night and ended up in Cairo, and have been so terribly haunted by it, and discussed it all the way home to Milwaukee. It was like a Twilight Zone episode, and we were truly frightened and disturbed by what we saw, but mostly saddened and wanting to learn more about the fate of this town. If you have any more photos, I’d love if you would share them with us. I’ve written a lengthy journal entry about Cairo, and would like to revisit it again soon… it has really captured my heart.

The photos I took were going to be the start of my Song of the South collection. I started these with enthusiasm that soon crumbled in the face of disinterest in both the photos and Cairo, and to be honest the lands that border the Mississippi. For a brief moment, the Sip and this part of the country was hip, but it took the devastation of New Orleans to create this interest. However, I don’t think I can count on the destruction of a major city happening on a regular basis.

For the most part, the lands along the lower Mississippi destruct slowly–like an old man sinking under the waters of the Sip when it breaks through the levees; one work roughened old brown hand reaching out to grasp at the muddy bank,but you can’t tell whether it’s to pull himself out or push himself further under.

This, though, is the true beauty, the true song of of the south. This is what Walker Evans saw with his camera. This is what I have always felt, luring me in to its history and stories and unforgiving waters and broken towns. This is what England captures in his music, and I want to capture in my own pictures. Someday.

Thanks for stopping by, JohnnyB. Thanks for the reminder.

Once the Trolly is gone, all that remains are the tracks


I visited the Butterfly House at Faust Park yesterday for the first time. I wasn’t expecting much when I arrived; I’ve been to other butterfly houses, and the number of visitors seemed to be disproportionately larger than the number of butterflies. However, when I entered the Butterfly House’s glass dome, within a few seconds a Dead Leaf butterfly landed on the shoulder of the man in front of me—a occurrence that would happen frequently to most visitors as you wonder the paths amid the seemingly thousands of delicate, flying creatures.

(I would have taken a photo but the hot and humid room had fogged all my lenses. It would take close to half an hour for the lenses to come unfogged; just about the time when I was getting red faced and drenched in sweat, having foolishly dressed for winter. )


Even with the sunlight the conservatory was too dark to really get photos of the butterflies so I had to use my flash. This flattened many of the photos, washing out some of the color and detail. Still, the butterflies seemed to like the flash, and each time it went off, a few would fly toward me, and dance about my camera–too fast to photograph, barely slow enough for my limited senses.

I started wondering aimlessly around, being careful where to walk because the butterflies were on the ground as well as the camera bag, the trees, the flowers, the feeding dishes, the sides of the conservatory, and other people. It wasn’t crowded, which made photography easier. Two women had brought their two young children, and had some difficulty keeping them under control. The kids weren’t being destructive–just young and absolutely fascinated by the butterflies. The mothers apologized to me for the noise, and I said I didn’t mind at all. How can one get upset at the sound of such joy?


Still, when they left, and everyone else had left, I had the place to myself except for one of the workers pruning some of the bushes. I went through the place once more, and this time, perhaps because I was the only one there, I was surrounded by butterflies every where I went. Not just butterflies: exquisite moths, too. I had to use flash, and harshly, to be able to get photos of the Cobra Moths, but I didn’t care–I had to show you these creatures. The moths are larger than my hand, and beautifully colored, as well as camouflaged with the cobra ‘heads’ at each wing tip.



I forget at times that butterfly wing colors and patterns are a defense mechanism; orange and reds are the bright colors of poison; dots and swirls resemble owl eyes, or snakes; speckled greens and yellows allow the insects to blend into jungle greens, and meadow yellows.


One of my favorite of the butterflies was the Owl Butterfly. I discovered its name from another photographer I chatted with earlier, when I had first arrived. He was a younger man, big, with blond hair, face pink from the heat. He had been there since early morning (wisely, I noticed, dressed in a light t-shirt). He was kind enough to give me some lens tissue to clean my lenses and then spent about an hour showing me butterflies, which he photographed with a film camera using a macro lens and natural light. He mentioned that the Butterfly House is a second home to him–that and the Botanical Gardens.


At first I took him to be a simple person; then I realized that he was, instead, a man of simple pleasures–not unlike the Butterfly Man in Sebald’s book, The Emigrants. I don’t have this book in my limited library, but a search returned the following:

The air was coming in from outside and we were looking over the almost motionless trees towards a meadow that reminded me of the Altach marsh when a middle-aged man appeared, holding a white net on a pole in front of him and occasionally taking curious jumps. Uncle Adelwarth stared straight ahead, but he registered my bewilderment all the same, and said: It’s the butterfly man, you know. He comes round here quite often.


Further reading suggested that Sebald’s Butterfly Man is an allegorical reference to one of his favorite authors, Vladimir Nabokov, author of the acclaimed, albeit infamous, Lolita. Like Sebald, Nabokov was a man passionately in love with words. In a review of Lolita at Amazon, Simon Leake wrote:

Playfully perverse in form as well as content, riddled with puns and literary allusions, Nabokov’s 1955 novel is a hymn to the Russian-born author’s delight in his adopted language. Indeed, readers who want to probe all of its allusive nooks and crannies will need to consult the annotated edition. Lolita is undoubtedly, brazenly erotic, but the eroticism springs less from the “frail honey-hued shoulders … the silky supple bare back” of little Lo than it does from the wantonly gorgeous prose that Humbert uses to recount his forbidden passion.


Nabokov once said, My pleasures are the most intense known to man: writing and butterfly hunting. It is this man, and this passion, which is threaded throughout Sebald’s Emigrants, as a review from a reader at Amazon describes:

Sebald is never without his playful, even absurd, side, and it is present in this book as well. Running through his narratives, and culminating in the memoir of Max Ferber’s mother, Luisa, are allusions to “the butterfly man.” In Ferber’s section, “the butterfly man” is a boy of about 10 who chases butterflies in the German resort town of Bad Kissingen. This man is clearly Vladimir Nabokov, for the scene described is exactly the same as one described in Nabokov’s own memoir, “Speak, Memory.” Whether muse or mentor, “the butterfly man” holds great significance for each of Sebald’s characters. And, who but Sebald would have had the imagination and creativity to braid, like a silken thread, the spirit of the most celebrated of all literary emigrees throughout this book?

As in all of Sebald’s books, photographs are an integral part of the work and, once again, rather than adding clarity, they seem to blur the boundaries between fact and fiction instead. What is real? What is not? With Sebald, we never really know.


Just before the exit at the Butterfly House is the Miracle of Metamorphosis display. Here, chrysalids from throughout the world are carefully hung and nurtured. No matter what time of day, there is always at least one butterfly being born in this display. When I was there, several owl butterflies were getting ready to take wing. One could see the entire life of a butterfly, from larva to chrysalis to butterfly if one wanted to visit over a week at the Butterfly House. But not the death, though. I imagine that workers scour the plants nightly for butterflies that have died, removing them for mounting, study, or disposal. It wouldn’t do, you see, to have the walks littered with the fragile wings of dessicated butterflies; or corpses of moths hanging from the trees.

Before I left, a Blue Morpho butterfly I had been trying to photograph with its wings open, trailed by three Paper Kites and several Red Lacewings suddenly flew around me in a spiral that started at my knees, circling round and round until above my head–vanishing joyfully into the dark depths of the bushes above and around me. I didn’t get a photo of their flight. I didn’t even try.


The Bottoms Up RDF Tutorial

When I wrote the first chapter of the book, Practical RDF I used the analogy of the blind men describing an elephant to describe how people see RDF. With the original fable, each blind man would feel a different part of the elephant and make a decision about what the elephant looked like as a whole because of their own experience. One man said the elephant would be like a wall, after feeling its side; another like a spear after feeling its tusk, and so on.

The same can be said for RDF. It was created to provide a language for describing things on the web–a simple premise. Yet to hear RDF described, it is everything from just another metamodel, like the relational model; to the future of the Web; to the most twisted piece of thinking ever to have originated from human minds. In particular, the latter belief seems to dominate most discussions about RDF.

I’m not quite sure why the Resource Description Framework (RDF) was constrained into a defensive position since birth. It could be that the long delays associated with the specification left more than a whiff of vapor. Or perhaps it was the sometimes unrealistic expectations heaped upon the poor beastie that led folks into taking a devil’s advocate position on both the concept and the implementation–positions that have now become rigidly unyielding as if the people had swallowed a shitload of concrete and their asses are firmly pinned to the ground.

I do know that those of us who appreciate how the model can facilitate interoperability, as well as discovery, have spent a great deal of our time defending the model and the implementation of the model, RDF/XML. So much so that if all that time was laid end to end, it would stretch around even the heads of even the biggest egos on the web. More importantly, if we had used that time for creating rather than explaining, the usability of RDF would be a moot point.

This last year, I watched as yet another person defended RDF in response to yet another RDF detractor and I realized reading what the detractor wrote that he didn’t really even know what RDF was, much less how it could be used. He was just repeating what so many other people said, and we were responding right on cue–saying much the same words in defense that we said a year ago, two, three, and more. I realized then that I can never successfully ‘defend’ RDF because a defense implies that decisions haven’t been already made.

Instead, I will respond to questions and I will clarify, but rather than talk about how usable RDF is and point out the many tools available, I’d rather spend most of my time creating something usable with these tools. Luckily, by design, I don’t have to convince the detractors to do the same, because the really great thing about RDF is that its use does not have to be ubiquitous for me to do fun and useful things with the available technology.

This tutorial is based on my own uses of RDF and RDF/XML. Though I’ll cover all the important components of the model, I’m focusing on what I call street RDF–RDF that can be used out of the box to meet a need rather than being targeted to some universal megadata store in the future. In addition, rather than just introduce each aspect as it comes along, and building from the simple to the complex, I’m going to take the arguments against RDF that I’ve heard in the last four years, and address them one at a time, using the components of RDF as I go.

In other words, rather than approach the elephant that is RDF, I am, instead, approaching each of the blind men’s view of RDF, and see if we can’t take what they’re seeing and fit it into the whole.

RDF is Too Complex

If you ask most of the people who don’t like RDF why they feel this way, most will answer that RDF is too complex. They will point to the fact that the specification’s description is spread across six released documents at the W3C, most of which contain an esoteric blend of formal proofs and language obscure enough to give even decided RDFophiles pause. They have a valid point, too: The RDF specifications are not meant to be consumed by the average web user.

However, one can say the same of the HTML or XHTML documents, or those for CSS or any other specification. The documents at the W3C are meant more for those implementing the technology, then the average user. More, they’re meant as a way of ensuring that implementations are consistent, which if one leaves aside anything else about a specification, consistency has to be the critical requirement.

Yet if we strip away the proofs and the checks, the core of RDF is, at heart, very simple. The basic component of RDF is a statement of the form subject predicate object; loosely translated into comparable terms from a sentence in English, the subject is the noun, the predicate the verb, and the object, the thing being acted on by the verb.

The cat ate the mouse.

The photograph’s has a height.

The height is 500 pixels

In the specification, the predicate is considered the property, but there is an implicit very of ‘has’ associated with that property. So, for instance, if this document was written by me, the statement could be:

This document has writer of Shelley

Even though the predicate is technically ‘writer’, there is an implicit verb: has.

RDF refers to these simple statements as triples, each consisting of a required subject, predicate, and object. These triples then form the basis for the for both the language and the specification. If you access the information I have stored about one of my posts, you’ll see that no matter how complex the model, it can be converted to a set of triples.

Of course, now that you have these triples, you have to pull them all together and that’s where the RDF graph comes in. Technically, an RDF model is a node and directed arc graph, where the predicates are on the arcs, and the subject and objects are in the nodes. To see what a graph looks like, access the RDF Validator hosted by the W3C, and type in the URL for one of my RDF files, such as Change the output options to Graph only and then have the Validator parse the data. Or you can see the generated graph here.

Note that the predicates are given namespace identification, such as for the Dublin Core source predicate. The reason for this is so that I can have a ‘source’ in my schema that is safely differentiated from ‘source’ in your schema, in such a way that both can be used in the same model. A predicate is always identified with a specific namespace: either one completely spelled out, as in the model; or one given an abbreviation of the namespace (which is then defined in the namespace section of the model), such as dc:source; or if none is given, it’s assumed to be part of the default schema for the model. These namespaces can be added to the model anywhere, but are usually defined in the opening RDF element:


Returning to the snapshot of the model, note that some of the nodes are ovals, others are square. The difference is that those nodes that are resources are drawn as oval; those that are literal values are drawn with a rectangle around them. Resources in RDF are objects that are identified by a URI (Uniform Resource Identifier) reference, or URIref. A URIref is basically a way of uniquely identifying an object within a model. For instance, the URIref for this document would be the URL, since a URL is also a specific type of URI. Your weblog could be identified by the URL used to access it. I, as an individual, can be identified by a URL to an about-me page, or a mailto reference to my email address–which leads us to another aspect of RDF that gives people pause: using URIs to identify objects that don’t exist on the web.

Everything can be described using fruit

Everything can be described using fruit if you’re motivated to do so and have both imagination and a sense of consistency. I could be described as apple/lime/pineapple and you as tangerine/strawberry/kiwi. We would most likely run into duplicates, but if we use the fruit system to define locations, then specifying a person’s fruit name and location would most likely serve to identify an individual: I am apple/lime/pineapple from banana/honeydew/orange.

This isn’t as silly as it sounds. Well, yes, it is as silly as it sounds, but the point is we’ve been using arbitrary symbols to identify people and things and places since we first started scratching drawings into cliff walls. And by common agreement, we know that these forms of identification are representative–they aren’t meant to be taken for the ‘real’ thing.

Yet when RDF uses URIs to identify things, some folk tsk-tsked, saying that URIs were meant to identify things that could be fetched from the web. I can’t be fetched from the web, so how can I be identified by a URI?

How can I be identified by fruit? Just because I name myself a fruit name, doesn’t mean you can put me into a blender and make juice out of me. The same applies to using a URI to identify me: though I can’t be ‘fetched’ from the web, I can put up a page that is my representation, my avatar if you will, and use this as a way of identifying me within web-related activities. So in RDF, any object that has a URI is a resource. Any object that doesn’t have a URI is a literal value or a blank node. Speaking of blank nodes, if you think people have kittens over using URIs to access non-web objects, you should see how they feel about blank nodes.

Who am I?

Within the universe that is RDF, there are objects that have no name, because to give names for these objects is meaningless — outside of the sphere of a specific RDF model, these objects have no unique identity.

If you’re like me, you have one drawer set aside as a junk drawer. In this, you put all the crap that you can’t a place for elsewhere: pens, paper clips, rubber bands, that odd plastic knob that fell off something, pizza coupons, which you’ll never use, and so on. In our household, the junk drawer is the small top right-most drawer at the end of in the free-standing unit, which has the range and oven, facing toward the oven.

Given this information, you can identify exactly which drawer is the junk drawer. So if I ask you to please get me that odd plastic knob from the ‘junk drawer’, you won’t have to search all my drawers to find it. But if I were to go into your house and you asked me the same and I don’t know which drawer is the junk drawer in your home, this way of identifying the junk drawer is meaningless.

Oh, by happenstance, the method of identifying the drawers could be the same, but that doesn’t make them the same identical junk drawer–it’s just that, by luck, you and I have the same configurations of kitchens, and this particular drawer has a ‘junk drawer’ appeal to it.

Blank nodes are basically the junk drawers of RDF. Though they are given some ‘dummy’ identifier within the model (such as genid:ARP129805), to identify them uniquely outside of the model in which they’re found makes little sense; the same as identifying a ‘junk drawer’ outside of an individual’s home makes little sense. We don’t want to give a blank node uniqueness outside of the model–because to do so, changes its meaning. It would be the same as formally identifying my junk drawer as “Shelley’s Junk Drawer”, which implies this same junk drawer will always be Shelley’s Junk Drawer, and my junk drawer will always be the one I have now. This just isn’t true. It is only my junk drawer now, in this time, in this place.

Within the model, an identifier not only makes sense, it’s an imperative; otherwise, we have no way of being to access this object consistently in the model. Usually, this is generated by whatever tool is used to build the model. And if two models are merged, whatever tool is used to manage this merging renames the blank nodes so that each is, again, unique within the new model. As before, though, this name isn’t of interest, in and of itself. It’s just a label, a convenience.

For some reason, blank nodes, or bnodes as they are commonly called, cause consternation in some folks who resist their use; saying that bnodes add unnecessary complexity to a model. After all, there’s no reason we can’t use something such as a fragment identifier (i.e., ‘someobject’ being the fragment) to identify the node if it’s dependent on the model.

However, to give a bnode an identifier that allows it to be uniquely identified outside of the context of the model would again change the meaning of the node–it is no longer a bnode, it is Something Else. To return to the analogy of the junk drawers, if I were to marry again someday, and my husband brought his junk drawer to our new home, and I brought mine, our home would then have two junk drawers: identified within this new context as Hubbie’s junk drawer and Shelley’s junk drawer. The latter wouldn’t be the same “Shelley’s junk drawer” I had when I was single; I would, however, treat it exactly the same.

(We could also merge the contents of our junk drawers, and have one combined His-and-Her junk drawer. This is something I just can’t contemplate, though, which is probably why I’ll remain single the rest of my life. My junk is my junk–mixed with another’s, it would no longer be my junk.)

I could merge two models and the program may or may not use the same names for the bnodes in this new, combined model, but it doesn’t matter: how each is used, and each bnode’s contribution to the model as a whole would be the same regardless of its name, because the name doesn’t matter.

If, in the interests of simplification, I’m not willing to do without my bnodes, I am quite happy to do without other aspects of RDF, such as containers and the Big Ugly: reification.

The Big Ugly

RDF containers are objects that, themselves, are assumed to contain other objects (and in fact, being a container is part of the intrinsic meaning of the object). How the contained objects relate to each other depends on the container: in a Bag, the objects can occur in any order, while in a Seq (sequence), order has meaning.

If you open a RSS 1.0 or 1.1 syndication feed you would see a container. For instance, my feed currently has the following:

<rdf:li rdf:resource=””/>

<rdf:li rdf:resource=””/>
<rdf:li rdf:resource=””/>
<rdf:li rdf:resource=””/>
<rdf:li rdf:resource=””/>
<rdf:li rdf:resource=””/>
<rdf:li rdf:resource=””/>
<rdf:li rdf:resource=””/>
<rdf:li rdf:resource=””/>
<rdf:li rdf:resource=””/>

In turn, each of the items listed within this Seq container would be listed and defined later in the document.

I never use Containers in my simple RDF models (outside of my syndication feed), primarily because one can use straight RDF statements and achieve the same results. When the syndication feed is output as triples, the Seq becomes a simple statement whereby the container object is a bnode, has a predicate of, and a object of Each listed item then becomes a separate statement, with the container bnode as the object, a predicate indicating the position in the sequence, and an object identified by the permalink for each individual post. The real meaning for the container comes from the type predicate and the Seq value — no different than how one can attach any number of other statements about a resource by giving specific predicate and object values.

If there are alternatives to RDF containers, there aren’t for reification, though again, the result is a set of triples. Reification is basically making a statement about a statement. If I make a statement that Microsoft has decided to built Vista on top of Linux, just like Mac OS X, and I record this in RDF, I’ll most likely also want to record who made this statement–it acts as provenance for the statement. In RDF, attaching this provenance to the document is known as reifying the statement.

However, reifying a statement does not make an assertion about its truth. In fact, if you look up the word provenance its definition is:

1. Place of origin; derivation.
2. Proof of authenticity or of past ownership. Used of art works and antiques.

In other words, it can be considered a verification of the source, but not necessarily a verification of the truth. An important concept in RDF, but not necessary for the simple uses of RDF I incorporate into my site.

I also don’t need to incorporate OWL, the ontology language that’s built on top of RDF. OWL stands for Web Ontologoy Language. Yeah, I know — the acronym doesn’t fit. OWL adds another layer of sophistication on top of RDF. Through the use of OWL, not only can we record statements about resources, we can also record other parameters that allow us to infer additional information…without this information being specifically recorded.

For instance, I can define a RDF class called Developer. I can then create a subclass of Developer and call it OpenSourceDeveloper, to classify open source developers. Finally, I can create a subclass off this subclass called LampDeveloper, to classify open source developers who mainly work with LAMP technologies. With this structure defined, I can attach additional statements about Developer and be able to infer the same information about open source developers and developers who use LAMP.

With OWL, we can define class structures, constrain membership, define ranges, assign cardinality, establish the logical relationship between properties and so on, all of which allows us to make inferences based on the found statements. It’s very powerful, yet all of it eventually gets recorded as triples. Plain, old triples–the atom of the semantic web.

I haven’t made extensive use of OWL in version 1.0 of my Metaform extension layer, but I plan on incorporating it into version 2.0 of the plugins and extensions. Still, I have managed to capture a great deal of information. The question than becomes–where do I put it?

(Hey! I managed to work 2.0 into the conversations. That should be triggering all sorts of detectors.)

Where to put the pesky data

As you can see, RDF doesn’t have to be complicated, but it can be very sophisticated. With it, we can record specific pieces of information, which can then be queried using a specialized query language (RDQL, and now SPARQL). We can also record information about the structure of the data itself that allows us to make some rather interesting inferences. But there was one small problem with RDF: where do we put it?

RDF is serialized into RDF/XML, which we’ll get into later. For some files, the RDF/XML used to define the resource can be included directly in the file. The XMP section of a photograph is one such. For others, such as a RSS 1.0 syndication feed, the RDF/XML defines the data, as well as the metadata. However, the most common web resource are web pages, and these are created using HTML or XHTML, and these formats do not have a simple method for embedding XML within the documents.

To work around the limitation, people have used HTML comments to embed RDF/XML and this can work in a very limited way. As an example, the RDF/XML used to provide autodiscovery of trackback within weblog posts is embedded within an HTML comment. But the limitations inherent in this approach are so significant that it’s not considered a viable option.

The W3C is also working on an approach to extend XHTML to allow RDF/XML. Still, others are exploring the concept of using existing XHTML attributes to hold RDF data, which can then be interpreted into RDF/XML using XSLT or some other technology. In this approach, class and other attributes–legitimate to use in XHTML–can be used to hold some of the data

However, all of these options presuppose that web pages are, by nature, static objects. The trend, though, is for dynamic web pages. Most commerce applications now are database driven, as are most commercial sites. As for weblogs, it’s becoming increasingly rare to find static HTML pages.

These pages are served up directly from the database when a specific URL is accessed. For instance, accessing the URL, in combination with a specific rule defined in my .htaccess file, triggers the web server to convert the URL into one that identifies the post name and archive information, which is then passed to a PHP program. This program uses this passed in information to locate the post, incorporating the dynamic data with a template resulting in a page that, to all intents, looks like a typical web page.

It’s then a short step to go from serving up a web page view of the data to serving up an RDF/XML view of the metadata defined for the page. That’s what I do in my site–attaching /rdf/ to the end of a post returns an RDF/XML document if formal metadata is defined for the web page. Unfortunately, this conflicts with WordPress, which determines that /rdf/ should return a RSS 1.0 view of whatever data is available for the object. As such when I converted my Wordform plugins and extensions to WordPress, I used /rdfxml/ to pull out any metadata defined for the document.

This works nicely, and with the increased use of dynamic web pages, seems to me to be the way of the future. Not only could you provide a XHTML view of data, you could provide an RDF/XML view of metadata, and even generate a microformat version of the same metadata information for inclusion within the XHTML tags.

Tag, You’re Not It

Speaking of microformats, the hot metadata technology the last year has been microformats and structured blogging. With microformats, the use of standard XHTML attributes such as class and rel are used to define the metadata and associate directly with the data, in a manner that makes the metadata visible to the web page reader. Structured blogging follows this same premise, except that it proposes to use existing XHTML structures in more meaningful manners, facilitating the process through the use of plugins and other programmatic aids.

Both approaches are useful, but limited when compared to RDF. One could easily take RDF/XML data and generate microformats and/or structured blogging, but the converse isn’t true. Even within the simple plugins that I’ve created for Wordform and WordPress, there isn’t a microformat or structured blogging approach that could replicate the metadata that I record for each of my pages. And I’ve not even tried to stretch the bubble.

In fact, the best approach would be to record the data in RDF/XML, and then use this to annotate the dynamically generated XHTML with microformats, or organize it for structured blogging. This approach then provides three different views of metadata — enough to satisfy even the greediest metadata consumer.

Where be the data

When I first created my RDF plugins for Wordform, I inserted the data into the same MySQL database that held my weblog entries. By the time I was finished, I had over 14,000 rows of data. However, about this time, I also started experimenting with storing the data in files, one file for each URL. I found that over time, the performance of the files-based system was better, and a litte more robust than that for the database. More importantly, using the file approach means that people who use my WordPress weblog plugins don’t have to modify their database to handle the RDF data.

When one considers that MySQL accesses data in the file system and that PHP caching usually makes use of files, storing one model per URL in one file makes a lot of sense. And so far, it also takes up less space overall, as all the periphery data necessary for tables in MySQL actually adds to the load.

Of course, each file is stored as RDF/XML–the topic about I left for last, as there is no other aspect of RDF that generates heated discussion than the format of RDF/XML.

The Final Answer

Ask any person why they don’t want to work with RDF and you’ll hear comments about the “RDF tax” and the complexity and most of all, that RDF/XML is ugly.

We’ve seen that the so-called RDF tax is less taxing than one assumes considering the complaints. The requirements for an RDF model are the minimum needed to ensure that data can be safely added to, and taken from a model without any detrimental impact on the integrity of that model. I can easily grab an entirely new vocabulary and throw it into a plugin, which adds data to the same model other plugins add data to and know that I don’t have to worry about a collision between elements, or loss of data. More than that, anyone can build a bot and consume this data without having to know what vocabularies I’m using. Later on, this same data can be queried using SPARQL and it’s only when searching for specific types of data that the vocabularies supported comes into play. The data exists for one purpose but can feed an infinite number of purposes in the future.

As for the complexity, well, RDF just is: make it as simple or as complex as you need. Just because the specification has some more complex components, doesn’t mean you have to use them. Dumb RDF stores–dumb meaning using RDF for immediate needs rather than long-term semantic goodness–are going to become more popular, as soon as we realize that in comparison with other data models, such as the relational, RDF is more self-contained; has a large number of programming APIs to manipulate; and are lightweight and easy to incorporate into existing applications.

Finally, the issue of the ugly RDF/XML. Oddly enough, my first exposure to XML in any depth was through Mozilla’s early use of RDF/XML. As such, I find little about the structure to be offensive.

Regardless of exposure, though, what does it matter how RDF/XML looks? There may be some unusual people who spend Saturday nights manually writing XML, but for the most part, our XML is generated, and this includes our RDF/XML. As for programmers being concerned about having to understand the syntax in order to generate it or parse it, all they have to understand is how the RDF triple works, because it’s the RDF API developers who work the issues of RDF/XML. As such, there are RDF APIs in PHP, Perl, C#, C, C++, Python, Ruby, Java, Lisp, and other languages; APIs that provide functions to generate or parse the XML, so that all a developer needs worry about is calling a function to create a new statement and add it to the model.

In fact, comparing the technologies to work with straight XML and RDF/XML there is no contest–the RDF/XML APIs handle more of the bits at the lower level, and as such, as much easier to use.

As to why we don’t just generate the triples directly, we’ve just spent the last five years convincing business that XML was the interoperable syntax of the future–why should we change now, and say they need another syntax? You can write the most amazing application using any number of tools, in any number of languages without once having to touch the XML. And, as one of my plugins demonstrates, you can also use XML parsing in addition to RDF processing. Two for the price of one.

So my final answer about the ugliness of RDF/XML is: don’t look at it.


An archive of this page, with comments, is available at Wayback Machine

Saturday was the Artica event downtown, which promised many photographic opportunities. I wasn’t up for the crowds, though, and headed towards the Botanical Gardens to look at leaves turning color.

The leaves were still green except for a sugar maple here and there. The other colors of fall are soft and muted, but the sugar maple screams defiance at the winter. That and the poison ivy, of course, but catch me trying to capture its red color against the blue of the sky.

Sugar maple in glorious reds

There’s a fountain at the Gardens that the children play in. It’s red brick, with water spigots spaced equal distanced in a curving line on either side of a cement sitting platform. The water rises up slowly into the air, and falls just as slowly back. No one was at the fountain on Saturday; I put my macro lens on and spent 45 minutes taking pictures of the water. My pants were soaked by the time I finished, none of the photographs came out, but it doesn’t matter.

The Victorian waterlily came through, though, champ that it is. Thank goodness for the Victorian waterlily.

There was music in the air on Saturday, which I followed. A new section of the Garden had been opened—marked off by curly vined fences and centered by a lovely reflective pool. By coincidence, it was the grand opening of the George Washington Carver Garden. Several dignitaries were there for the unveiling of the statue. One such was an older, distinguished gentleman, sitting in a chair, cane handle between his hands. He wore glasses, and he looked oddly familiar, but it was hard to see his face–so many people kept coming over to greet him.

Various people spoke at the dedication, each with their own favorite story of Carver.

Carver was born in Diamond Grove, Missouri, and is one of this state’s favorite sons. Orphaned at birth and born a slave, he still managed to obtain an education. He wanted to study art but was convinced by a teacher that his strengths were in botany. His Garden will introduce young people to botany and, hopefully, open a door to the black community who have, for over a hundred years, refused to enter the Botanical Garden’s gates. As Shaudra McNeal said at one event held here last year, You know Shaw owned slaves. That’s why some people won’t come here.

Three of Shaw’s slaves, a woman named Esther and her two children, tried to run away in 1855. They and several others boarded a small boat pulled up to the levee along the Mississippi to escape to Illinois, a free state. However, they were met by local police on the other side and returned. The place where they attempted to cross has now been designated as part of the historical Underground Railroad.

Shaw kept the children but paid a slave dealer to sell Esther down river in  Vicksburg, Mississippi. I’ve always wondered what happened to her. I looked into the faces at the ceremony and wondered if any were her children’s children’s children. In four years of going to Shaw, Saturday was the first time I’d seen black people in the Gardens.

In four years of going to Shaw, Saturday was the first time I’d seen black people in the Gardens.

Before the ceremonies, an older woman came to sit on the bench next to where I stood. After a few minutes, she spotted two women she knew who were sitting in reserved seating close to the reflective pool. She walked over and they greeted her warmly. They were black, she was white. They had an empty seat near them and invited her to join them. She hesitated because it was marked ‘reserved’, but one lady patted her arm and said, “…that’s alright, we can sit here. We’re privileged.” One of the seated ladies moved over to make a spot for her, and she sat down between them, her hand on the arm of one, while the other hugged her closely. And that’s how they sat during the ceremony: three old women, two black, one white, arm and arm.

The master of ceremonies began introducing the different speakers, including a local historian and expert on Carver, a minister, the director of the Gardens, and finally introducing the older man I had noticed earlier: he was the actor and opera singer, Robert Guillaume. He had been invited to read a poem in honor of the occasion.

Guillaume made his way to the podium in slow, stiff steps, leaning on his cane. His voice was soft and his words halting at times, but still beautiful to hear. He mentioned growing up in St. Louis and how happy he was to have been invited to attend the dedication. Then that lovely, wonderful voice, unimpeded by the stroke that halted his footsteps, came over the speakers; reading Carver’s favorite poem, Equipment by Edgar Guest:

Figure it out for yourself, my lad,
You’ve all that the greatest of men have had,
Two arms, two hands, two legs, two eyes
And a brain to use if you would be wise.
With this equipment they all began,
So start for the top and say, “I can.”

Look them over, the wise and great
They take their food from a common plate,
And similar knives and forks they use,
With similar laces they tie their shoes.
The world considers them brave and smart,
But you’ve all they had when they made their start.

You can triumph and come to skill,
You can be great if you only will.
You’re well equipped for what fight you choose,
You have legs and arms and a brain to use,
And the man who has risen great deeds to do
Began his life with no more than you.

You are the handicap you must face,
You are the one who must choose your place,
You must say where you want to go,
How much you will study the truth to know.
God has equipped you for life, but He
Lets you decide what you want to be.

Courage must come from the soul within,
The man must furnish the will to win.
So figure it out for yourself, my lad.
You were born with all that the great have had,
With your equipment they all began,
Get hold of yourself and say: “I can.”

There wasn’t a large group of people attending the ceremony and after the statue was unveiled, we were invited to view it more closely and meet the speakers. Standing on the platform, I finally turned away from looking at the statue to realize that Guillaume was, for the moment, not surrounded by people. I hesitantly approached him, and gibbered something along the lines of, “Sir babble babble honor gibber gibber Phantom babble gibber wonderful.” Luckily he spoke Fan and could decipher what I was saying. He was incredibly gracious.

My favorite picture of him was when he signed an autograph for the television cameraman.

You are the handicap you must face,
You are the one who must choose your place,
You must say where you want to go,
How much you will study the truth to know.

I don’t care much for Guest as a poet — too manly man for me. But such complex truth in so many simple words. If I had gone to Artica, I never would have heard Guillaume say these words. I guess the luck was with me, though I’ve not been a believer in luck. Loren Webster wrote something on luck recently when he discussed the Elizabeth Bishop poem, One Art, which starts with:

The art of losing isn’t hard to master;
so many things seem filled with the intent
to be lost that their loss is no disaster.

It’s a wonderful poem; resigned but not defeated. Loren speaks of loss and luck, writing, I still remember that period in my life when I repeatedly played Ray Charles’ version of “If It Wasn’t For Bad Luck,” I wouldn’t have any luck at all, and ironically referred to it as my theme song.

I sometimes think we see bad or good luck when what we’re given is opportunity. Being invited to a special event with many movers and shakers is opportunity, but so is not being invited. Spending the rest of our lives with the perfect love is opportunity, but so is being alone. In the end, as George Washington Carver would most likely say, it’s not what we have, or what we’ve given but what we choose to do that matters. Some people prefer to hack life; others prefer to just live it.

Loren also wrote:

Things often have a way of righting themselves, though it certainly doesn’t seem that way when you’re in the middle of a losing streak. Unfortunately, for some people things never do quite right themselves, and who can blame them if they’re left feeling lost and alienated?

Feeling lost and alienated can also be an opportunity.

bunch of colorful mums

A Shoulder to Steady On

I decided to visit a park in Illinois yesterday and walk the trails while my roommate rode a bike path that connected with the park. The weather was perfect: cool but sunny, and the trees just starting to turn. Most of the road to the park was by the Mississippi and it looked beautiful and blue rather than dangerous and dark.

The park had many miles of trails, most ‘moderately difficult’. I was loaded down with camera equipment, but felt I wouldn’t have a problem with ‘moderately difficult’.

The trail started up sharply, and then just continued. Up and up. It was difficult footing, though I’ve had worse. But I, soft and overweight from a summer made up of hot, sedentary days, began to have troubles. I would pass folks on the way and chat with each of them, holding on to their presence. At one lookout point, I talked with a younger couple, taking their photo for them; admiring their GPS device. I, who normally eschew humanity during my hikes, felt the need for contact.

I have no sense; I continued. I was passed by a couple and their two kids. The man gave me a friendly pat on the arm as he passed, as if to assure me that I will not die. As they made their way, I noticed that they would stop along the way so that I was always just a bit behind them. Eventually, at one point where the way was sharply steep, he had stopped to wait for me to give me a hand. I’ve not yet met a trail that was so much for me that I needed help, but I did yesterday. I was grateful for his help; I was grateful for the fact that they slowed their steps because of concern for me.

At the top, where the trails divided, we talked. Their names were Jan and Les and they had just moved from Florida to Missouri. I told them of many of the places to hike and walk; they told me how life was like in Florida. I told them I was going to continue with the trail marked ‘easy’, to the road for a safe trip down. They continued on the ‘moderately difficult’.

But I am stubborn. To go the easy route would take me over two miles out of my way, and I wanted to finish the walk. Half way, it connected with a quicker route down that was labeled ‘moderately difficult’. It was only 1/4 mile and I felt I could handle it.

It was a nightmare. There was no path, it had been eroded by water and was steep and uneven and difficult footing. For most of it, I walked sideways, leaning heavily on my walking stick.

I met another family on the way; again a mother, father, and two kids though these children were much younger. They seemed strained, so I knew I wasn’t the only one having problems. Oddly enough, there was a very sharp step down where I met them (most likely why they had stopped). This time, I asked for help–just a shoulder to steady on, as I made the step. I then continued down, as they continued up. Eventually the trail gave way to road and road to car and little has felt so good than the seat of that car.

Note to self: easy trails for the next two months. I can’t always depend on a handy shoulder being nearby.

I don’t really have many pictures from the trip. On the way, there was a cave system that we stopped at, and was able to get one photo I liked.