L’ontologie schema, une brève description

Élément coeur du web sémantique, l’ontologie rend possible le partage de l’organisation et de la structure des métadonnées. Les applications des ontologies concernent de manière interne la structuration des métadonnées et à l’adresse des moteurs de recherche le référencement naturel c’est à dire le signalement des métadonnées d’une page ou d’un élément de page. Les ontologies possèdent à la fois un caractère structurant et un intérêt marketing. Les moteurs de recherche, les réseaux sociaux, les créateurs de plateformes et les éditeurs de sites à la recherche d’audience se sont donc emparés du sujet.

Les moteurs Google, Bing (Microsoft), Yahoo et Yandex proposent une première version de schema en 2011 en vue de créer leurs bases de connaissances en échange d’un bon référencement. Dan Brickley gère le projet de manière ouverte depuis le lancement et plusieurs communautés du World Wide Web Consortium (W3C) soutiennent l’initiative. Ainsi, les groupes “Bibframe2Schema.org“, “Bioschemas for lifesciences“, “Credible Web“, “Digital Asset Management Industry Business Ontology“, “Educational and Occupational Credentials in schema.org“, “Financial Industry Business Ontology“, “Healthcare Schema Vocabulary“, “Locations and Addresses”, “Meat Products”, “Schema Architypes”, “Schema Bib Extend“, “Schema Course extension”, “Schema Extensions for IoT”, “Schema Generator”, “Schema.org“, “Schema.org for datasets”, “Smart Manufacturing”, “Sport Schema”, “The Tourism Structured Web Data Community Group”, “Video Game Schema”, “WebAPI Discovery” ont pris part aux débats et proposent des extensions générales et spécialisées.

Au final, disponible sur github et documenté sur schema.org, schema définit pour la version 7.0 de mars 2020 1024 classes et plus de 900 propriétés. Une organisation hiérarchique des classes est proposée. Des exemples d’exposition des métadonnées aux formats Microdata, RDFa et JSON-LD apportent une aide concernant la syntaxe d’exposition souhaitée. Plus compact et aisé à manipuler, JSON-LD est de nos jours le format d’exposition recommandé sur le web. Avec schema, tout objet peut être caractérisé par au moins une classe à laquelle plusieurs propriétés spécifiques ou non spécifiques sont associées. Les Classes (encore parfois appelées Types) se distinguent aisément des propriétés par le fait que la première lettre de leur nom est en majuscule.

Nous survolerons dans la première partie de cet article la hiérarchie des classes de schema. Celles-ci se trouve parcourue par une logique de subsomption – du plus général Thing au plus spécifique – et par des règles d’application. Nous évoquerons quelques unes des extensions de schema. Des exemples d’usages généraux de l’ontologie exprimée en JSON-LD (JavaScript Object Notation for Linked Data) sont fournis. Voyons cela plus en détail si vous le voulez bien.

  1. Arborescence des Classes
    • 1.0 Thing, classe racine
    • 1.1 Action
    • 1.2 CreativeWorks
    • 1.3 Event
    • 1.4 Intangible
    • 1.5 MedicalEntity
    • 1.6 Organization
    • 1.7 Person
    • 1.8 Place
    • 1.9 Product
  2. DataType
  3. Extensions de schema
  4. Do you speak schema ? Exemples généraux
  5. Conclusion

1. Arborescence des Classes

Schema définit la classe racine Thing ainsi que neuf classes de premier niveau ici résumées. Les valeurs attendues en renseignement d’une propriétés sont renseignées à l’aide d’une flèche (->). Le caractère (|) signifie “ou”. Quelques équivalences avec les propriétés de l’ontologie Dublin Core (=dct) sont mentionnées. Les propriétés dédiées à la description des personnes sont notées en gras.

1.0 Thing, classe racine

9 Classes filles de premier niveau sont détaillées dans les paragraphes suivants.

12 Propriétés de Thing : additionalType (->URL), alternateName (->Text), description (->Text; =dct:description), disambiguatingDescription (->Text), identifier (->Text | URL | PropertyValue; =dct:identifier), image (->ImageObject | URL), mainEntityOfPage (->CreativeWork | URL), name (->Text; =dct:title), potentialAction (->Action), sameAs (->URL), subjectOf (->CreativeWork | Event; =dct:subject), url (->URL)

