2012-07-12

Names

As part of my day job I've recently been digging into the details of the schema.org types... specifically this one. One of the surprising bits I noticed was the absolutely horrible and very inadequate handling of personal names within the current schema for a Person. Currently, structured names are not handled very well. For instance, if I wanted to provide the native and anglicized names of author Lev Nikolayevich Tolstoy, it would be a bit of a mess under the current system that places familyName, givenName and additionalName as simple unstructured text properties directly on the person object. There's a better approach...

Let's start by defining a new schema.org/Intangible object called "PersonalName" ...

  |-- Intangible
           |
           |-- Name
                   |
                   |-- PersonalName (
                         honorific,
                         honorificPrefix,
                         honorificSuffix,
                         byname,
                         givenName,
                         middleName,
                         familyName,
                         generationName,
                         patronymic,
                         matronymic,
                         diminutive,
                         pronunciation,
                         pronunciationExample
                       )

Then, let's add the following new properties to the schema.org/Person object ...
  • alternateName,
  • formerName,
  • nativeName,
  • commonName,
  • nickname,
  • preferredName,
  • professionalName,
  • psuedonym

And remove / deprecate the following from schema.org/Person...
  • additionalName
  • familyName
  • honorificPrefix
  • honorificSuffix
  • givenName
For example,

<div itemscope itemtype="http://schema.org/Person"> <div itemprop="nativeName" itemscope itemtype="http://schema.org/PersonalName"> <span itemprop="givenName">&#x41B;&#x435;&#x432;</span> <span itemprop="patronymic">&#x41D;&#x438;&#x43A;&#x43E;&#x43B;&#x430;&#x301;&#x435;&#x432;&#x438;&#x447;</span> <span itemprop="familyName">&#x422;&#x43E;&#x43B;&#x441;&#x442;&#x43E;&#x301;&#x439;</span> </div> <div itemprop="commonName" itemscope itemtype="http://schema.org/PersonalName"> <span itemprop="givenName">Lev</span> <span itemprop="patronymic">Nikolayevich</span> <span itemprop="familyName">Tolstoy</span> </div> <div itemprop="alternateName" itemscope itemtype="http://schema.org/PersonalName"> <span itemprop="givenName">Leo</span> <span itemprop="familyName">Tolstoy</span> </div> </div>

When encoded into an Activity Stream, it would look something like.

{ "objectType": "person",
"displayName": "Lev Nikolayevich (Leo) Tolstoy", "schema_org": {
"commonName": [{ "givenName": ["Lev"], "patronymic": ["Nikolayevich"], "familyName": ["Tolstoy"] }], "alternateName": [{ "givenName": ["Leo"], "familyName": ["Tolstoy"] }], "nativeName": [{ ... }] } }

Another example... this one encoding the anglicized and arabic names of Saudi Arabia's King Abdullah... (if any native speakers spot any problems with this example, please let me know so that I can fix the example)

<div itemscope itemtype="http://schema.org/Person"> <div itemprop="commonName" itemscope itemtype="http://schema.org/PersonalName"> <span itemprop="byName">Custodian of the Two Holy Mosques</span>, <span itemprop="honorific">King</span> <span itemprop="givenName">Abdullah<span> <span itemprop="patronymic">bin Abdulaziz</span> <span itemprop="familyName">al Saud</span> </div> <div itemprop="nativeName" itemscope itemtype="http://schema.org/PersonalName" dir="rtl"> <span itemprop="byName">
&#x62E;&#x627;&#x62F;&#x645; &#x627;&#x644;
&#x62D;&#x631;&#x645;&#x64A;&#x646;&#x627;
&#x644;&#x634;&#x631;&#x64A;&#x641;&#x64A;
&#x646;</span>, <span itemprop="honorific">&#x645;&#x644;&#x643;</span> <span itemprop="givenName">&#x639;&#x628;&#x62F; 
&#x627;&#x644;&#x644;&#x647;<span> <span itemprop="patronymic">&#x628;&#x646; &#x639;&#x628;&#x62F;
&#x627;&#x644;&#x639;&#x632;&#x64A;&#x632;</span> <span itemprop="familyName">&#x622;&#x644; &#x633;&#x639;
&#x648;&#x62F;</span> (<span itemprop="pronunciation">Abd ull&#x101;h ibn &lsquo;Abd al-&lsquo;Az&#x12B;z &#x100;l Su&lsquo;&#x16B;d</span>) </div> </div>

And one last case.. this one using a Japanese name with the -san honorific and pronunciation detail...

<div itemscope itemtype="http://schema.org/Person">
 <div itemprop="name" itemscope itemtype="http://schema.org/PersonalName">
   <span itemprop="givenname">Hideo</span>
   <span itemprop="familyname">Tanaka</span><span itemprop="honorificSuffix">-san</span>
 </div>
 <div itemprop="nativename" itemscope itemtype="http://schema.org/PersonalName">
   <span itemprop="givenname"&gt;&#x82F1;&#x592B;</span>
   <span itemprop="familyname">&#x7530;&#x4E2D;</span>
   <span itemprop="honorificSuffix">&#x3055;&#x3093;</span>
  (<span itemprop="pronunciation">&#x3072;&#x3067;&#x304A; &#x305F;&#x306A;&#x304B;</span>)
 </div>
</div>

This type of approach provides significantly more meaning and power than current structure. I'm sure more work would need to be done on it to tweak the details. Comments and feedback are always welcome... I'm hoping to evolve this a bit further then see about bringing it up for discussion on the public-vocabs list soon.

No comments:

Post a Comment