1. RDF相关基础知识

RDF概述

An RDF statement expresses a relationship between two resources. The subject and the object represent the two resources being related; the predicate represents the nature of their relationship. The relationship is phrased in a directional way (from subject to object) and is called in RDF a property. Because RDF statements consist of three elements they are called triples.

RDF 语句表示两个资源之间的关系。主体客体表示两种相关的资源;谓词表示他们之间关系的性质。关系以方向性的方式表达(从主语到宾语)并在RDF中称为属性。因为 RDF语句(陈述)由三元素组成,所以 也被叫做三元组

在这里插入图片描述

http://www.w3.org/1999/02/22-rdf-syntax-ns#

http://www.w3.org/2000/01/rdf-schema#

http://www.w3.org/2001/XMLSchema#

RDF statements = IRIs + literals + Blank nodes

IRIS(可出现在三元组的任意位置)

IRI:International Resource Identifier

URLs:Uniform Resource Locators

people use URLs as Web addresses are one form of IRI. Other forms of IRI provide an identifier for a resource without implying its location or how to access it.

Literals(只在object出现)

Literals are basic values that are not IRIs(是一种基本值,但不是IRIs)

Examples of literals include strings such as “La Joconde”, dates such as “the 4th of July, 1990” and numbers such as “3.14159”.

Literals are associated with a datatype enabling such values to be parsed and interpreted correctly. String literals can optionally be associated with a language tag. For example, “Léonard de Vinci” could be associated with the “fr” language tag and “李奥纳多·达·文西” with the “zh” language tag.

在这里插入图片描述

在这里插入图片描述

Blank nodes(主语和宾语位置)

They can be used to denote resources without explicitly naming them with an IRI.(有些没有确定的IRI来表示资源,但是又需要表示,就是要空白节点来表示)

it is sometimes handy to be able to talk about resources without bothering to use a global identifier.

在这里插入图片描述

Multiple graphs

命名图

一个命名图,使用IRIhttp://example.org/bob表示,也就是通过检索该IRI就可以找到下面的四个三元组对应的图

<Bob> <is a> <person>.
<Bob> <is a friend of> <Alice>.
<Bob> <is born on> <the 4th of July 1990>.
<Bob> <is interested in> <the Mona Lisa>.

一个命名图,使用IRIhttps://www.wikidata.org/wiki/Special:EntityData/Q12418表示

<Leonardo da Vinci> <is the creator of> <the Mona Lisa>.
<The video 'La Joconde à Washington'> <is about> <the Mona Lisa>

在这里插入图片描述

未命名图

一个未命名图,也就是没有确定的IRI表示下面的两个三元组,但是可以下面两个三元组的主语相同,所以通过http://example.org/bob也同样可以检索到下面的两个三元组

<http://example.org/bob> <is published by> <http://example.org>.
<http://example.org/bob> <has license> <http://creativecommons.org/licenses/by/3.0/>.

在这里插入图片描述

RDF Schema(RDFS)

This language allows one to define semantic characteristics of RDF data. For example, one can state that the IRI http://www.example.org/friendOf can be used as a property and that the subjects and objects of http://www.example.org/friendOf triples must be resources of class http://www.example.org/Person.

