Одним из важнейших нововведений SharePoint 2010 является появление службы Управляемых Метаданных (Managed Metadata Services). В 2007 версии SharePoint, работа по имитации метаданных осуществлялась двумя способами:
С приходом SharePoint 2010 все существующие проблемы и ограничения связанные с управлением метаданными были сняты, однако появилась потребность в глубоком осознании и понимании концепции новой службы. Прежде всего, нужно дать понятие новой терминологии:
TermStore (хранилище) – верхний уровень таксономии, который является уникальным для каждого экземпляра службы для конкретного веб-приложения. Хранилище содержит все ключевые слова экземпляра службы и может содержать до 1000 групп и до 1000000 терминов.
TermGroup (группа) – коллекция наборов терминов и слов или фраз, которые могут быть как управляемыми, так и неуправляемыми. Новая группа создаётся для каждой коллекции узлов, созданной в рамках веб-приложения, с которым ассоциирован данный экземпляр службы управляемых данных.
TermSet (набор терминов) – коллекция терминов, которые являются единицей управления терминами. Каждый набор может содержать до 30000 терминов.
Term (темин: слово или фраза) – атомарная единица таксономии, которая представляет собой слово или фразу описывающую конкретный вариант из наборов терминов.
Тэггирование (Tagging) – процесс создания неструктурированных ключевых слов или терминов и присваивание их различным видам информации. Тэггирование обеспечивает более удобный способ разработки метаданных, позволяя пользователям присваивать тэги интересующей их информации, чтобы облегчит работу в дальнейшем.
Важнейшие возможности службы управляемых метаданных:
Рис.1. Файл метаданных для импорта
Как только импорт завершится, можно будет увидеть все ваши метаданные, организованные в соответствующие наборы терминов, рисунок 2.
Рис.2. Результат импорта метаданных
Важным преимуществом является то, что при импорте MMS, будут пропущены все повторяющиеся термины, что облегчает работу.
Такая навигация позволит совместить представление иерархии метаданных и возможности поиска для комбинации значений метаданных, рисунок 3.
Рис.3. Комбинированная навигация по иерархии метаданных
Ниже приведён список средств, которые SharePoint 2010 предоставляет для работы с терминами:
Рис.4. Типы данных столбцов списка
Рис.5. Страница управления метаданными
Рис.6. Отображение средств фильтрации в списках
Рис.7. Веб-часть «Облако тэгов»
Для того чтобы программно генерировать иерархии терминов необходимо подключить следующие сборки, которые размещены в одноименной папке C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI:
Ниже приведённый код позволит нам создать новое хранилище данных и наполнить его группами терминов с наборами терминов:
using (SPSite site = new SPSite("http://localhost"))
Допишем к предыдущему примеру следующий код для создания столбца управляемых метаданных:
{
TaxonomySession tSession = new TaxonomySession(site);
string metadataServiceName = "Служба управляемых метаданных";
TermStore termStore = tSession.TermStores[metadataServiceName];
string groupName = "Intranet portal";
Group termGroup = null;
try
{
termGroup = termStore.Groups[groupName];
}
catch (ArgumentOutOfRangeException)
{
termGroup = termStore.CreateGroup(groupName);
}
string termSetName = "News";
TermSet termSet = null;
try
{
termSet = termGroup.TermSets[termSetName];
}
catch (ArgumentOutOfRangeException)
{
termSet = termGroup.CreateTermSet(termSetName);
}
string cityTermName = "Cities";
Term city = null;
try
{
city = termSet.Terms[cityTermName];
}
catch
{
city = termSet.CreateTerm(cityTermName, 1049);
}
TryCreateTerm(city, "Voronezh");
TryCreateTerm(city, "Taganrog");
TryCreateTerm(city, "Chelyabinsk");
termSet.IsAvailableForTagging = true;
termSet.IsOpenForTermCreation = true;
termStore.CommitAll();
}
private Term TryCreateTerm(Term parent, string name)
{
Term term = null;
try
{
term = parent.Terms[name];
}
catch (ArgumentOutOfRangeException)
{
term = parent.CreateTerm(name, 1049);
}
return term;
}
TaxonomyField tagsField = (TaxonomyField)list.Fields.CreateNewField(
Необходимо отметить следующее:
“TaxonomyFieldTypeMulti”, “Tags”);
tagsField.AllowMultipleValues = true;
tagsField.SspId = termStore.Id;
tagsField.TermSetId = termSet.Id;
tagsField.Open = true;
list.Fields.Add(tagsField);