Table of Contents

1. Introduction

What is a Curriki Educational Experience (C2E)? C2E is an open-source technology and specification that increases the quality of educational content, simplifies its distribution, expands access, and provides measurable results.

As a standard, C2E enables trusted partnerships between companies, Open Educational Resource (OER) providers and institutions of learning as well as individual learners. C2E provides the common plumbing that enables exchanging learning experiences within an integrated ecosystem.

What makes a C2E unique?

  • STANDARDS BASED: It builds on already established standards, making it easier to create, distribute and experience educational content.
  • FOSTERS INTEGRATION: It advances easier integration of content. C2Es work with or without a learning management system (LMS).
  • DATA & ANALYTICS: It provides usage data and learning analytics. Instructors and learners are able to assess data-informed reporting  while student-level data remains anonymous to creators and publishers.
  • MARKET DRIVEN: Offers multiple options towards cost savings. Expands opportunities for licensing content by individual elements, complete package, and anything in between to increase access to content.
  • Makes it easier to license and embed premium content. C2E is designed to support a wide array of formats (SCORM, ePUB, H5P, Streaming Video, HTML5, etc.)

To illustrate the ecosystem, let’s assume that  

  • A media owner / publisher makes its media assets available for use in education as a new revenue stream. 
  • Content creators search across libraries of assets looking for the best ones for their lessons by using intelligent search and using  a C2E compliant authoring tool and AI to create lessons.  
  • These assets go into a marketplace that supports both OER and commercial content. 
  • When someone acquires a C2E lesson, if it is a premium resource both the creator and the original content owner get paid. 

In all cases, C2E lessons collect a substantial amount of analytics.  See the diagram below.

2. C2E Architecture

C2E supports an ecosystem that enables the producer and consumer sides of educational content authoring, distribution, and consumption. The C2E model enables creators of digital content for education to include high-quality streams from media publishers, distribute them through a quality-assured process that ensures the fidelity and security of contents and transactions, and provides a marketplace for the exchange of these digital goods and accurate compensation for the members of the content production chain.

The following diagram illustrates the key Services needed to support the C2E document’s ecosystem, including the support for authoring, distribution, rendering, and equitable compensation of authors and media publishers.

  1. Authors leverage premium and free media to create digital learning experiences through a Curriki Educational Experiences (C2E) Publisher The Publisher guarantees distribution of royalties back to authors and media owners and is responsible for listing its content to one or more C2E stores.
  2. The C2E Store maintains an inventory of C2Es available for use by Institutions.  It authenticates the identity of purchasers, validates payment methods,  and collects fees based on usage agreements between the store and an institution.
  3. The Institution installs a C2E Player or configures a cloud-based C2E player service within its Learning System(s), which enables C2Es to be streamed within curricula, and for students to access C2Es as part of the course work.


The C2E Player emits logging data that is used for tracking usage and performance of the C2Es as well as for payment and royalty calculations.

For more information on the capabilities of Curriki Educational Experiences and their impact on education, please refer to the C2E Functional Specification

3. C2E Services

C2E defines a set of open APIs for distributing and playing digital content encoded in the C2E document format. It is designed to create and support a new global content ecosystem for education. The intention is to provide an open, decentralized layer for the internet for securely persisting, publishing, and subscribing to digital media for education.

The principles that C2E Services follows are:

  • Web-friendly, OpenAPI compliant services (JSON over REST)
  • Provide a simple architecture with minimal dependencies.
  • Open and publicly accessible standard with no patent or licensing encumbrances.
  • Open source, liberally licensed reference implementations.

The functionality that C2E Services provide includes:

  • Creation and management of fully protected and portable digital content.
  • Cryptographically secure storage of content and content state.
  • Receiving and rendering digital content with end-to-end encryption.
  • Collection and reporting of usage analytics.n

The end goal of C2E is to be a ubiquitous protocol for distributing digital content and its data between people in an interoperable and federated manner.

3.1 Publisher Service

The C2E Publisher API defines how content flows from an authoring environment to stores where the content can be acquired by institutions for consumption in their learning systems.

