Jena Week: final examples

Recovered from the Wayback Machine.

I converted the rest of the Jena1 examples to Jena2 without any major reworking being necessary. At the end of this post is a zipped file of all of the Java source that you can download, use to start your own explorations.

In Example 7, reading in an RDF/XML file in is no different with Jena2 than it was with Jena1. The examples don’t change (other than class structure and creating the memory model using the factory object), except that iterating through statements using StmtIterator exhibits better Java behavior now. StmtIterator now returns an Object when you use next rather than a Statement, and you’ll need to cast it. Or you can use the new nextStatement function call:

// next statement in queue
Statement stmt = iter.nextStatement();

Examples 8 and 9 work against graphs/models persisted to a relational database. I used MySQL in Windows 2000 to test the examples, but you can also use Oracle or other supported database systems.

There have been some significant changes, for the better, with using a relational data model for persistence in Jena2. For instance, you don’t have to specify a storage type or preformat the storage as you did with Jena1; this is all automated in the new classes, by passing in the type of database when you create the model. Another change is that you don’t use the RDBModel.create method, which is deprecated – you can use a new class, ModelMaker, or you can call the static function, createModel.

In the following, the driver is loaded, a connection is established and a model created. Once created, a serialized RDF/XML graph is read.

// load driver class

// establish connection – replace with your own conn info
Connection con = DriverManager.getConnection(sConn, sUser, sPass);
IDBConnection dbcon = new DBConnection(con, “MySQL”);

ModelRDB model = ModelRDB.createModel(dbcon, “one”);;

Check the documentation for Jena2, and in the DB directory, you’ll find a discussion on migrating Jena1 databases to Jena2, as well as a good description of these changes, and example code.

One interesting aspect of storing Jena within a relational database, especially as it relates to previous postings, is whether Jena2 maintains a reference to the actual source of the external data, and from what I can see, it does not.

Within Jena, you create a graph (termed a model in Jena) and can load many serialized sub-graphs (individual RDF/XML files) into it, or add statements directly using the API. I did so, loading in several FOAF files from people I know. I then looked through the data to see if the source of the sub-graph, the actual file, was maintained and couldn’t find anything.

Once the sub-graphs are merged into one graph, all blank nodes are resolved, and any traces of their separate natures are not maintained. This is proper behavior for RDF according to the RDF specifications, and this merging of sub-graphs is one of strengths of the RDF model.

Now, you can perform a little deductive work and find that a person’s properties have a specific blank node identifier, which is then the object of a “knows” predicate, which is then the property of another blank node identifier of another person with a given name – a bit of a fun challenge with RDQL – but there’s nothing I can see that identifies the source of the actual RDF/XML file, itself.

It could be among the information stored in the BLOB that makes up the graph’s name, but the only way to know this for sure is to examine the contents of BLOB itself, or to find a specific class that allows us to interrogate this data. However, that breaks into new territory not covered in the book examples, and best left for further essays.

Download file

Just Shelley

You know you should buy a lottery ticket when…

Recovered from the Wayback Machine.

You’re at the Department of Motor Vehicles, renewing your license plate tags, when outside a car whose brake wasn’t set correctly starts rolling towards your little golden girl, picking up speed as it rolled downhill only…

…only to hit a truck that had just pulled into the parking spot next to you, driven by a man who didn’t see the car coming.

Fate: 0 Golden Girl: 1



Starry starry night

This week Mars is closer to our planet than at any other time in the last 60,000 years. In anticipation of a couple of night time field trips this week to see the ruby beauty, I spent the day yesterday with my telescope trying to figure out how to use the star/planet automatic tracking system. I can operate and maintain most types of computers, was first in my class in electronics in college, and can even program a VCR — you would think I could figure out how to program the telescope, wouldn’t you?

My mother gave me the telescope for Christmas two years ago. I’d been eying them for years, but just couldn’t bring myself to plunk down the money. I’d never told my mother I wanted a telescope — she just thought they’d make good presents, and sent one to me.

When I was in San Francisco, I used the telescope to look from my apartment out onto the harbor at the boats and the birds, and once seeing a shark attack a pelican, but I didn’t use it at night. I felt that people might misconstrue it’s use at night.

After I moved to Missouri, I’ve used it to look at and take photos of the moon, but this week is the first I’ve tried to use the automated features of the beasty, to faciliate my Mars viewing experience. Last night out on the back porch in 96+ F (in Celsius, “hot”) degree weather, I spent a happy hour training the telescope so that I can have it automatically find objects for me, and then track them once fixed. I viewed constellations and what might have been Uranus, lost in the heat haze and street light reflections. Unfortunately, light polution and a big tree blocked Mars, but tomorrow and Wednesday, I’ll move to more telescope friendly areas. To see Mars with my own eye, directly — what a wonder.

Thinking about people who love art but don’t necessarily love nature — I wonder if sometimes an artist isn’t more of a translator than anything else, interpreting the beauty of every day things for those who can’t see the beauty any other way. The artist is inspired to create art to inspire others who cannot be inspired by that which inspired the artist.

Who cannot be excited about seeing Mars directly, who cannot be moved by a night filled with stars or a full moon. Yet people will go into raptures about Vincent van Gogh’s masterpiece, Starry Night, and never spare a glance for a night sky unless its filled with neon and they have a martini in their hand.

Not van Gogh, though. I picture van Gogh, half mad, which is worse than being fully mad, pacing about at night because he can’t quiet the demons long enough to sleep. In one breathless, immortal moment, he lifts his head and looks out over the sleeping town below, and at the stars blazing in the heavens above on this crisp, cool night. In perfect clarity, he sees the glory of the stars, their truth, as they burned themselves into his soul and hence to his art, so that he may show those below him what they miss in their sleep and their sanity.

But I will refrain from falling into the trap of the inevitable by including the lyrics to Starry, Starry Night, though I do like the song. Besides, I know you’ve been humming it under your breath since you read the title.