ednet protocol

ednet protocol is an open source standard for organizing educational content of the world. This protocol can be used to designate what online content helps one learn what concept, prescribed by what board or in what syllabus. This protocol helps classroom teachers create learning material for their class. This protocol also helps learners keep track of what they have learnt, and evaluators to easily review what a learner knows.

Our goal is to make learning accessible to everyone in the world. To be part of ednet network, all content should be public and licensed under permissible license.
High Level Protocol Design Guidelines
Complete Lack Of Authority
Anyone can create a board, or anyone can create content etc. No need for "politics" of talking to the right people. Autonomous protocol.
As Software Light As Possible
Websites go down. If one uses any dynamic language, or database etc, keeping site up is hard. Therefore all the pages are static pages.
Fully Download-able Content
Standardised on FTD (subset). So that it works on as many devices as possible, and yet is as interactive as it can be. We can't do PDF which is most widely supported, but lacks interactivity etc.
Study Without Internet
Once learner has "subscribed" to a class, their app (browser extension, desktop or mobile app can download entire content). And then on, no internet is required. Xray uploads would be done opportunistically, when the internet is available, in the background.
Data Collection Done In Privacy Friendly Way
Only teachers can identify students. Content creators, board etc can not. And only xray information is availble, not any other information.
Self Learning But With Guides
Teachers are needed at times.
Low Hardware/Power Requirements

We want people in remote areas with limited access to internet, elecronic devices, power etc to be able to learn using the ednet network. We will be identify low powered tablets and all content should support those devices.

Content should fail gracefully in case there is a hardware or internet or power constraint, for example if there is not enough internet, maybe only download and show text. If some more internet is there also download images. And then videos. Content is consumable even if only text is available.
Key Concepts Of ednet Protocol
Board Of Education
Syllabus
Concept
Concept Dependencies And Concept Graph
Content
Classroom
xray
How Is Knowledge Organized?
Board, Syllabus, Concept, Content and Classroom are all URLs. Each URL exposes data about itself using meta tags in the HEAD section.
Board Data
Board exposes the following:
<head>
    <meta name="ednet-entity" content="board">
    <meta name="ednet-board" content="<board-url>/board.json">
</head>
Lang:
html
Any page can designate itself as a board by linking to a board.json.
{
    "ednet-version": "1.0",
    "entity": "board",
    "name": "Name Of Board",
    "syllabuses": [
        {
            "name": ["10th Standard", "Mathematics"],
            "url": "<url-to-syllabus.json>"
        }
    ]
}
Lang:
json
Syllabus
A syllabus page puts these in the meta tag:
<head>
    <meta name="ednet-entity" content="syllabus">
    <meta name="ednet-syllabus" content="<syllabus.json url>">
    <meta name="ednet-board" content="<board-url>/board.json">
</head>
Lang:
html
The syllabus.json looks like this:
{
    "ednet-version": "1.0",
    "entity": "syllabus",
    "board-url": "<url>",
    "name": "name of syllabus",
    "xray-sink": "url of xray sink - optional",
    "concepts": [
        {
            "name": ["Number System", "Real Numbers"],
            "url": "<url-to-concept>"
        }
    ]
}
Lang:
json
Concept
A concept page puts these in the meta tag:
<head>
    <meta name="ednet-entity" content="concept">
    <meta name="dependency" content="<url of other dependency>">
</head>
Lang:
html
Please note that there is no link back to syllabus or board, this is done intentionally so a concept can be re-used in different syllabus. Concept is just a URL. The content of the concept page can be ignored.
Deprecation Of Concept

From time to time maintainer of a concept may realise their concept is actually a duplicate of some other concept and would want to let everyone using their concept know of this.

They can do so by adding (current concept deciding to deprecate themselves):
<head>
    <meta name="ednet-entity" content="concept">
    <meta name="ednet-canonical-concept" content="the other concept"
</head>
Lang:
html
Content
Content can be present on any URL. The content can express what concepts it is good for by adding the following meta tags:
<head>
    <meta name="ednet-entity" content="content">
    <meta name="content-url" content="url of content.ftd">
    <meta name="ednet-concept" content="url of the concept 1">
    <meta name="ednet-concept" content="url of the concept 2">
    <meta name=xray-sink" content="url of xray sink - optional">
</head>
Lang:
html

Same content can be used for different concepts, so the ednet-concept meta can be repeated any number of times.

The content-type can be one of explainer, video, audio, quiz.
Download-ability Of Content

For a content to be part of ednet network, it must be easily downloadable, and must work in cross platform study apps.

ednet uses ftd to author all content. When authoring content the content must be linked against ednet-protoco.github.io/ednet-content package, with an alias ec.
Classroom
Any page can become a classroom by adding a classroom.json link:
<head>
    <meta name="ednet-entity" content="classroom">
    <meta name="classroom" content="url of classroom.json">
    <meta name="xray-sink" content="url of xray sink">