Publisher Services include protocols for processing and packaging streamable content into clips, with each resulting encrypted object (a C2E) having identifiable start and stop markers, rendering instructions, origin information, and instructions for capturing logging and analytics (including the distribution of royalties if applicable).

Please refer to the GitHub link below to access the C2E Player Service API Documentation. https://github.com/CurrikiEducationalExperiences/cee-publisher-service/blob/main/README.md

3.2 Store Service

The C2E Store API defines how an inventory of C2E documents from one or more providers are made available for consumption by institutions. Store Services include protocols for institutions to provide payment methods, authorizing a C2E or collection of C2Es for use by a specific institution. The Store Services also handle the collection of payments on behalf of the providers.

Please refer to the GitHub link below to access the C2E Store Service API Documentation. https://github.com/CurrikiEducationalExperiences/cee-store-service/blob/main/README.md

3.3 Player Service

The C2E Player API defines the base functionality that a C2E player must support. Among these, the player provides dual functionality, (1) for curriculum builders and educators to select C2Es that have been authorized for use in their institutions and (2) for students to render a C2E within the context of a specific course. The player is configured with API keys provided by each C2E Store Service and linked to each licensee organization, which are then used to browse and search through active licenses and authorize rendering of C2E content. The player thus renders supported media when it is requested as long as it has a valid payment method currently registered by the store. This authorization process is mediated by the C2E Provider Service which will query the Store to check for a valid payment method before returning the requested C2E content. The player also emits usage and performance logs that are used by the other services.

Please refer to the GitHub link below to access the C2E Player Service API Documentation. https://github.com/CurrikiEducationalExperiences/cee-player-service/blob/main/README.md

Player functionality 1: Access to C2E inventory for inclusion in course content

Player functionality 2: Rendering content within the context of a digital course. Reference architecture for LTI-compliant players. Other player authentication configurations can be supported by the specification (e.g. Google Classroom, or Microsoft Teams).

4. C2E Manifest

A manifest is a description in JSON-LD of the resources comprising meaningful instruction for a C2E. A manifest also contains zero or more static ways of organizing the instructional resources for presentation.

The scope of manifest is elastic. A manifest can describe a part of a C2E that can stand by itself outside of the context of a C2E (an instructional object). The decision is given to content developers to describe their content in the way they want it to be considered for aggregation or disaggregation.

Every C2E contains a JSON-LD manifest. The manifest serves to identify the type of document contained within the C2E as well as its origin, ownership, and pricing if applicable.  The data informs the player where to validate the C2E and request its decryption key.

4.1 JSON-LD

JSON-LD is a lightweight Linked Data format. It is easy for humans to read and write. It is based on the already successful JSON format and provides a way to help JSON data interoperate at Web-scale. JSON-LD is an ideal data format for programming environments, REST Web services, and unstructured databases.

Documentation – JSON-LD 1.1

JSON-LD is a concrete RDF syntax. Hence, a JSON-LD document is both an RDF document and a JSON document and correspondingly represents an instance of an RDF data model which is a set of triples, each consisting of a subject, a predicate and an object.

4.2 The Context

One of the basic concepts that JSON-LD has is that Context allows us to define terms that can be used to define the components and resources of the C2E. A context is introduced using an entry with the key @context and may appear within a node object or a value object.

				
					{
  "@context": {
    
  }
}
				
			

4.3 Namespaces

Define following namespace prefixes are defined as context terms:

c2ens: “https://c2e.curriki.org/”

sdons: “https://schema.org/”

The context with required namespaces would look like:

				
					{
  "@context": {
    "c2ens": "https://c2e.curriki.org/",
    "sdons": "https://schema.org/"
  }
}
				
			

4.4 C2E Terms

Following mandatory terms are required to define in the JSON-LD @context.

				
					{
    "@context": {
      "c2ens": "https://c2e.curriki.org/",
      "sdons": "https://schema.org/",
      "c2eMetadata": "sdons:mainEntity",
      "c2eWorkflow": "sdons:hasPart",
      "c2ePlayerExtension": "sdons:potentialAction",
      "c2eTerm": "c2ens:terms/",
      "@language" : "en"
    }
}
				
			
  • c2eMetadata term is schema.org mainEntity to structure the essential information about a C2E being an entity.
  • c2eWorkflow term is schema.org hasPart to structure the content parts of the C2e
  • c2ePlayerExtension is a schema.org potentialAction which refers to the C2E Player extension script which runs the c2eWorkflow .
  • c2eTerm is c2ens namespace extension to be used as prefix of C2E specific IRIs in the JSON-LD structure.

