【问题标题】:RDF integration with C#RDF 与 C# 的集成
【发布时间】:2010-11-14 13:14:06
【问题描述】:

我正在做一个项目,我被要求进行语义搜索。该场景是一个数据库,其中包含一个包含 3 条信息的表,即医生姓名、患者姓名和就诊日期。我被要求创建一个包含 3 个字段的表单:医生、患者和日期。因此,当用户想要搜索患者的相应医生或相应患者的医生或他们的日期时,他们只需输入任何字段即可从数据库中检索信息。我使用正则表达式在 C# 中完成了用于字符串操作和信息检索的编码。但主要任务是搜索应该使用 RDF 和 URI。

现在我已经完成了大部分编码工作,有人可以帮助我如何使用 RDF 和 URI 创建搜索,是否有任何解决方案,如何将 RDF 集成到 C# 中,是否有任何文档。

但是根据我的主管的要求,他要求我建立一个适用于 RDF 的搜索,我的意思是患者的详细信息(例如患者姓名)、医生姓名和日期将采用 URI 的形式,该 URI 可以定位患者的详细信息数据库中的患者、医生和日期信息,因此如果有人试图搜索任何信息,例如医生或患者,只需在相应字段中输入他们的姓名并检索信息。我附上我的代码的 2 个快照以供您理解。

图片 1:http://img29.imageshack.us/i/15035706.jpg
图二:http://img31.imageshack.us/img31/1117/86105845.jpg

第一张图片是我将所有详细信息输入数据库的地方,第二张图片是搜索。

这是我项目的总体思路,您能告诉我如何做到这一点吗?

如果有人能尽快帮助我,我将不胜感激。

【问题讨论】:

    标签: c# uri rdf semantics semantic-web


    【解决方案1】:

    进行基于 RDF 和 URI 的搜索将首先取决于您的数据是否在 RDF 中。如果不是,您必须即时或永久地将其从当前形式转换为 RDF。要即时执行此操作,您可以使用 D2R 之类的技术,将关系数据库映射到 RDF http://www4.wiwiss.fu-berlin.de/bizer/d2r-server/

    还有一些其他语义 Web C# 的东西,比如 Rowlex http://rowlex.nc3a.nato.int/,它更基于 OWL,或者有我自己的 dotNetRDF 库 http://www.dotnetrdf.org,但这只是即将成为第一个 Alpha 版本,所以我不会向任何人推荐它生产系统呢。 Alex 提到的 SemWeb 非常好,而且扩展性特别好——唯一的缺点是它是 .Net 2.0,所以如果你想用它做 LINQ,你需要一个单独的库

    关于您的问题的问题...

    您的问题不清楚您所说的语义搜索是什么意思,您确定您实际上是要进行 RDF 搜索,还是有人只是在规范中指定了“语义搜索”并且您在 Google 上搜索并获得了有关 RDF 的文章?语义搜索并不一定意味着需要 RDF,它可能是您实际上想要进行自然语言搜索。

    我的意思是,您可能希望能够搜索“Smith 医生的患者”之类的内容,并且您的搜索引擎应该能够将其解释为搜索医生字段对应于 Dr 的患者史密斯。

    同样,我可能是错的,您确实可能正在尝试构建一些听起来很像 TimBL 2001 年在语义网上的《科学美国人》文章中的示例。

    编辑

    因此,当您确实想要进行正确的 RDF 搜索时,我建议您将数据放入三重存储而不是数据库,并且最好使用提供 SPARQL 查询的三重存储,以便您可以转换查询表单上的输入进入 SPARQL 查询并使用它查询 Triple 存储。

    不妨看看 Talis http://www.talis.com 或 Virtuoso http://www.openlinksw.com/virtuoso/

    如果您决定使用 SemWeb,那么您可以使用它提供的 Triple Store。

    【讨论】:

      【解决方案2】:

      您可以使用LinqToRdf 做您需要的事情。 LinqToRdf 公开了两个 LINQ 查询提供程序(即您将需要 .NET 3.5+),其中一个提供符合标准的 SPARQL 查询。

      这是一个典型的 LinqToRdf 查询,如果您熟悉 LINQ to SQL,应该很自然:

      MusicDataContext ctx = new MusicDataContext(@"http://localhost/linqtordf/SparqlQuery.aspx");
      var q = (from t in ctx.Tracks
           where t.Year == "2006" &&
                 t.GenreName == "History 5 | Fall 2006 | UC Berkeley"
           orderby t.FileLocation
           select new {t.Title, t.FileLocation}).Skip(10).Take(5);
      
      foreach (var track in q)
      {
         Console.WriteLine(track.Title + ": " + track.FileLocation);
      } 
      

      【讨论】:

        【解决方案3】:

        我建议您尝试 RDFSharp (http://rdfsharp.codeplex.com/),因为据我从您的问题中了解到,您可能需要快速设置一个能够执行基本三元组搜索的 RDF 应用程序,例如SUBJECT="xxx";PREDICATE=NULL;OBJECT="yyy"。
        随意尝试,当然还有更强大的工具,但对于您的场景,我相信它是最简单的应用。

        【讨论】:

        • 欢迎来到 Stack Overflow!感谢您发布您的答案!请务必仔细阅读FAQ on Self-Promotion。另请注意,每次链接到自己的网站/产品时,都要求发布免责声明。
        【解决方案4】:

        在您描述的场景中使用语义网络技术是多余的。但是,如果您对在 .NET 和 SQL 中使用语义 Web 标准的成熟 .NET 库感兴趣,请务必查看Intellidimension's offerings

        【讨论】:

        • 每台 PC 的许可证 1500 美元或仅用于 SDK 的企业许可证 5000 美元,这在您考虑到他们的 Triple 商店的成本之前,似乎价格过高。我同意你的观点,在这种情况下使用 SW 技术似乎有点矫枉过正
        • RobV,SQL 是什么 20k 企业许可证?我不认为当您在处理业务应用程序(他们的目标市场)时价格是一个问题。如果你只是在做一个爱好项目,那么……是的,它有点贵:)
        • 根据我的经验,Intellidimension 将根据具体情况为教育和研究相关项目发放免费许可。
        • 这两点都很好,我在一所大学工作,所以几乎所有我们拥有微软许可的东西,所以我个人从来没有真正意识到成本
        【解决方案5】:

        用于 RDF 的 C# 库似乎在 LinqToRDF 社区中变得非常流行。该项目由 Andrew Matthews 发起,我认为自 2007b 以来一直在进行。该软件已在 Google COde 上运行,可在此处找到:

        LinkToRDF

        除了库之外,还有一个叫做“LinqToRDF 设计器”的东西,它适合 Visual Studio 并允许您以图形方式对 RDF 建模。

        【讨论】:

          猜你喜欢
          • 2015-01-04
          • 1970-01-01
          • 2020-01-25
          • 2016-07-20
          • 2013-09-03
          • 2012-02-21
          • 2012-06-17
          • 1970-01-01
          • 2010-12-21
          相关资源
          最近更新 更多