Search code examples
rdfontologyfoaf

How to encode long and multilingual personal names in RDF?


For example, full Jobs name is

Steven Paul "Steve" Jobs

while Queen singer was

Freddie Mercury with born name of Farrokh Bulsara.

Elton John is Sir Elton Hercules John and born Reginald Kenneth Dwight.

How to store all this with RDF? What about same name in different languages? Is FOAF dictionary enough for this?


Solution

  • This is a lot of different questions folded into one. Let's start with Steve Jobs. How you write this down depends on the granularity with which you want this data available. Whichever way you want it though, the FOAF vocabulary is expressive enough. The simplest/least fine-grained way is just to stick the entire name in the foaf:name property:

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

    However, FOAF also offers a couple of more specific name-properties to further break this down. For example:

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

    A handy combination is to have whatever you prefer to be the 'default name' encoded as an rdfs:label, which is what most RDF consuming applications will initially use to display a resource. For example like so:

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

    So as an author of this data you have enough expressivity in FOAF vocabulary to break this down however you see fit - or even to offer redundant alternatives, like you see above.

    Now as for Freddie Mercury, Elton John and their birth names, FOAF does not offer a specific property for that. You can of course just record it as a second value of the foaf:name property, but that makes it hard to distinguish which name is the 'current' one. If that distinction is important you will need to use something else for this. DBPedia offers the dbo:birthName property which is very specific for this case, or the more general dbo:alias.

    Finally, different languages: this is fairly straightforward. RDF literals carry an (optional) language tag that specifies the language in which a name is written. Let's take a city name as an example (since it's easier for me to come up with different names in different languages) - the Dutch city of The Hague:

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