您将如何在RDF中为这个简单语句建模?

您将如何在RDF中为这个简单语句建模?,rdf,semantic-web,Rdf,Semantic Web,我正在学习语义网,我正试着把我的头脑围绕在三元组的概念上。据我所知,RDF是一种数据建模方法。它表示数据是如何在web上结构化或相互连接的 RDF使用三元组以主谓宾顺序表示数据结构。每个实际数据项都是从它的URI中获取的。URI匹配不同服务器上的数据。建模RDF中URI的快捷方式是使用Turtle格式,即qnames(:)+三元组 考虑到这一点,我们有以下声明: [ rdf:type rdf:Statement ; ex:hasPeriodEnd "2018"^^

我正在学习语义网,我正试着把我的头脑围绕在三元组的概念上。据我所知,RDF是一种数据建模方法。它表示数据是如何在web上结构化或相互连接的

RDF使用三元组以主谓宾顺序表示数据结构。每个实际数据项都是从它的URI中获取的。URI匹配不同服务器上的数据。建模RDF中URI的快捷方式是使用Turtle格式,即qnames(
)+三元组

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

    [
      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 ;
    ].
David在2017-2018年讲授算法课程

第一个问题,这个语句来自哪里,或者在语义网的上下文中,什么是语句

第二个问题,您将如何在RDF中对此进行建模?在我看来,我们首先要确定三元组

主题是大卫。
谓词是讲座。
目标是算法。

什么是2017-18?

RDF语句是按照RDF标准规定的形式进行的话语记录,其中至少主语和谓语是URI。阅读更多关于RDF语句的信息。对于“2017-18年David教授算法课程”的声明,您需要“David”、“讲师”和“算法课程”的标识符。对于练习,您可以将David标识为
ex:David
,但对于真正的实现,应该避免这样做,因为“David”只是描述资源的众多属性之一。此外,助记符URI虽然更易于使用,但在实现URI的持久性时并不可取。例如,应避免使用组织英文首字母缩略词使用URI标识组织,因为首字母缩略词可能会发生变化,而其他语句仍然有效。考虑到这一点,假设我们有
ex:s1
ex:p11
ex: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 .
或者,我们可以
ex:s1 ex:p11 ex:o1
(换言之,我们可以就这句话做另一个陈述):

根据意图和上下文,还有其他方法来表达第二种说法。例如:

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#> 
@前缀ex:。
@前缀foaf:。
@前缀rdf:。
@前缀rdfs:。
@前缀xsd:
第一个问题,这句话从何而来

你提到的特定陈述可能来自大学的教学大纲。这真的重要吗?当您自学关系数据库时,您不会问自己数据来自何处,是吗

或者什么是语义网上下文中的语句

如果您的意思是“什么是RDF语句”,那么答案在中给出。确切地说,它说:

断言an表示由表示的某种关系在和之间保持。这个与RDF三元组相对应的语句称为RDF语句

因此,RDF三元组是可以写入和读取的,或者通过电线传输的,RDF语句是三元组表示的,或者它的意思

第二个问题,您将如何在RDF中对此进行建模?在我看来,我们首先要确定三元组

在建模关系模式、UML或任何建模语言中,有多种方式表示相同的知识。他在给予

就我而言,我不建议使用RDF具体化(也就是说,在Ivo的回答中使用
RDF:Statement
RDF:subject
RDF:predicate
,和
RDF:object
)。相反,我将课程建模为一段时间内发生的事情,这将使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.

这是一种可能的模式。如果David每年都讲授相同的课程,那么你需要介绍具有相同主语、谓语和宾语的不同语句。此外,RDF三元组的对象不需要是URI,事实上,我必须把它放在编辑的中间。现在,我会做一个更详细的回答。可能是重复的