Tag Archives: schema.org

JSON Schema for JSON-LD⤴

from @ Sharing and learning

I’ve been working recently on definining RDF application profiles, defining specifications in JSON-Schema, and converting specifications from a JSON Schema to an RDF representation. This has lead to me thinking about, and having conversations with people  about whether JSON Schema can be used to define and validate JSON-LD. I think the answer is a qualified “yes”. Here’s a proof of concept; do me a favour and let me know if you think it is wrong.

Terminology might get confusing: I’m discussing JSON, RDF as JSON-LD, JSON Schema, RDF Schema and schema.org; which are all different things (go an look them up if you’re not sure of the differences).

Why JSON LD + JSON Schema + schema.org?

To my mind one of the factors in the big increase in visibility of linked data over that last few years has been the acceptability of JSON-LD to programmers familiar with JSON. Along with schema.org, this means that many people are now producing RDF based linked data often without knowing or caring that that is what they are doing. One of the things that seems to make their life easier is JSON Schema (once they figure it out). Take a look at the replies to this question from @apiEvangelist for some hints at why and how:

Also, one specification organization I am working with publishes its specs as JSON Schema. We’re working with them on curating a specification that was created as RDF and is defined in RDF Schema, and often serialized in JSON-LD. Hence the thinking about what happens when you convert a specification from RDF Schema to JSON Schema —  can you still have instances that are linked data? can you mandate instances that are linked data? if so, what’s the cost in terms of flexibility against the original schema and against what RDF allows you to do?

Another piece of work that I’m involved in is the DCMI Application Profile Interest Group, which is looking at a simple way of defining application profiles — i.e. selecting which terms from RDF vocabularies are to be used, and defining any additional constraints, to meet the requirements of some application. There already exist some not-so-simple ways of doing this, geared to validating instance data, and native to the W3C Semantic Web family of specifications: ShEx and ShACL. Through this work I also got wondering about JSON Schema. Sure, wanting to use JSON Schema to define an RDF application profile in JSON Schema may seem odd to anyone well versed in RDF and W3C Semantic Web recommendations, but I think it might be useful to developers who are familiar with JSON but not Linked Data.

Can JSON Schema define valid JSON-LD?

I’ve heard some organizations have struggled with this, but it seems to me (until someone points out what I’ve missed) that the answer is a qualified “yes”. Qualifications first:

  • JSON Schema doesn’t defined the semantics of RDF terms. RDF Schema defines RDF terms, and the JSON-LD context can map keys in JSON instances to these RDF terms, and hence to their definitions.
  • Given definitions of RDF terms, it is possible to create a JSON Schema such that any JSON instance that validates against it is a valid JSON-LD instance conforming to the RDF specification.
  • Not all valid JSON-LD representations of the RDF will validate against the JSON Schema. In other words the JSON Schema will describe one possible serialization of the RDF in JSON-LD, not all possible serializations. In particular, links between entities in an @graph array are difficult to validate.
  • If you don’t have an RDF model for your data to start with, it’s going to be more difficult to get to RDF.
  • If the spec you want to model is very flexible, you’ll have difficulty making sure instances don’t flex it beyond breaking point.

But, given the limited ambition of the exercise, that is “can I create a JSON Schema so that any data it passes as valid is valid RDF in JSON-LD?”, those qualifications don’t put me off.

Proof concept of examples

My first hint that this seems possible came when I was looking for a tool to use when working with JSON Schema and found this online JSON Schema Validator.  If you look at the “select schema” drop down and scroll a long way, you’ll find a group of JSON Schema for schema.org. After trying a few examples of my own, I have a JSON Schema that will (I think) only validate JSON instances that are valid JSON-LD based on notional requirements for describing a book (switch branches in github for other examples).

Here are the rules I made up and how they are instantiated in JSON Schema.

First, the “@context” sets the default vocabulary to schema.org and allows nothing else:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "context.json",
  "name": "JSON Schema for @context using schema.org as base",
  "description": "schema.org is @base namespace, but others are allowed",
  "type": "object",
  "additionalProperties": false,
  "required": [ "@vocab" ],
  "properties": {
    "@vocab": {
      "type": "string",
      "format": "regex",
      "pattern": "http://schema.org/",
      "description": "required: schema.org is base ns"
    }
  }
}

This is super-strict, it allows no variations on @context": {"@vocab" : "http://schema.org"} which obviously precludes doing a lot of things that RDF is good at, notably using more than one namespace. It’s not difficult to create looser rules, for example madate schema.org as the default vocabulary but allow some or any others. Eventually you create enough slack to allow invalid linked data (e.g. using namespaces that don’t exist; using terms from the wrong namespace) and I promised you only valid linked data would be allowed. In real life, there would be a balance between permissiveness and reliability.

Rule 2: the book ids must come from wikidata:

{
 "$schema": "http://json-schema.org/draft-07/schema#",
 "$id": "wd_uri_schema.json",
 "name": "Wikidata URIs",
 "description": "regexp for Wikidata URIs, useful for @id of entities",
 "type": "string",
 "format": "regex",
 "pattern": "^https://www.wikidata.org/entity/Q[0-9]+" 
}

Again, this could be less strict, e.g. to allow ids to be any http or https URI.

Rule 3: the resource described is a schema.org/Book, for which the following fragment serves:

    "@type": {
      "name": "The resource type",
      "description": "required and must be Book",
      "type": "string",
      "format": "regex",
      "pattern": "^Book$"
    }

