(翻译)W3C的Turtle文档

主要翻译如下页面,https://www.w3.org/TR/turtle/,对该页面中Turtle的内容部分进行翻译,希望对使用Turtle的朋友们有所帮助。 1 简介 2 Turtle语言 2.1 简单的三元组 2.2 谓词列表 2.3 宾语列表 2.4 IRIs 2.5 RDF字面量 2.5.1 引用的字面量 2.5.2 数字 2.5.3 布尔值 2.6 RDF空节点 2.7 Turlte中的嵌套无标签空节点 2.8 集合 3 举例 4. Turtle与SPARQL的对比 5 一致性 5.1 媒体类型和内容编码 6 Turtle语法 6.1 White Space(空格) 6.2 注释 6.3 国际资源标识符参考文献(IRI References) 6.4 转义序列 6.5 语法 7 解析 7.1 解析状态 7.2 RDF术语构造器 7.3 RDF三元组构造器 7.4 解析举例 1 简介 这个文档是对Turtle的定义,Turtle是简洁的RDF三元组语言,是对RDF图数据的文本表示。下面的Turtle例子描述了Green Goblin和Spiderman之间的关系。 EXAMPLE 1   @base http://example.org/ .   @prefix rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# .   @prefix rdfs: http://www.w3.org/2000/01/rdf-schema# .   @prefix foaf: http://xmlns.com/foaf/0.1/ .   @prefix rel: http://www.perceive.net/schemas/relationship/ .   <#green-goblin>     rel:enemyOf <#spiderman> ;     a foaf:Person ; # in the context of the Marvel universe     foaf:name "Green Goblin" .   <#spiderman>     rel:enemyOf <#green-goblin> ;      a foaf:Person ;     foaf:name "Spiderman", "Человек-паук"@ru . 这个例子包含了Turtle语言的很多特性:@base和相对IRIs,@prefix和前缀名,利用分号分隔的谓词列表,利用逗号分隔的宾语列表,标记a以及字面量。 针对三元组的Turtle语法是针对三元组块的SPARQL 1.1 查询语言语法的子集。两个语法在可能的情况下共享产品和终端名。 利用Turtle文件构建RDF图定义在第6章Turtle语法和第7章解析中。 2 Turtle语言 Turtle文档是以紧凑的文本形式来描述一个RDF图,这种RDF图是由主语、谓词、宾语组成的三元组构成的。 注释跟在“#”后面,直到这一行结束,其中“#”不属于另外的词汇标记(“a”就是一个词汇标记)。 2.1 简单的三元组 最简单的三元组语句是一个主谓宾的序列,每个三元组通过空格分隔主谓宾,以“.”号结束。 EXAMPLE 2   < http://example.org/#spiderman > < http://www.perceive.net/schemas/relationship/enemyOf > < http://example.org/#green-goblin > . 2.2 谓词列表 三元组有一种情况是,同一个主语,后面跟着很多谓词。谓词列表就是表示一个主语跟着一连串谓词的情况,通过";"号分隔,后面跟着宾语。它可以表示一连串的三元组,这些三元组有一个共同的主语,后面的谓词和宾语与前面的主语组成一个三元组。因此,";"号被用于有重复主语的三元组,不同仅仅在于谓词和宾语。 下面两个例子描述Spiderman的三元组是等价的。 EXAMPLE 3    < http://example.org/#spiderman > < http://www.perceive.net/schemas/relationship/enemyOf > < http://example.org/#green-goblin > ;                         < http://xmlns.com/foaf/0.1/name > "Spiderman" . EXAMPLE 4   < http://example.org/#spiderman > < http://www.perceive.net/schemas/relationship/enemyOf > < http://example.org/#green-goblin > .    < http://example.org/#spiderman > < http://xmlns.com/foaf/0.1/name >"Spiderman" . 2.3 宾语列表 像谓词重复使用主语一样,宾语也经常重复使用相同的主语和谓词组合。宾语列表就是指一连串的宾语,通过","分隔,跟在谓词后面。它表示一连串的三元组,这些三元组具有相同的主语和谓词,只有宾语不同,因此,","被用于重复主语和谓词,只有宾语不同的三元组中。 以下两个例子是等价的,都是用两种语言描述Spiderman的名字。 EXAMPLE 5    < http://example.org/#spiderman > < http://xmlns.com/foaf/0.1/name > "Spiderman", "Человек-паук"@ru . EXAMPLE 6    < http://example.org/#spiderman > < http://xmlns.com/foaf/0.1/name > "Spiderman" .    < http://example.org/#spiderman > < http://xmlns.com/foaf/0.1/name > "Человек-паук"@ru . 在RDF概念中,定义了三种类型的RDF术语,分别是IRIs(国际资源标识符),字面量和空节点。Turtle采用多种方式来描述它们。 2.4 IRIs IRIs可以被写成相对的或绝对的IRIs或者前缀名。相对和绝对IRIs是由"<"和">"包围,比如 < http://example.org/#green-goblin > . , 还可能包含数字转义序列。 像<#green-gobin>一样的相对IRIs相对于当前的基准IRI解析。一个新的基准IRI使用"@base"或"BASE"指令来定义,这个操作符的标准规范定义在6.3节IRI引用中。 在三元组中谓词位置的标识符"a"代表着IRI http://www.w3.org/1999/02/22-rdf-syntax-ns#type . 前缀名称由前缀标签和本地部分组成,以":"符号分隔。一个前缀名称通过连接前缀对应的IRI和本地部分,将这个前缀名称转换为IRI。"@prefix"或者"PREFIX"指令将前缀标签和IRI相关联,后续的"@prefix"或"PREFIX"指令可以重新映射同样的前缀标签。 注意 Turtle语言的语法最开始仅允许使用包含"@"符号来书写前缀和基准指令。大写的"PREFIX"和"BASE"格式是后来增加的,用来对齐Turtle语法和SPARQL语法。建议使用"@prefix"和"@base"格式来序列化RDF,直到RDF1.1 Turtle解析器广泛部署。 下面使用前缀名称来写 http://www.perceive.net/schemas/relationship/enemyOf 1. 为IRI定义前缀标签 http://www.perceive.net/schemas/relationship/ 当作 somePrefix 2. 然后书写 somePrefix:enemyOf,等价于写了 < http://www.perceive.net/schemas/relationship/enemyOf > 上面的例子,可以对前缀声明使用原始的Turtle语法编写: EXAMPLE 7    @prefix somePrefix: < http://www.perceive.net/schemas/relationship/ > .    < http://example.org/#green-goblin > somePrefix:enemyOf < http://example.org/#spiderman > . 或者对前缀声明使用SPARQL语法: EXAMPLE 8    PREFIX somePrefix: < http://www.perceive.net/schemas/relationship/ >    < http://example.org/#green-goblin > somePrefix:enemyOf < http://example.org/#spiderman > . 注意 前缀名称是XML限定名的超级。它们的区别在于前缀名称的本地部分可能包含:    前导数字,例如 leg:3032571 or isbn13:9780136019701    非前导冒号,例如 og:video:height    保留字符转义序列,例如 wgs:lat\-long 下面的例子9展示了Turtle编写IRIs的所有不同方式。 EXAMPLE 9    # A triple with all absolute IRIs    < http://one.example/subject1 > < http://one.example/predicate1> < http://one.example/object1 > .    @base < http://one.example/ > .    < subject2 > < predicate2 > < object2 > . # relative IRIs, e.g. http://one.example/subject2    BASE < http://one.example/ >    < subject2 > < predicate2 > < object2 > . # relative IRIs, e.g. http://one.example/subject2    @prefix p: < http://two.example/ > .    p:subject3 p:predicate3 p:object3 . # prefixed name, e.g. http://two.example/subject3    PREFIX p: < http://two.example/ >    p:subject3 p:predicate3 p:object3 . # prefixed name, e.g. http://two.example/subject3    @prefix p: < path/ > . # prefix p: now stands for http://one.example/path/    p:subject4 p:predicate4 p:object4 . # prefixed name, e.g. http://one.example/path/subject4    @prefix : < http://another.example/ > . # empty prefix    :subject5 :predicate5 :object5 . # prefixed name, e.g. http://another.example/subject5    :subject6 a :subject7 . # same as :subject6 < http://www.w3.org/1999/02/22-rdf-syntax-ns#type > :subject7 .    < http://伝言.example/?user=أكرم&channel=R%26D > a :subject8 . # a multi-script subject IRI . 注意 "@prefix"和"@base"指令需要在IRI后面跟"."结尾,等价的PREFIX"和"BASE"不必在IRI后面跟"."结尾。 2.5 RDF字面量 字面量用来标识像字符串,数字,日期等类型的值。 EXAMPLE 10    @prefix foaf: < http://xmlns.com/foaf/0.1/ > .    < http://example.org/#green-goblin > foaf:name "Green Goblin" .    < http://example.org/#spiderman > foaf:name "Spiderman" . 2.5.1 引用的字面量 引用的字面量(语法也称RDF字面量)具有这样的词汇格式,后面跟语言标记,数据类型标记,或什么都不跟。这种词汇格式的表现是有一个开始分界符,例如"(U+0022),一个允许的字符序列或者数字转义序列或者字符串转义序列,还有一个结束的分界符。对应的RDF词汇格式是在处理任意转义序列之后,分界符之间的字符。语言标记如果存在的话,跟在"@"(U+0040)后面,如果没有语言标记,可能会有数据类型IRI,跟在"^^"(U+005EU+005E)后面,在Turtle中的数据类型IRI可以使用一个绝对IRI,一个相对IRI或者前缀名称来编写。如果没有语言标记,也没有数据类型IRI,数据类型就是xsd:string. "\"(U+005C)除了作为转义序列的一部分是不会出现在任何引用的字面量中。其它限制就和分界符有关了。 以单引号'(U+0027)作为字面量的分界符,不可以包含单引号',换行LF(U+000A)或回车CR(U+000D)。 以双引号"作为字面量的分界符,不可以包含双引号",换行LF(U+000A)或回车CR(U+000D)。 以三个单引号'''作为字面量的分界符,不可以包含三个单引号'''。 以三个双引号"""作为字面量的分界符,不可以包含三个双引号"""。 EXAMPLE 11    @prefix rdfs: < http://www.w3.org/2000/01/rdf-schema#> .    @prefix show: < http://example.org/vocab/show/ > .    @prefix xsd: < http://www.w3.org/2001/XMLSchema# > .    show:218 rdfs:label "That Seventies Show"^^xsd:string . # literal with XML Schema string datatype    show:218 rdfs:label "That Seventies Show"^^< http://www.w3.org/2001/XMLSchema#string > . # same as above    show:218 rdfs:label "That Seventies Show" . # same again    show:218 show:localName "That Seventies Show"@en . # literal with a language tag    show:218 show:localName 'Cette Série des Années Soixante-dix'@fr . # literal delimited by single quote    show:218 show:localName "Cette Série des Années Septante"@fr-be . # literal with a region subtag    show:218 show:blurb '''This is a multi-line # literal with embedded new lines and quotes    literal with many quotes (""""")    and up to two sequential apostrophes ('').''' . 2.5.2 数字 数字能够像其它字面量一样表示,也是由词汇形式和数字类型组成(比如,"-0.5"^^xsd:decimal)。Turtle有一种简写语法来编写整型数值,任意精度的十进制数值,以及双精度浮点型数值。 数据类型 缩写 语法 描述 xsd:integer -5 "-5"^^xsd:integer 整型数据由一个正负号和一连串的数字组成,整型数据的正则表达式为"[+-]?[0-9]+"。 xsd:decimal -5.0 "-5.0"^^xsd:decimal 任意精度十进制数是由正负号,0或多个数字,一个小数点,和一个或多个数字组成。十进制数对应的正则表达式为"[+-]?[0-9]*\.[0-9]+" xsd:double 4.2E9 "4.2E9"^^xsd:double 双精度浮点数是由可选小数点的有符号尾数,字母"e"或"E",和一个可选的有符号整型指数组成。指数的正则表达式为"[+-]?[0-9]+",尾数的正则表达式为:"[+-]?[0-9]+\.[0-9]+","[+-]?\.[0-9]+"或"[+-]?[0-9]" EXAMPLE 12   @prefix : < http://example.org/elements > .    < http://en.wikipedia.org/wiki/Helium >     :atomicNumber 2 ; # xsd:integer     :atomicMass 4.002602 ; # xsd:decimal     :specificGravity 1.663E-4 . # xsd:double 2.5.3 布尔值 布尔值可以用“true”或“false”(区分大小写)来编写,表示数据类型为xsd:boolean的RDF字面量。 EXAMPLE 13   @prefix : < http://example.org/stats > .    < http://somecountry.example/census2007 >      :isLandlocked false . # xsd:boolean 2.6 RDF空节点 在Turtle中RDF空节点用_:后面跟空节点标签来表示,空节点标签是一连串的名称字符。标签中的字符建立在PN_CHARS_BASE(定义在6.5节)之上,列举如下: + 字符_和数字可以出现在空节点标签的任意位置 + 字符.可以出现在除了开始和最后字符的任意位置 + 字符-,U+00B7, U+0300 到 U+036F 和 U+203F 到 U+2040 允许出现在除了第一个字符的任意位置。 为文档中每个唯一的空节点标签分配一个新的RDF空白节点。重复使用相同的空节点标签标识相同的RDF空节点。 EXAMPLE 14   @prefix foaf: < http://xmlns.com/foaf/0.1/ > .    _:alice foaf:knows _:bob .    _:bob foaf:knows _:alice . 2.7 Turlte中的嵌套无标签空节点 在Turtle中,当匹配空节点属性列表和术语ANON时,新的RDF空节点也被分配,两种情况的空节点可以出现在三元组的主语和宾语的位置,这时候,主语或宾语就是一个新的RDF空节点。匹配嵌入在空节点属性列表中的谓词宾语列表,产生的三元组主语也可以由空节点来充当。这些三元组的产生被描述为谓词列表。空节点也会分配给下面描述的集合。 EXAMPLE 15   @prefix foaf: < http://xmlns.com/foaf/0.1/ > .    # Someone knows someone else, who has the name "Bob".    [] foaf:knows [ foaf:name "Bob" ] . Tuttle语法鱼汛空节点属性列表嵌套。在这个例子中,每一个内部的[建立一个新的主语空节点,恢复到外部的节点]结束。作为谓词宾语列表的当前主语。 在空节点属性列表中使用谓词宾语列表来表示节点的一连串属性,是一种常用的习惯。 缩写 EXAMPLE 16   @prefix foaf: < http://xmlns.com/foaf/0.1/ > .    [ foaf:name "Alice" ] foaf:knows [      foaf:name "Bob" ;       foaf:knows [        foaf:name "Eve" ] ;      foaf:mbox < bob@example.com > ] . 对应的简单三元组 EXAMPLE 17    _:a < http://xmlns.com/foaf/0.1/name > "Alice" .    _:a < http://xmlns.com/foaf/0.1/knows > _:b .    _:b < http://xmlns.com/foaf/0.1/name > "Bob" .    _:b < http://xmlns.com/foaf/0.1/knows > _:c .    _:c < http://xmlns.com/foaf/0.1/name > "Eve" .    _:b < http://xmlns.com/foaf/0.1/mbox > < bob@example.com > . 2.8 集合 RDF为节点列表提供了一种叫做集合的结构。Turtle语法中,集合有可能是由()括起来的空列表。这个集合表示一个rdf:first/rdf:rest的列表结构,列表结构中,rdf:first语句的对象的序列是()括起来的术语顺序。 (...)语法必须出现在一个三元组的主语和宾语位置,在列表头部的空节点是三元组的主语或者宾语。 EXAMPLE 18    @prefix : < http://example.org/foo > .    # the object of this triple is the RDF collection blank node    :subject :predicate ( :a :b :c ) .    # an empty collection value - rdf:nil    :subject :predicate2 () . 3 举例 下面的例子是对RDF/XML Syntax specification(example1.ttl)中的example 7的内容(https://www.w3.org/TR/rdf-syntax-grammar/#example7),使用Turtle翻译过来,也就是对RDF的Turtle表示。 EXAMPLE 19   @prefix rdf: < http://www.w3.org/1999/02/22-rdf-syntax-ns# > .   @prefix dc: < http://purl.org/dc/elements/1.1/ > .   @prefix ex: < http://example.org/stuff/1.0/ > .    < http://www.w3.org/TR/rdf-syntax-grammar >      dc:title "RDF/XML Syntax Specification (Revised)" ;       ex:editor [        ex:fullname "Dave Beckett";        ex:homePage < http://purl.org/net/dajobe/ >      ] . 一个具有两个字面量的RDF集合的举例 EXAMPLE 20    PREFIX : < http://example.org/stuff/1.0/ >    :a :b ( "apple" "banana" ) . EXAMPLE 20是对EXAMPLE 21(example2.ttl)的简写 EXAMPLE 21   @prefix : < http://example.org/stuff/1.0/ > .   @prefix rdf: < http://www.w3.org/1999/02/22-rdf-syntax-ns# > .    :a :b      [ rdf:first "apple";        rdf:rest [ rdf:first "banana";           rdf:rest rdf:nil ]      ] . 下面的例子,有两个内容相同的三元组,以普通和长文本两种方式编写,三元组的宾语是字面量,字面量含有换行符。这个例子中,行是通过换行LF(LINE FEED characters,U+000A)断开的(example3.ttl)。 EXAMPLE 22    @prefex: < http://example.org/stuff/1.0/ > .    :a :b "The first line\nThe second line\n more" .    :a :b """The first line    The second line     more""" . 从Turtle语法可以看出,一个集合要么是主语要么是宾语。如果集合有一个或多个对象,那么对于第一个对象来说,主语或宾语将会是新增的空节点,如果集合是空集,则rdf:nil。 下面是举例 EXAMPLE 23    @prefex: < http://example.org/stuff/1.0/ > .    (1 2.0 3E1) :p "w" . EXAMPLE 23用语法糖效果写出来,就是EXAMPLE 24的表达,需要注意的是空节点b0,b1和b2没有在RDF图的其他地方出现。 EXAMPLE 24   @prefix rdf : < http://www.w3.org/1999/02/22-rdf-syntax-ns# > .      _:b0 rdf:first 1 ;         rdf:rest _:b1 .      _:b1 rdf:first 2.0 ;         rdf:rest _:b2 .      _:b2 rdf:first 3E1 ;         rdf:rest rdf:nil .      _:b0 :p "w" . RDF集合是能嵌套的,能够包括其他的语法形式。 EXAMPLE 25    PREFIX: < http://example.org/stuff/1.0/ >    (1 [:p :q] ( 2 ) ) :p2 :q2 . 语法糖描述如下: EXAMPLE 26   @prefix rdf : < http://www.w3.org/1999/02/22-rdf-syntax-ns# > .      _:b0 rdf:first 1 ;         rdf:rest _:b1 .      _:b1 rdf:first _:b2 .      _:b2 :p :q .      _:b1 rdf:rest _:b3 .      _:b3 rdf:first _:b4 .      _:b4 rdf:first 2 ;         rdf:rest rdf:nil .      _:b3 rdf:rest rdf:nil . 4. Turtle与SPARQL的对比 SPARQL 1.1 查询语言对于它的TriplesBlock产品也使用Turtle风格的语法,这个产品与Turtle语言有一些差别:   1. SPARQL允许RDF字面量作为RDF三元组的主语   2. SPARQL允许变量(?name 或者 $name)出现在三元组形式中的任何部分   3. Turtle允许prefix和base声明在三元组外的任何地方,SPARQL中,仅允许在SPARQL查询的开头声明。   4. 除了"a",SPARQL使用不区分大小写的关键字。Turtle的@prefix和@base声明是区分大小写的,SPARQL使用的PREFIX和BASE是不区分大小写的。   5. "true"和"false"在SPARQL中是不区分大小写的,在Turtle中是区分大小的。TrUe在Turtle中不是一个有效的布尔值。 查看Syntax for IRIs和SPARQL查询文档的SPARQL Grammar部分可以获取更多信息。 5 一致性 定义一致性标准的规范主要包括 Turtle文档 Turtle解析器 一致性的Turtle文档是一个Unicode字符串,符合定义在第6节Turlte语法中的附加约束,开始于turtleDoc产品。Turtle文档序列化了一个RDF图。 一个一致性的Turtle解析器是一个能够代表应用读取Turtle文档的系统。它产生了序列化的RDF数据集,定义在第7节的解析器中,通常通过一些API的形式用于应用程序。 描述Turtle语言的IRI是: http://www.w3.org/ns/formats/Turtle 注意 这个规范没有定义Turtle解析器如何处理输入不一致的文档 5.1 媒体类型和内容编码 Turtle的媒体类型是text/turtle。Turtle的内容编码通常是UTF-8。在text/媒体类型树允许无数据集类型发送UTF-8之,mime type上的字符集参数是需要的。对于媒体类型注册形式参见附件B的国际媒体类型,文件扩展和Macintosh文件类型。 6 Turtle语法 Turtle文档是一个使用UTF-8编码的Unicode特征的字符串。Unicode字符仅允许在U+0000到U+10FFFF范围内(包括U+10FFFF)。 6.1 White Space(空格) White Space(WS)用于分隔两个术语,如果不分隔就会被识别为一个术语。下面用大写字母表示的规则名称表明空白的重要位置;这些构成了对于构建Turtle解析器的终端的一种可能选择。 空格在字符串中是很重要的。 6.2 注释 Turtle中的注释需要使用字符"#",在IRIREF或者字符串之外,一直延续到行的结束(标记为U+000D或者U+000A)或者文件的结束(如果在注释标记后行没有结束的话)。注释是被看作为空格。 6.3 国际资源标识符参考文献(IRI References) 本节没有进行翻译,以下是对本节的说明。在本节列出了一些参考的文献,URI:Generic Syntax[RFC3986],IRIs[RFC3987]。里面描述了参考的一些内容,参考的章节由5.1.1,5.1.2,5.1.3,5.1.4,5.2等,着这些章节都是缺失的。 6.4 转义序列 在turtle文档中使用了三种转义形式: 数字转义序列表示Unicode字码点: 转义序列 Unicode代码点 '\u' hex hex hex hex 在U+00
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信