例如,完整的作业名称是
Steven Paul "Steve" Jobs
而女王歌手是
Freddie Mercury
与出生的名字Farrokh Bulsara
。
埃尔顿约翰是Sir Elton Hercules John
和出生Reginald Kenneth Dwight
。
如何用 RDF 存储所有这些?不同语言的同名怎么办?FOAF 字典足够吗?
这是许多不同的问题合二为一。让我们从史蒂夫乔布斯开始。如何写下来取决于您希望这些数据可用的粒度。不管你想要哪种方式,FOAF 词汇都足够富有表现力。最简单/最不细粒度的方法就是将整个名称粘贴在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" .
一个方便的组合是将您喜欢的任何“默认名称”编码为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
属性的第二个值,但这使得很难区分哪个名称是“当前”名称。如果这种区别很重要,您将需要为此使用其他东西。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