Table of Contents
C2E Specification
1. Introduction
C2E defines a distribution and interchange format for digital publications and documents. The C2E format provides a means of representing, packaging and encoding structured and semantically enhanced Web content — including HTML, CSS, SVG and other resources — for distribution in a single-file container.
The expectation is that the C2E format will be utilized for a broad range of content, including educational, professional and scientific publications.
This initial release aims to support a wide range of interactive digital requirements, including complex layouts, rich media and interactivity, and global typography features.
C2E is modular in nature: it consists of a family of specifications that define the core features and functionality of the standard. This specification represents the primary entry point to standard, but the specifications listed in Specifications are all a part of C2E. An index to key concepts and definitions defined across these specifications is provided at the end of this specification.
The informative [C2EOverview] provides a general introduction to C2E. A list of technical changes from the previous revision is also available in the informative [C2EChanges].
2. C2E Conceptual Model
Figure 2.1 is a conceptual diagram that illustrates the components of the C2E Conceptual Model.

2.1 Major Elements
The C2E Package depicted in Figure 2.1 consists of two major elements: a special JSON-LD file describing the content organization and resources in a Package, and the file resources being described by the JSON-LD. The special JSON-LD file is called the C2E Manifest file, because course content and organization is described in the context of ‘manifests’. Once a Package has been incorporated into a single file for transportation, it is called a Package Interchange File. The relationship of these parts to the content container is described below:
Package
It is a logical directory, which includes a specially named JSON-LD file and contains the actual file resources. The file resources may be organized in sub-directories.
Package Interchange File
It is a single file, (e.g., ‘.zip’, ‘.jar’, ‘.c2e’) which includes a top-level manifest file named “c2e.json” and all other files and directories as identified by the Manifest. A Package Interchange File is a concise Web delivery format, a means of transporting related, structured information. PKZip v2.04g (.zip) is recommended as the default Package Interchange File format. Any ZIP file format MUST conform to RFC1951.
2.2 Standard Name for the Manifest File
Content distributed according to the C2E specification must contain an C2E Manifest file. To ensure that the C2E Manifest file is a valid JSON-LD file and can always be found within a Package, it has a pre-defined name and location:
c2e.json
In the absence of this file, the package is not an C2E Package and cannot be processed. It is required that the name be kept, as above, in all lowercase letters.3. 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 – https://www.w3.org/TR/json-ld/
3.1 Relationship to RDF (Resource Description Framework)
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 set of triples, each consisting of a subject, a predicate and an object.
4. Manifest Elements
A manifest is a description in JSON-LD of the resources comprising meaningful instruction for a C2E. A manifest also contain zero or more static ways of organizing the instructional resources for presentation.
The scope of manifest is elastic. A manifest can describe 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. The general rule is that a Package always contains a single top-level manifest that may contain one or more sub-Manifests. The top-level manifest always describes the Package. Any nested sub-Manifests describe the content at the level to which the sub-Manifest is scoped, such as a course, instructional object, or other.
4.1 The Context
One of basic concept that JSON-LD has is the Context allow 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.1.1 Namespaces
Define following namespace prefixes are defined as context terms:
“c2ens”: “https://c2e.curriki.org/”
“sdons”: “https://schema.org/”
“xsd”: “http://www.w3.org/2001/XMLSchema/#”
c2ens namespace prefix is defined to refer the resources, types and terms by C2E.
xsd namespace prefix define XML Schema language which also referred as XML Schema Definition (XSD).
The context with required namespaces would look like:
{
"@context": {
"c2ens": "https://c2e.curriki.org/",
"sdons": "https://schema.org/",
"xsd": "http://www.w3.org/2001/XMLSchema/#"
}
}
4.1.2 C2E Mandatory Terms
{
"@context": {
"c2ens": "https://c2e.curriki.org/",
"sdons": "https://schema.org/",
"xsd": "http://www.w3.org/2001/XMLSchema/#",
"C2E": "sdons:CreativeWork",
"c2eType": {"@id": "sdons:additionalType", "@type":"xsd:string"},
"c2eContain": {"@id": "sdons:Collection", "@container": ["@graph",
"@index"]},
"c2eResources": "@graph",
"c2eComponents": "@graph",
"c2eTerm": "c2ens:terms/",
"c2eVendor": {"@id": "sdons:vendor", "@type":"xsd:string"},
"name": {"@id": "sdons:name", "@type":"xsd:string"},
"url": {"@id": "sdons:url", "@type":"xsd:string"},
"fileFormat": {"@id": "sdons:fileFormat", "@type":"xsd:string"},
"@language" : "en"
}
}
“C2E”: “sdons:CreativeWork” The “C2E” term is used to define primary attribute “@type” of JSON-LD top level object
4.1.3 C2E Metadata Terms
"metadata": "c2eTerm:metadata",
"schemaVersion": {"@id": "sdons:schemaVersion", "@type":"xsd:string"},
"general": "c2eTerm:mdGeneral",
"title": {"@id": "sdons:headline", "@type":"xsd:string"},
"description": {"@id": "sdons:description", "@type":"xsd:string"},
"keywords": {"@id": "sdons:keywords", "@type":"xsd:string"},
"author": {"@id": "sdons:author", "@type":"xsd:string"},
"publisher": {"@id": "sdons:publisher", "@type":"xsd:string"},
"email": {"@id": "sdons:email", "@type":"xsd:string"},
"lifecycle": "c2eTerm:mdLifecycle",
"version": {"@id": "sdons:version", "@type": "xsd:string"},
"releaseStatus": {"@id": "sdons:creativeWorkStatus", "@type": "xsd:string"},
"subManifest": {"@id": "sdons:url", "@type":"xsd:string"},
"copyright": "c2eTerm:copyright",
"license": {"@id": "sdons:license", "@type": "xsd:string"},
"encodingFormat": {"@id": "sdons:encodingFormat", "@type": "xsd:string"},
"copyrightHolder": {"@id": "sdons:copyrightHolder", "@type": "xsd:string"},
"copyrightNotice": {"@id": "sdons:copyrightNotice", "@type": "xsd:string"},
"copyrightYear": {"@id": "sdons:copyrightYear", "@type": "xsd:integer"}
4.2 Define C2E JSON-LD Object
4.2.1 Define Metadata
"metadata": {
"@id": "c2ens:c2eid-xxx/metadata",
"@type": "sdons:Dataset",
"schemaVersion": "1.0",
"general": {
"@id": "c2ens:c2eid-xxx/metadata/general",
"@type": "sdons:Dataset",
"title": "My Smaple C2E",
"description": "My Smaple C2E for Proof of Concept.",
"keywords": "c2e, e-learning, learning experince"
},
"author" : {
"@id": "c2ens:c2eid-xxx/author/id/xxx",
"@type": "sdons:Person",
"name": "Waqar Muneer",
"email": "waqar@curriki.org",
"url": "https://twitter.com/waqarmnr"
},
"publisher" : {
"@id": "c2ens:c2eid-xxx/author/id/xxx",
"@type": "sdons:Organization",
"name": "Curriki",
"email": "info@curriki.org",
"url": "https://curriki.org"
},
"lifecycle": {
"@id": "c2ens:c2eid-xxx/metadata/lifecycle",
"@type": "sdons:Code",
"version": "1.10",
"releaseStatus": "Beta"
},
"copyright": {
"@id": "c2ens:c2eid-xxx/metadata/copyRight",
"@type": "sdons:Dataset",
"license": {
"@id": "c2ens:c2eid-xxx/license/id/xxx",
"@type": "sdons:DigitalDocument",
"encodingFormat": "text/plain or any binary as per need",
"url": "/path/to/license.txt"
},
"copyrightHolder": {
"@id": "c2ens:c2eid-xxx/copyrightHolder/id/xxx",
"@type": "sdons:Person",
"name": "Waqar Muneer",
"email": "waqar@curriki.org",
"url": "https://twitter.com/waqarmnr"
},
"copyrightNotice": "This C2E has all rights to Waqar Muneer",
"copyrightYear": "2023"
}
}
4.2.2 Define C2E
It makes JSON-LD top level object. For example:
{
"@context": {
"c2ens": "https://c2e.curriki.org/",
"sdons": "https://schema.org/",
"xsd": "http://www.w3.org/2001/XMLSchema/#",
"C2E": "sdons:CreativeWork"
........................
........................
},
"metadata": {
"@id": "c2ens:c2eid-xxx/metadata",
"@type": "sdons:Dataset",
"schemaVersion": "1.0"
........................
........................
},
"@id": "c2ens:c2eid-xxx",
"@type": "C2E"
}
4.2.2.1 C2E Identifier
c2ens : c2eid- xxx
which will be translated as:
https://c2e.curriki.org/c2eid-xxx
xxx represent the system generated unique number.
4.2.3 Define C2E Resources
Includes references to all of the resources included in the package. At a minimum it should reference all those files that are needed in order to view the content.
"c2eContainer": [
{
"@id": "c2ens:c2eResources",
"@type": "sdons:Collection",
"c2eResources" : [
{
"@id": "c2ens:c2eid-xxx/resource/1",
"@type": "sdons:DigitalDocument",
"url": "/path/to/file-1.json",
"fileFormat": "application/json"
},
{
"@id": "c2ens:c2eid-xxx/resource/2",
"@type": "sdons:DigitalDocument",
"url": "/path/to/readme.txt",
"fileFormat": "application/text"
}
]
}
]
4.3 Extending C2E Object with “hasPart” attribute (optional)
Since C2E Object is sdons based “CreativeWork, so C2E object is considered to be have all of its attributes predefined in it. A C2E Object can be extended by using “hastPart” attribute to associate other “CreativeWork” type of object. CreativeWork’s sub-types such as Article, Blog , LearningResource etc can also be assigned to “hastPart” attribute.
{
"@id": "c2ens:c2eid-xxx",
"@type": "C2E",
"hasPart": {
"@id": "c2ens:c2ePart-xxx",
"@type": [ "Any specific type of sdons:CreativeWork" ]
}
}
“hastPart” attribute provide ability to create CreativeWork and its sub-types based nested structure.
5. Defining C2E Content Types
Since C2E object is a sdons “CreativeWork”, it might be required to construct custom objects that can represent the C2E more than just a sdons “CreativeWork”. C2E has concept of ‘Content Types’ that are used to construct the object models that are used in the C2E implementations.
Content Types are defined in C2E’s object’s “c2eContainer” attribute.
Example
"c2eContainer": [
{
"@id": "c2ens:c2eContentTypes",
"@type": "sdons:Collection",
"c2eContentTypes" : [
{
"@id": "c2ens:c2eid-xxx/content-type/SampleContentType",
"@type": "sdons:CreativeWork",
"Property1": {"@type":"xsd:string"},
"Property2": {"@type":"xsd:integer"}
},
{
"@id": "c2ens:c2eid-xxx/content-type/SampleContentType",
"@type": "sdons:CreativeWork",
"Property1": {"@type":"xsd:string"},
"Property2": {"@type":"xsd:integer"}
}
]
}
]
5.1 Define mandatory attributes
5.2 Define C2E Content Types
5.3 Define C2E Content Type Object
{
"@id": "c2ens:c2eid-xxx/content-type/SampleContentType",
"@type": "Your Content Type",
"Property1": {"@type":"xsd:string"},
"Property2": {"@type":"xsd:integer"}
}
“@id” is defined as following pattern “c2ens:c2eid-xxx/content-type”.
“@type” should be valid compact IRI link to define the object type.
5.3.1 Define C2E Content Type Object Attributes
"@context" {
.....................
.....................
"Property1": "c2eTerm:c2eid-xxx/content-type/attribute/Property1"
"Property2": "c2eTerm:c2eid-xxx/content-type/attribute/Property2"
.....................
.....................
}
Make sure you should not define Content Type attribute more than once.
After defining attributes in “@context” now you can define these into the Content Type.
5.3.2 Define Data Type for C2E Content Type Object Attribute
It is required to define data type of Content Type Object attribute. Data type could be base on xsd or other data type standards. For example:
It will make Content Type Object like:
{
"@id": "c2ens:c2eid-xxx/content-type/SampleContentType",
"@type": "Your Content Type",
"Property1": {"@type":"xsd:string"},
"Property2": {"@type":"xsd:integer"}
}
Following JSON-LD specification link has mention namespaces which has valid data types to be used.
5.3.3 Define Relationship Between C2E Content Type Objects
"@context" {
.....................
.....................
"hasOne": "c2eTerm:hasOne",
"hasMany": "c2eTerm:hasMany",
"belongsTo": "c2eTerm:belongsTo"
.....................
.....................
}
"c2eContainer": [
{
"@id": "c2ens:c2eContentTypes",
"@type": "sdons:Collection",
"c2eContentTypes" : [
{
"@id": "c2ens:c2eid-xxx/content-type/student",
"@type": "sdons:CreativeWork",
"Property1": {"@type":"xsd:string"},
"Property2": {"@type":"xsd:integer"},
"hasMany": "c2ens:c2eid-xxx/content-type/courses"
},
{
"@id": "c2ens:c2eid-xxx/content-type/courses",
"@type": "sdons:CreativeWork",
"Property1": {"@type":"xsd:string"},
"Property2": {"@type":"xsd:integer"},
"belongsTo": "c2ens:c2eid-xxx/content-type/student"
}
]
}
]
6. C2E Contents
C2E contents are defined in c2eContainer as c2eContentCatalog which has Url to /content/contents.js path which list all the C2E content files.
"c2eContainer": [
{
"@id": "c2ens:c2eContentCatalog",
"@type": "sdons:DataCatalog",
"c2eContentCatalog": {
"@id": "c2ens:c2eid-12345/content/contents.json",
"@type": "sdons:DigitalDocument",
"url": "/content/contents.json",
"fileFormate": "application/json"
}
}
]
"@id": "c2ens:c2eContents",
"@type": "sdons:Collection",
"c2eContents": [
{
"@id": "c2ens:c2eid-12345/content/my-project-1.json",
"@type": "sdons:DigitalDocument",
"@index": "1",
"url": "/content/my-project-1.json",
"fileFormate": "application/json",
"learningResourceType": "Project"
},
{
"@id": "c2ens:c2eid-12345/content/my-project-2.json",
"@type": "sdons:DigitalDocument",
"@index": "2",
"url": "/content/my-project-2.json",
"fileFormate": "application/json", "learningResourceType": "Project"
}
]
}
7. Define C2E Source Code
It is required to define source code path of C2E so that it can provide entry point to execute.
C2E source code defined in C2E’s object’s “c2eContainer” attribute.
first define “c2eSource” in the context as:
"@context" {
.....................
.....................
"c2eSourceCode": "@graph"
.....................
.....................
}
"c2eContainer": [
{
"@id": "c2ens:c2eSourceCode",
"@type": "sdons:Collection",
"c2eSourceCode" : [
{
"@id": "c2ens:c2eid-xxx/source/index.js",
"@type": "sdons:SoftwareSourceCode",
"url": "/source/index.js",
"fileFormat": "application/javascript"
},
{
"@id": "c2ens:c2eid-xxx/source/index.html",
"@type": "sdons:SoftwareSourceCode",
"url": "/source/index.html",
"fileFormat": "text/html"
}
]
}
]
“c2eTerm:script” – It would be script that would be used to execute C2E as code and can be included on HTML document define in “c2eTerm:homepageUrl” object.
“c2eTerm:homepageUrl” – It is HTML document that will display an C2E document.
8. Define Embeded C2Es
"c2eContainer": [
{
"@id": "c2ens:c2eEmbeds",
"@type": "sdons:Collection",
"c2eEmbeds": [
{
"@id": "c2ens:c2eid-xxx-1",
"@type": "C2E",
"@index": "1",
"c2eResources": []
},
{
"@id": "c2ens:c2eid-xxx-2",
"@type": "C2E",
"@index": "2",
"subManifest": "/path/to/sample-activity/sample-H5P/c2e.json"
}
]
}
]
8.1 Sub-Manifest to define associated C2Es
In case where complex C2Es are needed then a sub-manifest file c2e.json can be created on relevant path.
It is defined for objects under c2eEmbeds list as:
“subManifest”: “/path/to/sample-activity/sample-H5P/c2e.json”
Example in 4.4 shows the same sub-manifest declaration.
Note that every c2e.json file placed other than root directory would be considered as sub-manifest and should have association with main c2e.json manifest file place on the root directory.
9. Licensing
"metadata": {
........
........
"copyright": {
"license": {
"@id": "c2ens:c2eid-xxx/license/id/xxx",
"@type": "sdons:DigitalDocument",
"licenseNumber": "C2e-lsc-xxxxx",
"licenseDate": "2023-01-01",
"encodingFormat": "text/plain or any binary as per need",
"url": "/path/to/license.txt"
"usageInfo": {
"@id": "c2ens:c2eid-xxx/license-usage",
"@type": "sdons:Dataset",
"typeOfUse": "purchased / rented",
"requestorType": "Instuctor / Researcher",
"portions": "tables, slides, video etc",
"numberOfPortions": "2",
"format": "printed / electronic / offline / online"
}
},
"licenseInvoice": {
"accountId" : "xxxxxx"
"customer": {
"@type": "sdons:Person",
"name": "Jane Doe"
},
"paymentDueDate" : "2015-01-30"
"totalPaymentDue" : {
"@type": "sdons:PriceSpecification",
"price": 10.00,
"priceCurrency": "USD"
},
"paymentStatus": "sdons:PaymentComplete",
"referencesOrder" : [
{
"@type": "sdons:Order",
"description": "furnace",
"orderDate": "2014-12-01",
"orderNumber": "123ABC",
"paymentMethod": "http://purl.org/goodrelations/v1#ByInvoice",
"orderedItem": {
"@type": "sdons:Product",
"name": "My C2E",
"productID": "ABC123"
}
}
]
}
}
}
10. Complete Sample JSON-LD Manifest
{
"@context": {
"c2ens": "https://c2e.curriki.org/",
"sdons": "https://schema.org/",
"xsd": "http://www.w3.org/2001/XMLSchema/#",
"C2E": "sdons:CreativeWork"
"c2eContainer": {
"@id": "sdons:Collection",
"@container": [
"@graph",
"@index"
]
},
"c2eResources": "@graph",
"c2eContentTypes": "@graph",
"c2eSourceCode": "@graph",
"c2eEmbeds": "@graph",
"c2eTerm": "c2ens:terms/",
"c2eVendor": {
"@id": "sdons:vendor",
"@type": "xsd:string"
},
"name": {
"@id": "sdons:name",
"@type": "xsd:string"
},
"url": {
"@id": "sdons:url",
"@type": "xsd:string"
},
"fileFormat": {
"@id": "sdons:fileFormat",
"@type": "xsd:string"
},
"@language": "en",
"metadata": "c2eTerm:metadata",
"schemaVersion": {
"@id": "sdons:schemaVersion",
"@type": "xsd:string"
},
"general": "c2eTerm:mdGeneral",
"title": {
"@id": "sdons:headline",
"@type": "xsd:string"
},
"description": {
"@id": "sdons:description",
"@type": "xsd:string"
},
"keywords": {
"@id": "sdons:keywords",
"@type": "xsd:string"
},
"author": {
"@id": "sdons:author",
"@type": "xsd:string"
},
"publisher": {
"@id": "sdons:publisher",
"@type": "xsd:string"
},
"email": {
"@id": "sdons:email",
"@type": "xsd:string"
},
"lifecycle": "c2eTerm:mdLifecycle",
"version": {
"@id": "sdons:version",
"@type": "xsd:string"
},
"releaseStatus": {
"@id": "sdons:creativeWorkStatus",
"@type": "xsd:string"
},
"subManifest": {
"@id": "sdons:url",
"@type": "xsd:string"},
"copyright": "c2eTerm:copyright",
"license": {
"@id": "sdons:license",
"@type": "xsd:string"
},
"encodingFormat": {
"@id": "sdons:encodingFormat",
"@type": "xsd:string"
},
"copyrightHolder": {
"@id": "sdons:copyrightHolder",
"@type": "xsd:string"
},
"copyrightNotice": {
"@id": "sdons:copyrightNotice",
"@type": "xsd:string"
},
"copyrightYear": {
"@id": "sdons:copyrightYear",
"@type": "xsd:integer"
},
"Property1": "c2ens:c2eid-xxx/content-type/attribute/Property1",
"Property2": "c2ens:c2eid-xxx/content-type/attribute/Property2"
},
"metadata": {
"@id": "c2ens:c2eid-xxx/metadata",
"@type": "sdons:Dataset",
"schemaVersion": "1.0",
"general": {
"@id": "c2ens:c2eid-xxx/metadata/general",
"@type": "sdons:Dataset",
"title": "My Smaple C2E",
"description": "My Smaple C2E for Proof of Concept.",
"keywords": "c2e, e-learning, learning experince"
},
"author": {
"@id": "c2ens:c2eid-xxx/author/id/xxx",
"@type": "sdons:Person",
"name": "Waqar Muneer",
"email": "waqar@curriki.org",
"url": "https://twitter.com/waqarmnr"
},
"publisher": {
"@id": "c2ens:c2eid-xxx/author/id/xxx",
"@type": "sdons:Organization",
"name": "Curriki",
"email": "info@curriki.org",
"url": "https://curriki.org"
},
"lifecycle": {
"@id": "c2ens:c2eid-xxx/metadata/lifecycle",
"@type": "sdons:Code",
"version": "1.10",
"releaseStatus": "Beta"
},
"copyright": {
"@id": "c2ens:c2eid-xxx/metadata/copyright","@type": "sdons:Dataset",
"license": {
"@id": "c2ens:c2eid-xxx/license/id/xxx",
"@type": "sdons:DigitalDocument",
"encodingFormat": "application/text or any binary as per need",
"url": "/path/to/license.txt"
},
"copyrightHolder": {
"@id": "c2ens:c2eid-xxx/copyrightHolder/id/xxx",
"@type": "sdons:Person",
"name": "Waqar Muneer",
"email": "waqar@curriki.org",
"url": "https://twitter.com/waqarmnr"
},
"copyrightNotice": "This C2E has all rights to Waqar Muneer",
"copyrightYear": "2023"
}
},
"@id": "c2ens:c2eid-xxx",
"@type": "C2E",
"c2eContainer": [
{
"@id": "c2ens:c2eResources",
"@type": "sdons:Collection",
"c2eResources": [
{
"@id": "c2ens:c2eid-xxx/resource/1",
"@type": "sdons:DigitalDocument",
"url": "/path/to/file-1.json",
"fileFormat": "application/json"
},
{
"@id": "c2ens:c2eid-xxx/resource/2",
"@type": "sdons:DigitalDocument",
"url": "/path/to/readme.txt",
"fileFormat": "application/text"
}
]
},
{
"@id": "c2ens:c2eContentTypes",
"@type": "sdons:Collection",
"c2eContentTypes" : [
{
"@id": "c2ens:c2eid-xxx/content-type/student",
"@type": "sdons:CreativeWork",
"Property1": {"@type":"xsd:string"},
"Property2": {"@type":"xsd:integer"},
"hasMany": "c2ens:c2eid-xxx/content-type/courses"
},
{
"@id": "c2ens:c2eid-xxx/content-type/courses",
"@type": "sdons:CreativeWork",
"Property1": {"@type":"xsd:string"},
"Property2": {"@type":"xsd:integer"},
"belongsTo": "c2ens:c2eid-xxx/content-type/student"
}
]},
{
"@id": "c2ens:c2eSourceCode",
"@type": "sdons:Collection",
"c2eSourceCode" : [
{
"@id": "c2ens:c2eid-xxx/source/index.js",
"@type": "sdons:SoftwareSourceCode",
"url": "/source/index.js",
"fileFormat": "application/javascript"
},
{
"@id": "c2ens:c2eid-xxx/source/index.html",
"@type": "sdons:SoftwareSourceCode",
"url": "/source/index.html",
"fileFormat": "text/html"
}
]
},
{
"@id": "c2ens:c2eEmbeds",
"@type": "sdons:Collection",
"c2eEmbeds": [
{
"@id": "c2ens:c2eid-xxx-1",
"@type": "C2E",
"@index": "1",
"c2eResources": []
},
{
"@id": "c2ens:c2eid-xxx-2",
"@type": "C2E",
"@index": "2",
"subManifest": "/path/to/sample-activity/sample-H5P/c2e.json"
}
]
}
]
}