@language keyword in @context defines the default language of the manifest JSON-LD document.

4.5 C2E Creative Work

C2E consists of the following top-level mandatory attributes.

				
					{
  "@context": {
    "c2ens": "https://c2e.curriki.org/",
    "sdons": "https://schema.org/",
    "c2eCreator": "sdons:creator",
    "c2ePublisher": "sdons:publisher",
    "c2eLicense": "sdons:license",
    "c2eWorkflow": "sdons:hasPart",
    "c2eMedia": "sdons:associatedMedia",
    "c2eAction": "sdons:potentialAction",
    "C2EPlayerExtension": "sdons:PlayAction",
    "C2EStoreService": "sdons:TradeAction",
    "c2eTerm": "c2ens:terms/",
    "@language" : "en"
  },
  "@id": "c2ens:c2e-xxx",
  "@type": "sdons:CreativeWork",
  "creativeWorkStatus": "licensed",
  "schemaVersion": "0.2.0",
  "name": "My Sample C2E",
  "description": "My Sample C2E for Proof of Concept.",
  "keywords": "curriki, education, e-learning",
  "c2eCreator" : {
  },
  "c2ePublisher" : {
  },
  "c2eWorkflow": [
  ],
  "c2eAction": [
    {
      "@type": "C2EPlayerExtension",
    },
    {
      "@type": "C2EStoreService",
    }
  ]
}
				
			
  • c2eMetadata term is schema.org mainEntity to structure the essential information about a C2E being an entity.
  • c2eWorkflow term is schema.org hasPart to structure the content parts of the C2e
  • c2ePlayerExtension is a schema.org potentialAction which refers to the C2E Player extension script which runs the c2eWorkflow .
  • c2eTerm is c2ens namespace extension to be used as prefix of C2E specific IRIs in the JSON-LD structure.

@language keyword in @context defines the default language of the manifest JSON-LD document.

4.5.1 Identifier

C2E identifier which is defined as JONS-LD @id mentioned above, is required to have following pattern:

c2ens : c2e- xxx 

which will be translated as:

https://c2e.curriki.org/c2-xxx

xxx represents the system generated unique number of a C2E subscription.

4.5.2 Type

C2E type which is defined as JSON-LD @type mentioned above, is a schema.org CreativeWork, defined with namespace sdons.

4.5.3 Schema Version

It is defined by the schemaVersion attribute.

4.5.4 Name

name attribute defines the C2E name.

4.5.5 Description

description attribute defines the C2E description.

4.5.6 Keywords

keywords attribute defines the C2E description.

4.5.7 Status

creativeWorkStatus defines the C2E statuses for example master, preview or licensed.

4.5.8 Creator

c2eCreator attribute to define the creator of a C2E.

				
					{
   "c2eCreator" : {
      "@id": "c2ens:c2eid-xxx/c2e-creator/xxx",
      "@type": "sdons:Person",
      "name": "C2E Creator Person",
      "email": "c2e-creator@curriki.org"
    }
}
				
			

4.5.9 Publisher (C2E Service)

c2ePublisher attribute to define the C2E Publisher Service.

				
					{
    "c2ePublisher" : {
      "@id": "c2ens:c2eid-xxx/c2e-publisher/id/xxx",
      "@type": "sdons:Organization",
      "name": "Curriki/Framework",
      "email": "info@curriki.org",
      "url": "https://curriki.org",
      "brand": {
          "@type": "sdons:WebAPI",
          "name": "C2E Publisher Service"
      }

    }
}


				
			

4.5.10 License