Les propriétés name, image, URL, sameAs, sont définies au niveau de la racine. Cela signifie que tous les objets sont susceptibles d’être dérits à l’aide de ces propriétés. La propriété additionalType rend possible l’utilisation d’une classe non énoncée dans schema mais dans une autre ontologie comme par exemple Product Types Ontology (pto), http://www.productontology.org/. additionalType introduit un mécanisme formel d’extension.

1.1 Action, 11 propriétés et 109 sous-classes

Action est décrit par onze propriétés spécifiques et hérite des douze de Thing. 109 types d’Action sont au total définis.

14 sous-classes de premier niveau (109 sous-classes d’Action au total) : AchieveAction, AssessAction, ConsumeAction, ControlAction, CreateAction, FindAction, InteractAction, MoveAction, OrganizeAction, PlayAction, SearchAction, TradeAction, TransferAction, UpdateAction

11 propriétés spécifiques d’Action: actionStatus, agent, endTime, error, instrument, location, object, participant, result, startTime, target

TradeAction fait référence aux actions en bourse. Si l’on s’intéresse par exemple à l’action de communiquer, schema propose la hiérarchie : Thing > Action > InteractAction > CommunicateAction, munie des propriétés possibles : about, inLanguage, recipient, actionStatus, agent, endTime, error, instrument, location, object, participant, result, startTime, target, etc. Des types plus spécifiques d’actions de communication sont : AskAction, CheckInAction, CheckOutAction, CommentAction, InformAction, InviteAction, ReplyAction, ShareAction.

1.2 CreativeWorks, 96 propriétés, 160 sous-classes

On trouve dans Oeuvre Créative la plupart des objets référencés par les bibliothèques et les archives, ainsi que les libraires, disquaires, cinémas et chaînes de télévision.

65 sous-classes de deuxième niveau (160 au total) viennent préciser la nature des œuvres créatives : 3DModel, ArchiveComponent, Article, Atlas, Blog, Book, Chapter, Claim, Clip, Collection, ComicStory, Comment, Conversation, Course, CreativeWorkSeason, CreativeWorkSeries, DataCatalog, Dataset, DefinedTermSet, Diet, DigitalDocument, Drawing, EducationalOccupationalCredential, Episode, ExercisePlan, Game, Guide, HowTo, HowToDirection, HowToSection, HowToStep, HowToTip, Legislation, Manuscript, Map, MediaObject, Menu, MenuSection, Message, Movie, MusicComposition, MusicPlaylist, MusicRecording, Painting, Photograph, Play, Poster, PublicationIssue, PublicationVolume, Question, Quotation, Review, Sculpture, SheetMusic, ShortStory, SoftwareApplication, SoftwareSourceCode, TVSeason, TVSeries, Thesis, VisualArtwork, WebContent, WebPage, WebPageElement, WebSite

Les objets de la classe des œuvres peuvent être décrits à l’aide de 96 propriétés : about, abstract, accessMode, accessModeSufficient, accessibilityAPI, accessibilityControl, accessibilityFeature, accessibilityHazard, accessibilitySummary, accountablePerson, aggregateRating, alternativeHeadline, associatedMedia, audience, audio, author, award, character, citation, comment, commentCount, conditionsOfAccess, contentLocation, contentRating, contentReferenceTime, contributor, copyrightHolder, copyrightYear, correction, creativeWorkStatus, creator, dateCreated, dateModified, datePublished, discussionUrl, editor, educationalAlignment, educationalUse, encoding, encodingFormat, exampleOfWork, expires, funder, genre, hasPart, headline, inLanguage, interactionStatistic, interactivityType, isAccessibleForFree, isBasedOn, isFamilyFriendly, isPartOf, keywords, learningResourceType, license, locationCreated, mainEntity, maintainer, material, materialExtent, mentions, offers, position, producer, provider, publication, publisher, publisherImprint, publishingPrinciples, recordedAt, releasedEvent, review, schemaVersion, sdDatePublished, sdLicense, sdPublisher, sourceOrganization, spatial, spatialCoverage, sponsor, temporal, temporalCoverage, text, thumbnailUrl, timeRequired, translationOfWork, translator, typicalAgeRange, version, video, workTranslation