</head>
Lang:
html
The classroom.json looks like this:
{
    "ednet-version": "1.0",
    "entity": "classroom",
    "name": "name of classroom",
    "xray-sink": "url of xray sink - optional",
    "concepts": [
        {
            "name": ["Number System", "Real Numbers"],
            "concept": "<url-to-concept>",
            "syllabus": "<url of syllabus>",
            "content": [
                {
                    "name": "Display name for this content",
                    "url": "<url of content.ftd>"
                }
            ]
        }
    ]
}
Lang:
json
XRay
XRay Data
Xray json looks like this (xray schema):
{
    "classroom": "url of the classroom",
    "concept": "url of the concept",
    "syllabus": "<url of syllabus>",
    "timestamp": "nanoseconds, stored as i64 not string",
    "content": "url of content",
    "time-spent": "time in seconds, spent on this content",
    "resolution": "skipped | again | hard | good | easy"
}
Lang:
json
XRay Sharing
With Classroom
Learner can share their xray information with the classroom (vis the xray-sink url). This allows the software on teacher to plot completeness of learners so learners and their designated gaurdians can see progress of student with their learning cohort.
With Syllabus Creators

Learner can chose to allow the classroom to periodically share the XRay information with the syllabus (via the xray-sink url). This allows software with the board / syllabus creators to fine tune the syllabus.

The information also lets syllabus creators understand what content is most helpful to learners, so they can publish link to good content against each concept which helps future classrooms access better content to include in their classrooms.
With Content Creators
Learners can chose to allow the classroom to periodically share the xray information with the content creators, via the xray-sink url. This allows the content creator to improve their content.
Concept Re-normalization

When the ednet network starts, each board or syllabus will create all their concepts, and this will lead to duplication of concept. Like CBSE 10th Std Math's "irrational numbers" may have the concept url of https://cbse.org/10th/maths/irrational-numbers/, but ICSE in 10th may teach exactly the same concept, but they may end up creating their own URL: https://icse.com/10/mathematics/numbers/irrational/.

The xray information helps identify such duplications. The incentive of the content author is to make their content as widely used as possible as content creator may not care about money (being part of ednet netowrk does not itself earn you money, this is for making world a better place), but how often your content is included and used by learners is still a metric we believe will drive some content creators. Those content creators have incentive to add as many concept urls in their content meta data. Now simply spamming will not help the reputation of the author, they will appear smappy, lose credibility with teachers, so they will only put the link to concepts they truly believe (and can see from data that they are indeed helpul for) is relevant.

Syllabus creators are also getting the same xray information. And they can see what content is being recommended for the concept in their syllabus, what other concepts, that are not part of they syllabus, but is getting taught using the same content. If a content is teaching more than one concept, there is a possiblity they are duplicate. Analysing the content concept linkages, and xray data, gives an picture of concept duplication. The syllabus creators can act on this knowledge and remove (deprecate) their concept URLs and start using the more popular concept URLs.

This way the concept URLs will start to cluster, and duplication will go down. Eg if content a was written and tagged only with concept x and content b with concept y, and if clustering puts concept x and concept y as duplicates, and syullabus creator who used concept y examines the data and decides concept x and concept y are indeed duplicate, syllabus author will ask concept maintainer of concept y to derecate themselves in favour of concept x, and if that is done, both content a and content b will become available to learners of concept x (which is also now learners of concept y).
Tables
-- We will add monitoring related fields later.

CREATE TABLE concept {
    id INTEGER PRIMARY KEY,
 url TEXT PRIMARY KEY
};

CREATE TABLE content {
    id INTEGER PRIMARY KEY,
 url TEXT PRIMARY KEY
};

CREATE TABLE concept_content {
  id INTEGER PRIMARY KEY,
  concept TEXT, -- concept url
  content TEXT, -- content url
};


CREATE TABLE user_concept {
  id INTEGER PRIMARY KEY,
  concept TEXT, -- concept url
  user_id INTEGER NOT NULL REFERENCES "fastn_user" ("id") 
    DEFERRABLE INITIALLY DEFERRED,
  -- "resolution": "skipped | again | hard | good | easy"
  resolution TEXT DEFAULT again,
  created_at INTEGER,
  updated_at INTEGER
};


CREATE TABLE xray_event {
  id INTEGER PRIMARY KEY,
  concept TEXT, -- concept url
  user_id INTEGER  NOT NULL REFERENCES "fastn_user" ("id") 
    DEFERRABLE INITIALLY DEFERRED,
  resolution TEXT DEFAULT again,
  created_at INTEGER
}
Lang:
sql