c2eLicense attribute to define the C2E license information.

				
					{
    "c2eLicense": {
            "@id": "c2ens:c2eid-xxx/license",
            "@type": "sdons:Dataset",
            "additionalType": "usage | monthly | yearly",
            "dateCreated": "2023-11-29T13:55:41.445Z",
            "expires": "2024-11-29T13:55:41.445Z",
            "identifier": {
                "@type": "sdons:PropertyValue",
                "propertyID": "c2eSubscriptionId",
                "value": "5e57678783ef4fb02395364f7f778241acfbd8f7a1cfb44e4ba132f6ee4e797db9892259236911a4127ec2e1a0ca646c"
            },
            "usageInfo": {
                "@type": "sdons:DefinedTermSet",
                "name": "License Terms",
                "hasDefinedTerm": {
                    "@type": "sdons:DefinedTerm",
                    "name": "Monthly - 1000 views",
                    "termCode": "C2EMonthlyUsage"
                }
            },
            "offers": {
                "@type": "sdons:Offer",
                "price": "0.00",
                "priceCurrency": "USD"
            }
        }
}
				
			

4.5.11 C2E Workflow

C2E content artifacts are defined in c2eWorkflow as sdons:hasPart of C2E being a schema.org’s  CreativeWork.

Example
				
					{
 "c2eWorkflow": [
      {
          "@id": "c2ens:c2eid-12345/content/id/101",
          "@type": "sdons:CreativeWork",
          "@index": "1",
          "learningResourceType": "Project",
          "name":"My Sample Project",
          "description":"My Sample Project for Proof of Concept.",
          "keywords":"curriki-project, sample course"
      },
      {
          "@id": "c2ens:c2eid-12345/content/id/102",
          "@type": "sdons:CreativeWork",
          "@index": "2",
          "learningResourceType": "Playlist",
          "isPartOf": {
            "@id": "c2ens:c2eid-12345/content/id/101",
              "@type": "sdons:CreativeWork"
          },
          "name":"My Sample Playlist",
          "description":"My Sample Playlist for Proof of Concept."
      },
      {
          "@id": "c2ens:c2eid-12345/content/id/103",
          "@type": "sdons:CreativeWork",
          "@index": "3",
          "learningResourceType": "Activity",
          "isPartOf": {
            "@id": "c2ens:c2eid-12345/content/id/102",
              "@type": "sdons:CreativeWork"
          },
          "name":"My Sample Activity",
          "description":"My Sample Activity for Proof of Concept.",
          "keywords": "homework, learning activity",
          "educationalLevel": [
            {
              "@type": "sdons:DefinedTermSet",
              "name": "EducationalLevel",
              "hasDefinedTerm": {
                  "@type": "sdons:DefinedTerm",
                  "name": "Grade 1",
                  "termCode": "Grade1"
              }
            },
            {
              "@type": "sdons:DefinedTermSet",
              "name": "EducationalLevel",
              "hasDefinedTerm": {
                  "@type": "sdons:DefinedTerm",
                  "name": "Grade 2",
                  "termCode": "Grade2"
              }
            }
          ],
          "c2eMedia": [
            {
                "@id": "c2ens:c2eid-12345/content/id/103/media/lecture-video.mp4",
                "@type": "sdons:MediaObject",
                "name": "Video Lecture 1",
                "contentUrl": "http://s3.amazonaws.com/c2e-content/12345/103/lecture-video.mp4",
                "encodingFormat": "video/mp4",
                "startTime": "00:00:00",
                "endTime": "00:10:30",
                "copyrightNotice": "Video Lecture 1 has rights to Media Owner",
                "license": {
                  "@type": "sdons:NoteDigitalDocument",
                  "creditText": "Copyright Credit text or html formatted content of the video" 
                },
                "identifier": {
                  "@type": "sdons:PropertyValue",
                  "value": "978-1-394-15367-11",
                  "propertyID": "ISBN/VideoID"
                }
            },
            {
              "@id": "c2ens:c2eid-12345/content/id/103/media/lecture-video-2.mp4",
              "@type": "sdons:MediaObject",
              "name": "Video Lecture 2",
              "contentUrl": "http://s3.amazonaws.com/c2e-content/12345/103/lecture-video-2.mp4",
              "encodingFormat": "video/mp4",
              "startTime": "00:00:00",
              "endTime": "00:10:30",
              "copyrightNotice": "Video Lecture 2 has rights to Media Owner",
              "license": {
                "@type": "sdons:NoteDigitalDocument",
                "creditText": "Credit text or html formatted content of the video" 
              },
              "identifier": {
                "@type": "sdons:PropertyValue",
                "value": "978-1-394-15367-11",
                "propertyID": "ISBN/VideoID"
              }
            }
          ]
      }
  ]
}


				
			