You could allow other options, and you could allow multiple types, maybe with one type manadatory (I have an example schema for Learning Resources which requires an array of type that must include LearningResource)

Rules 4 & 5: the book’s name and description are strings:

    "name": {
      "name": "title of the book",
      "type": "string"
    },
    "description": {
      "name": "description of the book",
      "type": "string"
    },

Rule 6, the URL for the book (i.e. a link to a webpage for the book) must be an http[s] URI:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "http_uri_schema.json",
  "name": "URI @ids",
  "description": "required: @id or url is a http or https URI",
  "type": "string",
  "format": "regex",
  "pattern": "^http[s]?://.+"
}

Rule 7, for the author we describe a schema.org/Person, with a wikidata id, a familyName and a givenName (which are strings), and optionally with a name and description, and with no other properties allowed:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "person_schema.json",
  "name": "Person Schema",
  "description": "required and allowed properties for a Person",
  "type": "object",
  "additionalProperties": false,
  "required": ["@id", "@type", "familyName", "givenName"],
  "properties": {
    "@id": {
      "description": "required: @id is a wikidata entity URI",
      "$ref": "wd_uri_schema.json"
    },
    "@type": {
      "description": "required: @type is Person",
      "type": "string",
      "format": "regex",
      "pattern": "Person"
    },
    "familyName": {
      "type": "string"
    },
    "givenName": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "description": {
      "type": "string"
    }
  }
}

The restriction on other properties is, again, simply to make sure no one puts in any properties that don’t exist or aren’t appopriate for a Person.

The subject of the book (the about property) must be provided as wikidata URIs, with optional @type, name, description and url; there may be more than one subject for the book, so this is an array:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "about_thing_schema.json",
  "name": "About Thing Schema",
  "description": "Required and allowed properties for a Thing being used to say what something is about.",
  "type": "array",
  "minItems": 1,
  "items": {
    "type": "object",
    "additionalProperties": false,
    "required": ["@id"],
    "properties": {
      "@id": {
        "description": "required: @id is a wikidata entity URI",
        "$ref": "wd_uri_schema.json"
      },
      "@type": {
        "description": "required: @type is from top two tiers in schema.org type hierarchy",
        "type": "array",
        "minItems": 1,
        "items": {
          "type": "string",
          "uniqueItems": true,
          "enum": [
            "Thing",
            "Person",
            "Event",
            "Intangible",
            "CreativeWork",
            "Organization",
            "Product",
            "Place"
          ]
        }
      },
      "name": {
        "type": "string"
      },
      "description": {
        "type": "string"
      },
      "url": {
        "$ref": "http_uri_schema.json"
      }
    }
  }
}

Finally, bring all the rules together, making the @context, @id, @type, name and author properties mandatory; about, description and url are optional; no others are allowed.

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "book_schema.json",
  "name": "JSON Schema for schema.org Book",
  "description": "Attempt at a JSON Schema to create valid JSON-LD descriptions. Limited to using a few schema.org properties.",
  "type": "object",
  "required": [
    "@context",
    "@id",
    "@type",
    "name",
    "author"
  ],
  "additionalProperties": false,
  "properties": {
    "@context": {
      "name": "JSON Schema for @context using schema.org as base",
      "$ref": "./context.json"
    },
    "@id": {
      "name": "wikidata URIs",
      "description": "required: @id is from wikidata",
      "$ref": "./wd_uri_schema.json"
    },
    "@type": {
      "name": "The resource type",
      "description": "required and must be Book",
      "type": "string",
      "format": "regex",
      "pattern": "^Book$"
    },
    "name": {
      "name": "title of the book",
      "type": "string"
    },
    "description": {
      "name": "description of the book",
      "type": "string"
    },
    "url": {
      "name":"The URL for information about the book",
      "$ref": "./http_uri_schema.json"
    },
    "about": {
      "name":"The subject or topic of the book",
      "oneOf": [
        {"$ref": "./about_thing_schema.json"},
        {"$ref": "./wd_uri_schema.json"}
      ]
    },
    "author": {
      "name":"The author of the book",
      "$ref": "./person_schema.json"
    }
  }
}

I’ve allowed the subject (about) to be given as an array of wikidata entity link/descriptions (as described above) or a single link to a wikidata entity; which hints at how similar flexibility could be built in for other properties.

Testing the schema

I wrote a python script (running in a Jupyter Notebook) to test that this works:

from jsonschema import validate, ValidationError, SchemaError, RefResolver
import json
from os.path import abspath
schema_fn = "book_schema.json"
valid_json_fn = "book_valid.json"
invalid_json_fn = "book_invalid.json"
base_uri = 'file://' + abspath('') + '/'
with open(schema_fn, 'r') as schema_f:
    schema = json.loads(schema_f.read())
with open(valid_json_fn, 'r') as valid_json_f:
    valid_json = json.loads(valid_json_f.read())
resolver = RefResolver(referrer=schema, base_uri=base_uri)
try :
    validate(valid_json,  schema, resolver=resolver)
except SchemaError as e :
    print("there was a schema error")
    print(e.message)
except ValidationError as e :
    print("there was a validation error")
    print(e.message)

Or more conveniently for the web (and sometimes with better messages about what failed), there’s the JSON Schema Validator I mentioned above. Put this in the schema box on the left to pull in the JSON Schema for Books from my github:

{
  "$ref": "https://raw.githubusercontent.com/philbarker/lr_schema/book/book_schema.json"
}

And here’s a valid instance:

{
  "@context": {
    "@vocab": "http://schema.org/"
  },
  "@id": "https://www.wikidata.org/entity/Q3107329",
  "@type": "Book",
  "name": "Hitchhikers Guide to the Galaxy",
  "url": "http://example.org/hhgttg",
  "author": {
    "@type": "Person",
    "@id": "https://www.wikidata.org/entity/Q42",
    "familyName": "Adams",
    "givenName": "Douglas"
  },
  "description": "...",
  "about": [
    {"@id": "https://www.wikidata.org/entity/Q3"},
    {"@id": "https://www.wikidata.org/entity/Q1"},
    {"@id": "https://www.wikidata.org/entity/Q2165236"}
  ]
}

Have a play, see what you can break; let me know if you can get anything that isn’t valid JSON LD to validate.

The post JSON Schema for JSON-LD appeared first on Sharing and learning.

Mapping learning resources to curricula in RDF⤴

from @ Sharing and learning

Some personal reflections on relating educational content to curriculum frameworks prompted by some conversation about the Oak National Academy (a broad curriculum of online material available to schools, based on the English national curriculum), and OEH-Linked-Frameworks (an RDF tool for visualizing German educational frameworks). It draws heavily on the BBC curriculum ontology (by Zoe Rose, I think). I’m thinking about these with respect to work I have been involved in such as K12-OCX and LRMI.

If you want to know why you would do this, you might want to skip ahead and read the “so what?” section first. But in brief: representing curriculum frameworks in a standard, machine-readable way, and mapping curriculum materials to that, would help when sharing learning resources.

Curriculum?

But first: curriculum. What does it mean to say  “a broad curriculum of online material available to schools, based on the English national curriculum”? The word curriculum is used in several different ways (there are 71 definitions in the IGI Global dictionary). ranging from “the comprehensive multitude of learning experiences provided by school to its students” (source) to “the set of standards, objectives, and concepts required to be taught and learned in a given course or school year” (source).  So curriculum in one sense is the teaching, in the other all that should be learnt. Those are different: the Oak National Academy provides teaching materials and activities (for learning experiences); the English National Curriculum specifies what should be learnt. Because very few people are interested in one but not the other, these two meanings often get conflated, which is normally fine but here I want to treat them separately and show how they relate to each other. Lets call them Curriculum Content and Materials, and Curriulum Frameworks respectively, think about how to represent the framework, and then how to relate to content and materials to that framework.

Curriculum Frameworks

This is where the BBC curriculum ontology comes in. It has a nice three-dimensional structure, creating the framework on the axes of Field of Study, Level and Topic.

The three dimensions of the BBC Curriculum Onology model. From https://www.bbc.co.uk/ontologies/curriculum

The levels are those that are defined by the national curriculum for progression English schools (KS = Key Stage, children aged 5 to 7 are normally at Key Stage 1; GCSE is the exam typically taken at 16, so represents the end of compulsory education, though students may stay on to study A-levels or similar after that). The levels used in curriculum frameworks tend to be very contextual, normally relating to the grade levels and examinations used in the school system for which the framework is written. It may be useful to relate them to more neutral (or at least, less heavily contextualised) schemes such as the levels of the EQF, or the levels of the Connecting Credentials framework.

The field of study may be called the “educational subject” (though I don’t like to writing RDF statements with Subject as the object) or, especialy in HE, “discipline”. Topics are the subjects studied within a field or discipline. I don’t much like the examples given here because the topics do just look like mini fields of study. I would wonder where to put “biology”–is it a topic within science or a field of study in its own right. A couple of points about field of study and one about topic may help clarify. In higher education a field of study if often called a discipline, which highlights that it is not just the thing being studied, but a community with a common interest and agreed norms on the tools and techniques used to study the subject. Most HE disciplines have an adjectival form that relates to people (I am a Physicists, she is a Humanist). In schools, fields of study are sometimes artifacts of the curriculum design process with no real equilavent outside of school. These artifacts often seem to have names that are initialisms that you won’t come across outside of specific school settings, for example RMPS ( Religious, Moral and Philosophical Studies), PE (Physical Education), PSHE (personal, social, health and economic education), ESL (English as a Second Language) / ESOL (English for Speakers of Other Languages), ICT (Information and Computer Techonolgy) DT (Design and Technology) — but very often the fields of study will have the same names as the top levels of a topic taxonomy (math/s, english, science). Most fields of study will have someone in a school who is a teacher of that field or leader of its teaching for the school. Topics are more neutral of context, less personal, more like the subjects of the Dewey Decimal System (at least more like they are supposed to be). It’s important to note that the same topic may be covered in different fields of study / disciplines in different ways. For example statistics may be a discipline itself (part of maths), with a very theoretical approach taken to studying the topics, but those topics may also be studied in biology, physics and economics. Crucially when it comes to facilitating discovery of suitable content materials for the curriculum, the approach taken and examples used will probably mean a resource aimed at teaching a statistics topic for economics is not very useful for teaching the same topic as part of physics or mathematics.

