如何在 RDF 中对长而多语言的人名进行编码?

How to encode long and multilingual personal names in RDF?

例如,完整的职位名称是

Steven Paul "Steve" Jobs

天后歌手是

Freddie Mercury,本名 Farrokh Bulsara

埃尔顿·约翰 Sir Elton Hercules John 出生于 Reginald Kenneth Dwight

如何用RDF存储所有这些?不同语言的同名怎么办? FOAF dictionary 够吗?

这是将很多不同的问题合而为一。让我们从史蒂夫·乔布斯开始。如何记录下来取决于您希望此数据可用的粒度。但是,无论您想要哪种方式,FOAF vocabulary 都足以表达。 simplest/least 细粒度的方法只是将整个名称粘贴在 foaf:name 属性:

:steveJ a foaf:Person ;
        foaf:name "Steven Paul \"Steve\" Jobs" .

但是,FOAF 还提供了一些更具体的名称属性来进一步分解它。例如:

:steveJ a foaf:Person ;
        foaf:givenName "Steven Paul";
        foaf:familyName "Jobs" ;
        foaf:nick "Steve" .

一个方便的组合是将任何您喜欢的 'default name' 编码为 rdfs:label,这是大多数 RDF 消费应用程序最初用来显示资源的方式。例如像这样:

:steveJ a foaf:Person ;
        rdfs:label "Steve Jobs";
        foaf:name "Steven Paul \"Steve\" Jobs";
        foaf:givenName "Steven Paul";
        foaf:familyName "Jobs" ;
        foaf:nick "Steve" .

因此,作为此数据的作者,您在 FOAF 词汇表中有足够的表达能力,可以按照您认为合适的方式对其进行分解 - 甚至可以提供多余的替代方案,如您在上面看到的那样。

至于 Freddie Mercury、Elton John 和他们的本名,FOAF 没有提供具体的 属性。您当然可以将它记录为 foaf:name 属性 的第二个值,但是这样很难区分哪个名称是 'current'。如果这种区别很重要,您将需要为此使用其他东西。 DBPedia 提供了针对这种情况非常具体的 dbo:birthName 属性,或者更通用的 dbo:alias

最后,不同的语言:这很简单。 RDF 文字带有一个(可选的)语言标签,用于指定编写名称的语言。以城市名称为例(因为我更容易想出不同语言的不同名称)- 荷兰城市海牙:

:TheHague rdfs:label "The Hague"@en ; // English name
          rdfs:label "Den Haag"@nl ;  // Dutch name
          rdfs:label "La Haye"@fr .   // French name