C2E Content

C2E Workflow has schema.org CreativeWork objects  which represent the content parts of a C2E with relationships between them. It would have all the (https://schema.org/CreativeWork) attributes and following attributes common:

  • @index to define the index of the object in the list.
  • name of a content artifact.
  • description of a content artifact.
  • learningResourceType to define the content type in the business. For example: CurrikiStudio’s Project, Playlist or Activity, Ebook (EPUB, PDF) etc.
  • isPartOf is used to define relationships with other content objects in the C2E Workflow object.
  • c2eMedia which is sdons:associatedMedia, used to define the object which has information about royalty media with necessary information. More explanation is written below about this media object.

Any of the properties that schema.org CreateiveWork can have. For example size, hasPart etc.

C2E Media (Royalty)

Royalty Media is an essential part of the C2E ecosystem. It is represented by c2eMedia which is the  sdons:associatedMedia attribute of C2E Content object in C2E Workflow explained above. Following are the attributes which define the necessary information of the C2E which works in the ecosystem.

  • contentUrl points to royalty or non-royalty media which live on source from Media Owner.
  • encodingFormat defines the media format.
  • startTime hh:mm:ss
  • endTime hh:mm:ss

Any of the properties that schema.org MediaObject can have are based on the requirements of C2E Media.

License Credit Text

c2eMedia attribute which is sdons:associatedMedia are assigned sdons:MediaObject type of object. This object has a license attribute which includes detailed credit text. Sample license credit text link. See highlighted example in the manifest part below.

				
					{ 
        "c2eMedia": [
            {
                "@id": "c2ens:c2eid-12345/content/id/103/media/lecture-video.mp4",
                "@type": "sdons:MediaObject",
                "name": "Video Lecture 1",
                "contentUrl": "http://s3.amazonaws.com/c2e-content/12345/103/lecture-video.mp4",
                "encodingFormat": "video/mp4",
                "startTime": "00:00:00",
                "endTime": "00:10:30",
                "copyrightNotice": "Video Lecture 1 has rights to Media Owner",
                "license": {
                  "@type": "sdons:NoteDigitalDocument",
                  "text": "Copyright Credit text or html formatted content of the video",
                  "url": "url to license",
                  "version": "1.0",
                  "copyrightYear": {
                     "@type": "sdons:QuantitativeValue",
                     "maxValue": "2014",
                     "minValue": "2015"
                  },
                  "additionalType": "for example: Creative Common",
                  "usageInfo": {
                        "@type": "sdons:DefinedTermSet",
                        "name": "LicenseTerms",
                        "hasDefinedTerm": {
                          "@type": "sdons:DefinedTerm",
                          "name": mediaItem.Medium.MediaRoyalty.terms,
                          "termCode": mediaItem.Medium.MediaRoyalty.terms.split(' ').join('-').toLowerCase()
                        }
                    }
                },
                "identifier": {
                  "@type": "sdons:PropertyValue",
                  "value": "978-1-394-15367-11",
                  "propertyID": "ISBN/VideoID"
                }
            }
         ]
}


				
			
Copyright Notice

Copyright notices can help protect the textual and visual content of your website. Most websites include a copyright notice in the footer of the site, and on every single webpage. Refer to the link.

c2eMedia attribute which is sdons:associatedMedia are assigned sdons:MediaObject type of object. This object has copyrightNotice which includes the copyright notice which can be displayed on the C2E page footer. See highlighted example in the manifest part below.

				
					{
    "c2eMedia": [
            {
                "@id": "c2ens:c2eid-12345/content/id/103/media/lecture-video.mp4",
                "@type": "sdons:MediaObject",
                "name": "Video Lecture 1",
                "contentUrl": "http://s3.amazonaws.com/c2e-content/12345/103/lecture-video.mp4",
                "encodingFormat": "video/mp4",
                "startTime": "00:00:00",
                "endTime": "00:10:30",
                "copyrightNotice": "Video Lecture 1 has rights to Media Owner",
                "license": {
                  "@type": "sdons:NoteDigitalDocument",
                  "text": "Copyright Credit text or html formatted content of the video",
                  "url": "url to license",
                  "version": "1.0",
                  "copyrightYear": {
                     "@type": "sdons:QuantitativeValue",
                     "maxValue": "2014",
                     "minValue": "2015"
                  },
                  "additionalType": "for example: Creative Common",
                  "usageInfo": {
                        "@type": "sdons:DefinedTermSet",
                        "name": "LicenseTerms",
                        "hasDefinedTerm": {
                          "@type": "sdons:DefinedTerm",
                          "name": mediaItem.Medium.MediaRoyalty.terms,
                          "termCode": mediaItem.Medium.MediaRoyalty.terms.split(' ').join('-').toLowerCase()
                        }
                    },

                },
                "identifier": {
                  "@type": "sdons:PropertyValue",
                  "value": "978-1-394-15367-11",
                  "propertyID": "ISBN/VideoID"
                }
            }
   ]
}
				
			
C2E Action

It is sdons:potentialAction which describes two action objects which shows Store’s endpoint (where C2E is published) and Player Extension script url.

				
					{
  "c2eAction": [
    {
      "@type": "C2EPlayerExtension",
      "target": {
          "@type": "sdons:EntryPoint",
          "actionApplication": {
              "@type": "sdons:WebApplication",
              "name": "C2E Player Extension",
              "url": "http://s3.aws.com/c2eid-xxx/c2e-player-extension.js"
          }
      }
    },
    {
      "@type": "C2EStoreService",
      "target": {
          "@type": "sdons:EntryPoint",
          "actionApplication": {
              "@type": "sdons:WebApplication",
              "name": "C2E Store Service",
              "url": "https://c2e-sotre-service.curriki.org"
          }
      }
    }
  ]
}
				
			
C2E Player Extension

In the heart of the C2E Ecosystem lies the C2E Player, your gateway to seamless content delivery. Think of it as a secure bridge, allowing creators (C2E Publishers or Service Providers) to build rich learning experiences using diverse formats like videos, eBooks, courses, playlists or a learning activity. These elements, bundled with metadata and royalty-based media, form C2E Content. To unlock their full potential, the C2E Player utilizes a standardized manifest structure, enabling creators to add custom scripts that extend its core functionality in accordance with the C2E protection and authorization protocols. Following structure points to the custom script called C2E Player Plugin which is define as C2EPlayerExtension which is  sdons:PlayAction type:

				
					    {
      "@type": "C2EPlayerExtension",
      "target": {
          "@type": "sdons:EntryPoint",
          "actionApplication": {
              "@type": "sdons:WebApplication",
              "name": "C2E Player Extension",
              "url": "http://s3.aws.com/c2eid-xxx/c2e-player-extension.js"
          }
      }
    }
				
			
C2E Store Endpoint

It is defined as C2EStoreService which is sdons:TradeAction type:

				
					    {
      "@type": "C2EStoreService",
      "target": {
          "@type": "sdons:EntryPoint",
          "actionApplication": {
              "@type": "sdons:WebApplication",
              "name": "C2E Store Service",
              "url": "https://c2e-sotre-service.curriki.org"
          }
      }
    }
				
			

4.6 Sample Manifest

				
					{
  "@context": {
    "c2ens": "https://c2e.curriki.org/",
    "sdons": "https://schema.org/",
    "c2eCreator": "sdons:creator",
    "c2ePublisher": "sdons:publisher",
    "c2eLicense": "sdons:license",
    "c2eWorkflow": "sdons:hasPart",
    "c2eMedia": "sdons:associatedMedia",
    "c2eAction": "sdons:potentialAction",
    "C2EPlayerExtension": "sdons:PlayAction",
    "C2EStoreService": "sdons:TradeAction",
    "c2eTerm": "c2ens:terms/",
    "@language" : "en"
  },
  "@id": "c2ens:c2eid-xxx",
  "@type": "sdons:CreativeWork",
  "creativeWorkStatus": "licensed",
  "schemaVersion": "0.2.0",
  "name": "My Sample C2E",
  "description": "My Sample C2E for Proof of Concept.",
  "keywords": "curriki, education, e-learning",
  "c2eCreator" : {
      "@id": "c2ens:c2eid-xxx/c2e-creator/id/xxx",
      "@type": "sdons:Person",
      "name": "C2E Creator",
      "email": "c2e-creator@curriki.org",
      "url": "https://curriki.org/author/profile"
  },
  "c2ePublisher" : {
      "@id": "c2ens:c2eid-xxx/c2e-publisher/id/xxx",
      "@type": "sdons:Organization",
      "name": "Curriki/CurrikiStudio/Framework",
      "email": "info@curriki.org",
      "url": "https://curriki.org",
      "brand": {
          "@type": "sdons:WebAPI",
          "name": "C2E Publisher Service"
      }
  },
  "c2eLicense": {
      "@id": "c2ens:c2eid-xxx/c2e-license",
      "@type": "sdons:WebContent",
      "additionalType": "usage | monthly | yearly",
      "dateCreated": "2023-11-29T13:55:41.445Z",
      "expires": "2024-11-29T13:55:41.445Z",
      "identifier": {
          "@type": "sdons:PropertyValue",
          "propertyID": "c2eLicenseId",
          "value": "5e57678783ef4fb02395364f7f778241acfbd8f7a1cfb44e4ba132f6ee4e797db9892259236911a4127ec2e1a0ca646c"
      },
      "usageInfo": {
          "@type": "sdons:DefinedTermSet",
          "name": "LicenseTerms",
          "hasDefinedTerm": {
              "@type": "sdons:DefinedTerm",
              "name": "Monthly - 1000 views",
              "termCode": "C2EMonthlyUsage"
          }
      },
      "offers": {
          "@type": "sdons:Offer",
          "price": "0.00",
          "priceCurrency": "USD"
      }
  },
  "c2eWorkflow": [
      {
          "@id": "c2ens:c2eid-12345/content/id/101",
          "@type": "sdons:CreativeWork",
          "@index": "1",
          "learningResourceType": "Project",
          "name":"My Sample Project",
          "description":"My Sample Project for Proof of Concept.",
          "keywords":"curriki-project, sample course"
      },
      {
          "@id": "c2ens:c2eid-12345/content/id/102",
          "@type": "sdons:CreativeWork",
          "@index": "2",
          "learningResourceType": "Playlist",
          "isPartOf": {
            "@id": "c2ens:c2eid-12345/content/id/101",
              "@type": "sdons:CreativeWork"
          },
          "name":"My Sample Playlist",
          "description":"My Sample Playlist for Proof of Concept."
      },
      {
          "@id": "c2ens:c2eid-12345/content/id/103",
          "@type": "sdons:CreativeWork",
          "@index": "3",
          "learningResourceType": "Activity",
          "isPartOf": {
            "@id": "c2ens:c2eid-12345/content/id/102",
              "@type": "sdons:CreativeWork"
          },
          "name":"My Sample Activity",
          "description":"My Sample Activity for Proof of Concept.",
          "keywords": "homework, learning activity",
          "educationalLevel": [
            {
              "@type": "sdons:DefinedTermSet",
              "name": "EducationalLevel",
              "hasDefinedTerm": {
                  "@type": "sdons:DefinedTerm",
                  "name": "Grade 1",
                  "termCode": "Grade1"
              }
            },
            {
              "@type": "sdons:DefinedTermSet",
              "name": "EducationalLevel",
              "hasDefinedTerm": {
                  "@type": "sdons:DefinedTerm",
                  "name": "Grade 2",
                  "termCode": "Grade2"
              }
            }
          ],
"about": [
    {
      "@type": "Thing",
      "name": "Computer Science"
    },
    {
      "@type": "Thing",
      "name": "Information Technology"
    },
    {
      "@type": "Thing",
      "name": "Business Intelligence"
    }
  ]
],
          "c2eMedia": [
            {
                "@id": "c2ens:c2eid-12345/content/id/103/media/lecture-video.mp4",
                "@type": "sdons:MediaObject",
                "name": "Video Lecture 1",
                "contentUrl": "http://s3.amazonaws.com/c2e-content/12345/103/lecture-video.mp4",
                "encodingFormat": "video/mp4",
                "startTime": "00:00:00",
                "endTime": "00:10:30",
                "copyrightNotice": "Video Lecture 1 has rights to Media Owner",
                "license": {
                  "@type": "sdons:NoteDigitalDocument",
                  "text": "Copyright Credit text or html formatted content of the video",
                  "url": "url to license",
                  "version": "1.0",
                  "copyrightYear": {
                     "@type": "sdons:QuantitativeValue",
                     "maxValue": "2014",
                     "minValue": "2015"
                  },
                  "additionalType": "for example: Creative Common",
                  "usageInfo": {
                        "@type": "sdons:DefinedTermSet",
                        "name": "LicenseTerms",
                        "hasDefinedTerm": {
                          "@type": "sdons:DefinedTerm",
                          "name": mediaItem.Medium.MediaRoyalty.terms,
                          "termCode": mediaItem.Medium.MediaRoyalty.terms.split(' ').join('-').toLowerCase()
                        }
                    },

                },
                "identifier": {
                  "@type": "sdons:PropertyValue",
                  "value": "978-1-394-15367-11",
                  "propertyID": "ISBN/VideoID"
                }
            },
            {
              "@id": "c2ens:c2eid-12345/content/id/103/media/lecture-video-2.mp4",
              "@type": "sdons:MediaObject",
              "name": "Video Lecture 2",
              "contentUrl": "http://s3.amazonaws.com/c2e-content/12345/103/lecture-video-2.mp4",
              "encodingFormat": "video/mp4",
              "startTime": "00:00:00",
              "endTime": "00:10:30",
              "copyrightNotice": "Video Lecture 2 has rights to Media Owner",
              "license": {
                "@type": "sdons:NoteDigitalDocument",
                "creditText": "Credit text or html formatted content of the video" 
              },
              "identifier": {
                "@type": "sdons:PropertyValue",
                "value": "978-1-394-15367-11",
                "propertyID": "ISBN/VideoID"
              }
            }
          ]
      }
  ],
  "c2eAction": [
    {
      "@type": "C2EPlayerExtension",
      "target": {
          "@type": "sdons:EntryPoint",
          "actionApplication": {
              "@type": "sdons:WebApplication",
              "name": "C2E Player Extension",
              "url": "http://s3.aws.com/c2eid-xxx/c2e-player-extension.js"
          }
      }
    },
    {
      "@type": "C2EStoreService",
      "target": {
          "@type": "sdons:EntryPoint",
          "actionApplication": {
              "@type": "sdons:WebApplication",
              "name": "C2E Store Service",
              "url": "https://c2e-sotre-service.curriki.org"
          }
      }
    }
  ]
}


				
			