Les classes du domaine des archives et bibliothèques relevant de ArtWork sont : ArchiveComponent, Article > (AdvertiserContentArticle, NewsArticle > (AnalysisNewsArticle, AskPublicNewsArticle, BackgroundNewsArticle, OpinionNewsArticle, ReportageNewsArticle, ReviewNewsArticle), Report, SatiricalArticle, ScholarlyArticle > (MedicalScholarlyArticle), SocialMediaPosting > (BlogPosting, DiscussionForumPosting), TechArticle), Atlas, Book > (Audiobook), Chapter, Collection, DigitalDocument > (NoteDigitalDocument, PresentationDigitalDocument, SpreadsheetDigitalDocument, TextDigitalDocument), Manuscript, Map, MediaObject > (3DModel, AudioObject, Audiobook, DataDownload, ImageObject, Barcode, LegislationObject, MusicVideoObject, VideoObject), Message > (EmailMessage), Photograph, PublicationIssue, PublicationVolume, Review > (ClaimReview, CriticReview, ReviewNewsArticle, EmployerReview, MediaReview, Recommendation, UserReview)

1.3 Event, 32 propriétés, 22 sous-classes

20 sous-classes de deuxième niveau (22 au total) : BusinessEvent, ChildrensEvent, ComedyEvent, CourseInstance, DanceEvent, DeliveryEvent, EducationEvent, EventSeries, ExhibitionEvent, Festival, FoodEvent, LiteraryEvent, MusicEvent, PublicationEvent, SaleEvent, ScreeningEvent, SocialEvent, SportsEvent, TheaterEvent, VisualArtsEvent

32 propriétés spécifiques d’Event : about, actor, aggregateRating, attendee, audience, composer, contributor, director, doorTime, duration, endDate, eventSchedule, eventStatus, funder, inLanguage, isAccessibleForFree, location, maximumAttendeeCapacity, offers, organizer, performer, previousStartDate, recordedIn, remainingAttendeeCapacity, review, sponsor, startDate, subEvent, superEvent, translator, typicalAgeRange, workFeatured, workPerformed. On remarque au passage qu’un événement est caractérisé par sa durée avec startDate et endDate, sa répétition avec previousStartDate et son lieu avec location.

1.4 Intangible, 385 sous-classes

Une classe “parapluie” indique des quantités, des valeurs posées ou observées, des listes de choses, de rôles et de services, des valeurs de dictionnaires, des informations factuelles. Aucune propriété n’est spécifique d’Intangible. Celles-ci dépendent toutes des sous-classes caractérisées par leur grande diversité.

56 sous-classes de deuxième niveau (385 classes en tout) : ActionAccessSpecification, AlignmentObject, Audience, BedDetails, Brand, BroadcastChannel, BroadcastFrequencySpecification, Class, ComputerLanguage, DataFeedItem, DefinedTerm, Demand, DigitalDocumentPermission, EducationalOccupationalProgram, EntryPoint, Enumeration, FloorPlan, GameServer, GeospatialGeometry, Grant, HealthInsurancePlan, HealthPlanCostSharingSpecification, HealthPlanFormulary, HealthPlanNetwork, Invoice, ItemList, JobPosting, Language, ListItem, MediaSubscription, MenuItem, MerchantReturnPolicy, Observation, Occupation, Offer, Order, OrderItem, ParcelDelivery, Permit, ProgramMembership, Property, PropertyValueSpecification, Quantity, Rating, Reservation, Role, Schedule, Seat, Series, Service, ServiceChannel, SpeakableSpecification, StatisticalPopulation, StructuredValue, Ticket, Trip

A noter l’importance de StructuredValue qui rassemble des informations telles que des adresses postales, les coordonnées géographiques, des valeurs monétaires, des heures d’ouverture, des valeurs qualitatives et quantitatives multiples. Quantity a pour sous-classes Distance, Duration, Energy, Mass.

1.5 MedicalEntity, 7 propriétés et 71 sous-classes

17 sous-classes de deuxième niveau (71 au total) : AnatomicalStructure, AnatomicalSystem, LifestyleModification, MedicalCause, MedicalCondition, MedicalContraindication, MedicalDevice, MedicalGuideline, MedicalIndication, MedicalIntangible, MedicalProcedure, MedicalRiskEstimator, MedicalRiskFactor, MedicalStudy, MedicalTest, Substance, SuperficialAnatomy