(这个语言允许定义RDF数据的语义特点。例如可以将 IRI http://www.example.org/friendOf 定义为一个属性,并且与该属性有关的的三元组的主语和宾语必须是http://www.example.org/Person该类中的资源)

RDF Schema uses the notion of class to specify categories that can be used to classify resources. The relation between an instance and its class is stated through the type property. With RDF Schema one can create hierarchies of classes and sub-classes and of properties and sub-properties. Type restrictions on the subjects and objects of particular triples can be defined through domain and range restrictions. An example of a domain restriction was given above: subjects of “friendOf” triples should be of class “Person”.

RDFS定义主语、谓语和宾语的类型的常见词汇

RDF Schema使用**“类别”(class)的概念来指定可用于对资源进行分类的类别。实例与其类别之间的关系通过“类型”(type)属性来表示。使用RDF Schema可以创建类别和子类别以及属性和子属性的层次结构。可以通过“域”(domain)和“范围”(range)限制来定义特定三元组的主语和宾语的类型限制。**上面提供了一个域限制的示例: “friendOf” 三元组的主语应该属于 “Person” 类。

  1. 类别(Class):类别是一种用于分类资源的概念。它类似于传统编程中的类,用于描述具有相似特征和属性的资源的集合。例如,“Person” 可以是一个类别,包括所有表示人的资源。
  2. 实例(Instance):实例是属于某个类别的具体资源。例如,“John Smith” 可以是属于 “Person” 类别的一个实例。
  3. 类型(Type):类型是用来指明资源属于哪个类别class的属性。通过使用RDF Schema,你可以通过将资源与其相应的类别关联来定义资源的类型。这通常通过使用 rdf:type 属性来表示,例如,John Smith rdf:type Person 表示 “John Smith” 是一个 “Person” 类别的实例。
  4. 子类别和超类别(Subclass and Superclass):RDF Schema允许你创建类别之间的层次结构,其中一个类别可以是另一个类别的子类别或超类别。例如,你可以创建一个 “Student” 类别作为 “Person” 类别的子类别,表示所有学生都是人类。
  5. 属性和子属性(Property and Subproperty):类似于类别,RDF Schema还允许你创建属性之间的层次结构。一个属性可以是另一个属性的子属性,表示属性之间的关系。例如,你可以创建 “hasChild” 属性作为 “hasFamilyMember” 属性的子属性。
  6. 域(Domain)域限制用于定义哪些资源可以作为特定属性的主语。例如,可以定义 “friendOf” 属性的域为 “Person” 类别,这意味着只有 “Person” 类别的资源可以拥有 “friendOf” 属性。
  7. 范围(Range)范围限制用于定义当前指定的属性连接的宾语可以是哪些类别的资源。例如,你可以定义 “hasAge” 属性的范围为 “xsd:integer”,这意味着 “hasAge” 属性连接的值必须是整数类型。
下图为上面的七个名词的语法

在这里插入图片描述

<Person> <type> <Class>
<is a friend of> <type> <Property>
<is a friend of> <domain> <Person>
<is a friend of> <range> <Person>
<is a good friend of> <subPropertyOf> <is a friend of>

对上文的简单的rdf定义的解释,并非严格语法

  • 被定义为一个类
  • 被定义为一个属性
  • 连接的主语只能是属于person类的资源,即person类的实例
  • 连接的宾语的类型只能是person类型即person类的实例
  • 是的子属性

所有词汇

RDF 1.2 Schema (w3.org)

RDF Schema的类和属性系统类似于面向对象编程语言(如Java)的类型系统。与许多此类系统不同,RDF Schema不是根据其实例可能具有的属性来定义类,而是根据属性(谓语)适用的资源类来描述属性。

引用http://www.w3.org/2000/01/rdf-schema#

1.Classes相关词汇

所有类都是rdfs:Resource的子类,也都是rdfs:Class的一个实例

  • rdfs:Resource

RDF描述的所有事物都被称为资源,它们都是rdfs:Resource类的实例,所有其他类都是这个类的子类。rdfs:Resource本身也是rdfs:Class的一个实例。

  • rdfs:Class

这是RDF类的资源类。rdfs:Classrdfs:Class的一个实例。

  • rdfs:Literal

rdfs:Literal是一种文字值的类,包括字符串和整数等。rdfs:Literal是rdfs:Class的一个实例,同时也是rdfs:Resource的子类。

  • rdfs:Datatype

rdfs:Datatype是数据类型的类别。rdfs:Datatype的所有实例都与前文的xsd:数据类型相对应。rdfs:Datatype既是rdfs:Class的一个实例,也是rdfs:Class的一个子类。rdfs:Datatype的每个实例都是rdfs:Literal的一个子类。

  • rdf:langString

rdf:langString是带有语言标签的字符串值的类别。rdf:langStringrdfs:Datatype的一个实例,也是rdfs:Literal的一个子类。

  • rdf:Property

rdf:Property是RDF属性的类别。rdf:Propertyrdfs:Class的一个实例。

2.Properties相关词汇
  • rdfs:range

rdfs:range是·rdf:Property的实例,该类的domin是rdf:Property,range为rdfs:Class,也就意味着P rdfs:range C中,P只能是rdf:Property类的实例,C只能是rdfs:Class类的实例,因为domin用来限定该属性连接的三元组的主语的类型,range用于限定该属性连接的宾语的类型通过限定C的类型便可以限定当前的属性P所能连接的宾语的范围。S P O这个三元组中的O的范围即被限定为类型C

  • rdfs:domain

rdfs:domain是一个rdf:Property的实例,该类的domin是rdf:Property,range为rdfs:Class,也就意味着P rdfs:domain C中,P只能是rdf:Property类的实例,C只能是rdfs:Class类的实例,因为domin用来限定该属性连接的三元组的主语的类型,range用于限定该属性连接的宾语的类型通过限定C的类型便可以限定当前的属性P所能连接的主语的范围。S P O这个三元组中的S的范围即被限定为类型C

  • rdf:type

rdf:typerdf:Property的一个实例,用于说明资源是一个类的实例。R rdf:type C

表示R是C的实例。rdf:type的domain是rdfs:Resource,range是rdfs:Class

  • rdfs:subClassOf

rdfs:subClassOf是一个实例,用于说明两个类(资源)之间存在父类与子类的关系。C1 rdfs:subClassOf C2表示C1是C2的子类。rdfs:subClassOf的domain是rdfs:Class,range也是rdfs:Class

  • rdfs:subPropertyOf

rdfs:subPropertyOf是一个实例,用于说明两个属性(谓语)之间的父属性与子属性关系。P1 rdfs:subPropertyOf P2表示P1是P2的子属性。

rdfs:subPropertyOf的domain是rdf:Property,range也是rdf:Property

  • rdfs:label

rdfs:labelrdf:Property的一个实例,可用于定义资源名称的人类可读的标签版本。

R rdfs:label L表示L是R的人类可读标签。

具体举例:<http://example.org/ontology#hasAge> a rdf:Property ;

rdfs:label "拥有年龄" .

在这个示例中,我们声明了一个名为"hasAge"的RDF属性,并使用rdfs:label属性为该属性提供了人类可读的名称,即"拥有年龄"。

rdfs:label的domain是rdfs:Resource,range是rdfs:Literal

  • rdfs:comment

rdfs:commentrdf:Property的一个实例,可用于提供资源的人类可读的描述。

R rdfs:comment L表示L是R的人类可读描述。

具体举例:<http://example.org/fruits/apple> rdfs:comment "苹果是一种常见的水果

rdfs:comment属性的主语是代表苹果的RDF资源的IRI,而它的值是一个包含了关于苹果的人类可读描述的字符串,用于解释主语。

rdfs:comment的domain是rdfs:Resource,range是rdfs:Literal

3.其他词汇
3.1Container(容器类) Classes
  • rdfs:Container

类rdfs:Container是RDF容器类的超类,即rdf:Bag、rdf:Seq和rdf:Alt为其子类。

  • rdf:Bag(无序集合)

rdf:Bag是RDF“Bag”容器的类。它是rdfs:Container的子类并且存储的元素无序允许重复

<rdf:Description rdf:about="http://example.org/shopping-cart">
    <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag" />
    <rdf:_1 rdf:resource="http://example.org/product/123" />
    <rdf:_2 rdf:resource="http://example.org/product/456" />
    <rdf:_3 rdf:resource="http://example.org/product/789" />
</rdf:Description>

上面的代码创建了一个RDF描述并指定主语为"http://example.org/shopping-cart",但是他的类型为Bag类型,所以下面的<rdf:_1>, <rdf:_2>, <rdf:_3>为rdf:Bag的属性,用于表示购物车中的商品。这些属性的名称是约定俗成的。

  • rdf:Seq(有序集合)

类rdf:Seq是RDF“Sequence”容器的类,它是rdfs:Container的子类。与rdf:Bag的不同之处在于它是有序

<rdf:Seq rdf:about="http://example.com/my-sequence">
  <rdf:_1 rdf:resource="http://example.com/resource1"/>
  <rdf:_2 rdf:resource="http://example.com/resource2"/>
  <rdf:_3 rdf:resource="http://example.com/resource3"/>
</rdf:Seq>
  • rdf:Alt(可选集合)

类rdf:Alt是RDF“Alternative”容器的类,它是rdfs:Container的子类。它通常用于指示对于这个容器的典型处理方式是选择容器中的一个成员。默认情况下,选择的是容器中的第一个成员,即第一个三元组属性的值。

<http://example.org/book1>
    <http://purl.org/dc/terms/title>
    [ a rdf:Alt;
      rdf:_1 "Title 1";
      rdf:_2 "Title 2";
      rdf:_3 "Title 3" ] .

在这个示例中,<http://example.org/book1> 是一个书籍资源,它的标题使用了 rdf:Alt,并定义了三个候选标题:Title 1、Title 2 和 Title 3。使用 rdf:_1rdf:_2rdf:_3 来标识这些候选标题,同时保持它们的互斥关系,表示只能选择其中一个标题作为主标题。默认使用rdf:_1属性对应的Title 1

3.2Container Properties(容器中的属性类) Classes
  • rdfs:ContainerMembershipProperty

类rdfs:ContainerMembershipProperty具有被用来声明一个资源是容器成员的属性实例。这些属性可以应用于资源,以指示它们作为容器的成员。这个类主要用于容器类(如rdf:Bagrdf:Seqrdf:Alt)的建模。它是rdf:Property的子类。每个rdfs:ContainerMembershipProperty的实例都是rdf:Property的子属性。

RDFS定义了一些特定的属性,例如 rdf:_1rdf:_2rdf:_3 等,它们都是 rdfs:ContainerMembershipProperty 的子属性。通过将这些属性应用于资源,可以指示它们作为容器的成员,其中 rdf:_1 表示第一个成员,rdf:_2 表示第二个成员,以此类推。这些属性通常用于描述容器的成员。相当于使用了rdf:_1 等也就是使用了rdfs:ContainerMembershipProperty

  • rdfs:member

rdfs:member是一个rdf:Property的实例,它是所有容器成员属性的超属性,也是上面rdfs:ContainerMembershipProperty的超属性,即每个容器成员属性都与属性rdfs:member存在rdfs:subPropertyOf关系。用于处理 RDF 中的容器,包括 Bag(无序集合)、Seq(有序集合)和 Alt(可选集合)。它不仅可以用于表示容器的成员,还可以用于其他资源的关系。

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

<http://example.org/shopping-list> a rdfs:Bag;
    rdfs:member [
        a <http://example.org/product>;
        rdfs:label "Product 1"
    ];
    rdfs:member [
        a <http://example.org/product>;
        rdfs:label "Product 2"
    ];
    rdfs:member [
        a <http://example.org/product>;
        rdfs:label "Product 3"
    ].

首先将<http://example.org/shopping-list>定义为rdfs:Bag,然后使用rdfs:member属性将三个属性分配到购物清单中。每个属性都是一个匿名节点(Blank Node),并包含两个属性:

  1. a <http://example.org/product>:表示这是一个产品。
  2. rdfs:label "Product X":为产品指定了一个标签。
3.3RDF Collections
  • rdf:List

rdf:List是rdfs:Class的一个实例,可用于构建关于列表和其他类似列表的结构的描述。它提供了一种方法来构建RDF中的列表,列表是一种有序的集合,其中每个元素与前一个元素关联。

一个RDF列表通常由三个部分组成:第一个元素,其余元素(以列表的形式),以及一个空列表来表示列表的结束。rdf:List的实例可以用来表示这种结构。(详细例子在3.3的结尾统一给出)

  • rdf:first(Property)

rdf:first是rdf:Property的一个实例,可用于构建关于列表和其他类似列表的结构的描述。

L rdf:first O 表示L和O之间存在一个第一个元素的关系,也就是O是L列表的第一个元素。

rdf:first的domain是rdfs:Resource,range也是rdfs:Resource(详细例子在3.3的结尾统一给出)

  • rdf:rest(Property)

rdf:rest是rdf:Property的一个实例,可用于构建关于列表和其他类似列表的结构的描述。

L rdf:rest O 表示L和O之间存在一个剩余列表的关系,也就是O是L列表的下一个关联元素。

rdf:rest的domain是rdfs:Resource,range是rdf:List(详细例子在3.3的结尾统一给出)

  • rdf:nil

资源rdf:nil是rdf:List的一个实例,可用于表示空列表或其他类似列表的结构。

L rdf:rest rdf:nil 表示列表L没有下一个要关联的元素(也可以使用属性rdf:first来指示该项)。

<http://example.org/list1> rdf:first "Item 1" .
<http://example.org/list1> rdf:rest _:node1 .
_:node1 rdf:first "Item 2" .
_:node1 rdf:rest _:node2 .
_:node2 rdf:first "Item 3" .
_:node2 rdf:rest rdf:nil .
  • <http://example.org/list1> rdf:first "Item 1" 表示list1列表的第一个元素为"Item 1"
  • <http://example.org/list1> rdf:rest _:node1 .表示list1的下一个关联元素为node1结点
  • 第三行与第四行表示node1结点的首项并与node2关联
  • _:node2 rdf:first "Item 3" .表示node2的首项为"Item 3"
  • _:node2 rdf:rest rdf:nil .表示node2除首项外无要关联的列表
3.4Reification Vocabulary
  • rdf:Statement

rdf:Statement是RDF的一个类,用于表示RDF陈述。RDF陈述是由RDF三元组的标记所构成的陈述。RDF陈述的主语是由三元组的主语标记rdf:subject所标识的实例;RDF陈述的谓词是由三元组的谓词标记rdf:predicate所标识的实例;RDF陈述的宾语是由三元组的对宾语标记rdf:object所标识的实例。rdf:Statement的实例包括RDF陈述的主语、谓词和对象,在RDF中,这个三元组构成一个RDF陈述。

  • rdf:subject

rdf:subject是rdf:Property的一个实例,用于表示语句的主语

S rdf:subject R表示S是rdf:Statement的实例,并且S的主题是R。

rdf:subject的domain是rdf:Statement,range是rdfs:Resource

  • rdf:predicate

rdf:predicate是rdf:Property的一个实例,用于表示语句的谓语

S rdf:predicate P表示S是rdf:Statement的实例,P是rdf:Property的实例,且S的谓语是P。

rdf:predicate的domain是rdf:Statement,range是rdfs:Resource

  • rdf:object

rdf:object是rdf:Property的一个实例,用于表示语句的宾语

S rdf:object O表示S是rdf:Statement的实例,且S的宾语是O。

rdf:object的domain是rdf:Statement,range是rdfs:Resource

<http://example.org/resource123> rdf:type <http://example.org/Person> .
  • 整个三元组是一个rdf:Statement的实例
  • <http://example.org/resource123> 的类型是rdf:subject
  • rdf:type 的类型是rdf:predicate
  • <http://example.org/Person> 的类型是rdf:object
3.5Utility Properties
  • rdfs:seeAlso

rdfs:seeAlso是rdf:Property的一个实例,用于指示一个资源,指向的资源可能提供有关当前主题资源的附加信息。

S rdfs:seeAlso O表示资源O可能提供关于S的附加信息。可以从Web检索到O的表示,但这并非必需。当可以检索到这些表示时,对这些表示的格式不施加任何约束。

rdfs:seeAlso的domain是rdfs:Resource,range是rdfs:Resource

  • rdfs:isDefinedBy

rdfs:isDefinedBy是rdf:Property的一个实例,用于指示定义主题资源的资源。此属性可用于指示描述资源的RDF词汇。

S rdfs:isDefinedBy O表示资源O定义了S。可以从Web检索到O的表示,但这并非必需。当可以检索到这些表示时,对这些表示的格式不施加任何约束。rdfs:isDefinedBy是rdfs:seeAlso的子属性。

rdfs:isDefinedBy的domain是rdfs:Resource,range是rdfs:Resource

  • rdf:value

rdf:value是rdf:Property的一个实例,可用于描述结构化值。

rdf:value本身没有特定含义。它作为一种词汇的一部分提供,可用于示例中的习语,如下例所示:

<http://www.example.com/2002/04/products#item10245>
    <http://www.example.org/terms/weight> [
       rdf:value 2.4 ;
       <http://www.example.org/terms/units> <http://www.example.org/units/kilograms>
       ] .

