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