public Graph GenerateResourceGraph()
{
var nodeIds = _nodeRepository.GetAllIds();
var g = new Graph { BaseUri = new Uri(Configuration.Configuration.ResourceNamespace) };
g.NamespaceMap.AddNamespace("owl", new Uri("http://www.w3.org/2002/07/owl#"));
g.NamespaceMap.AddNamespace("xsd", new Uri("http://www.w3.org/2001/XMLSchema#"));
g.NamespaceMap.AddNamespace("dc", new Uri("http://purl.org/dc/elements/1.1/"));
foreach (var nodeId in nodeIds)
{
if (!_nodeRepository.IsInPublishedHierarchy(nodeId, UmbracoSQLHelper.Get()))
continue;
var node = GenerateNode(nodeId);
Helper.AddTripleResource(g, node.Iri, Constants.RdfType, node.DocumentTypeIri);
Helper.AddTripleResource(g, node.Iri, Constants.RdfType, Constants.OwlNamedIndividual);
// The CMS date does not get entered properly, possibly because the generation runs in a thread..
// Helper.AddTripleLiteral(g, node.Iri, Constants.DcDate, node.UpdateDate.ToString(CultureInfo.InvariantCulture), "Date");
if (!string.IsNullOrEmpty(node.ParentIri))
{
Helper.AddTripleResource(g, node.Iri, Constants.HasParentIri, node.ParentIri);
Helper.AddTripleResource(g, node.ParentIri, Constants.HasChildIri, node.Iri);
}
if (!string.IsNullOrEmpty(node.Url))
{
Helper.AddTripleLiteral(g, node.Iri, Constants.HasUrlIri, node.Url, "Url");
Helper.AddTripleLiteral(g, node.Iri, Constants.DcSource, node.Url, "Url");
}
foreach (var prop in node.Properties)
{
if (prop.PropertyType.DataTypeName.ToLower() == "tags")
{
var tags = prop.Value.Split(',');
foreach(var tag in tags)
{
if (tag.ToLower().StartsWith("http://"))
{
Helper.AddTripleResource(g, node.Iri, prop.PropertyType.Iri, tag);
}
else
{
Helper.AddTripleLiteral(g, node.Iri, prop.PropertyType.Iri, tag, prop.PropertyType.DatabaseType);
}
}
}
else
{
Helper.AddTripleLiteral(g, node.Iri, prop.PropertyType.Iri, prop.Value, prop.PropertyType.DatabaseType);
foreach (var equivalentIri in prop.PropertyType.EquivalentIris)
{
Helper.AddTripleLiteral(g, node.Iri, equivalentIri, prop.Value, prop.PropertyType.DatabaseType);
}
}
}
foreach (var imageUri in node.ImageUris)
{
Helper.AddTripleLiteral(g, node.Iri, Constants.ContainsImageIri, imageUri, "Url");
}
foreach (var linkUri in node.LinkUris)
{
Helper.AddTripleLiteral(g, node.Iri, Constants.LinksToIri, linkUri, "Url");
}
}
return g;
}