On to these axes get mapped the what are variously called learning objectives, intended learning outcomes, learning standards, and so on: the competences you want the students to acheive. They exist in the framework as statements of what  knowledge, skills, abilities a student is expected to be able to demonstrate. Let’s call them competences because that is a term that has wides currency beyond education, for example a competence can link educational outcomes to job requirements. There is a lot written about competences. There’s lots about how to write competence statements, including the form the descriptions should take (“you will be able to …”; how to form them as objectives (specific, mearsurable, …); how they relate to context (“able to … under supervision”); how they relate to each other (“you must learn to walk before you learn to run”); what tools should be used (“able to use a calculator to …”). And, of course, there are the specifications, standards and RDF vocabularies for representing all these aspects of competences, e.g. ASN, IMS CASE, ESCO. Let’s not go into that except to say that a curriculum framework will describe these competences as learning objectives and map them to the Field of study, topic and level schemes used by the framework. The same terms described below for mapping content to frameworks can be useful in doing this.

Mapping Curriculum Content to Curriculum Frameworks

So we have some curriculum content material; how do we map it to the curriculum framework?

It may help to model the content material in the way K12-OCX did, following oerschema, as a hierarchy of course, module, unit, lesson, activity, with associated materials and assessments:

Shows a hierarchy of course, module, unit, lesson, activity, with associated materials and assessments
The content model used by K12-OCX, based on oerschema.org

(Aside: any given course may not have modules or units, or either.)

Breaking curriculum materials down from monolithic courses to their constituent parts (while keeping the logical and pedagogical relationships between those parts) creates finer grained resources more easily accomodated into existing contexts.

At the Course level, oerschema.org gives us the property syllabus which can be used to relate the course to the framework as a whole, called by oerschema a CourseSyllabus, (“syllabus” is another word used in various ways, so lets not worry about any difference between a syllabus and a curriculum framework). This may also be useful at finer-grained levels, e.g. Module and Unit.

@prefix oer: <http://oerschema.org/> .
@prefix sdo: <http://schema.org/> .
@base <http://example.org/> .
<myCurriculumFramework> a oer:CourseSyllabus .
<myCourse> a oer:Course, sdo:Course ;
    oer:syllabus <myCurriculumFramework> .

[example code in tutle, there’s a JSON-LD version of it all below]

We can use the schema.org educationalLevel property to relate the resource to the educational level of the framework:

<myCourse> sdo:educationalLevel <myCurriculumFramework/Levels/KS4> .

Lets say our course deals with Mathematics and has a Unit on Statistics (no modules). We can use the schema.org AlignmentObject to say that there is an educationAlignment between my Course and my Unit to the field of study (that is, in the language of the alignment object, the educational subject). We can use the schema.org about property to say what the topic is:

<myCourse> sdo:hasPart <myUnit> ;
    sdo:educationalAlignment [
        a sdo:AlignmentObject ;
        sdo:alignmentType "educationalSubject";
        sdo:targetUrl <myCurriculumFramework/FieldsOfStudy/Mathematics>
    ] .

<myUnit> a oer:Unit, sdo:LearningResource ;
    sdo:educationalAlignment [
        a sdo:AlignmentObject ;
        sdo:alignmentType "educationalSubject";
        sdo:targetUrl <myCurriculumFramework/FieldsOfStudy/Mathematics>
    ] ;
    sdo:about <myCurriculumFramework/Topic/Statistics> .

For lessons, and especially for activities, we can relate to competences as individual learning objectives. The schema.org teaches property is designed for this:

<myUnit> sdo:hasPart <myLesson> .
<myLesson> a oer:Lesson, sdo:LearningResource ;
    sdo:hasPart <myActivity> .

<myActivity> a oer:Activity, sdo:LearningResource ;
   sdo:teaches <myCurriculumFramework/Objective/Competence0123> .

Whether you repeat about and educationalAlignment statements linking to “Field of Study” and “Topic” in the descriptions of Lessons and Activities depends on how much you want to rely on inferencing that something which is a part of a course has the same Fields of Study, something which is a part of Unit has the same topic, and so on. If your parts might get scattered, or used by systems that don’t do RDF inferencing, then you’ll want to repeat them (they will, you should). I haven’t done so here just to avoid repetition.

Finally, let’s link the competence statement to the framework (the framework here represented in a fairly crude way, not wanting to get into the intricacies of competence frameworks):

<myCurriculumFramework> a oer:CourseSyllabus, sdo:DefinedTermSet ;
    sdo:hasDefinedTerm <myCurriculumFramework/Objective/Competence0123> .

<myCurriculumFramework/Objective/Competence0123> a sdo:DefinedTerm,  
                                                   sdo:LearningResource ;
    sdo:educationalAlignment [ 
        a sdo:AlignmentObject ; 
        sdo:alignmentType "educationalSubject"; 
        sdo:targetUrl <myCurriculumFramework/FieldsOfStudy/Mathematics> 
    ] ;
    sdo:about <myCurriculumFramework/Topic/Statistics> ;
    sdo:educationalLevel <myCurriculumFramework/Levels/KS4> ;
    sdo:description "You will be able to use a calculator to find the mean..." ;
    sdo:name "Calculate the arithmetic mean" .

(Aside: Modelling a learning objective / competence as a defined term and a LearningResource is probably the most  controversial thing here, but I think it works for illustration.)

So What?

Well this shows several things I think would be useful:

  • Having metadata for a curriculum (whatever it is) will help others find it and use it, if suitable tools for using the metadata exist.
  • Tools are more likely to exist if the metadata is nicely machine readable (RDF, not PDF) and standardised (widely used vocabularies like schema.org).
  • A common model for curriculum frameworks will make mapping from one to another easier. For example. it’s easier to map from UK to US educational levels if they are clearly and separately defined.
  • Breaking curriculum materials down from monolithic courses to their constituent parts (while keeping the logical and pedagogical relationships between those parts) creates finer grained resources more easily accomodated into existing contexts.
  • Mapping curriculum materials to learning objectives in a given framework makes it easier to find resources for that curriculum, which is great, but the world is bigger than one curriculum.
  • Mapping both learning objectives and curriculum materials to the axes of the curriculum framework model makes it easier to find resources appropriate accross different curricula.

Finally, if you prefer your RDF as JSON-LD:

{
  "@context": {
    "oer": "http://oerschema.org/",
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
    "schema": "http://schema.org/",
    "sdo": "http://schema.org/",
    "xsd": "http://www.w3.org/2001/XMLSchema#"
  },
  "@graph": [
    {
      "@id": "http://example.org/myCurriculumFramework",
      "@type": [
        "oer:CourseSyllabus",
        "schema:DefinedTermSet"
      ],
      "schema:hasDefinedTerm": {
        "@id": "http://example.org/myCurriculumFramework/Objective/Competence0123"
      }
    },
    {
      "@id": "http://example.org/myActivity",
      "@type": [
        "oer:Activity",
        "schema:LearningResource"
      ],
      "schema:teaches": {
        "@id": "http://example.org/myCurriculumFramework/Objective/Competence0123"
      }
    },
    {
      "@id": "http://example.org/myCourse",
      "@type": [
        "schema:Course",
        "oer:Course"
      ],
      "oer:syllabus": {
        "@id": "http://example.org/myCurriculumFramework"
      },
      "schema:educationalAlignment": {
        "@id": "_:ub132bL12C30"
      },
      "schema:educationalLevel": {
        "@id": "http://example.org/myCurriculumFramework/Levels/KS4"
      },
      "schema:hasPart": {
        "@id": "http://example.org/myUnit"
      }
    },
    {
      "@id": "http://example.org/myLesson",
      "@type": [
        "schema:LearningResource",
        "oer:Lesson"
      ],
      "schema:hasPart": {
        "@id": "http://example.org/myActivity"
      }
    },
    {
      "@id": "http://example.org/myUnit",
      "@type": [ 
        "oer:Unit",
        "schema:LearningResource"
       ],
       "schema:about": {
        "@id": "http://example.org/myCurriculumFramework/Topic/Statistics"
      },
      "schema:educationalAlignment": {
        "@id": "_:ub132bL21C30"
      },
      "schema:hasPart": {
        "@id": "http://example.org/myLesson"
      }
    },
    {
      "@id": "_:ub132bL12C30",
      "@type": "schema:AlignmentObject",
      "schema:alignmentType": "educationalSubject",
      "schema:targetUrl": {
        "@id": "http://example.org/myCurriculumFramework/FieldsOfStudy/Mathematics"
      }
    },
    {
      "@id": "_:ub132bL40C30",
      "@type": "schema:AlignmentObject",
      "schema:alignmentType": "educationalSubject",
      "schema:targetUrl": {
        "@id": "http://example.org/myCurriculumFramework/FieldsOfStudy/Mathematics"
      }
    },
    {
      "@id": "http://example.org/myCurriculumFramework/Objective/Competence0123",
      "@type": [
        "schema:LearningResource",
        "schema:DefinedTerm"
      ],
      "schema:about": {
        "@id": "http://example.org/myCurriculumFramework/Topic/Statistics"
      },
      "schema:description": "You will be able to use a calculator to find the mean ...",
      "schema:educationalAlignment": {
        "@id": "_:ub132bL40C30"
      },
      "schema:educationalLevel": {
        "@id": "http://example.org/myCurriculumFramework/Levels/KS4"
      },
      "schema:name": "Calculate the arithmetic mean"
    },
    {
      "@id": "_:ub132bL21C30",
      "@type": "schema:AlignmentObject",
      "schema:alignmentType": "educationalSubject",
      "schema:targetUrl": {
        "@id": "http://example.org/myCurriculumFramework/FieldsOfStudy/Mathematics"
      }
    }
  ]
}

 

The post Mapping learning resources to curricula in RDF appeared first on Sharing and learning.

New work with the Credential Engine⤴

from @ Sharing and learning

Credential Engine logoI am delighted to be starting a new consulting project through Cetis LLP with the Credential Engine, helping them make credentials more transparent in order to empower everyone to make more informed decisions about credentials and their value. The problem that the Credential Engine sets out to solve is that there are (at the last count) over 730,000 different credentials on offer in the US alone. [Aside: let me translate ‘credential’ before going any further; in this context we mean what in Europe we call an educational qualification, from school certificates through to degrees, including trade and vocational qualifications and microcredentials.] For many of these credentials it is difficult to know their value in terms of who recognises them, the competences that they certify, and the occupations they are relevant for. This problem is especially acute in the relatively deregulated US, but it is also an issue when we have learner and worker mobility and need to recognise credentials from all over the world.

The Credential Engine sets out to alleviate this problem by making the credentials more transparent through a Credential Registry. The registry holds linked data descriptions of credentials being offered, using the Credential Transparency Description Language, CTDL, which is based largely on schema.org. (Note that neither the registry nor CTDL deals with information relating to whether an individual holds any credential.) These descriptions include links to Competence Frameworks described in the Credential Engine’s profile of the Achievement Standards Network vocabulary, CTDL-ASN. The registry powers a customizable Credential Finder service as well as providing a linked data platform and an API for partners to develop their own services–there are presentations about some example thrid-party apps on the Credential Engine website.

I have been involved with the Credential Engine since the end of 2015, when it was the Credential Transparency Initiative, and have since worked with them to strengthen the links between the CTDL and schema.org by leading a W3C Community Group to add EducationalOccupationalCredentials ot schema.org. I’ve also helped represent them at a UNESCO World Reference Level expert group meeting, helped partners interested in using data from the registry at an appathon in Indianapolis.  I have come to appreciate that there is a great team behind the Credential Engine, and I am really looking forward to continuing to work with them. I hope to post regular updates here on the new work as we progress.

There are strong linkages between this work and the other main project I have on talent marketplace signalling, and with talent pipeline management in general; and also with other areas of interest such as course description  and with work of the rest of Cetis in curriculum analytics and competency data standards. This new project isn’t exclusive so I will continue to work in those areas.  Please get in touch if you would like to know more about partnering with the Credential Engine or are interested in the wider work.

The post New work with the Credential Engine appeared first on Sharing and learning.

One year of Talent Marketplace Signaling⤴

from @ Sharing and learning

I chair the Talent Marketplace Signaling W3C Community Group, this progress report is cross-posted from its blog

It is one year since the initial call for participation in the Talent Marketplace Signaling W3C Community Group. That seems like a good excuse to reflect on what we have done so far, where we are, and what’s ahead.

I’m biassed, but I think progress has been good. We have 35 participants in the group, we have had some expansive discussions to outline the scope and aims of the group, the detail of which we filled in with issues and use cases. We also had some illuminating discussions about how we conceptualize the domain we are addressing (see most of August in the mail list archive). Most importantly, I think that we have made good on the aim arising from our initial kick-off meeting to identify issues arising from use cases and fix them individually with discrete enhancements to schema.org. Here’s a list of the fixes we have suggested that have been accepted by schema.org, drawn from the schema.org release log:

Translating those back to our use cases / issues we can now:

Looking forward…

First I want to note that many of those contributions have been accepted into what schema.org calls its pending section, which it defines as “a staging area for work-in-progress terms which have yet to be accepted into the core vocabulary”. While there are caveats about terms in pending being subject to change and that they should be used with caution, their acceptance into the core of the schema.org vocabulary relies on them being shown to be useful. So we have a task remaining of promoting and highlighting the use of these terms and showing how they are used. Importantly, “use” here means not just publishing data, but the existence of services built on that data.

Looking at the remaining issues that we identified from our use cases and examples, it seems that we have come to the end of those that can be picked off individually and dealt with without consequences elsewhere. Several are issues of choice, along the lines of “there’s more than one way to do X, can we clarify which is best?” Best practice is difficult to define and identify, and there will be winners and losers whatever option is picked. The choice will depend on analysis of whatever existing practice currently is as well as trade-offs such simplicity versus expressiveness. Another example where existing practice is important comes with issues that will affect how Google services such as Job Search work. Specifically, Google recommends values for employmentType that don’t seem to match all requirements, and these values are just textual tokens whereas we might want to suggest the more flexible and powerful DefinedTerm. However, we don’t want to recommend practice that conflicts with getting job postings listed properly by Google. While some Google search products leverage schema.org terms, the requirements that they specify for value spaces like the different employmentTypes are not defined in schema.org; and while schema.org development is open, other channels are required to make suggestions that affect Google products. The final category of open issue that I see is where a new corner of our domain needs to be mapped, rather just one or two new terms provided. This is the case for providing information about assessments, and for where we touch on providing information about the skills etc. that a person has.

So, there is more work to be done. I think starting with some further work on examples and best practice is a good idea. This will involve looking at existing usage, and mapping relevant parts of schema.org to other specifications (that latter task is happening in other fora, so probably something to report on here rather than start as a separate task). As ever, more people in the group and engagement from key players is key to success, so we should continue to try to grow the membership of the group.

Thank you all for your attention and contributions over the last year; I’m looking forward to more in the coming months.

Ackowledgement / disclosure

I (Phil Barker) remain grateful to the continued support of the US Chamber of Commerce Foundation, who fund my involvement in this group.

The post One year of Talent Marketplace Signaling appeared first on Sharing and learning.

Indiana Appathon Credential Data Learn and Build⤴

from @ Sharing and learning

This week I took part in the Credential Engine’s Indiana Appathon in Indianapolis. The Credential Engine is a registry of information about educational and occupational credentials (qualifications, if you prefer; or not, if you don’t) that can be earned, along with further information such as what they are useful for, what competencies a person would need in order to earn one and what opportunities exist to learn those competencies. Indiana is one state that is working with the Credential Engine to ensure that the credentials offered by all the state’s public higher education institutions are represented in the registry. About 70 people gathered in Indianapolis (a roughly equal split between Hoosiers and the rest of the US, plus a couple of Canadians and me) with the stated intentions of Learn and Build: learn about the data the Credential Engine has, how to add more and how to access what is there, and build ideas for apps that use that  data, showing what data was valuable and potentially highlighting gaps.

circles and lines representing entity-relationship domain modelsI was there as a consequence of my project work (supported by the Credential Engine) to represent Educational and Occupational Credentials in schema.org, with the aim of helping  people understand the benefits of putting credentials on to the open web. Cue my chance to reuse here my pictures of how schema.org can act as a cross-domain unifying schema for linked data and how different domains link together from Education to HR.

I’ve been involved in a few events where the idea is to try to get people together to learn/discuss/make, and I know it is really difficult to get the right balance between structure and flexibility. Too much pre-planned activity and delegates don’t get to do what they want, too little and they are left wondering what they should be doing. So I want to emphasize how hugely impressed I was with the event organization and facilitation: Laura Faulkner and colleagues at Credential Engine and Sonya Lopes and team at Learning Tapestry did a great job. Very cleverly they gave the event a headstart with webinars in advance to learn about the aims and technology of the credential engine, and then in Indianapolis we had a series of  activities. On day one these were: cycling through quick, informal presentations in small groups to find out about the available expertise; demos of existing apps that use data from the Credential Engine; small group discussions of personas to generate use cases; generating ideas for apps based on these. On day two we split into some ‘developer’ groups who worked to flesh out some of these ideas (while the ‘publisher’ group did something else, learnt more about publishing data into the Credential Engine, I think,–I wasn’t in that group), before the developer groups presented their ideas to people from the publisher group in a round-robin “speed-dating” session, and then finally to the whole group.

I went wanting to learn more about what data and connections would be of value in a bigger ecosystem around credentials and for the more focussed needs of individual apps. This I did. The one app that I was involved with most surfaced a need for the Credential Engine to be able to provide data about old, possibly discontinued credentials so that this information could be accessed by those wanting more details about a credential held by an individual. I think this is an important thing to learn for a project that has largely focussed on use cases relating to people wanting to develop their careers and look forward to what credentials are currently on offer that are relevant to their aspirations. I (and others I spoke to) also noticed how many of the use cases and apps required information about the competencies entailed in the credentials, quite often in detail that related to the component courses of longer programs of study. This, and other requirements for fine detail about credentials, is of concern to the institutions publishing information into the Credential Engine’s registry. Often do not have all of that information accessible in a centrally managed location, and when they do it is maybe not at the level of detail or in language  suitable for externally-facing applications.

This problem relating to institutions supplying data about courses was somewhat familiar to me. It seems entirely analogous to the experiences of the Jisc XCRI related programs (for example, projects on making the most of course data and later projects on managing course-related data). I would love to say that from those programs we now know how to provide this sort of data at scale and here’s the product that will do it.., but of course it’s not that simple. What we do have are briefings and advice explaining the problem and some of the approaches that have been taken and what were the benefits from these: for example, Ruth Drysdale’s overview Managing and sharing your course information and the more comprehensive guide Managing course information. My understanding from those projects is that they found benefits to institutions from a more coherent approach to their internal management of course data, and I hope that those supplying data to the Credential Engine might be encouraged by this. I also hope that the Credential Engine (or those around it who do funding) might think about how we could create apps and services that help institutions manage their course data better in such a way that benefits their own staff and incidentally provides the data the Credential Engine needs.

Finally, it was great to spend a couple of days in sunny Indianapolis, catching up with old friends, meeting in-person with some colleagues who I have only previously met online and doing some sightseeing. Many thanks to the Credential Engine for their financial assistance in getting me there.

Photo of brick build building next to corporate towers
Aspects of Inidianapolis reminded me of SimCity 2000
White column with statues
Monument in centre of town
plan of a city grid for Inianapolis
The original city design plan (plat)
Photo of indoor market
One of the indoor markets
Fountain and war memorial
The sign said no loitering, but I loitered. That, in the background, is one of the biggest war memorials I have seen

 

The post Indiana Appathon Credential Data Learn and Build appeared first on Sharing and learning.

K12 Open Content Exchange⤴

from @ Sharing and learning

I’ve been intending to write about the K12 Open Content Exchange project, and its metadata, but for various reasons haven’t got round to it. As I have just submitted a use case to the DCMI Application Profile Interest Group based on the projects requirements I’ll post that.

The project is being run by Learning Tapestry in the US, I am contracted to build the metadata specification in an iterative fashion based on experiences of content exchange between the partners (currently we are at iteration 1). I want to stress that this isn’t an authoritative description of all the project’s intents and purposes, or even all the metadata requirements, it’s a use case based on them, but I hope it gives a flavour of the work. The requirements section is more relevant if you’re interested in how to specify application profiles than for the OCX spec per se.

Problem statement

We wish to share relatively large amounts of content and curriculum materials relating to educational courses, for example: all the activities, student learning resources, teacher and parent curriculum guides, formative assessments, etc relating to one school-year of study in a subject such as mathematics.

We wish for the metadata to facilitate the editing, adaptation and reuse of the resources. For example teachers should be able to substitute resources/activities provided with other resources addressing the same objective as they see fit. Or course designers should be able pull out all the resources of a particular type (say activity plans), about a given topic, or addressing a specific learning outcome and use them in a new course. In some cases alternate equivalent content may be provided, for example online Vs offline content or to provide accessible provision for people with disabilities.

We wish for these to be discoverable on the open web at both broad and fine levels of granularity, i.e. whole courses and the individual parts should be discoverable via search engines.

We have decided to use the following vocabularies to describe the structure and content of the material: schema.org + LRMI, OERSchema and local extensions where necessary.

Stakeholders

  • Original content providers who create and publish curriculum and course materials using existing systems and already have (local) terminology for many aspects of resource description.
  • Content processors take the original content and offer it through their own systems. They also have (different) terminology for many aspects of resource description
  • Content purchasers wish to discover and buy content that meets their requirements
  • Course designers and Teachers use the content that has been purchased and wish to adapt it for their students
  • Parents wish to understand what and how their students are being taught
  • Learners want a seamless experience using high quality materials and ideas, in which all the work above is invisible.

Requirements

The application profile must reference evolving specifications: schema.org, OERSchema, various controlled vocabularies/concept schemes/encoding schemes and local extensions. If a local extension is adopted by one of the more widely recognised specifications it should be easy to modify the application profile to reflect this.

The application profile must include a content model that meets the following requirements for describing the structure of content:

  • identify the distinct types of entity involved (Course, Unit, Lesson, Supporting Material, Audience, Learning Objectives, Assessments etc)
  • show the hierarchy of the content (i.e. the Course comprises Units, the Units comprise Lessons, the Lessons comprise Activities)
  • show related content that is not part of the hierarchy but is related to (e.g. information about Units for teachers and parents, content to be used in the Activities)
  • show the ordering of sequential content
  • show options for alternative equivalent content

The application profile must specify optional (may), desired (should) and required (must) descriptive metadata as appropriate for each type of entity. For example

  • Activities must have a learning Time
  • an Activity should have a name
  • any resource may be associated with an Audience

The application profile must specify cardinality. for example:

  • Courses must have one and only one title
  • Units must have one or more Lesson
  • Units may have one or more Assessment

There may be alternative ways of satisfying a requirement

  • Courses must associated with either one or more Lesson or one or more Unit
  • If there is more than one Lesson in a Unit or Course, the Lessons must be ordered

The application profile must specify the expected type or value space for any property

  • this may be more restrictive than the base specification
  • this may extent the base specification
  • this may include alternatives (e.g. free text or reference concept from controlled scheme)

 

The post K12 Open Content Exchange appeared first on Sharing and learning.

Inclusion of Educational and Occupational Credentials in schema.org⤴

from @ Sharing and learning

The new terms developed by the EOCred community group that I chaired were added to the pending area in the April 2019 release of schema.org. This marks a natural endpoint for this round of the community group’s work. You can see most of the outcome  under EducationalOccupationalCredential. As it says, these terms are now “proposed for full integration into Schema.org, pending implementation feedback and adoption from applications and websites”. I am pretty pleased with this outcome.

Please use these terms widely where you wish to meet the use cases outlined in the previous post, and feel free to use the EOCred group to discuss any issues that arise from implementation and adoption.

My own attention is moving on the Talent Marketplace Signalling community group which is just kicking off (as well as continuing with LRMI and some discussions around Courses that I am having). One early outcome for me from this is a picture of how I see Talent Signalling requiring all these linked together:

Outline sketch of the Talent Signaling domain, with many items omitted for clarity. Mostly but not entirely based on things already in schema.org

 

The post Inclusion of Educational and Occupational Credentials in schema.org appeared first on Sharing and learning.

Talent marketplace signalling and schema.org JobPostings⤴

from @ Sharing and learning

For some time now I have been involved in the Data Working Group of the Jobs Data Exchange (JDX) project. That project aims to help employers and technology partners better describe their job positions and hiring requirements in a machine readable format. This will allow employers to send clearer signals to individuals, recruitment, educational and training organizations about the skills and qualifications that are in demand.  The data model behind JDX, which has been developed largely by Stuart Sutton working with representatives from the HR Open Standards body, leverages schema.org terms where possible. Through the development of this data model, as well as from other input, we have many ideas for guidance on, and improvements to the schema.org JobPosting schema. In order to advance those ideas through a broader community and feed them back to schema.org, we have now created the Talent Marketplace Signaling W3C Community Group.

In the long term I hope that the better expression of job requirements in the same framework as can be used to describe qualifications and educational courses will lead to better understanding and analysis of what is required and provided where, and to improvements in educational and occupational prospects for individuals.circles and lines representing entity-relationship domain models

 

About the Talent Marketplace Signaling Community Group

Currently, workforce signaling sits at the intersection of a number of existing schema.org types: Course, JobPosting, Occupation, Organization, Person and the proposed EducationalOccupationalCredential. The TalentSignal Community Group will focus initially on the JobPosting Schema and related types. I think the TalentSignal CG can help by:

  • providing guidance on how to use existing schema.org terms to describe JobPostings;
  • proposing refinements (e.g. improved definitions) to existing schema.org types serving the talent pipeline; and
  • suggesting new types and properties where improved signaling cannot otherwise be achieved.

I hope that the outcomes of this work will be discrete improvements to the JobPostings schema, e.g. small changes to definitions, changes to how things like competences are represented and linked to JobPostings, and guidance, probably on the schema.org wiki, about using the JobPosting schema to mark up job adverts. Of course, whatever the Community Group suggests, it’s up to the schema.org steering group to decide on whether they are adopted into schema.org, and then it’s up to the search engines and other data consumers as to whether they make any use of the mark up.

The thinking behind the having a wider remit than the currently envisaged work is to avoid setting up a whole series of new groups every time we have a new idea [lesson learnt from moving from LRMI to Course description to educational and occupational credentials].

Call for participation

If you’ve read this far you must be somewhat interested  in this area of work, so why not join the TMS Community Group to show your support for the JDX and more broadly the need and importance for improved workforce signaling in the talent marketplace? You can join via pink/tan button on the Talent Signal CG web page. You will need to have a W3C account and to be signed in order to join (see the top right of the page to sign-in or join). The only restriction on joining is that you must give some assurances about the openness of the IPR of any contributions that you make. The outcomes of this work will feed into a specification that anyone can use, so there must be no hidden IPR restrictions in there.

The group  is open to all stakeholders so please feel free to share this information with your colleagues and network.

Disclosure

I’m being paid by the US Chambers of Commerce Federation to carry out this work. Thank you US CCF!

The post Talent marketplace signalling and schema.org JobPostings appeared first on Sharing and learning.