Поиск по сайту

Login Form



Главная Инструменты Менеджер MP3 файлов на основе RDF и C# - Часть 3
Менеджер MP3 файлов на основе RDF и C# - Часть 3 PDF Печать E-mail
Рейтинг пользователей: / 0
ХудшийЛучший 
Автор: Эндрю Мэттьюс   
11.04.2008 13:31

Эндрю Мэттьюс
Оригинал: Using RDF and C# to create an MP3 Manager - Part 3

Прошлый раз я кратко показал, как вы можете выполнить следующий шаг на пути превращения RDF хранилища в ORM систему. Цель всей этой деятельности, и причина, по которой я перестал писать статьи в моем блоге о LINQ, была в том, что я работаю над системой, которая позволит мне использовать LINQ совместно с RDF хранилищем и механизмом логического вывода. Достоинство этой системы заключается в том, что мы сможем одновременно воспользоваться как преимуществами современного реляционного мира, так и всей мощью нового мира семантического веба. В этой статье я собираюсь кратко описать шаги, необходимые для того, чтобы начать работу над "LINQ для RDF" (так я назвал этот проект в силу отсутствия воображения).

Я всегда использую разработку, управляемую тестами, поэтому я уже могу показать вам несколько 'сводных' модульных тестов:

 
[TestMethod]
public void Query()
{
    string urlToRemoteSparqlEndpoint = "http://localhost/MyMusicService/SparqlQuery.ashx";
    RdfContext<Track> ctx = new RdfSparqlContext<Track>(urlToRemoteSparqlEndpoint);
    var titles = from t in ctx
        where t.Year > 1998 &&
        t.GenreName == "Ambient Techno" ||
        t.GenreName == "Chillout"
        select t.Title;
    foreach(string title in titles)
        Console.WriteLine(title);
}
 

Говоря простым языком, это означает, что прежде чем манипулировать локальным RDF хранилищем, я хочу, чтобы RdfSparqlContext сформировал SPARQL запрос и переслал его точке доступа расположенной по адресу, указанному в urlToRemoteSparqlEndpoint. Затем я хочу, чтобы он десериализовал полученные результаты и сохранил в объектах title. Это будет замечательной смесью новых возможностей .NET 3.5, и функциональности, которую я разработал для десериализации объектов.

В примере выше меня больше занимают аспекты запросов LINQ (как универсального языка запросов), но это не слишком полезно для меня, с точки зрения разработки в рамках транзакционного веба, которой я занимаюсь последнее время, так что нам необходима полная поддержка операций CRUD в нашей системе. Далее вы можете видеть модульный тест для обновления объекта.

 
[TestMethod]
public void Update()
{
    string urlToRemoteSparqlEndpoint = @”http://localhost/MyMusicService/SparqlQuery.ashx”;
    RdfContext<Track> ctx = new RdfSparqlContext<Track>(urlToRemoteSparqlEndpoint);
    var q = from t in ctx
        where t.Year > 1998 &&
        t.GenreName == “Ambient Techno” ||
        t.GenreName == “Chillout”
        select t;
    foreach (Track t in q)
        t.Rating = 5;
    ctx.AcceptChanges();
}
 

Здесь я получаю пачку объектов из хранилища, изменяю их свойство “Rating”, и затем сохраняю изменения. Я следую стилю, принятому в LINQ для SQL.

В конечном счете, я намереваюсь удовлетворить эти модульные тесты (плюс другие тесты для остальных операций CRUD, для поддержки N3, хранилищ в памяти, и в реляционных базах данных). Вот общая схема для реализации запросов с использованием LINQ. Она предполагает, что структуры данных RDF берутся из библиотеки SemWeb без изменений.

  • Создать объект Query (Я думаю это будет наш класс RdfContext описанный выше)
  • Реализовать IQueryable для него
  • Когда запрашивается энумератор, преобразовать сохраненное дерево выражения в целевой язык
  • Переслать его в хранилище или в точку доступа SPARQL
  • Десериализовать результаты в объекты
  • Выдать результат (возможно по мере десериализации)

Это очень грубый набросок предстоящих задач. Я буду объяснять значительно более детально в последующих статьях, по мере того, как я буду продвигаться.

Перевод: Михаил Навернюк
Обновлено 16.04.2008 12:26
 
 
 
© 2010 Semantictools.ru. Все права защищены.
Joomla! — свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Design by augs-burg.de & go-vista.de
 
 
     
 
   
Design by windows vista forum and energiesparlampen