Index

json-ld

Le JSON-LD, est une méthode, basé sur le format JSON, qui permet de rendre les données structurées sémantiquement. Il est bien sûr inspiré du Resource Description Framework (RDF).

Exprimer un curriculum vitae avec json-ld

Sur http://schema.org/ il n'y a pas d'exemple explicite de CV. Pour y arriver il faut faire pas mal de recherches par-ci par-là sur schema.org, et sur le Web en général. Mais je pense avoir un résultat qui est logique et expressif.

Les infos de bases

Cela correspond généralement à l'en-tête et c'est là qu'on retrouve le nom et les coordonnées, c'est un peu la carte de visite. Cette partie est plutôt facile à faire en JSON-LD.

{
  "@context": [
    "http://schema.org/"
  ],
  "@type": "Person",
  "name": "Hugo Soucy",
  "@id": "#moi",
  "jobTitle": "Développeur web",
  "telephone": "+1 581-996-6481",
  "email": "hugo@soucy.cc",
  "url": "https://hugo.soucy.cc/",
  "address": {
    "@type": "PostalAddress",
    "addressCountry": "CA",
    "addressLocality": "Lévis",
    "addressRegion": "Québec"
  },
  "image": "//hugo.soucy.cc/assets/images/hs-duochrome-319x424-wimm.png",
  "description": "Développeur web spécialisé en accessibilité, possédant plus de deux décennies d'expérience. J'excelle à programmer des interfaces robustes, réactives, performantes et esthétiques.",
  "hasOccupation": [ ... ]
}

Ici, j'utilise http://schema.org/ comme valeur à @context. Un contexte est la source des termes (ontologie) qui seront utilisés pour structurer sémantiquement les données. Il peut y avoir des termes globaux, mais en général, ils sont spéciphiques à un @type. Ici, c'est moi que je décris, alors j'utilise le type Person (https://schema.org/Person). Notez qu'une propriété d'un type, peut avoir comme valeur un autre type de données. Comme ci-dessus où la propriété adresse utilise le type PostalAddress et ses propriétés pour me permettre d'inscrire ma ville, ma région et mon pays.

J'aurais pu prendre un autre modèle de données, comme par exemple Friend of a Friend (FOAF).

{
  "@context": [
    "http://xmlns.com/foaf/0.1/"
  ],
  "@type": "Person",
  "firstName": "Hugo",
  "lastName": "Soucy",
  "nick": "hs0ucy"
  "@id": "https://hugo.soucy.cc#i",
  "mbox": "hugo@soucy.cc",
  "jabberID": "hs0ucy@soucy.cc",
  "homepage": "https://hugo.soucy.cc/", 
  "depiction": "//hugo.soucy.cc/assets/images/hs-duochrome-319x424-wimm.png"      
}

La liste des emplois

Le type Person contient la propriété hasOccupation, qui ici, a pour valeur un array contenant des objets de type EmployeeRole pour chacun des emplois occupés.

Remarquez également le deuxième hasOccupation qui me permet d'utiliser les propriétés skills et responsibilities dans un objet de type Occupation. Et pour terminer, il y a une propriété owner qui me sert à décrire l'employeur.

"hasOccupation": [
    {
      "@type": "EmployeeRole",
      "@id": "kronos",
      "roleName": "Développeur web front-end sénior",
      "startDate": "2018",
      "endDate": "2019",
      "hasOccupation": {
        "@type": "Occupation",
        "responsibilities": [
          "participer à la refonte des interfaces du CRM Equisoft/Connect",
          "implémenter le design system"
        ],
        "skills": [
          "collaborer avec différentes parties prenantes",
          "planifier et documenter les livrables"
        ]
      },
      "owner": {
        "@type": "Organization",
        "name": "Equisoft (Kronos Technologies)",
        "sameAs": "https://www.equisoft.com/",
        "address": {
          "@type": "PostalAddress",
          "addressLocality": "Québec",
          "addressRegion": "QC"
        }
      }
    },
    {
      "@type": "EmployeeRole",
      "@id": "savoirfairelinux",
      "roleName": "Consultant en logiciel libre / leader front-end",
      "startDate": "2014",
      "endDate": "2018",
      "hasOccupation": {
        "@type": "Occupation",
        "responsibilities": [
          "concevoir des sites web responsives sous différentes plateformes",
          "faire l'analyse front-end de mandats et de futurs mandats (temps, ressources, coûts)",
          "élaborer et animer la pratique front-end de l'équipe",
          "répartir les assignations selon les besoins du calendrier de production",
          "participer à la planification et à la rédaction d’appels d’offres",
          "collaborer aux processus d'embauche et aux évaluation des membres de l'équipe",
          "rédiger de la documentation technique"
        ],
        "skills":  [
          "élaborer et mettre place des bonnes pratiques",
          "gérer le temps et les priorités des projets",
          "répartir des tâches",
          "créer, monter et donner des formations"
        ]
      },
      "owner": {
        "@type": "Organization",
        "name": "Savoir-faire Linux",
        "sameAs": "https://savoirfairelinux.com/fr",
        "address": {
          "@type": "PostalAddress",
          "addressLocality": "Québec",
          "addressRegion": "QC"
        }
      }
    }
]