FOr a visual representation, click on the JSON-LD Visualization link and open the following tab mention below:

5. Appendix A - Common Concepts

A manifest is a description in JSON-LD of the resources comprising meaningful instruction for a C2E. A manifest also contains zero or more static ways of organizing the instructional resources for presentation.

The scope of manifest is elastic. A manifest can describe a part of a C2E that can stand by itself outside of the context of a C2E (an instructional object). The decision is given to content developers to describe their content in the way they want it to be considered for aggregation or disaggregation.

Every C2E contains a JSON-LD manifest. The manifest serves to identify the type of document contained within the C2E as well as its origin, ownership, and pricing if applicable.  The data informs the player where to validate the C2E and request its decryption key.

5.1 Specification Versions

C2E as a whole is released under a single specification number in the form vX.Y.

A change to X reflects a breaking or substantially invasive change. When exactly to increment this number is left to the Spec Core Team.

A change to Y represents a backwards compatible or “managed” backwards compatible change to the specification, usually in the form of features.

L

Additionally, the spec version may have arbitrary metadata applied to it when followed by a -. For example, v1.1-alpha. Usage of this is not strictly specified but is intended for usage of pre-release builds of the specification.

5.2 Endpoint versioning

All API endpoints within the specification are versioned individually. This means that /v3/player (for example) can get deprecated in favor of /v4/player without affecting /v3/store at all. A server supporting /v4/player would keep serving /v3/store as it always has.

5.3 License

The C2E specification is licensed under the MIT License.