尽管对该属性的含义没有正式规范,但定义它有助于鼓励在此类示例中使用常见的习语。

rdf:value的domain是rdfs:Resource,range是rdfs:Resource

4.SUMMARY

Class类只能在主语和宾语位置,Property类只能在谓语位置

在这里插入图片描述

在这里插入图片描述

Writing RDF graphs

  1. Turtle family of RDF languages (N-Triples, Turtle, TriG and N-Quads);
  2. JSON-LD (JSON-based RDF syntax);
  3. RDFa (for HTML and XML embedding);
  4. RDF/XML (XML syntax for RDF).

1.N-Triples(.nt)

每个三元组以.结尾

01    <http://example.org/bob#me> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .

02    <http://example.org/bob#me> <http://xmlns.com/foaf/0.1/knows> <http://example.org/alice#me> .

03    <http://example.org/bob#me> <http://schema.org/birthDate> 
"1990-07-04"^^<http://www.w3.org/2001/XMLSchema#date> .

04    <http://example.org/bob#me> <http://xmlns.com/foaf/0.1/topic_interest> <http://www.wikidata.org/entity/Q12418> .

05    <http://www.wikidata.org/entity/Q12418> <http://purl.org/dc/terms/title> 
"Mona Lisa" .

06    <http://www.wikidata.org/entity/Q12418> <http://purl.org/dc/terms/creator> <http://dbpedia.org/resource/Leonardo_da_Vinci> .

