diff --git a/LitCalHealth.php b/LitCalHealth.php new file mode 100644 index 00000000..86d9714d --- /dev/null +++ b/LitCalHealth.php @@ -0,0 +1,152 @@ +APICore->setAllowedOrigins( $allowedOrigins ); +$LitCalHealth->APICore->setAllowedReferers( array_map( function($el){ return $el . "/"; }, $allowedOrigins ) ); + +$LitCalHealth->APICore->setAllowedAcceptHeaders( [ AcceptHeader::JSON ] ); +$LitCalHealth->APICore->setAllowedRequestContentTypes( [ RequestContentType::JSON, RequestContentType::FORMDATA ] ); +$LitCalHealth->APICore->setAllowedRequestMethods( [ RequestMethod::GET, RequestMethod::POST, RequestMethod::OPTIONS ] ); +$LitCalHealth->Init(); + + +class LitCalHealth { + + const DataSchema = [ + "data/memorialsFromDecrees/memorialsFromDecrees.json" => LitSchema::DECREEMEMORIALS, + "data/propriumdesanctis_1970/propriumdesanctis_1970.json" => LitSchema::PROPRIUMDESANCTIS, + "data/propriumdesanctis_2002/propriumdesanctis_2002.json" => LitSchema::PROPRIUMDESANCTIS, + "data/propriumdesanctis_2008/propriumdesanctis_2008.json" => LitSchema::PROPRIUMDESANCTIS, + "data/propriumdesanctis_ITALY_1983/propriumdesanctis_ITALY_1983.json" => LitSchema::PROPRIUMDESANCTIS, + "data/propriumdesanctis_USA_2011/propriumdesanctis_USA_2011.json" => LitSchema::PROPRIUMDESANCTIS, + "data/propriumdetempore.json" => LitSchema::PROPRIUMDETEMPORE, + "nations/index.json" => LitSchema::INDEX, + "https://litcal.johnromanodorazio.com/api/dev/LitCalMetadata.php" => LitSchema::METADATA + ]; + + public APICore $APICore; + //private array $MESSAGES = []; + + public function __construct(){ + $this->APICore = new APICore(); + $this->RESPONSE = new stdClass(); + $this->RESPONSE->requestHeadersReceived = $this->APICore->getJsonEncodedRequestHeaders(); + } + + private function executeValidations() { + $result = new stdClass(); + $result->messages = []; + foreach( LitCalHealth::DataSchema as $dataPath => $schema ) { + $message = new stdClass(); + $data = file_get_contents( $dataPath ); + if( $data !== false ) { + $message->type = "success"; + $message->text = "Data file $dataPath exists"; + $result->messages = $message; + + $jsonData = json_decode( $data ); + if( json_last_error() === JSON_ERROR_NONE ) { + $message->type = "success"; + $message->text = "The Data file $dataPath was successfully decoded as JSON"; + $result->messages = $message; + + if( $this->validateDataAgainstSchema( $jsonData, $schema ) ) { + $message->type = "success"; + $message->text = "The Data file $dataPath was successfully validated against the Schema $schema"; + $result->messages = $message; + } + } else { + $message->type = "error"; + $message->text = "There was an error decoding the Data file $dataPath as JSON: " . json_last_error_msg(); + $result->messages = $message; + } + + } else { + $message->type = "error"; + $message->text = "Data file $dataPath does not exist"; + $result->messages = $message; + } + } + die( json_encode( $result ) ); + } + + private function validateDataAgainstSchema( object|array $data, string $schemaUrl ) : bool { + $result = new stdClass(); + $schema = Schema::import( $schemaUrl ); + try { + $validation = $schema->in($data); + return true; + } catch (Exception $e) { + $result->error = LitSchema::ERROR_MESSAGES[ $schemaUrl ] . PHP_EOL . $e->getMessage(); + header( $_SERVER[ "SERVER_PROTOCOL" ]." 422 Unprocessable Entity", true, 422 ); + die( json_encode( $result ) ); + } + } + + private function handleRequestedMethod() { + switch( strtoupper( $_SERVER[ "REQUEST_METHOD" ] ) ) { + case RequestMethod::GET: + $this->handleGetPostRequests( $_GET ); + break; + case RequestMethod::POST: + $this->handleGetPostRequests( $_POST ); + break; + case RequestMethod::OPTIONS: + //continue; + break; + default: + header( $_SERVER[ "SERVER_PROTOCOL" ]." 405 Method Not Allowed", true, 405 ); + $errorMessage = '{"error":"You seem to be forming a strange kind of request? Allowed Request Methods are '; + $errorMessage .= implode( ' and ', $this->AllowedRequestMethods ); + $errorMessage .= ', but your Request Method was ' . strtoupper( $_SERVER[ 'REQUEST_METHOD' ] ) . '"}'; + die( $errorMessage ); + } + } + + private function handleGetPostRequests( array $REQUEST ) { + + $this->APICore->validateAcceptHeader( true ); + if( $this->APICore->getRequestContentType() === 'application/json' ) { + $this->DATA = $this->APICore->retrieveRequestParamsFromJsonBody(); + } else { + $this->DATA = (object)$REQUEST; + } + $this->executeValidations(); + } + + + public function Init() { + $this->APICore->Init(); + $this->APICore->setResponseContentTypeHeader(); + $this->handleRequestedMethod(); + } + +} \ No newline at end of file diff --git a/LitCalRegionalData.php b/LitCalRegionalData.php index bb0289f4..1319217d 100644 --- a/LitCalRegionalData.php +++ b/LitCalRegionalData.php @@ -1,6 +1,4 @@ "Schema validation error: Index not updated", LitSchema::DIOCESAN => "Schema validation error: Diocesan Calendar not created / updated", LitSchema::NATIONAL => "Schema validation error: National Calendar not created / updated", LitSchema::PROPRIUMDESANCTIS => "Schema validation error: Proprium de Sanctis data not created / updated", + LitSchema::PROPRIUMDETEMPORE => "Schema validation error: Proprium de Tempore data not created / updated", LitSchema::WIDERREGION => "Schema validation error: Wider Region data not created / updated", LitSchema::DECREEMEMORIALS => "Schema validation error: Memorials from Decrees data not created / updated", - LitSchema::I18N => "Schema validation error: Translation data not created / updated" + LitSchema::I18N => "Schema validation error: Translation data not created / updated", + LitSchema::METADATA => "Schema validation error: LitCalMetadata not valid" ]; } diff --git a/schemas/CommonDef.json b/schemas/CommonDef.json index cef7477b..40f2d4c5 100644 --- a/schemas/CommonDef.json +++ b/schemas/CommonDef.json @@ -267,14 +267,311 @@ "$ref": "#/definitions/Missal" } }, + "MissalDef": { + "type": "string", + "enum": [ + "EDITIO_TYPICA_1970", + "REIMPRESSIO_EMENDATA_1971", + "EDITIO_TYPICA_SECUNDA_1975", + "EDITIO_TYPICA_TERTIA_2002", + "EDITIO_TYPICA_TERTIA_EMENDATA_2008", + "USA_EDITION_2011", + "ITALY_EDITION_1983", + "ITALY_EDITION_2020" + ] + }, "Missal": { "type": "string", "enum": [ + "VATICAN_1970", + "VATICAN_1971", + "VATICAN_1975", + "VATICAN_2002", + "VATICAN_2008", "USA_2011", "ITALY_1983", "ITALY_2020" ] }, + "MissalName": { + "type": "string", + "enum": [ + "Editio Typica 1970", + "Reimpressio Emendata 1971", + "Editio Typica Secunda 1975", + "Editio Typica Tertia 2002", + "Editio Typica Tertia Emendata 2008", + "2011 Roman Missal issued by the USCCB", + "Messale Romano ed. 1983 pubblicata dalla CEI", + "Messale Romano ed. 2020 pubblicata dalla CEI" + ] + }, + "MissalFileName": { + "type": [ "string", "boolean" ], + "enum": [ + "data/propriumdesanctis_1970/propriumdesanctis_1970.json", + "data/propriumdesanctis_2002/propriumdesanctis_2002.json", + "data/propriumdesanctis_2008/propriumdesanctis_2008.json", + "data/propriumdesanctis_USA_2011/propriumdesanctis_USA_2011.json", + "data/propriumdesanctis_ITALY_1983/propriumdesanctis_ITALY_1983.json", + false + ] + }, + "Region": { + "type": "string", + "enum": [ + "AFGHANISTAN", + "ALBANIA", + "ALGERIA", + "U_S_ OUTLYING ISLANDS", + "LATIN AMERICA", + "ANDORRA", + "ANGOLA", + "ANGUILLA", + "ANTIGUA & BARBUDA", + "SAUDI ARABIA", + "ARGENTINA", + "ARMENIA", + "ARUBA", + "AUSTRALIA", + "AUSTRIA", + "AZERBAIJAN", + "BAHAMAS", + "BAHRAIN", + "BANGLADESH", + "BARBADOS", + "BELGIUM", + "BELIZE", + "BENIN", + "BERMUDA", + "BHUTAN", + "BELARUS", + "BOLIVIA", + "BOSNIA & HERZEGOVINA", + "BOTSWANA", + "BRAZIL", + "BRUNEI", + "BULGARIA", + "BURKINA FASO", + "BURUNDI", + "CAMBODIA", + "CAMEROON", + "CANADA", + "CAPE VERDE", + "CARIBBEAN NETHERLANDS", + "CZECHIA", + "CEUTA & MELILLA", + "CHAD", + "CHILE", + "CHINA", + "CYPRUS", + "VATICAN CITY", + "COLOMBIA", + "COMOROS", + "CONGO - KINSHASA", + "CONGO - BRAZZAVILLE", + "NORTH KOREA", + "SOUTH KOREA", + "CÔTE D’IVOIRE", + "COSTA RICA", + "CROATIA", + "CUBA", + "CURAÇAO", + "DENMARK", + "DIEGO GARCIA", + "DOMINICA", + "ECUADOR", + "EGYPT", + "EL SALVADOR", + "UNITED ARAB EMIRATES", + "ERITREA", + "ESTONIA", + "ETHIOPIA", + "EUROPE", + "FIJI", + "PHILIPPINES", + "FINLAND", + "FRANCE", + "GABON", + "GAMBIA", + "GEORGIA", + "GERMANY", + "GHANA", + "JAMAICA", + "JAPAN", + "GIBRALTAR", + "DJIBOUTI", + "JORDAN", + "GREECE", + "GRENADA", + "GREENLAND", + "GUADELOUPE", + "GUAM", + "GUATEMALA", + "GUERNSEY", + "GUINEA", + "EQUATORIAL GUINEA", + "GUINEA-BISSAU", + "GUYANA", + "FRENCH GUIANA", + "HAITI", + "HONDURAS", + "INDIA", + "INDONESIA", + "IRAN", + "IRAQ", + "IRELAND", + "ICELAND", + "CHRISTMAS ISLAND", + "ISLE OF MAN", + "NORFOLK ISLAND", + "ÅLAND ISLANDS", + "CANARY ISLANDS", + "CAYMAN ISLANDS", + "COCOS (KEELING) ISLANDS", + "COOK ISLANDS", + "FAROE ISLANDS", + "FALKLAND ISLANDS", + "NORTHERN MARIANA ISLANDS", + "MARSHALL ISLANDS", + "PITCAIRN ISLANDS", + "SOLOMON ISLANDS", + "TURKS & CAICOS ISLANDS", + "U_S_ VIRGIN ISLANDS", + "BRITISH VIRGIN ISLANDS", + "ISRAEL", + "ITALY", + "JERSEY", + "KAZAKHSTAN", + "KENYA", + "KYRGYZSTAN", + "KIRIBATI", + "KOSOVO", + "KUWAIT", + "LAOS", + "LESOTHO", + "LATVIA", + "LEBANON", + "LIBERIA", + "LIBYA", + "LIECHTENSTEIN", + "LITHUANIA", + "LUXEMBOURG", + "NORTH MACEDONIA", + "MADAGASCAR", + "MALAWI", + "MALAYSIA", + "MALI", + "MALTA", + "MOROCCO", + "MARTINIQUE", + "MAURITANIA", + "MAURITIUS", + "MAYOTTE", + "MEXICO", + "MICRONESIA", + "MOLDOVA", + "MONACO", + "WORLD", + "MONGOLIA", + "MONTENEGRO", + "MONTSERRAT", + "MOZAMBIQUE", + "MYANMAR (BURMA)", + "NAMIBIA", + "NAURU", + "NEPAL", + "NICARAGUA", + "NIGER", + "NIGERIA", + "NIUE", + "NORWAY", + "NEW CALEDONIA", + "NEW ZEALAND", + "OMAN", + "NETHERLANDS", + "PAKISTAN", + "PALAU", + "PANAMA", + "PAPUA NEW GUINEA", + "PARAGUAY", + "PERU", + "FRENCH POLYNESIA", + "POLAND", + "PORTUGAL", + "PUERTO RICO", + "QATAR", + "HONG KONG SAR CHINA", + "MACAO SAR CHINA", + "UNITED KINGDOM", + "CENTRAL AFRICAN REPUBLIC", + "DOMINICAN REPUBLIC", + "RÉUNION", + "ROMANIA", + "RWANDA", + "RUSSIA", + "WESTERN SAHARA", + "ST_ KITTS & NEVIS", + "ST_ LUCIA", + "ST_ MARTIN", + "ST_ VINCENT & GRENADINES", + "ST_ BARTHÉLEMY", + "ST_ PIERRE & MIQUELON", + "SAMOA", + "AMERICAN SAMOA", + "SAN MARINO", + "ST_ HELENA", + "SÃO TOMÉ & PRÍNCIPE", + "SENEGAL", + "SERBIA", + "SEYCHELLES", + "SIERRA LEONE", + "SINGAPORE", + "SINT MAARTEN", + "SYRIA", + "SLOVAKIA", + "SLOVENIA", + "SOMALIA", + "SPAIN", + "SRI LANKA", + "UNITED STATES", + "SOUTH SUDAN", + "SOUTH AFRICA", + "SUDAN", + "SURINAME", + "SVALBARD & JAN MAYEN", + "SWEDEN", + "SWITZERLAND", + "ESWATINI", + "TAJIKISTAN", + "TAIWAN", + "TANZANIA", + "PALESTINIAN TERRITORIES", + "BRITISH INDIAN OCEAN TERRITORY", + "THAILAND", + "TIMOR-LESTE", + "TOGO", + "TOKELAU", + "TONGA", + "TRINIDAD & TOBAGO", + "TUNISIA", + "TURKEY", + "TURKMENISTAN", + "TUVALU", + "UKRAINE", + "UGANDA", + "HUNGARY", + "URUGUAY", + "UZBEKISTAN", + "VANUATU", + "VENEZUELA", + "VIETNAM", + "WALLIS & FUTUNA", + "YEMEN", + "ZAMBIA", + "ZIMBABWE" + ] + }, "MemorialFromDecreesAction": { "type": "string", "enum": [ diff --git a/schemas/LitCalMetadata.json b/schemas/LitCalMetadata.json new file mode 100644 index 00000000..a4d8bc89 --- /dev/null +++ b/schemas/LitCalMetadata.json @@ -0,0 +1,135 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "array", + "items": { + "$ref": "#/definitions/LitCalMetadata" + }, + "definitions": { + "LitCalMetadata": { + "type": "object", + "properties": { + "LitCalMetadata": { + "type": "object", + "properties": { + "NationalCalendars": { + "type": "object", + "propertyNames": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Region" + }, + "patternProperties": { + "": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "DiocesanCalendars": { + "type": "object", + "patternProperties": { + "": { + "type": "object", + "properties": { + "nation": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Region" + }, + "diocese": { + "type": "string" + }, + "group": { + "type": "string" + } + }, + "required": [ + "nation", + "diocese" + ] + } + } + }, + "DiocesanGroups": { + "type": "object", + "patternProperties": { + "": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "WiderRegions": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "Africa", + "Alsace", + "Americas", + "Anatolia", + "Antarctica", + "Asia", + "Australasia", + "Central Africa", + "Central America", + "Europe", + "Indies", + "North Africa", + "Oceania", + "Scandinavia", + "South America", + "West Indies" + ] + } + }, + "RomanMissals": { + "type": "object", + "propertyNames": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/MissalDef" + }, + "patternProperties": { + "": { + "type": "object", + "properties": { + "value": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Missal" + }, + "name": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/MissalName" + }, + "sanctoraleFileName": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/MissalFileName" + }, + "yearLimits": { + "type": "object", + "properties": { + "sinceYear": { + "type": "integer" + }, + "untilYear": { + "type": "integer" + } + }, + "required": [ "sinceYear" ] + } + }, + "required": [ + "value", + "name", + "sanctoraleFileName", + "yearLimits" + ] + } + } + } + } + } + }, + "required": [ + "LitCalMetadata" + ], + "title": "LitCalMetadata" + } + } +} diff --git a/schemas/NationalCalendar.json b/schemas/NationalCalendar.json index bcbe2dde..903da89e 100644 --- a/schemas/NationalCalendar.json +++ b/schemas/NationalCalendar.json @@ -142,259 +142,7 @@ "additionalProperties": false, "properties": { "Region": { - "type": "string", - "enum": [ - "AFGHANISTAN", - "ALBANIA", - "ALGERIA", - "U_S_ OUTLYING ISLANDS", - "LATIN AMERICA", - "ANDORRA", - "ANGOLA", - "ANGUILLA", - "ANTIGUA & BARBUDA", - "SAUDI ARABIA", - "ARGENTINA", - "ARMENIA", - "ARUBA", - "AUSTRALIA", - "AUSTRIA", - "AZERBAIJAN", - "BAHAMAS", - "BAHRAIN", - "BANGLADESH", - "BARBADOS", - "BELGIUM", - "BELIZE", - "BENIN", - "BERMUDA", - "BHUTAN", - "BELARUS", - "BOLIVIA", - "BOSNIA & HERZEGOVINA", - "BOTSWANA", - "BRAZIL", - "BRUNEI", - "BULGARIA", - "BURKINA FASO", - "BURUNDI", - "CAMBODIA", - "CAMEROON", - "CANADA", - "CAPE VERDE", - "CARIBBEAN NETHERLANDS", - "CZECHIA", - "CEUTA & MELILLA", - "CHAD", - "CHILE", - "CHINA", - "CYPRUS", - "VATICAN CITY", - "COLOMBIA", - "COMOROS", - "CONGO - KINSHASA", - "CONGO - BRAZZAVILLE", - "NORTH KOREA", - "SOUTH KOREA", - "CÔTE D’IVOIRE", - "COSTA RICA", - "CROATIA", - "CUBA", - "CURAÇAO", - "DENMARK", - "DIEGO GARCIA", - "DOMINICA", - "ECUADOR", - "EGYPT", - "EL SALVADOR", - "UNITED ARAB EMIRATES", - "ERITREA", - "ESTONIA", - "ETHIOPIA", - "EUROPE", - "FIJI", - "PHILIPPINES", - "FINLAND", - "FRANCE", - "GABON", - "GAMBIA", - "GEORGIA", - "GERMANY", - "GHANA", - "JAMAICA", - "JAPAN", - "GIBRALTAR", - "DJIBOUTI", - "JORDAN", - "GREECE", - "GRENADA", - "GREENLAND", - "GUADELOUPE", - "GUAM", - "GUATEMALA", - "GUERNSEY", - "GUINEA", - "EQUATORIAL GUINEA", - "GUINEA-BISSAU", - "GUYANA", - "FRENCH GUIANA", - "HAITI", - "HONDURAS", - "INDIA", - "INDONESIA", - "IRAN", - "IRAQ", - "IRELAND", - "ICELAND", - "CHRISTMAS ISLAND", - "ISLE OF MAN", - "NORFOLK ISLAND", - "ÅLAND ISLANDS", - "CANARY ISLANDS", - "CAYMAN ISLANDS", - "COCOS (KEELING) ISLANDS", - "COOK ISLANDS", - "FAROE ISLANDS", - "FALKLAND ISLANDS", - "NORTHERN MARIANA ISLANDS", - "MARSHALL ISLANDS", - "PITCAIRN ISLANDS", - "SOLOMON ISLANDS", - "TURKS & CAICOS ISLANDS", - "U_S_ VIRGIN ISLANDS", - "BRITISH VIRGIN ISLANDS", - "ISRAEL", - "ITALY", - "JERSEY", - "KAZAKHSTAN", - "KENYA", - "KYRGYZSTAN", - "KIRIBATI", - "KOSOVO", - "KUWAIT", - "LAOS", - "LESOTHO", - "LATVIA", - "LEBANON", - "LIBERIA", - "LIBYA", - "LIECHTENSTEIN", - "LITHUANIA", - "LUXEMBOURG", - "NORTH MACEDONIA", - "MADAGASCAR", - "MALAWI", - "MALAYSIA", - "MALI", - "MALTA", - "MOROCCO", - "MARTINIQUE", - "MAURITANIA", - "MAURITIUS", - "MAYOTTE", - "MEXICO", - "MICRONESIA", - "MOLDOVA", - "MONACO", - "WORLD", - "MONGOLIA", - "MONTENEGRO", - "MONTSERRAT", - "MOZAMBIQUE", - "MYANMAR (BURMA)", - "NAMIBIA", - "NAURU", - "NEPAL", - "NICARAGUA", - "NIGER", - "NIGERIA", - "NIUE", - "NORWAY", - "NEW CALEDONIA", - "NEW ZEALAND", - "OMAN", - "NETHERLANDS", - "PAKISTAN", - "PALAU", - "PANAMA", - "PAPUA NEW GUINEA", - "PARAGUAY", - "PERU", - "FRENCH POLYNESIA", - "POLAND", - "PORTUGAL", - "PUERTO RICO", - "QATAR", - "HONG KONG SAR CHINA", - "MACAO SAR CHINA", - "UNITED KINGDOM", - "CENTRAL AFRICAN REPUBLIC", - "DOMINICAN REPUBLIC", - "RÉUNION", - "ROMANIA", - "RWANDA", - "RUSSIA", - "WESTERN SAHARA", - "ST_ KITTS & NEVIS", - "ST_ LUCIA", - "ST_ MARTIN", - "ST_ VINCENT & GRENADINES", - "ST_ BARTHÉLEMY", - "ST_ PIERRE & MIQUELON", - "SAMOA", - "AMERICAN SAMOA", - "SAN MARINO", - "ST_ HELENA", - "SÃO TOMÉ & PRÍNCIPE", - "SENEGAL", - "SERBIA", - "SEYCHELLES", - "SIERRA LEONE", - "SINGAPORE", - "SINT MAARTEN", - "SYRIA", - "SLOVAKIA", - "SLOVENIA", - "SOMALIA", - "SPAIN", - "SRI LANKA", - "UNITED STATES", - "SOUTH SUDAN", - "SOUTH AFRICA", - "SUDAN", - "SURINAME", - "SVALBARD & JAN MAYEN", - "SWEDEN", - "SWITZERLAND", - "ESWATINI", - "TAJIKISTAN", - "TAIWAN", - "TANZANIA", - "PALESTINIAN TERRITORIES", - "BRITISH INDIAN OCEAN TERRITORY", - "THAILAND", - "TIMOR-LESTE", - "TOGO", - "TOKELAU", - "TONGA", - "TRINIDAD & TOBAGO", - "TUNISIA", - "TURKEY", - "TURKMENISTAN", - "TUVALU", - "UKRAINE", - "UGANDA", - "HUNGARY", - "URUGUAY", - "UZBEKISTAN", - "VANUATU", - "VENEZUELA", - "VIETNAM", - "WALLIS & FUTUNA", - "YEMEN", - "ZAMBIA", - "ZIMBABWE" - ] + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Region" }, "WiderRegion": { "$ref": "#/definitions/WiderRegion" diff --git a/schemas/PropriumDeTempore.json b/schemas/PropriumDeTempore.json new file mode 100644 index 00000000..50013dbe --- /dev/null +++ b/schemas/PropriumDeTempore.json @@ -0,0 +1,25 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "array", + "items": { + "$ref": "#/definitions/PropriumDeTempore" + }, + "definitions": { + "PropriumDeTempore": { + "type": "object", + "additionalProperties": true, + "required": [ + "READINGS" + ], + "title": "PropriumDeTempore" + }, + "LitEvent": { + "type": "object", + "properties": { + "READINGS": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Readings" + } + } + } + } +}