7 propriétés spécifiques de MedicalEntity : code, guideline, legalStatus, medicineSystem, recognizingAuthority, relevantSpecialty, study

1.6 Organization, 53 propriétés, 182 sous-classes

15 sous-classes de deuxième niveau (182 au total) : Airline, Consortium, Corporation, EducationalOrganization, FundingScheme, GovernmentOrganization, LibrarySystem, LocalBusiness, MedicalOrganization, NGO, NewsMediaOrganization, PerformingGroup, Project, SportsOrganization, WorkersUnion

53 propriétés spécifiques d’Organization : actionableFeedbackPolicy, address, aggregateRating, alumni, areaServed, award, brand, contactPoint, correctionsPolicy, department, dissolutionDate, diversityPolicy, diversityStaffingReport, duns, email, employee, ethicsPolicy, event, faxNumber, founder, foundingDate, foundingLocation, funder, globalLocationNumber, hasCredential, hasMerchantReturnPolicy, hasOfferCatalog, hasPOS, interactionStatistic, isicV4, knowsAbout, knowsLanguage, legalName, leiCode, location, logo, makesOffer, member, memberOf, naics, numberOfEmployees, ownershipFundingInfo, owns OwnershipInfo, parentOrganization, publishingPrinciples, review, seeks, slogan, sponsor, subOrganization, taxID, telephone, unnamedSourcesPolicy, vatID

EducationalOrganization se décline en : CollegeOrUniversity, ElementarySchool, HighSchool, MiddleSchool, Preschool, School

1.7 Person, 55 propriétés et 1 sous-classes

Une seule sous-classe : Patient

55 propriétés spécifiques de Person : additionalName, address, affiliation, alumniOf, award, birthDate, birthPlace, brand, callSign, children, colleague, contactPoint, deathDate, deathPlace, description, disambiguatingDescription, duns, email, familyName, faxNumber, follows, funder, gender, givenName, globalLocationNumber, hasCredential, hasOccupation, hasOfferCatalog, hasPOS, height, homeLocation, honorificPrefix, honorificSuffix, identifier, image, interactionStatistic, isicV4, jobTitle, knows, knowsAbout, knowsLanguage, mainEntityOfPage, makesOffer, memberOf, naics, name, nationality, netWorth, owns, parent, performerIn, potentialAction, publishingPrinciples, relatedTo, sameAs, seeks, sibling, sponsor, spouse, subjectOf, taxID, telephone, url, vatID, weight, workLocation, worksFor

1.8 Place, 36 propriétés, 74 sous-classes

9 sous-classes de deuxième niveau (74 au total) : Accommodation, AdministrativeArea, CivicStructure, Landform, LandmarksOrHistoricalBuildings, LocalBusiness, Residence, TouristAttraction, TouristDestination

36 propriétés spécifiques de Place : additionalProperty, address, aggregateRating, amenityFeature, branchCode, containedInPlace, containsPlace, event, faxNumber, geo, geoContains, geoCoveredBy, geoCovers, geoCrosses, geoDisjoint, geoEquals, geoIntersects, geoOverlaps, geoTouches, geoWithin, globalLocationNumber, hasMap, isAccessibleForFree, isicV4, latitude, logo, longitude, maximumAttendeeCapacuty, openingHoursSpecification, photo, publicAccess, review, slogan, smokingAllowed, specialOpeningHoursSpecification, telephone

Des objets du type Event appellent classiquement en propriété location renseigné à l’aide des propriétés d’un objet de la classe Place. LocalBusiness est défini à la fois comme sous-classe d’Organization et de Place.

1.9 Product, 36 propriétés,

4 sous-classes de deuxième niveau (8 au total) : IndividualProduct, ProductModel, SomeProducts, Vehicle

36 propriétés spécifiques de Product : additionalProperty, aggregateRating, audience, award, brand, category, color, depth, gtin, gtin12, gtin13, gtin14, gtin8, hasMerchantReturnPolicy, height, isAccessoryOrSparePartFor, isConsumableFor, isRelatedTo, isSimilarTo, itemCondition, logo, manufacturer, material, model, mpn, nsn, offers, productID, productionDate, purchaseDate, releaseDate, review, sku, slogan, weight, width

2. DataType