07    <http://data.europeana.eu/item/04802/243FA8618938F4117025F17A8B813C5F9AA4D619> <http://purl.org/dc/terms/subject> <http://www.wikidata.org/entity/Q12418> .

第三个三元组的宾语部分为日期,所以除了"1990-07-04"之外,使用^^ + 数据类型来指定宾语的数据类型为date类型

第五个三元组的宾语部分因为为字符串,所以无需特意指定类型,默认数据类型为字符串

对于带有语言标记的字符串,标记直接放在字符串后面,使用@进行分割,例如"Mona Lisa"的法语名为"La Joconde",则可以使用"La Joconde"@fr代替第五行中的"Mona Lisa"

在这里插入图片描述

2.Turtle(.ttl)

下面的例子与上面的N-Triples的例子相同,Turtle是对N-Triples的扩展,与N-Triples不同的在于同一主语的所有三元组可以写在同一级下,以;隔开,结尾以.结束,并且新增了缩写前缀的功能,使用前缀:简称简化原本冗长的IRI,不支持对图的命名

01    BASE   <http://example.org/>
02    PREFIX foaf: <http://xmlns.com/foaf/0.1/>
03    PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
04    PREFIX schema: <http://schema.org/>
05    PREFIX dcterms: <http://purl.org/dc/terms/>
06    PREFIX wd: <http://www.wikidata.org/entity/>
07 
08    <bob#me>
09        a foaf:Person ;
10        foaf:knows <alice#me> ;
11        schema:birthDate "1990-07-04"^^xsd:date ;
12        foaf:topic_interest wd:Q12418 .
13   
14    wd:Q12418
15        dcterms:title "Mona Lisa" ;
16        dcterms:creator <http://dbpedia.org/resource/Leonardo_da_Vinci> .
17  
18    <http://data.europeana.eu/item/04802/243FA8618938F4117025F17A8B813C5F9AA4D619>
19        dcterms:subject wd:Q12418 .
  • BASE即为默认前缀,没有前缀的IRI都会默认带有该前缀

    • 第8和10行就相当于<http://example.org/bob#me> <http://xmlns.com/foaf/0.1/knows> <http://example.org/alice#me>
  • PREFIX 或 @prefix即用于定义前缀,例如<bob#me> foaf:knows <alice#me> ;中的foaf就相当于<http://xmlns.com/foaf/0.1/>

  • a相当于 rdf:type,表示<http://example.org/bob#me><http://xmlns.com/foaf/0.1/Person>

