This presentation provides a technical overview of the TMCore EPiServer Module.
In this first section we’ll define the problems that site designers encounter when designing sites within EPiServer.
A good navigation model for a site is critical to the success of a site. It doesn’t matter how great the information on the site is, if users cannot find it then it’s as if it doesn’t exist. Many sites organize their content with respect to the editors convenience, security or random organization; forgetting that it’s the users who are the most important.Broken links are the bane of any site. There’s several programs out there that will crawl sites and report back broken links; however the truth is that these links should never have been there in the first place.When a new piece of content is published on a site, there are most likely going to be related bits of content that it makes sense to link to. Currently, editors have to be aware of the rest of the content on the site and manually create new links from the old content to the new. This, of course, involves publishing new versions of the old content, when it has in fact, not changed.Finally, manual classification solutions require the editor to use a separate application to classify content against a schema. These systems typically fail in practice because Editors are either unwilling or forget to use the third party systems for classification. If it isn’t obvious, they won’t use it…… unless you have a very big stick.
The first part of this presentation explains the concepts of topic maps and how they are used to map on to real-world information.
The concept of attributing metadata to content, or tagging, has been around for many years.A simple example is the film “La Dolce Vita”, directed by Federico Fellini. Shown on the slide is how “La Dolce Vita” may be tagged with the “Federico Fellini”.Similarly we may tag another film “The Magic of Fellini” with the same tag. That way when a user views the page about Federico Fellini, it may tell them “the following items are tagged with Federico Fellini: La Dolce Vita, and The Magic of Fellini.”This is useful, but limited. Any reader that is a fan of film will know that “The Magic of Fellini” was not directed by Fellini, but was a biographical work. It was directed by Carmen Piccini.Now “The Magic of Fellini” has two tags: Federico Fellini and Carmen Piccini. However, what is missing is why or how items of content have been tagged in the way they have.This is where topic maps are useful. Instead of tagging content directly, we create topics for each of the content and the tags.
The slide shows how topics that represent both our content and our concepts. Connecting topics are semantically rich relationships that reveal the type of content or concept we are looking at as well as the types of relationships each topic has to other content and concepts.We can now say that: “La Dolce Vita” was directed by “Federico Fellini” “The Magic of Fellini” was directed by “Carmen Piccini” “The Magic of Fellini” is about “Federico Fellini”There is one more piece to add to this: bi-directionality, or more prosaically the concept of “only say it once.” All semantic relationships apply in both directions. If I say that “La Dolce Vita” was directed by “Federico Fellini”, I am also in effect saying “Frederico Fellini” directed “La Dolce Vita”. This may seem incredibly trivial but the web as it exists today is based on links that jump in one direction only. Just because I link to a page on another website, doesn’t mean that that website has a link back to my page – and so it is with tags. The usefulness of this concept is being realized in a very minor way through the concept of trackbacks on blogging entries.With the ability to examine a semantically rich relationship and know what kind of relationship it is and be able to traverse it in either direction, we know have the ability to hop around the network of concepts and content finding all kinds of related information. This proves to be of enormous value for organisations seeking to present a lot of information:Firstly a network of semantic relationships means that you can build a site that makes no supposition about where a user starts from, but can still guide them over a network of well-defined relationship links to the right kind of content.Secondly an editor can focus on simply describing the relationships between the content piece they are adding and the concepts that exist in the domain model. The semantic relationships can then be used to ensure that the content appears in the right places on the site and that “See also” links are automatically updated to take account of this new piece of content.
Associations between topics in topic maps are controlled by a schema, which is itself composed of topics with associations.Each association consists of one or more roles (typically associations are binary, that is there are two roles). Each role has constraints that define:The type of topics that can play the role, e.g. topics of type Person can play the role of Skilled Person.A topic that “defines” the role. For example a topic of type Person plays the role of Skilled Person.Multiple topic types can play a role, there is also the concept of topic type inheritance to allow multiple types of topic to play a particular role.
Topic Maps take an object oriented approach to schema organization.Topics may be designated as being able to type other topics (this is done by making the topic an instance of the “topic type” topic).Topic types may subclass each other as shown in the example above. The inheritance relationships are modelled simply using associations between the topics which are then interpreted by topic map engines and the EPiServer Module.The schema topics (topics that denote topic type, association type, role type and so on) are defined by the Networked Planet Constraint Language (NPCL), which expresses these schema constructs entirely in terms of topic maps themselves. In the final stages of ratification is Topic Map Constraint Language (TMCL) which is largely based on NPCL. Graham Moore, one of the founders of Networked Planet is the editor of the TMCL specification.
The usefulness of subclasses becomes obvious when considering that constraints places upon topics are also inherited.This means that the recoding of almost identical association constraints is not required between subclasses.
For each page type in EPiServer, the administrator configures the type of topic that should be created for each page type. When the page is created in EPiServer, the CreatedPage event in EPiServer causes a topic to be created of the correct type.
Pages are associated together by creating associations between the topics representing the pages.It is important to note that associations may be created between any topics, not just those that represent pages. This allows editors to classify their content against topics such as:Predefined taxonomies (e.g. Government classifications).Topics representing pages in other EPiServer sites.Topics representing pages in 3rd party software, such as SharePoint items.Purely conceptual topics representing useful tags or classifications for the business.
Many of the constructs in Topic Maps can be scoped.Scoping topics are used to annotate names, occurrences and associations to apply a context.The TMCore EPiServer module uses scopes on associations to indicate three types of association:An association made by an editor that has not been published - UNPUBLISHED scope.An association that has been deleted by an editor, but has not been published – DELETED scope.An association that is published – no scope.This was editors can work within the traditional EPiServer model of “until I publish, it is not visible to the end user.”
As described in the problem statement, editors will tire quickly of any manual classification mechanism that isn’t intuitive and easy to use. Creating a separate application, or using an existing application for editing the topic map, such as TMCore, is simply not acceptable.
To address these requirements, the TMCore EPiServer Module provides a plug-in for the EPiServer Edit Mode application.It appears as a new tab within Edit Mode, only shown for pages which have topic representation.
The content classification interface is totally data-driven from the topic map, making it easy to add new association types to topics providing a totally flexible system.
An API is no good unless it is simple. The module provides utility classes which make it extremely easy to bind data to the existing repeater-style controls in ASP.NET, as well as develop your own controls.
Problem Statement<br />Navigation Issues<br />Where am I?<br />Where can I go?<br />Absent and Broken Links<br />Taking old pages down<br />Putting new pages up<br />Content Change Rippling<br />The effect of changing content<br />Seamless Editing Environments<br />Getting classification done<br />
Navigation<br />Users have a mental model of the information architecture.<br />The model will differ from user to user.<br />Need to avoid strict hierarchy navigation<br />Provide links to related content via useful semantics<br />Group related content<br />Simplify the authoring process<br />No more hand crafting thousands of manual links<br />Improving link management<br />No more broken links<br />Relevant content automatically added to pages<br />
Content Integration<br />Topic Maps act as a knowledge hub that integrate heterogeneous content to present a unified view.<br />Address specific use-cases:<br />How do I show content from two EPiServer instances?<br />How do I provide links to content from one server to that in another?<br />How can I integrate stock quotes, or content from the archive system in to my site?<br />
Augmented Search<br />Semantic search by topic and not by full text<br />Group search results by their topic classification<br />Provide Google Suggest-like topic search<br />Perform facet classification and search<br />
Pages & Topics<br />For every page in EPiServer there can exist a topic…<br />Topic Type: Person<br />Page Type : Person<br />Page: Graham Moore<br />Topic: Graham Moore<br />
Associating Pages<br />Topics are connected together to form a graph of interrelated concepts<br />All connections are two way and typed<br />Graham Moore<br />C#<br />Java<br />Has skill<br />Has skill<br />
Graham Moore<br />C#<br />Has skill<br />Has skill<br />Scoping Associations<br />Associations are scoped so that associations are only visible after publication<br />Java<br />UNPUBLISHED<br />Editor View<br />User View<br />C#<br />Java<br />C#<br />
Editor Support<br />There are many ways to achieve topic map integration but those that are successful attend to the processand userneedsas much as the technology.<br />As well as the controls themselves there is the opportunity to build additional editorial controls that use topic maps as a way for editors to better organise the content they work with.<br />
Classification of Content<br />Seamless integration with EPiServer Edit Mode<br />Dynamically generated UI from topic map schema.<br />AJAX driven responsive and performant.<br />Intuitive and clear.<br />
Classification of Content<br />Schema-driven editor provides the editor only with valid choices.<br />Information about linked, or potentially linked topics on screen.<br />
Development Aids - Overview<br />Simple to use API<br />Usable from all CLR languages<br />Web Services based<br />Many examples (demo site is open source)<br />ASP.NET Compatibility<br />Data bound controls (Repeater, DataList and DataSet)<br />Faceted Search & Tag Cloud Web Parts<br />Provides hooks for pre- and post- processing of editorial options.<br />Apply extra filters or bespoke queries.<br />
Development Aids – Simple API<br />Set up a simple ASP.NET Repeater control:<br /><asp:repeaterrunat="server" id="OrgUnitLedRepeater"><br /> <separatortemplate>, </separatortemplate><br /> <itemtemplate><br /> <a href='<%# DataBinder.Eval(Container.DataItem, "pageLinkURL") %>'><br /> <%#DataBinder.Eval(Container.DataItem, "pageName") %></a><br /> </itemtemplate><br /></asp:repeater><br /><ul><li>Use the API to bind all the related topics to the control:
According to association type and role played</li></ul>BindOneHopToRepeater(<br />this.OrgUnitLedRepeater,<br /> "http://example.org/association/personLeadsUnit",<br /> "http://example.org/role/leader"); <br />