private void WriteFoaf(HttpContext context, string name)
{
// begin FOAF
var writer = GetWriter(context.Response.OutputStream);
// write DOCUMENT
writer.WriteStartElement("foaf", "PersonalProfileDocument", null);
writer.WriteAttributeString("rdf", "about", null, string.Empty);
writer.WriteStartElement("foaf", "maker", null);
writer.WriteAttributeString("rdf", "resource", null, "#me");
writer.WriteEndElement(); // foaf:maker
writer.WriteStartElement("foaf", "primaryTopic", null);
writer.WriteAttributeString("rdf", "resource", null, "#me");
writer.WriteEndElement(); // foaf:primaryTopic
writer.WriteEndElement(); // foaf:PersonalProfileDocument
// get main person's data
var ap = AuthorProfile.GetProfile(name);
if (!ap.Private)
{
// main author object
var me = new FoafPerson("#me", ap) { Friends = new List<FoafPerson>() };
// TODO: this really should be it's own data store
// assume all other authors are friends
foreach (var user in
Membership.GetAllUsers().Cast<MembershipUser>().Where(
user => !user.UserName.Equals(name, StringComparison.OrdinalIgnoreCase)))
{
var friend = AuthorProfile.GetProfile(user.UserName);
if (friend == null)
{
continue;
}
me.Friends.Add(new FoafPerson("#" + user.UserName, friend));
}
// assume blog roll = friends
foreach (var br in BlogRollItem.BlogRolls)
{
var title = br.Title;
var url = br.BlogUrl.ToString();
var foaf = new FoafPerson(title) { Name = title, Blog = url };
if (Blog.CurrentInstance.Cache[string.Format("foaf:{0}", title)] == null)
{
var docs = Utils.FindSemanticDocuments(new Uri(url), "foaf");
if (docs.Count > 0)
{
foreach (var key in docs.Keys)
{
Blog.CurrentInstance.Cache.Insert(string.Format("foaf:{0}", title), key.ToString());
break;
}
}
else
{
Blog.CurrentInstance.Cache.Insert(string.Format("foaf:{0}", title), "0");
}
}
var seeAlso = (string)Blog.CurrentInstance.Cache[string.Format("foaf:{0}", title)];
if (seeAlso != null && seeAlso.Contains("://"))
{
foaf.Rdf = seeAlso;
}
me.Friends.Add(foaf);
}
// begin writing FOAF Persons
this.WriteFoafPerson(writer, me);
}
CloseWriter(writer);
}