空结点的表示形式
  • 写法一( _:x )
PREFIX lio: <http://purl.org/net/lio#> 

<http://dbpedia.org/resource/Mona_Lisa> lio:shows _:x .
_:x a <http://dbpedia.org/resource/Cypress> .

_:x即表示一个空结点,_:x a <http://dbpedia.org/resource/Cypress>即为对该空结点的类型的定义,该空结点为一个松树类的实例,即一颗松树

在这里插入图片描述

  • 写法二( [ ] )
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

# Some resource (blank node) is interested in some other resource
# entitled "Mona Lisa" and created by Leonardo da Vinci.

[] foaf:topic_interest [
          dcterms:title "Mona Lisa" ;
          dcterms:creator <http://dbpedia.org/resource/Leonardo_da_Vinci> ] 
  • 使用[ ]来表示空白结点
    • 如果[ ]中没有内容,则表示一个空白结点,即某个资源
    • 如果[ ]中有内容,则表示该资源是一个匿名结点,但是有一些对该节点的描述,[ ]中内容为谓语-宾语格式,[ ]即为主语,里面内容都是对该结点的描述

上面的代码中的第一个[ ]为一个空白结点,代表主语,第二个带有内容的[ ]为宾语,是一个匿名的结点,表示该结点是对Mona Lisa的一些描述,整个图也就表示了某些资源对一些与蒙娜丽莎相关的资源感兴趣

3.TriG

对Turtle的扩展,支持对图的命名

01    BASE   <http://example.org/> 
02    PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
03    PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
04    PREFIX schema: <http://schema.org/> 
05    PREFIX dcterms: <http://purl.org/dc/terms/> 
06    PREFIX wd: <http://www.wikidata.org/entity/> 
07    
08    GRAPH <http://example.org/bob>
09      {
10        <bob#me>
11            a foaf:Person ;
12            foaf:knows <alice#me> ;
13            schema:birthDate "1990-07-04"^^xsd:date ;
14            foaf:topic_interest wd:Q12418 .
15      }
16  
17    GRAPH <https://www.wikidata.org/wiki/Special:EntityData/Q12418>
18      {
19        wd:Q12418
20            dcterms:title "Mona Lisa" ;
21            dcterms:creator <http://dbpedia.org/resource/Leonardo_da_Vinci> .
22    
23       <http://data.europeana.eu/item/04802/243FA8618938F4117025F17A8B813C5F9AA4D619>
24           dcterms:subject wd:Q12418 .
25      }
26  
27    <http://example.org/bob>
28        dcterms:publisher <http://example.org> ;
29        dcterms:rights <http://creativecommons.org/licenses/by/3.0/> .

第8和17行为对两个图的命名,使用关键字GRAPH

27到29行并未指定图,所以为默认图

在这里插入图片描述

在这里插入图片描述

4.N-Quads

N-Quads是对N-Triples的简单扩展,用于交换RDF数据集。N-Quads允许在一行中添加第四个元素,用于捕获该行上描述的三元组的图IRI(Graph IRI)

四元组 = 主语+谓语+宾语+图IRI

N-Quads版本允许在每个三元组后添加图IRI,以区分不同的图或数据集。这有助于在RDF数据中明确定位不同的图,从而实现更复杂的数据组织和查询。N-Quads通常用于描述具有多个命名图的RDF数据集。

下面的代码与上面的描述的是同一个图,看上面的图即可

01    <http://example.org/bob#me> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> <http://example.org/bob> .

02    <http://example.org/bob#me> <http://xmlns.com/foaf/0.1/knows> <http://example.org/alice#me> <http://example.org/bob> .

03    <http://example.org/bob#me> <http://schema.org/birthDate> "1990-07-04"^^<http://www.w3.org/2001/XMLSchema#date> <http://example.org/bob> .

04    <http://example.org/bob#me> <http://xmlns.com/foaf/0.1/topic_interest> <http://www.wikidata.org/entity/Q12418> <http://example.org/bob> .

05    <http://www.wikidata.org/entity/Q12418> <http://purl.org/dc/terms/title> "Mona Lisa" <https://www.wikidata.org/wiki/Special:EntityData/Q12418> .

06    <http://www.wikidata.org/entity/Q12418> <http://purl.org/dc/terms/creator> <http://dbpedia.org/resource/Leonardo_da_Vinci> <https://www.wikidata.org/wiki/Special:EntityData/Q12418> .

07    <http://data.europeana.eu/item/04802/243FA8618938F4117025F17A8B813C5F9AA4D619> <http://purl.org/dc/terms/subject> <http://www.wikidata.org/entity/Q12418> <https://www.wikidata.org/wiki/Special:EntityData/Q12418> .

08    <http://example.org/bob> <http://purl.org/dc/terms/publisher> <http://example.org> .

09    <http://example.org/bob> <http://purl.org/dc/terms/rights> <http://creativecommons.org/licenses/by/3.0/> .

前七行代表四元组,其中第四个元素为图IRI,前三个元素遵循N-Triples的语法约定。第8行和第9行表示为默认图中的语句,因为它们缺少第四个元素,所以构成常规的三元组,属于默认图。

与N-Triples类似,N-Quads通常用于交换大型RDF数据集并使用基于文本行的文本处理工具处理RDF。N-Quads允许在不同的命名图之间明确定义关系,从而支持更复杂的RDF数据组织和查询。这种格式有助于处理多个命名图的RDF数据集。

5.JSON-LD(.json)

01    {
02      "@context": "example-context.json",
03      "@id": "http://example.org/bob#me",
04      "@type": "Person",
05      "birthdate": "1990-07-04",
06      "knows": "http://example.org/alice#me",
07      "interest": {
08        "@id": "http://www.wikidata.org/entity/Q12418",
09        "title": "Mona Lisa",
10        "subject_of": 		    "http://data.europeana.eu/item/04802/243FA8618938F4117025F17A8B813C5F9AA4D619",
11        "creator": "http://dbpedia.org/resource/Leonardo_da_Vinci"
12      }
13    }
  • @context关键字表示一种映射规则,指向的json文件是用来描述了如何将context之后的代码转换成电脑可以识别的IRI
  • @id表示三元组中的主语,第2行表示主语为http://example.org/bob#me
  • @type指定类型,相当于rdf:type,第三行表示主语的类型为Person的实例

在这里插入图片描述

context specification(自定义context映射语法)

下面是如何自定义context的映射语法,不是JSON-LD表示RDF图的语法,也就是上文的example-context.json中的内容

01    {
02      "@context": {
03        "foaf": "http://xmlns.com/foaf/0.1/", 
04        "Person": "foaf:Person",
05        "interest": "foaf:topic_interest",
06        "knows": {
07          "@id": "foaf:knows",
08          "@type": "@id"
09        },
10        "birthdate": {
11          "@id": "http://schema.org/birthDate",
12          "@type": "http://www.w3.org/2001/XMLSchema#date"
13        },
14        "dcterms": "http://purl.org/dc/terms/",
15        "title": "dcterms:title",
16        "creator": {
17          "@id": "dcterms:creator",
18          "@type": "@id"
19        },
20        "subject_of": {
21          "@reverse": "dcterms:subject",
22          "@type": "@id"
23        }
24      }
25    }
  • 自定义的context映射都由@context{ }包裹
  • 第3行定义前缀
  • 第4行将JSON-LD编写的Person映射为foaf:Person,也就是说只要在JSON-LD中出现Person,就等价于<http://xmlns.com/foaf/0.1/Person>
  • 第6-9行将konws映射为foaf:knows属性,并且@type指定该属性所接的宾语应该是一个IRI资源
  • 第10-13行将birthdate映射到http://schema.org/birthDate属性,并且指定所接的宾语的数据类型为日期date类型
  • 第20-23行的@reverse@type不同,虽然也是将subject_of映射到dcterms:subject,但是是相反的,也就是说当在JSON-LD中使用该属性时,主语和宾语的位置应该是调换过来的,箭头会指向原来的主语

6.RDFa

用于将RDF数据嵌入其中 HTML 和 XML 文档,也就是说本身还是HTML文档,但是在HTML文档的基础上编写一些RDF代码,但是不影响原本的HTML(一切都是基于原本的HTML,在原有的标签的基础上增添标签的属性达到嵌入的目的,不能改变原有的标签)

在这里插入图片描述

  1. 第1行定义了XML命名空间前缀。这些前缀用于缩写IRI(国际化资源标识符)
  2. 第4行的<div>元素定义了一个资源,这个资源的IRI是"http://example.org/bob#me"。它还使用typeof属性指定了资源的类型,即"foaf:Person",表示Bob是一个Person类的实例。也就相当于被该div标签包裹的三元组的主语都是http://example.org/bob#me
  3. 第6行包含了一个<p>元素,其中包含文本"Bob knows Alice",但这是RDFa标记,**用<a>元素的property属性定义了foaf:knows属性,表示`foaf:knows是一个属性即谓语并指向Alice的IRI “http://example.org/alice#me”。**这表示Bob知道Alice。
  4. 第7行包含了另一个<time>元素,它定义了"schema:birthDate"属性,并且使用datatype属性指定了数据类型为"xsd:date"。时间元素的内容"1990-07-04"被解释为日期,因为它嵌套在<time>元素内。
  5. 第9行和之后的代码是另一个<p>元素,它描述了Bob对"the Mona Lisa"的兴趣。这里使用<span>元素定义了属性"foaf:topic_interest",并使用resource属性指向该兴趣的宾语IRI “http://www.wikidata.org/entity/Q12418”。(这里之所以没有之前的href而是使用resource是因为span标签并没有href属性,所以使用resource来指定宾语)
  6. 第14行的另一个<div>元素定义了关于"Mona Lisa"的信息。它有一个资源IRI “http://www.wikidata.org/entity/Q12418”,表示这是关于Mona Lisa的信息。
  7. 第16行包含<span>元素,其中的文本"Mona Lisa"被解释为标题(dcterms:title属性)。
  8. 第17行的<a>元素定义了"Leonardo da Vinci"作为"Mona Lisa"的创建者(dcterms:creator属性),并指向了Leonardo da Vinci的IRI “http://dbpedia.org/resource/Leonardo_da_Vinci”。
  9. 第18行的<a>元素指向了一个视频的IRI “http://data.europeana.eu/item/04802/243FA8618938F4117025F17A8B813C5F9AA4D619”,并没有指定特定的属性,但可以根据上下文来理解这是关于"Mona Lisa"的视频。
  10. 第22行的<div>元素定义了一个关于视频的信息。它使用<link>元素指定了dcterms:subject属性,将"Mona Lisa"的IRI "http://www.wikidata.org/entity/Q12418"作为主题。

7.RDF/XML(.RDF)

在这里插入图片描述

  • <rdf:RDF></rdf:RDF>标签所包裹的为所有的RDF三元组
  • 第3到5行使用<rdf:RDF></rdf:RDF>标签中的xmlns属性来定义前缀
  • <rdf:Description rdf:about="http://example.org/bob#me"></rdf:Description>标签包裹的为一组三元组即一个默认图,rdf:about的内容即为三元组的主语,谓语为标签中的所有子标签,宾语为子标签包裹的所有内容(如果子标签为自闭合标签,则使用rdf:resouce指定宾语的资源),使用rdf:datatype来指定宾语的数据类型

OWL

一些词汇术语已经变得流行,用于记录RDF数据源之间的链接。一个示例是由OWL词汇提供的属性。此属性可用于指示两个IRI实际上指向相同的资源。这很有用,因为不同的发布者可能使用不同的标识符来表示相同的事物。借助owl:sameAs,我们可以记录这些信息。

<http://dbpedia.org/resource/Leonardo_da_Vinci>
    owl:sameAs <http://viaf.org/viaf/24604287/> .

上面的语句表示这个RDF三元组表示http://dbpedia.org/resource/Leonardo_da_Vincihttp://viaf.org/viaf/24604287/是同一个资源,即列奥纳多·达·芬奇。owl:sameAs属性用于指示两个不同的IRI引用相同的资源。这是一种常见的用法,因为不同的数据集或知识图谱可能使用不同的IRI来表示相同的实体。这种链接有助于将不同数据源中的信息整合到一个共同的知识图中。

xmlns属性来定义前缀

  • <rdf:Description rdf:about="http://example.org/bob#me"></rdf:Description>标签包裹的为一组三元组即一个默认图,rdf:about的内容即为三元组的主语,谓语为标签中的所有子标签,宾语为子标签包裹的所有内容(如果子标签为自闭合标签,则使用rdf:resouce指定宾语的资源),使用rdf:datatype来指定宾语的数据类型

常见数据集检索: datahub.io

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值