![]() |
|||
|
|||
Wrapping A FOAF Document Into A Strongly Typed Class
FOAF Parsing
I've been looking deeply into FOAF lately and last week I worked on a parser that could wrap a FOAF document into a strongly typed class for easy consumption by C#.
Now I want to share it with anyone interested. It appears there are no FOAF parsers available in C# yet. I wasn't able to find any.
The parser
The class FoafParser has two public methods, Parse and ParseFriendsAsync, which handles two different approaches in fetching FOAF documents.
The Parse method
This method takes a URL as a parameter which must point to an online FOAF document. It then parses the foaf:Person element which contains fields such as name, birth date, photo, homepage etc. It then looks for people in the FOAF document that are described as someone you know, parses the information available and adds it to a public collection property. The following example parses a FOAF document and binds it to an ASP.NET Repeater.
parser.Parse(new Uri("http://example.com/foaf.xml"));
if (parser.IsParsed)
{
ltOwner.Text = parser.Owner.Name;
repFriends.DataSource = parser.Friends;
repFriends.DataBind();
}
The ParseFriendsAsync method
When you list people you know in a FOAF document, it is common to only provide very little information such as the full name. When that is the case it is also common to provide a link to that persons FOAF document using the rdfs:seeAlso tag. We can then use that link to retrieve all your friend's FOAF documents and parse them as well.
It can take a long time to retrieve all those documents one at a time, but if we do it asynchronously then we can speed things up substantially. When you have called the Parse method on the FoafParser class, you can then call ParseFriendsAsync. It loops through all the friends that the Parse method found in search for the rdfs.seeAlso tag. When it finds it, a web request is made to retrieve the FOAF document of that friend and then parse it for information.
When the ParseFriendsAsync method is finished, it triggers an event you can listen to. All the friends with FOAF documents have now been updated in the collection.
{
FoafParser parser = new FoafParser();
parser.Parse(new Uri("http://example.com/foaf.xml"));
if (parser.IsParsed)
{
parser.FriendParsingComplete += new EventHandler<EventArgs>(parser_FriendParsingComplete);
parser.ParseFriendsAsync();
}
}
void parser_FriendParsingComplete(object sender, EventArgs e)
{
// Now the Friends collection has been updated asynchronously.
FoafParser parser = (FoafParser)sender;
Response.Write(parser.Friends.Count);
}
Download
In the zip file below you'll find the FoafParser.cs class as well as an example .aspx page and code-behind file.
FoafTester.zip (3,77 kb)
BLOG TALK 
Become a WebProNews blog partner.
Rumors Of Microsoft's 15,000 Person Staff CutsAre the rumors true? Reports have emerged that Redmond based tech giant Microsoft is set to slash its global workforce, as ...
The Future Of Search Marketing In 2009
RIAA Has Facebook And MySpace Ban Project Playlist
Major Labels At Odds With Music 2.0 Companies


