New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add a mechanism to support product certifications #3230
Comments
Thanks Matthias!
Do you have a sense for how this application area relates to W3C Verifiable
Credentials?
…On Thu, 8 Dec 2022 at 09:59, Matthias Wiesmann ***@***.***> wrote:
Many objects can bear some form of certification, Organizations can be ISO
certified, Food products can be Organic or Vegan, a person can be a
certified professional. There are certifications for many domains:
regulatory, organizational, recycling, food, efficiency, educational,
ecological, etc.
Certifications can be first party (the certification authority makes the
claim), second-party (an authorized party makes the claim), or
self-certification (recipient of the certification makes the claim). Some
certifications have a unique identifier, for instance the FSC (Forest
Stewardship Council).
Some schema.org objects have support for some specific certifications,
for instance Product has hasEnergyConsumptionDetails, Person and
Organization have hasCredential, but these are very specific. Adding
specific attributes for all possible certification is not feasible.
A certification would be an object with the following properties:
- A certification unique identifier
- A certification authority
- A certifying organization (for second party)
- A certification measurement (energy efficiency, CO² emissions).
- The object of the certification (could be about).
Certification could descend from CreativeWork
—
Reply to this email directly, view it on GitHub
<#3230>, or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AABJSGKWMMGOMFDO5AVK323WMGWRPANCNFSM6AAAAAASX5VMBA>
.
You are receiving this because you are subscribed to this thread.Message
ID: ***@***.***>
|
I discussed this with @alex-jansen and @MatthiasWiesmann Context - This is a proposal from Google based on our experience consuming schema.org Product and Organization markup and working with similar data from online merchants. If it were accepted, it would make it easier for us and others to understand certifications of products and organisations. Another overview:
Matthias prepared a doc last year which I think is best to just share. I would like to see some attention from both Verifiable Credentials perspective, digital certification in general, and also (at least in terms of terminology) Education/skills, e.g. various terms relating to credentials. Please take a look: Certifications in Schema.org. They have also been considering the possibility of proposing a type above Educational Occupational Credential and below Creative Work. Would that make sense? |
Good that you tagged @philarcher on this particular item. I know for a fact that they've got stuff going on in that space and they're very active in the Verifiable Credentials work: https://www.gs1.org/voc/certification
Yes, there is active work in this area and an interoperability plugfest kicking off soon (we had 25+ implementers at the last education-related plugfest using JSON-LD + VCs). If we work fast enough, we might be able to get a schema.org-compatible VC being issued for the plugfest. It would be drop-in compatible w/ existing schema.org content published in web pages (but in this case, digitally verifiable that the certification/education certificate is valid). /cc @dmitrizagidulin @kayaelle @longpd @philbarker
Yes!!! It makes a ton of sense, and is the sort of convergence w/ schema.org that we have been hoping for since the start of the VC work. Just connecting people for now, we might want to get all of these folks on a call at some point to hammer out a strategy. At present, stuff is already happening w/o schema.org's involvement... but I think we'd all like it much better if schema.org was involved and we had a solid schema.org story around education credentials and certifications. |
Wanted to see if we can move this forward, I indeed do see overlap and therefore benefits in aligning with https://www.gs1.org/voc/certification. @philbarker, @philarcher |
This issue is being nudged due to inactivity. |
Hi Adam, planning to pick this up soon again, so comments in the linked doc are more than welcome! |
Drafted a new Certification type, branch: https://github.com/schemaorg/schemaorg/pull/new/certification Please take a look, comments more than welcome: @msporny @MatthiasWiesmann @adamml @philarcher @philbarker |
Thanks @alex-jansen - thanks for moving this along. Looking forward to comments from folks pinged here! |
I do hope those you pinged have the correct credentials to log in to the staging site. ;-) |
I certainly don't. :) That said, some feedback:
Hope that helps. :) |
Thanks for the lightning-quick comments :) Staging site (and comment above) updated: https://1-dot-schema-experiment.uc.r.appspot.com/Certification. Hope this is accessible? |
Can see it now. Thanks! |
I noticed on the staging site that Not that I have anything against that, I'm just wondering. |
Forgot to mention that one of the goals of this attempt is to be compatible with GS1 https://www.gs1.org/voc/CertificationDetails. Specifically asking @philarcher for feedback in that area @msporny Can you provide some specific suggestions related to Verifiable Credentials, either to change or extend the current draft proposal? Agree that aligning with certification bodies (including governments) and getting some standardization in this area would certainly be ideal. |
Now that I can see the site, a number of my comments don't apply, namely:
Other thoughts (after seeing the site):
... and here's what it could look like as a W3C Verifiable Credential. The benefit of doing so is that you get a cryptographic proof that the certification body has certified the product and they stand behind that certification:
|
Thanks all for the speedy comments :) @msporny - is it fair to say that this vocabulary (alongside rest of schema.org) ought to be something we can just "drop in" to a Verifiable Credentials description? There's a natural concern that we don't re-invent VCs but since the VC standards don't do domain vocabulary, it feels like some kind of container (VC) vs content (Schema) distinction makes sense, and from your example, appears to look pretty good. |
In general, yes, that's a design goal for W3C VCs (at least, among a significant number of us in the W3C VCWG). There are many cases where it "just works".
Yes, that's exactly the right mental model... I'm glad it came across that effortlessly. :) Yes, the example above was trivial to put together. We've found that to be true for many schema.org examples that describe "things" via schema.org. You can just drop that "thing" into the The One of the design goals for W3C Data Integrity has always been: Enable schema.org to express cryptographically verifiable forms of the things it expresses today without any changes to schema.org markup. That's also true for W3C VCs, modulo the minor changes needed above to get it to fully align. Our hope is that in the future, schema.org will be able to express things where some (or all) of that information is cryptographically verifiable. This will enable search engines to pull together information that it has a much higher confidence in wrt. authorship and accuracy of the information. |
The description states "a person can be a certified professional" but at the only property with Certification in range is hasCertification which is only available on Products and Organizations. |
@philbarker if Person were to be added to the domain of hasCertification, can you suggest some basic examples that we should work for education/occupation/skills etc.? |
We've been looking into "Food Safety Certification" in the VC community. That would be a good example to have. |
Manu's example works (thanks Manu). So would Google Cloud Certification. But such things are also an EducationalOccupationalCredential so I was wondering how this Certification, if applied to people, would play with that. (There is also a wee little minefield around Certificate Vs Certification when it comes to Educational and Occupational Credentials.) |
As you're kindly referencing/using the GS1 work I don't have any red lights here (@mgh128 might have). However, it is worth noting that there is a lot of activity in this area at the moment in our organization and so there may be some future change - but that's more than a year away. For example, a certificate of conformance to a standard should probably have a reference to the standard itself. What might also be of relevance to the model is the accreditation of the body doing the accrediting. NATA in Australia, UKAS in the UK etc. are the national "Accreditation Services" that do this. So there's a chain from the cert, to the Certification Assessment Body to the Accreditation Service. Basically - not all certificates are equally valuable. Away from the formal system there needs to be room for user feedback and ratings too. If a food product is certified as Kosher by assessment body A, you can have all the cryptographic verifiability you like but if everyone says that certification body B is more trustworthy, well, there's an important user angle there. |
@MatthiasWiesmann @alex-jansen can you tweak your draft changes to address these comments, especially making sure we have a few more examples as discussed above? |
Apologies, it took me a bit to process all the great feedback. I am addressing all the comments here, and rebuilt the staging site with some more examples. Please review carefully, it is difficult to handcraft complex examples :). Also happy to included other examples if provided, for example for Certifications related to Persons or Services. Why is Certification not a subtype of CreativeWork ?
The description states "a person can be a certified professional" but the only property with Certification in range is hasCertification which is only available on Products and Organizations.
It would be nice if there was a simple human-readable description of what the certification meant.
The Certifications really feel like a job for Verifiable Credentials, which are compatible w/ schema.org.
Maybe a link to the actual certificate from the certification body would be good
Why can't you just re-use the @type field to list `certificationType?
Why do you need datePublished in addition to validFrom?
|
It works on its own terms, but if Certification applies to people as the text in the example implies then it is an EducationOccupationalCredential, which is a subtype of CreativeWork. So it is kind of odd that Certification isn't. Schema.org has that oddness already, all over the place, and I think it is a fair judgement call to put pragmatics and ease of use ahead of ontological purity. So I guess the question is: does modelling this way make Schema.org easier to use? |
OK, let's put Certification below CreativeWork (and above EducationOccupationalCredential) to make it easier to understand. |
no no no! Not above EducationalOccupationalCredential. Not all EducationalOccupationalCredentials are Certifications. They are at the same level. In occupational credentialing Certification has a quite specific meaning, distinct from Diploma/Certificate/Degree/License etc. Certifications are indicate competence to perform tasks and are time-limited/require renewal to maintain validity. So while it will be useful to be able to say that something is an EOCred and a Certification, that is not true of EOCreds such as Degrees. |
ok @philbarker :) Then we put Certification next to EducationalOccupationalCredential and below CreativeWork. Also ping @msporny and @philarcher to look at the updated staging site, specifically the examples. |
I'm happy to see this discussion and potential interest in what we developed in the GS1 Web Vocabulary for expressing certification details being re-used/adapted for schema.org. I've provided the following summary to provide some background about what was developed and why. Before version 1.6 of the GS1 Web Vocabulary, gs1:CertificationDetails was a very simple class defining three interdependent properties, each expecting a language-tagged string (or set of these) as their expected value(s), i.e. having a range of rdf:langString : gs1:certificationAgency Grouping these together within a repeatable class gs1:CertificationDetails enabled multiple sets of certification details to be expressed for a product. As a result of work in the GS1 EPCIS/CBV work group, Version 1.6 of the GS1 Web Vocabulary significantly expanded gs1:CertificationDetails with additional properties to make many more of the details typically found on paper certificates or PDF certificates expressible as machine-interpretable data. The following properties were added: gs1:certificationAgencyURL (a gs1:Organization or schema:Organization identified unambiguously by its URI) At the same time, the domain of the property gs1:certification (whose range is gs1:CertificationDetails) was broadened so that it could be expressed for a gs1:Product, gs1:Organization or gs1:Place (or the schema.org equivalents), since it's also possible that an organisation (such as a manufacturer or retailer or restaurant) or a location (such as a specific store or factory) may hold certifications based on audits or inspections of those premises or activities/operations performed there, as well as for any resulting products. The design of gs1:CertificationDetails is very much certificate-centric and designed to support situations where we might have a certificate that applies to logical combinations of an organisation and a location/place (such as a food hygiene certificate) or a product and a location/place and organisation (such as a certificate that products from a specific food processing factory have been audited to be free from nuts) I therefore think it's really important to pay particular attention to the definition for gs1:certificationSubject and what it says about the logical AND and OR relations that apply when multiple values are specified and where those values may be of distinct types - e.g. a gs1:Product at a gs1:Place by a gs1:Organization. As gs1:CertificationDetails is currently formulated, it isn't ideally suited for expressing a claim about a particular product, organisation or location as a single RDF triple. Instead, it's saying that a certificate exists / has been issued by a specified certification agency, based on a specified audit date, that the certificate applies to the logical combination of (products, organisations, places) specified by gs1:certificationSubject and that the certificate has a validity period from its start date to its end date, with the initialCertificationDate indicating the earliest certification date held for that combination. We should probably consider improving that definition to indicate that it is assumed to apply only for continuous unbroken certification since that date, without any lapses. Within static/master data, any gs1:Product, gs1:Organization or gs1:Place can use gs1:certification to point to one or more relevant instances of gs1:CertificationDetails (in which that product, organisation or place/location is typically included in the logical combination specified via gs1:certificationSubject ). Within EPCIS event data, the epcis:certificationInfo property can link a traceability/visibility event to one or more instances of gs1:CertificationDetails that are relevant to the objects (e.g. products, logistics units, assets), locations or organisations involved in that event. Over the next day or two, I'll take a closer look at the updated staging site and the examples there and try to provide some feedback on those. |
Thank you for the detailed background Mark, very useful to understand the reasoning behind the properties. Interestingly Google started in a similar fashion with 3 properties authority+name+code to for example allow mapping on energy labels (certificates) represented in the EU EPREL database. We have indeed been looking in particular at gs1:certificationSubject, which we mapped on Schema.org about. We also added a validIn property, which could be considered redundant in that context. Looking forward to your feedback on the staging site and examples so we can keep things nicely aligned between Schema.org, GS1, and W3C VC. |
Ping @philarcher and @mgh128 for GS1 feedback so we can move this forward. Thanks! |
Hi @alex-jansen , all ! Happy New Year! I've now reviewed the staging site and examples and have some feedback for you, which I hope is helpful. I'll start with the feedback on the examples because there appears to be a conflict in which the JSON-LD context resource for schema.org is attempting to redefine For examples 3, 4 and 6, I'm seeing the following error when pasting into https://json-ld.org/playground/ :
Not sure whether that conflict was caused by redefinition within the JSON-LD context for schema.org of @vocab or by mapping “id” to Omitting the schema.org JSON-LD context is also not an option, otherwise “Product” will not be mapped to https://schema.org/Product but instead to https://www.w3.org/ns/credentials/issuer-dependent#Product Example 5 has two occurrences of the same typo - Organisation instead of Organization Example 3 also has this same typo, appearing once. Example 1 has a typo - addres instead of address I also noticed that even when a DateTime-formatted string is specified as the value of I also have some general feedback about the documentation on the staging site, none of which is a critical error but hopefully a few things you can consider tweaking if you agree:
I have begun preparing a table of mappings between the properties defined for schema.org/Certification and those defined within the gs1:CertificationDetails class and I'll be happy to share this with you / this thread. I did notice that you have a |
Happy New Year as well Mark and everyone! Thanks for the review @mgh128, much appreciated! I addressed all comments and published a new version of the staging site. Example comments:
Documentation comments:
Please take another look, happy to do one more final round of fine-tuning if needed. And yes, let's create that detailed cross-reference between gs1:CertificationDetails and Schema.org Certification and keep things aligned. |
Hi @alex-jansen Thanks for making those updates - they look good to me. Regarding the problem with 're-defining' Thankfully, the JSON-LD context resource for schema.org at https://schema.org/docs/jsonldcontext.json doesn't currently use It's unfortunate that this error was being thrown by a JSON-LD processor and perhaps we can hope that a future version of JSON-LD might require JSON-LD processors to handle this scenario far more elegantly by actually checking whether the redefinition actually conflicts with the existing definition of a mapping. In situations where the VC context resource uses Then there is potentially the question of etiquette or best practice in use of In either case, I think @msporny and @danbri need to join the discussion about the I'll try to provide the mapping table next week. |
If i remember correctly we aliased “id” and “type” on the urging of jsonld
wg members (manu? Greg?) shortly after Schema.org adopted the syntax. I
remember being told it was emerging best practice to hide the “@“ signs
from developers who didn’t get any benefit from the extra syntax.
…On Thu, 4 Jan 2024 at 22:08, Mark Harrison ***@***.***> wrote:
Hi @alex-jansen <https://github.com/alex-jansen>
Thanks for making those updates - they look good to me.
Regarding the problem with 're-defining' @Protected definitions from
https://www.w3.org/ns/credentials/v2 the issue is not limited to the
mappings of "id" : ***@***.*** <https://github.com/id>" and "type" : ***@***.***
<https://github.com/type>" . For better or for worse, the JSON-LD context
resource for https://www.w3.org/ns/credentials/v2 decides that its
mappings for these and also a number of other schema.org properties such
as
"description": "https://schema.org/description",
"name": "https://schema.org/name"
should be @Protected globally within its JSON-LD context resource - not
even within a limited scope.
Thankfully, the JSON-LD context resource for schema.org at
https://schema.org/docs/jsonldcontext.json doesn't currently use
@Protected anywhere, so your solution of swapping the sequence of the
JSON-LD context resources works *for now* - but might still break in
future if schema.org decides to use @Protected.
It's unfortunate that this error was being thrown by a JSON-LD processor
and perhaps we can hope that a future version of JSON-LD might require
JSON-LD processors to handle this scenario far more elegantly by *actually
checking* whether the redefinition actually conflicts with the existing
definition of a mapping. In situations where the VC context resource uses
@Protected to protect its mappings of "id" : ***@***.*** <https://github.com/id>"
and a subsequently declared JSON-LD context resource for schema.org
defines an identical mapping of "id": ***@***.*** <https://github.com/id>" then
a more elegant solution would detect a potential redefinition but notice
that there is actually no conflict, so the error would not be raised.
Then there is potentially the question of etiquette or best practice in
use of @Protected - about whether a JSON-LD context resource should be
using @Protected to protect a mapping to a property defined in an
external vocabulary, especially if that external vocabulary might already
(or in future) decide to use @Protected for the same mappings for its own
properties. Until we have a much more elegant solution in JSON-LD
processors that doesn't generate needless errors for *non-conflicting*
redefinitions, then perhaps some guidance on the above point would be
appropriate - whether in the JSON-LD technical recommendation - or at least
in the notes that accompany the W3C Verifiable Credentials vocabulary, to
advise that because its JSON-LD context resource protects various mappings
that are already expressed in the schema.org JSON-LD context resource,
the schema.org JSON-LD resource should be declared first or earlier (at
least until the point where the JSON-LD context resource for schema.org
also uses @Protected !)
In either case, I think @msporny <https://github.com/msporny> and @danbri
<https://github.com/danbri> need to join the discussion about the
@Protected issue, at least to understand how to avoid this error now and
also in the future, in case schema.org also decides to use @Protected in
future.
I'll try to provide the mapping table next week.
—
Reply to this email directly, view it on GitHub
<#3230 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AABJSGOXB7JON3MAVHM4RTDYM4R4NAVCNFSM6AAAAAASX5VMBCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQNZXHAZDKNRTGM>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Hi @danbri Happy New Year! Yes, it's definitely helpful that "id" is mapped to The problem is that the JSON-LD context resource for Verifiable Credentials is also doing this same mapping but that they are using That then results in a JSON-LD processing error if the JSON-LD context resource for schema.org is referenced after the JSON-LD context resource for Verifiable Credentials because currently, it's not sufficiently elegant to check whether the second mapping actually conflicts with the first Then, if in future schema.org also decides to use In that situation, you'd see this error whether schema.org is declared before or after the VC context resource, resulting in a no-win situation. My view is that schema.org would be entirely within its rights to make use of I'm just looking ahead and flagging a future problem that might arise if we're not very careful now. |
Hmm, that's not my understanding. Unfortunately, I wasn't a part of the details of how to handle this, but my understanding is that duplicate re-definitions to the exact same thing won't throw a protection error. We didn't want to cause the exact problem you are highlighting @mgh128. /cc @dlongley, @gkellogg, and @davidlehn who know more about this particular feature than I do. |
JSON-LD processors are expected to ignore duplicate mappings, i.e., not throw a "protected term redefinition error" when encountering a term definition that doesn't change the existing protected term definition. |
@dlongley - Many thanks for that clarification. Unfortunately, when JSON-LD processors do throw the "protected term redefinition error", some implementations such as the otherwise very helpful https://json-ld.org/playground/ appear not to be required to provide more helpful details about exactly which protected terms were affected by the redefinition error, so in the absence of a more helpful error message, I've written a quick and dirty bit of JavaScript that compares the JSON-LD context resources for Verifiable Credentials and for schema.org. The specific redefinition conflicts that it found were as follows: "description" defined in VC as "https://schema.org/description" "name" defined in VC as "https://schema.org/name" So if https://www.w3.org/ns/credentials/v2 can be updated to ensure that its mappings for "name" and "description" become {"@id":"schema:name"} and {"@id":"schema:description"} respectively, then the protected term redefinition error should go away even if the JSON-LD context resource for schema.org is referenced after the JSON-LD context resource for Verifiable Credentials. My script noticed that there is an apparent conflict between the Maybe there's also some best practice that we can extract from this, something like: If defining mappings to terms sourced from external vocabularies, take extreme care to ensure that the corresponding term expansions/mappings are identical to the corresponding expansions/mappings in the external vocabulary in which those terms are defined, especially when using the same JSON key and especially when defining such expansions/mappings within a scope that uses Someone can probably improve on that wording but hopefully you all get the gist of what I'm trying to abstract/extract from the lessons learned today. |
I believe improving the playground to show the details of errors (including which term definitions ran afoul of the protection rules) is on the todo list for improvements in the very near future. If you're using jsonld.js (the library the playground uses), the error details are already present and can be printed out; all that is left to do is render this information in the playground's HTML.
The right solution is for JSON-LD processors that have bugs that flag these to be fixed; jsonld.js needs updating here so it won't throw since the term definitions are actually the same, despite the semantic sugar that instantiates them being different. This should also produce the desired outcome. We should not add an additional term
I don't think this is necessary. The problem is simply that semantic sugar doesn't constitute a "difference in term definition" -- and should be ignored (or normalized / "expanded away") by processors when comparing term definitions for protection rules. I think this is just a bug with jsonld.js (which may or may not also exist in other processors) that can be remedied.
Yes, to my knowledge, cc: @davidlehn |
|
Many objects can bear some form of certification, Organizations can be ISO certified, Food products can be Organic or Vegan, a person can be a certified professional. There are certifications for many domains: regulatory, organizational, recycling, food, efficiency, educational, ecological, etc.
Certifications can be first party (the certification authority makes the claim), second-party (an authorized party makes the claim), or self-certification (recipient of the certification makes the claim). Some certifications have a unique identifier, for instance the FSC (Forest Stewardship Council).
Some schema.org objects have support for some specific certifications, for instance
Product
hashasEnergyConsumptionDetails
,Person
andOrganization
havehasCredential
, but these are very specific. Adding specific attributes for all possible certification is not feasible.A certification would be an object with the following properties:
about
).Certification could descend from
CreativeWork
The text was updated successfully, but these errors were encountered: