CredentialEngine / Schema-Development

Development of the vocabularies for the CTI models
13 stars 8 forks source link

Inverse properties: CredentialOrganization records in Workit don't reference their credentials #419

Closed stuartasutton closed 6 years ago

stuartasutton commented 7 years ago

I've attached the json for two CredentialOrganization grabbed from the "Registry Info": Board of Cerfified Safety Professionals (BCSP) and Western Governors University. They have .txt file extensions because of github limitations. I've also include the BCSP json below.

Note that while the BCSP has 8 credentials and the Western Governor 1, the json for neither organization references any credentials that it owns or offers. In other words, there are no properties linking these organizations to their credentials. Their credentials link to their organizations through properties like ceterms:ownedBy and `ceterms:offeredBy', but an organization description found on the open web would have no means of identifying it's credential(s).

{
  "@context": {
    "ceterms": "http://purl.org/ctdl/terms/",
    "dc": "http://purl.org/dc/elements/1.1/",
    "dct": "http://dublincore.org/dc/terms/",
    "foaf": "http://xmlns.com/foaf/0.1/",
    "obi": "https://w3id.org/openbadges#",
    "owl": "http://www.w3.org/2002/07/owl#",
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
    "schema": "http://schema.org/",
    "skos": "http://www.w3.org/2004/02/skos/core#",
    "vs": "https://www.w3.org/2003/06/sw-vocab-status/ns",
    "xsd": "http://www.w3.org/2001/XMLSchema#",
    "lrmi": "http://purl.org/dcx/lrmi-terms/",
    "asn": "http://purl.org/ASN/schema/core/",
    "vann": "http://purl.org/vocab/vann/",
    "actionStat": "http://purl.org/ctdl/vocabs/actionStat/",
    "agentSector": "http://purl.org/ctdl/vocabs/agentSector/",
    "serviceType": "http://purl.org/ctdl/vocabs/serviceType/",
    "assessMethod": "http://purl.org/ctdl/vocabs/assessMethod/",
    "assessUse": "http://purl.org/ctdl/vocabs/assessUse/",
    "audience": "http://purl.org/ctdl/vocabs/audience/",
    "claimType": "http://purl.org/ctdl/vocabs/claimType/",
    "costType": "http://purl.org/ctdl/vocabs/costType/",
    "credentialStat": "http://purl.org/ctdl/vocabs/credentialStat/",
    "creditUnit": "http://purl.org/ctdl/vocabs/creditUnit/",
    "deliveryType": "http://purl.org/ctdl/vocabs/deliveryType/",
    "inputType": "http://purl.org/ctdl/vocabs/inputType/",
    "learnMethod": "http://purl.org/ctdl/vocabs/learnMethod/",
    "orgType": "http://purl.org/ctdl/vocabs/orgType/",
    "residency": "http://purl.org/ctdl/vocabs/residency/",
    "score": "http://purl.org/ctdl/vocabs/score/",
    "@language": "en-US"
  },
  "@type": "ceterms:CredentialOrganization",
  "@id": "http://credentialEngineRegistry.org/resources/ce-6EB7ABF1-F5B7-444C-A304-6C10B451A534",
  "ceterms:accreditedBy": [
    {
      "@id": "http://credentialEngineRegistry.org/resources/b24e6754-5623-4a5a-bcb2-f41ebbc95e9e"
    },
    {
      "@id": "http://credentialEngineRegistry.org/resources/186d11c7-e4e1-484c-a8b5-b1187f73b683"
    }
  ],
  "ceterms:address": [
    {
      "@type": "ceterms:PostalAddress",
      "ceterms:name": "Board of Certified Safety Professionals (BCSP)",
      "ceterms:addressCountry": "United States",
      "ceterms:addressLocality": "Indianapolis",
      "ceterms:addressRegion": "IN",
      "ceterms:postalCode": "46268",
      "ceterms:streetAddress": "8645 Guion Road"
    }
  ],
  "ceterms:agentPurposeDescription": "BCSP sets and certifies technical competency criteria for safety, health and environmental practitioners worldwide; enhancing careers, advancing the profession, protecting the public.",
  "ceterms:agentSectorType": [
    {
      "@type": "ceterms:CredentialAlignmentObject",
      "ceterms:targetNode": {
        "@id": "agentSector:PrivateNonProfit"
      },
      "ceterms:targetNodeName": "Private Not-For-Profit"
    }
  ],
  "ceterms:agentType": [
    {
      "@type": "ceterms:CredentialAlignmentObject",
      "ceterms:targetNode": {
        "@id": "orgType:CertificationBody"
      },
      "ceterms:targetNodeName": "Certification Body"
    },
    {
      "@type": "ceterms:CredentialAlignmentObject",
      "ceterms:targetNodeName": "CE Partner"
    }
  ],
  "ceterms:description": "The Board of Certified Safety Professionals (BCSP) began in 1969 as a peer certification board. It is not a member organization and does not provide services usually offered by member organizations. Membership in any organization is not a requirement for certification.\n\nIts sole purpose is to certify practitioners in the safety profession. Safety professionals identify hazards and evaluate them for the potential to cause injury or illness to people or harm of property and the environment. The safety professional recommends administrative and engineering controls that eliminate or minimize the risk and danger posed by hazards. They work with professionals in other disciplines in many different job settings. They work for companies, government agencies and private organizations or offer individual professional services. They may engage in design, planning, program management, training, audit and other aspects of practice. Additionally, they apply hazard recognition, evaluation and control knowledge and skills for equipment, systems, facilities and processes, or in operations, manufacturing, transportation, construction, insurance services and other enterprises.\n\nThe value of the safety certification continues to grow. In the U.S., numerous laws, regulations and standards cite it. More importantly, many companies include it in position standards, government agencies rely on it and contracts for safety services require it.",
  "ceterms:duns": "79148938",
  "ceterms:fein": "370982724",
  "ceterms:foundingDate": "1969",
  "ceterms:image": [
    {
      "@id": "http://www.enr.com/ext/resources/images/construction/BCSP-300dp-250pxi.png"
    }
  ],
  "ceterms:jurisdiction": [
    {
      "@type": "ceterms:JurisdictionProfile",
      "ceterms:globalJurisdiction": false,
      "ceterms:mainJurisdiction": [
        {
          "@type": "ceterms:GeoCoordinates",
          "ceterms:name": "United States",
          "ceterms:geoURI": {
            "@id": "http://geonames.org/6252001/"
          }
        }
      ]
    }
  ],
  "ceterms:keyword": [
    "Health and Safety",
    "Occupational Health and Safety",
    "Safety Certifications",
    "Safety Professionals",
    "Safety Supervisors",
    "Workplace Safety"
  ],
  "ceterms:missionAndGoalsStatement": {
    "@id": "http://www.bcsp.org/About"
  },
  "ceterms:missionAndGoalsStatementDescription": "BCSP sets and certifies technical competency criteria for safety, health and environmental practitioners worldwide; enhancing careers, advancing the profession, protecting the public.",
  "ceterms:name": "Board of Certified Safety Professionals (BCSP)",
  "ceterms:serviceType": [
    {
      "@type": "ceterms:CredentialAlignmentObject",
      "ceterms:targetNodeDescription": "The resource being described provides renewal service.",
      "ceterms:targetNodeName": "Renew Credential Service"
    },
    {
      "@type": "ceterms:CredentialAlignmentObject",
      "ceterms:targetNodeDescription": "The resource being described provides revocation service.",
      "ceterms:targetNodeName": "Revoke Credential Service"
    },
    {
      "@type": "ceterms:CredentialAlignmentObject",
      "ceterms:targetNodeDescription": "The services provided by an organization that grants credentials.",
      "ceterms:targetNodeName": "Confers Credential Service"
    },
    {
      "@type": "ceterms:CredentialAlignmentObject",
      "ceterms:targetNodeDescription": "The resource being described offers other resources.",
      "ceterms:targetNodeName": "Offer Service"
    },
    {
      "@type": "ceterms:CredentialAlignmentObject",
      "ceterms:targetNodeDescription": "The services provided by an organization to verify to another person, organization or governmental agency that the credential is held by the holder.",
      "ceterms:targetNodeName": "Verify Holder Service"
    }
  ],
  "ceterms:socialMedia": [
    {
      "@id": "http://www.bcsp.org/Contact"
    },
    {
      "@id": "https://www.facebook.com/pages/BCSP/134960406575047"
    },
    {
      "@id": "https://twitter.com/BCSP"
    },
    {
      "@id": "https://plus.google.com/+BcspOrg/posts"
    },
    {
      "@id": "https://www.linkedin.com/company/board-of-certified-safety-professionals"
    }
  ],
  "ceterms:subjectWebpage": [
    {
      "@id": "http://www.bcsp.org"
    }
  ],
  "ceterms:targetContactPoint": [
    {
      "@type": "ceterms:ContactPoint",
      "ceterms:name": "Organization Contact Information",
      "ceterms:socialMedia": [
        {
          "@id": "http://www.bcsp.org/Contact"
        },
        {
          "@id": "https://www.facebook.com/pages/BCSP/134960406575047"
        },
        {
          "@id": "https://twitter.com/BCSP"
        },
        {
          "@id": "https://plus.google.com/+BcspOrg/posts"
        },
        {
          "@id": "https://www.linkedin.com/company/board-of-certified-safety-professionals"
        }
      ],
      "ceterms:telephone": [
        "317-593-4800",
        "317-593-4400"
      ]
    }
  ]
}

BCSP-CredentialOrganization-json.txt WestGov-CredentialOrganization-json.txt

siuc-nate commented 7 years ago

This was intentional, since we didn't want to require organizations to update the records about themselves every time they publish a new credential.

stuartasutton commented 7 years ago

OK, but how do we do it so that it doesn't mess up the linked data? In the wild, it doesn't make a lot (any) sense. This is where declaring owns/ownedBy and offers/offeredBy as owl:inverseOf is handy in an RDF context. In a RDF datastore that would mean that there would be no need to update the organization record, the additional, implied triple would simply be added based on the inverse declaration.

stuartasutton commented 7 years ago

Couldn't properties explicitly declared as owl:inverseOf in CTDL be handled automatically in the CER; e.g.,

offeredBy==owl:inverseOf==>offers

A==offeredBy==>B (explcit)
B==offers==>A (implied from the explicit and automatically provided by CER)
siuc-nate commented 7 years ago

We should create a list of properties that need to be explicitly indicated as inverseOf and the properties they are inverses of.

stuartasutton commented 7 years ago

I agree. Such a list would not be long and should not tread where the likelihood exists that inferring the inverse would/could be problematic.

Of course, this might present problems with signed entities that get additional statements added through inference from inverse declarations. E.g., consider where a new credential is added to an organization's repertoire and the new credential uses the ceterms:ownedBy to point to the owning organization.

Credential==ownedBy==>Organization (explicit triple)

If ceterms:owns is declared as inverse of ceterms:ownedByin the schema , a triple would be automatically added to the organization's description.

Organization==owns==>Credential (implied triple)

siuc-nate commented 7 years ago

Per our 8/8/2017 conversation: We would like to accomplish the following:

stuartasutton commented 6 years ago

A candidate list of properties to be declared and treated as owl:inverseOf or schema.org/inverseOf:

Direct Inferred
hasPart isPartOf
ownedBy owns
offeredBy offers
worksFor employee

We might hold on the last one and doubt the wisdom of the third one.

To include "reverse" properties in a JSON-LD @context, see: https://json-ld.org/spec/FCGS/json-ld/20130328/#reverse-properties

stuartasutton commented 6 years ago

Assuming we acknowledge these properties and their in inverse relationship. How can this be enabled in the registry such that we achieve the goal outlined at the top of this issue--i.e., Organizations that own things can point to those things in the registry etc. What are the impediments?

siuc-nate commented 6 years ago

Currently that data would have to be published as part of the organization record, meaning it's up to whoever is publishing the data to figure out and include those relationships. Since records in the registry can't be modified after being published, the next best thing would be to query the registry for what amounts to: "give me all x where ceterms:owner = [ctid]"

This would enable the consumer to get a list of credentials, assessments, learning opportunities, etc., where the owner property is the CTID for the organization in question. It technically has no reliance on the property having any inverse declaration, but it should achieve the desired effect.

stuartasutton commented 6 years ago

As usual, Nate, I'm looking at this data in the wild. Person comes across an RDF description of Brandman and there is not a clue about it's credentials. : -) linked data, not queried data. Again, we butt up against signed records. As usual, I'm concerned with the export of the data as RDF. If people out there can glue together the record by querying the registry, why can't the registry do that as it preps the description encoding for display and export.

siuc-nate commented 6 years ago

The registry would need to offer some service or endpoint that returns records that have been augmented with relevant data like that. In essence performing the query on the user's behalf internally but offering that as an ordinary URL on the public-facing side. The user would know that they are accessing a record whose signature is invalid but which is at least coming from the registry itself.

As for the signature mechanism itself, it seems we're stuck with it - though it may be worth bringing it up to/with @science to see if it is as necessary now as it seemed when the project began (particularly given the conversation our team had with his team yesterday regarding how entities actually get data into the registry). Steve, if you can chime in, we would appreciate it.

siuc-nate commented 6 years ago

This has been added to the publisher.