你会如何在RDF中模拟这个简单的语句?

问题描述 投票:1回答:2

我正在学习语义网,我试图围绕三元组的想法。据我所知,RDF是一种数据建模方法。它表示数据如何通过Web构建或相互连接。

RDF使用三元组来表示主题 - 谓词 - 对象的顺序的数据结构。每个实际数据项都取自它的URI。 URI匹配不同服务器上的数据。建模RDF中URI的快捷方式是使用Turtle格式,即qnames(<namespaces>: <identifier>)+ triples。

考虑到这一点,我们有声明:

David讲授2017-18的算法课程。

第一个问题,这个陈述来自何处,或者语义网境中的陈述是什么?

第二个问题,你将如何在RDF中对此进行建模?我看到它的方式,我们首先确定三重奏。

主题是大卫。 谓词是Lectures。 对象是算法。 什么是2017-18?

rdf semantic-web
2个回答
1
投票

RDF语句是根据RDF标准指定的表单进行的话语记录,其中至少对象和谓词是URI。阅读更多关于RDF语句here的信息。对于“David在2017-18-18讲授算法课程”的陈述,您需要“David”,“讲座”和“算法课程”的标识符。您可以将David视为ex:David,但为了实际实现,应该避免这种情况,因为“David”只是描述资源的众多属性之一。此外,当瞄准URI的持久性时,助记符URI虽然更容易让人们使用。例如,应该避免使用用英语组织的首字母缩写词来识别组织的URI,因为首字母缩写词可能会改变,而其他语句仍然有效。考虑到这一点,让我们说我们有ex:s1ex:p11ex:o1来确定声明的前三部分。然后我们必须制作一些RDF语句来正式制作所需的语句并遵循一个良好的实践。

ex:s1
  ex:p11 ex:o1 ;
  foaf:firstName "David" ;
ex:o1 rdfs:label "The Algorithms Course" .
ex:p1 rdfs:label "lectures" .

有了这个,我们说大卫讲这个特别的东西。属性ex:p11通常来自本体论,其中会有更多关于它的陈述,例如,它是一个对象属性,它是某种类型的活动等等。由于机器不知道ex:o1是什么类型的东西,它还需要作为课程,以及一种类型的课程或个人(在我看来通常被称为“实例”,但在我看来是错误的)。

那么对于这个特定的课程,我们需要说:

ex:o1
  ex:hasPeriodEnd "2018"^^xsd:gYear ;
  ex:hasPeriodStart "2017"^^xsd:gYear .

或者,我们可以reify the statement ex:s1 ex:p11 ex:o1(换句话说,就此声明发表另一个声明):

    [
      rdf:type rdf:Statement ;
      ex:hasPeriodEnd "2018"^^xsd:gYear ;
      ex:hasPeriodStart "2017"^^xsd:gYear ;
      rdf:object ex:o1 ;
      rdf:predicate ex:p11 ;
      rdf:subject ex:s1 ;
    ].

根据意图和背景,还有其他方法可以做出第二个陈述。例如:

ex:o1
      a ex:course1;
      ex:hasPeriodEnd "2018"^^xsd:gYear ;
      ex:hasPeriodStart "2017"^^xsd:gYear .
ex:course1 
      rdfs:subClassOf ex:course;
      rdfs:label "The Algorithms Course".
ex:course rdfs:label  "Course".

这是使用的前缀的规范:

@prefix ex: <http://example.org/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> 

1
投票

第一个问题,这个陈述来自哪里[?]

你提到的具体陈述可能来自大学的教学大纲。真的有关系吗?当你自己教授关系数据库时,你不会问自己数据的来源,对吗?

或者在语义网的上下文中是什么声明?

如果你的意思是“什么是RDF声明”,那么答案就在Section 1.2 of RDF 1.1 Concepts and Abstract Syntax中给出。确切地说,它说:

断言RDF triple说,由predicate表示的某种关系在resourcesdenoted之间保持在subject object之间。对应于RDF三元组的此语句称为RDF语句。

所以RDF三元组是可以写入和读取的,或通过线路传输的,RDF语句是三元组表达的,或者它意味着什么。

第二个问题,你将如何在RDF中对此进行建模?我看到它的方式,我们首先确定三重奏。

在建模关系模式,UML或任何建模语言时,有多种表示相同知识的方法。 Ivo Velitchkov正在给a viable option

就我而言,我不建议使用RDF具体化(即,使用rdf:Statementrdf:subjectrdf:predicaterdf:object的技术,如Ivo的答案)。相反,我会将课程建模为一段时间内发生的事情,这将使2017-18赛季的算法课程与2016-17赛季的算法课程不同。算法课程作为一个整体将是一个课程系列。

此外,“大卫讲授算法课程”的意思并不完全清楚。这是否意味着他在本课程中进行了一些讲座,或者这是否意味着他在本课程中提供了所有讲座?他是负责该课程的教授,而几位讲师也可以教它吗?

您可以使用以下模型:

:algo  a  c:CourseSeries;
    rdfs:label  "The Algorithms Course"@en;
    p:hasEdition
       :algo-2016-2017,
       :algo-2017-2018 .
:algo-2017-2018  a  c:Course;
    rdfs:label  "The Algorithms Course, 2017 edition"@en;
    p:responsible  :David;
    p:startingDate  "2017-11-23"^^xsd:date;
    p:endingDate  "2018-02-10"^xsd:date;
    p:hasSession
       :algo-2017-2018-s1,
       :algo-2017-2018-s2,
       :algo-2017-2018-s3,
       :algo-2017-2018-s4,
       :algo-2017-2018-s5 .
:algo-2017-2018-s1  a  c:Lecture;
    rdfs:label  "Sorting algorithms"@en;
    p:taughtBy  :David;
    p:location  :room42;
    p:starts  "2017-11-23T08:30:00Z"^xsd:dateTime;
    p:starts  "2017-11-23T11:30:00Z"^xsd:dateTime .
:algo-2017-2018-s1  a  c:Lecture;
    rdfs:label  "Search algorithms"@en;
    p:taughtBy  :Tom;
    p:location  :room123;
    p:starts  "2017-12-07T08:30:00Z"^xsd:dateTime;
    p:starts  "2017-12-07T11:30:00Z"^xsd:dateTime .
  ... # etc.
© www.soinside.com 2019 - 2024. All rights reserved.