Aller au contenu

Validation

phil/structured-data

Validator::validate(Graph $graph) vérifie chaque nœud — ceux du premier niveau du graphe et ceux qui sont imbriqués — et retourne un Report.

$report = new Validator()->validate($graph);

foreach ($report->errors() as $issue) {
    echo $issue->message, "\n"; // https://example.com/e#event needs startDate.
}

Propriétés requises et recommandées

Chaque type a ses TypeRules : les propriétés dont un nœud de ce type a besoin, dont l'absence est une erreur, et celles qu'il devrait avoir, dont l'absence est un avertissement. Une entrée peut être une liste dont une seule propriété suffit. Un type doté d'un parent a aussi besoin de ce dont son parent a besoin, et un nœud de plusieurs types de ce dont chacun d'eux a besoin. Une propriété à la fois requise et recommandée est seulement requise.

TypeA besoin deDevrait avoir
WebSitename, urlinLanguage, publisher
WebPageurlname, inLanguage, isPartOf
FAQPage (une WebPage)mainEntity
Questionname, acceptedAnswer
Answertext
BreadcrumbListitemListElement
ListItemposition, nameitem
Organizationnameurl, logo
LocalBusiness (une Organization)addresstelephone, url, image, openingHoursSpecification, geo
Personnameurl, sameAs
Eventname, startDate, locationendDate, eventStatus, description, image, offers, organizer
Placel'une de name, addressaddress
PostalAddressstreetAddress, addressLocality, addressRegion, postalCode, addressCountry
Productname, l'une de offers, review, aggregateRatingimage, description, sku, brand
Offerprice, priceCurrencyavailability, url
CreativeWorkname, author
Book (un CreativeWork)name, authorisbn, url, inLanguage, bookFormat
Article (un CreativeWork)headlineauthor, datePublished, dateModified, image, publisher
SoftwareSourceCode (un CreativeWork)name, codeRepositoryprogrammingLanguage, license, description, version
SoftwareApplicationnameapplicationCategory, operatingSystem, offers, softwareVersion
ImageObjectl'une de contentUrl, urlcaption, width, height, license, creator

Les sortes que construisent les fabriques ont besoin de ce dont leur parent a besoin : Corporation, NGO, EducationalOrganization et PerformingGroup sont des organisations ; Store, Restaurant, CafeOrCoffeeShop, BarOrPub et EntertainmentBusiness des commerces locaux ; BusinessEvent, EducationEvent, ExhibitionEvent, Festival, MusicEvent, SocialEvent, SportsEvent et TheaterEvent des événements ; NewsArticle, BlogPosting et TechArticle des articles ; AboutPage, CollectionPage, ContactPage, ItemPage et ProfilePage des pages ; WebApplication, MobileApplication et VideoGame des applications.

Valeurs

PropriétéVérificationCode
startDate, endDate, datePublished, dateModified, dateCreated, uploadDate, priceValidUntil, validFrom, validThrough, birthDate, foundingDateUne date ISO 8601, ou une date et une heure avec, au besoin, les secondes, des fractions et un décalage ; un jour qui existeinvalid-date
url, logo, image, sameAs, codeRepository, contentUrl, thumbnailUrl, downloadUrl, installUrl, itemUne adresse HTTP ou HTTPS absolue, lue par phil/url comme un navigateur la lit : un nom d'hôte (ni adresse IP, ni nom seul), sans nom d'utilisateur ni mot de passe, sans espaceinvalid-url
priceCurrencyTrois majuscules, comme ISO 4217 écrit une deviseinvalid-currency
inLanguageUne étiquette BCP 47invalid-language

Seuls les textes sont vérifiés : un nœud dans image ou logo, un nombre, une LanguageString sont laissés tels quels. Chaque valeur erronée est une erreur.

Une adresse sur localhost ou sous .localhost est aussi une invalid-url, puisqu'aucun moteur de recherche ne l'atteint. Une page validée en développement ou en test les permet : new Validator(allowLocalhost: true), que withRules() conserve. Une adresse IP, http://127.0.0.1/, reste invalide.

Références et types

Une référence à un nœud absent du graphe est un avertissement, unresolved-reference : elle peut nommer une chose décrite ailleurs, ou un nœud qu'un paquet a oublié de fournir. Un nœud du premier niveau du graphe sans type est un avertissement, untyped-node : aucune règle ne s'y applique.

Le rapport

MembreDonne
$issuesChaque Issue, dans l'ordre du graphe
errors(), warnings()Les problèmes d'une seule Severity
isValid()S'il n'y a aucune erreur ; des avertissements peuvent rester
toArray()Les problèmes sous forme de données, pour le JSON

Une Issue contient sa severity, son code — missing-property, missing-recommended, invalid-date, invalid-url, invalid-currency, invalid-language, unresolved-reference, untyped-node —, le node qu'elle concerne — son @id, ou son type et sa place, comme Event @graph[2], puis › et la propriété pour un nœud imbriqué —, la property, et un message en anglais.