Les types de données attendus en renseignement des propriétés appartiennent eux-mêmes à des classes définies dans DataType.

Boolean > (False | True), Date, DateTime, Number > (Float | Integer), Text > URL , Time

Il est attendu par exemple de la valeur d’addressLocality de la classe Place que celle-ci soit du type Text. Globalement, 705 propriétés appellent en contenu une valeur du type Text. Un URL est également défini comme un type de texte.

3. Extensions de schema

3.1 Extensions officielles

Des extensions sont documentées dans les sous-domaines de schema.org. Pending indique les termes en cours de discussion. Bib concerne la bibliographie.

auto.schema.org, bib.schema.org, health-lifesci.schema.org, pending.schema.org

3.2 The Product Types Ontology (pto)

Pto référence environ 300 000 types de produits ou services qui étendent la classe Produit de schema en s’appuyant elle-même sur l’ontologie GoodRelations.

4. Do you speak schema ? Exemples généraux

Inclus dans des balises HTML <script>, JSON-LD s’avère relativement aisé à lire humainement et à programmer. Plusieurs exemples de notation sont ici recopiés essentiellement de schema.org. Soit le fragment HTML telles que celui-ci :

Lecture 12: Graphs, networks, incidence matrices

These video lectures of Professor Gilbert Strang teaching 18.06 were recorded in Fall 1999 and do not correspond precisely to the current edition of the textbook.

About MIT OpenCourseWare
Creative Commons logo with terms BY-NC-SA.

Schema est déclaré en valeur d’@context, l’objet context de JSON-LD. La classe WebPage est retenue et déclarée dans @type. Les propriétés name, description, publisher, license de WebPage sont ici renseignées. L’ouverture de parenthèses crée un second niveau marqué ici par un retrait de la ligne. On voit que publisher est lui-même décrit par sa propre classe CollegeOrUniversity et nommé “MIT OpenCourseWare”. Un graphe de métadonnées est en quelque sorte dessiné avec des renseignements de premier, deuxième niveau : Lien

<script type="application/ld+json">
{
    "@context": "http://schema.org",
    "@type": "WebPage",
    "name": "Lecture 12: Graphs, networks, incidence matrices",
    "description": "These video lectures of Professor Gilbert Strang teaching 18.06 were recorded in Fall 1999 and do not correspond precisely to the current  edition of the textbook.",
    "publisher": {
        "@type": "CollegeOrUniversity",
        "name": "MIT OpenCourseWare"
    },
    "license": "http://creativecommons.org/licenses/by-nc-sa/3.0/us/deed.en_US"
}
</script>

Exemple de signalement d’un double évènement musical signalé aux moteurs de recherche. B.B. King joue le 12 au “Lupo’s Heartbreak Hotel” et le 13 avril 2014 au “Lynn Auditorium”. Les billets sont en vente sur deux sites. Event et Place sont liés via la propriété location. La déclaration de deux objets ou de deux relations de même niveau se fait en JSON-LD par ouverture d’un crochet : Lien

<script type="application/ld+json">
[{
  "@context" : "http://schema.org",
  "@type" : "MusicEvent",
  "name" : "B.B. King",
  "startDate" : "2014-04-12T19:30",
  "location" : {
     "@type" : "Place",
     "name" : "Lupo's Heartbreak Hotel",
     "address" : "79 Washington St., Providence, RI"
  },
  "offers" : {
     "@type" : "Offer",
     "url" : "https://www.etix.com/ticket/1771656"
  }
},
{
  "@context" : "http://schema.org",
  "@type" : "MusicEvent",
  "name" : "B.B. King",
  "startDate" : "2014-04-13T20:00",
  "location" : {
     "@type" : "Place",
     "name" : "Lynn Auditorium",
     "address" : "Lynn, MA, 01901"
  },
  "offers" : {
     "@type" : "Offer",
     "url" : "http://frontgatetickets.com/venue.php?id=11766"
  }
}]
</script>

Description détaillée de l’adresse d’un organisme éducatif. Le nom de deux anciens est mentionné : Lien

<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "EducationalOrganization",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Palo Alto",
    "addressRegion": "CA",
    "postalCode": "94301",
    "streetAddress": "50 Embarcadero Rd"
  },
  "alumni": [
    {
      "@type": "Person",
      "name": "John Doe"
    },
    {
      "@type": "Person",
      "name": "Sarah Glames"
    }
  ],
  "name": "Palo Alto High School"
}
</script>

