About 10 years ago, it was actually possible to look people up by their e-mail address online. You could also find a persons e-mail by searching for his or her name. Back then there where a lot of e-mail directories that acted like the yellow pages but for e-mail addresses. Very handy, but when spam became a problem, no one was willing to publicise their e-mail address and the e-mail search quickly died out.

Years passed and nobody thinks seriously about searching for people by their e-mail address anymore. It was tossed out of our toolbox – abandoned and forgotten.

Then a few years ago, something wonderful started to happen with the web. Community sites, forums, blog platforms etc. stated publishing FOAF and SIOC documents. Both documents contain e-mail addresses of people but not in the traditional sense. They publish SHA1 hashed e-mail addresses.

You can hash an e-mail using the SHA1 algorithm but you can never reverse it. That means the hashed e-mail addresses are secured from spam bots, but they are also left public for all of us to search for. All you need to do is to hash an e-mail address and do a Google search with the hashed value. Try searching for my hashed e-mail address on Google or go hash your own e-mail.

Here is a quick way of using SHA1 algorithm to hash any string value in C#.

public static string CalculateSHA1(string value)


  value = value.ToLowerInvariant().Trim();

  return FormsAuthentication.HashPasswordForStoringInConfigFile(value, "sha1").ToLowerInvariant();


The limitations of the SHA1 e-mail search is that you can only find people that have an online profile or blog, participate in online discussions or comments on blogs. The number of searchable people will rise as more and more sites start supporting FOAF and SIOC.

For a long time I wanted to find a way to make it easy for .NET developers to start using the semantic web or Web 3.0. The semantic web is relatively unknown to most people and some of the technologies are very complex to understand.

Technologies or formats such as FOAF, APML, SIOC, XFN tags and microformats are some of the building blocks of the social aspects of the semantic web. They are used to create cross-site profiles of people and also represent relationships between them. XFN and microformats are somewhat easy to start using, but FOAF, APML and SIOC are a different story.


That’s why I’ve just released the first initial code for a class library called SemanticEngine.NET on CodePlex. There is still a lot of code to be written, but right now it supports various different formats ready to use.

The idea is that you build the various formats using an easy-to-understand object model and then call a method that writes the documents to the response stream or to disk in XML. The idea is also that you can consume all these formats by pointing to a document somewhere on the web, and then the library will parse it and return an object graph.


APML describes interests and is used to customize experiences online. This blog supports it natively, which makes it possible to filter all my blog posts based on the interests specified in your APML document. Check it out in the top right corner of this page.

The APML support in SemanticEngine.NET is done. You can easily generate your own documents or you can parse APML documents found on the web.


Right now you can only generate FOAF documents, but very soon I’ll add a FOAF parser as well. This is more difficult because in order to do that, I actually have to use or write a full fledged RDF parser first.


Coming soon


The XFN support in SemanticEngine.NET is almost done. At the moment you can give the XFN parser a website URL and it will then return a list of links that has the rel="me" attribute. The next version will return all the XFN attribute values such as friend, met, co-worker etc. That way you can scan a person’s social graph.


The support for microformats is yet to come and it will be in the form of a parser. My idea is to let the parser take a website URL and then parse the HTML document for all the popular microformats such as hCard, hCalendar, hReview etc.


The library is free to use and free to modify in any given way. No crediting is needed. This is because my goal is to get people to use this everywhere. The more people that use semantic formats, the more useful it becomes and the more cool experiences will be possible to create online.

If you are interested in joining the development of SemanticEngine.NET, then please let me know. I sure could use some help, since my time is a bit limited. If you want to know more about the semantic web, then you can read my Guide to the semantic web post. Did I mention that all BlogEngine.NET 1.4+ users already have APML, FOAF, SIOC, XFN and microformats supported out-of-the-box?