Description d’une personne, Delia Derbyshire identifiée dans Wikipedia par son URL avec sameAs, ancienne élève (alumniOf) de Cambridge : Lien

<script type="application/ld+json">
{
    "@context": "http://schema.org",
    "@type": "Person",
    "name": "Delia Derbyshire",
    "sameAs": "http://en.wikipedia.org/wiki/Delia_Derbyshire",
    "alumniOf": {
        "@type": "OrganizationRole",
        "alumniOf": {
            "@type": "CollegeOrUniversity",
            "name": "University of Cambridge",
            "sameAs": "http://en.wikipedia.org/wiki/University_of_Cambridge"
        },
        "startDate": "1959"
    }
}
</script>

Des listes d’items sont signalées avec la propriété itemListElement de ItemList et énoncées avec ListItem.

<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "ItemList",
  "url": "http://en.wikipedia.org/wiki/Billboard_200",
  "name": "Top music artists",
  "description": "The artists with the most cumulative weeks at number one according to Billboard 200",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "item": {
        "@type": "MusicGroup",
        "name": "Beatles"
      }
    },
    {
      "@type": "ListItem",
      "position": 2,
      "item": {
        "@type": "MusicGroup",
        "name": "Elvis Presley"
      }
    },
    {
      "@type": "ListItem",
      "position": 3,
      "item": {
        "@type": "MusicGroup",
        "name": "Michael Jackson"
      }
    },
    {
      "@type": "ListItem",
      "position": 3,
      "item": {
        "@type": "MusicGroup",
        "name": "Garth Brooks"
      }
    }
  ]
}
</script> 

Reprises à l’identique de Dublin Core, les relations hasPart / isPartof indiquent une relation de méronymie c’est à dire de tout à partie. Elles s’avèrent nécessaire dans de multiples cas, pour décrire par exemple les objets des bibliothèques et archives.

Conclusion

L’ontologie schema s’avère donc bien structurée et cohérente, relativement souple d’usage et particulièrement adaptée au SEO. Plusieurs communautés du W3C soutiennent le projet et œuvrent à son évolution. Cette ontologie est dite de haut niveau car elle ambitionne de couvrir de vastes domaines d’applications. Des acteurs de la gestion des connaissances peuvent s’en inspirer voire se servir de schema pour structurer leurs propres modèles. Schema peut également intéresser l’administrateur de base de donnée relationnelle ou bien le développeur en programmation orientée objet (POO) alors que les graphes en JSON-LD s’avèrent plus lisibles et légers que les graphes XML. À noter finalement que des gestionnaires de contenus comme WordPress ou Drupal disposent tous deux de modules dédiées au référencement naturel des contenus via schema.

Un triplet RDF
  • Schema.org
  • Version 7.0, 10 mars 2020 : Lien
  • Hiérarchie des classes de Schema : Lien
  • Blog officiel de Schema.org : Lien
  • 60+ Structured Data Tools – Create, Test, Plugins & More : Lien
  • Schema.org sur le répertoire LOV : Lien
  • Outil de test des donnée structurées, par Google : Lien
  • JSON Schema, 2019 : Lien
  • Données sémantiques, structurées et associées, le choix JSON-LD, Jojaba, AlsaCréations, 2019 : Lien
  • Comment mettre en place un balisage Schema parfait pour votre entreprise, Jason Barnard, 2017 : Lien
  • Comprendre le fonctionnement des données structurées, Google, 2010 : Lien
  • Schema.org hierarchy Sunburst, une visualisation, 2019 : Lien
  • Extensions JSON-LD et schema pour WordPress : Lien
  • Drupal, le module “Schema.org Metatag” étend “Metatag” pour certaines des classes de schema : Lien
  • Omeka S : schema comme toute ontologie en owl peut être utilisé avec ce gestionnaire de contenu pour structurer les données, cependant Dublin Core et FOAF sont souvent préférés. Le code pour rendre populaire un site Omeka S sur Google doit être implémenté dans le thème.
1 Star2 Stars3 Stars4 Stars5 Stars (Pas encore noté)
Loading...

Une réponse sur “L’ontologie schema, une brève description”

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *