From 92282f8154cf183c014b28f25d2f0e3de7661d53 Mon Sep 17 00:00:00 2001 From: Rand McKinney Date: Wed, 26 Feb 2025 15:19:14 -0800 Subject: [PATCH] Add new refs generated from Manifest Definition schema --- _data/ManifestDefinition_schema.json | 1247 ++++++++++++++++++++++++++ _data/sidebar.yml | 6 + pages/annotated-manifest-ref.md | 2 +- pages/manifest-definition-cai.md | 13 + pages/manifest-definition.md | 12 + pages/manifest-ref-cai.md | 2 +- pages/manifest-ref.md | 2 +- pages/reference.md | 19 +- 8 files changed, 1292 insertions(+), 11 deletions(-) create mode 100644 _data/ManifestDefinition_schema.json create mode 100644 pages/manifest-definition-cai.md create mode 100644 pages/manifest-definition.md diff --git a/_data/ManifestDefinition_schema.json b/_data/ManifestDefinition_schema.json new file mode 100644 index 0000000..2fdb163 --- /dev/null +++ b/_data/ManifestDefinition_schema.json @@ -0,0 +1,1247 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ManifestDefinition", + "description": "Use a ManifestDefinition to define a manifest and to build a `ManifestStore`. A manifest is a collection of ingredients and assertions used to define a claim that can be signed and embedded into a file.", + "type": "object", + "properties": { + "assertions": { + "description": "A list of assertions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/AssertionDefinition" + } + }, + "claim_generator_info": { + "description": "Claim Generator Info is always required with at least one entry", + "default": [ + { + "name": "c2pa-rs", + "version": "0.46.0" + } + ], + "type": "array", + "items": { + "$ref": "#/definitions/ClaimGeneratorInfo" + } + }, + "claim_version": { + "description": "The version of the claim. Defaults to 1.", + "type": [ + "integer", + "null" + ], + "format": "uint8", + "minimum": 0.0 + }, + "format": { + "description": "The format of the source file as a MIME type.", + "default": "application/octet-stream", + "type": "string" + }, + "ingredients": { + "description": "A List of ingredients", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Ingredient" + } + }, + "instance_id": { + "description": "Instance ID from `xmpMM:InstanceID` in XMP metadata.", + "default": "xmp:iid:242057fc-bf86-4b3b-ae62-e0845fd4b5a1", + "type": "string" + }, + "label": { + "description": "Allows you to pre-define the manifest label, which must be unique. Not intended for general use. If not set, it will be assigned automatically.", + "type": [ + "string", + "null" + ] + }, + "metadata": { + "description": "Optional manifest metadata. This will be deprecated in the future; not recommended to use.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Metadata" + } + }, + "redactions": { + "description": "A list of redactions - URIs to redacted assertions.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + }, + "thumbnail": { + "description": "An optional ResourceRef to a thumbnail image that represents the asset that was signed. Must be available when the manifest is signed.", + "anyOf": [ + { + "$ref": "#/definitions/ResourceRef" + }, + { + "type": "null" + } + ] + }, + "title": { + "description": "A human-readable title, generally source filename.", + "type": [ + "string", + "null" + ] + }, + "vendor": { + "description": "Optional prefix added to the generated Manifest Label This is typically a reverse domain name.", + "type": [ + "string", + "null" + ] + } + }, + "definitions": { + "Actor": { + "description": "Identifies a person responsible for an action.", + "type": "object", + "properties": { + "credentials": { + "description": "List of references to W3C Verifiable Credentials.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/HashedUri" + } + }, + "identifier": { + "description": "An identifier for a human actor, used when the \"type\" is `humanEntry.identified`.", + "type": [ + "string", + "null" + ] + } + } + }, + "AssertionData": { + "description": "This allows the assertion to be expressed as CBOR or JSON. The default is CBOR unless you specify that an assertion should be JSON.", + "anyOf": [ + true + ] + }, + "AssertionDefinition": { + "description": "Defines an assertion that consists of a label that can be either a C2PA-defined assertion label or a custom label in reverse domain format.", + "type": "object", + "required": [ + "data", + "label" + ], + "properties": { + "data": { + "$ref": "#/definitions/AssertionData" + }, + "label": { + "type": "string" + } + } + }, + "AssetType": { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string" + }, + "version": { + "type": [ + "string", + "null" + ] + } + } + }, + "ClaimGeneratorInfo": { + "description": "Description of the claim generator, or the software used in generating the claim.\n\nThis structure is also used for actions softwareAgent", + "type": "object", + "required": [ + "name" + ], + "properties": { + "icon": { + "description": "hashed URI to the icon (either embedded or remote)", + "anyOf": [ + { + "$ref": "#/definitions/UriOrResource" + }, + { + "type": "null" + } + ] + }, + "name": { + "description": "A human readable string naming the claim_generator", + "type": "string" + }, + "operating_system": { + "description": "A human readable string of the OS the claim generator is running on", + "type": [ + "string", + "null" + ] + }, + "version": { + "description": "A human readable string of the product's version", + "type": [ + "string", + "null" + ] + } + }, + "additionalProperties": true + }, + "Coordinate": { + "description": "An x, y coordinate used for specifying vertices in polygons.", + "type": "object", + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "description": "The coordinate along the x-axis.", + "type": "number", + "format": "double" + }, + "y": { + "description": "The coordinate along the y-axis.", + "type": "number", + "format": "double" + } + } + }, + "DataSource": { + "description": "A description of the source for assertion data", + "type": "object", + "required": [ + "type" + ], + "properties": { + "actors": { + "description": "A list of [`Actor`]s associated with this source.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Actor" + } + }, + "details": { + "description": "A human-readable string giving details about the source of the assertion data.", + "type": [ + "string", + "null" + ] + }, + "type": { + "description": "A value from among the enumerated list indicating the source of the assertion.", + "type": "string" + } + } + }, + "DateT": { + "type": "string" + }, + "Frame": { + "description": "A frame range representing starting and ending frames or pages.\n\nIf both `start` and `end` are missing, the frame will span the entire asset.", + "type": "object", + "properties": { + "end": { + "description": "The end of the frame inclusive or the end of the asset if not present.", + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "start": { + "description": "The start of the frame or the end of the asset if not present.\n\nThe first frame/page starts at 0.", + "type": [ + "integer", + "null" + ], + "format": "int32" + } + } + }, + "HashedUri": { + "description": "A `HashedUri` provides a reference to content available within the same manifest store.\n\nThis is described in [§8.3, URI References], of the C2PA Technical Specification.\n\n[§8.3, URI References]: https://c2pa.org/specifications/specifications/2.1/specs/C2PA_Specification.html#_uri_references", + "type": "object", + "required": [ + "hash", + "url" + ], + "properties": { + "alg": { + "description": "A string identifying the cryptographic hash algorithm used to compute the hash", + "type": [ + "string", + "null" + ] + }, + "hash": { + "description": "Byte string containing the hash value", + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + } + }, + "url": { + "description": "JUMBF URI reference", + "type": "string" + } + } + }, + "Ingredient": { + "description": "An `Ingredient` is any external asset that has been used in the creation of an asset.", + "type": "object", + "properties": { + "active_manifest": { + "description": "The active manifest label (if one exists).\n\nIf this ingredient has a [`ManifestStore`], this will hold the label of the active [`Manifest`].\n\n[`Manifest`]: crate::Manifest [`ManifestStore`]: crate::ManifestStore", + "type": [ + "string", + "null" + ] + }, + "data": { + "description": "A reference to the actual data of the ingredient.", + "anyOf": [ + { + "$ref": "#/definitions/ResourceRef" + }, + { + "type": "null" + } + ] + }, + "data_types": { + "description": "Additional information about the data's type to the ingredient V2 structure.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/AssetType" + } + }, + "description": { + "description": "Additional description of the ingredient.", + "type": [ + "string", + "null" + ] + }, + "document_id": { + "description": "Document ID from `xmpMM:DocumentID` in XMP metadata.", + "type": [ + "string", + "null" + ] + }, + "format": { + "description": "The format of the source file as a MIME type.", + "type": [ + "string", + "null" + ] + }, + "hash": { + "description": "An optional hash of the asset to prevent duplicates.", + "type": [ + "string", + "null" + ] + }, + "informational_URI": { + "description": "URI to an informational page about the ingredient or its data.", + "type": [ + "string", + "null" + ] + }, + "instance_id": { + "description": "Instance ID from `xmpMM:InstanceID` in XMP metadata.", + "type": [ + "string", + "null" + ] + }, + "manifest_data": { + "description": "A [`ManifestStore`] from the source asset extracted as a binary C2PA blob.\n\n[`ManifestStore`]: crate::ManifestStore", + "anyOf": [ + { + "$ref": "#/definitions/ResourceRef" + }, + { + "type": "null" + } + ] + }, + "metadata": { + "description": "Any additional [`Metadata`] as defined in the C2PA spec.\n\n[`Metadata`]: crate::Metadata", + "anyOf": [ + { + "$ref": "#/definitions/Metadata" + }, + { + "type": "null" + } + ] + }, + "provenance": { + "description": "URI from `dcterms:provenance` in XMP metadata.", + "type": [ + "string", + "null" + ] + }, + "relationship": { + "description": "Set to `ParentOf` if this is the parent ingredient.\n\nThere can only be one parent ingredient in the ingredients.", + "default": "componentOf", + "allOf": [ + { + "$ref": "#/definitions/Relationship" + } + ] + }, + "resources": { + "readOnly": true, + "allOf": [ + { + "$ref": "#/definitions/ResourceStore" + } + ] + }, + "thumbnail": { + "description": "A thumbnail image capturing the visual state at the time of import.\n\nA tuple of thumbnail MIME format (for example `image/jpeg`) and binary bits of the image.", + "anyOf": [ + { + "$ref": "#/definitions/ResourceRef" + }, + { + "type": "null" + } + ] + }, + "title": { + "description": "A human-readable title, generally source filename.", + "type": [ + "string", + "null" + ] + }, + "validation_results": { + "description": "Validation results (Ingredient.V3)", + "anyOf": [ + { + "$ref": "#/definitions/ValidationResults" + }, + { + "type": "null" + } + ] + }, + "validation_status": { + "description": "Validation status (Ingredient v1 & v2)", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/ValidationStatus" + } + } + } + }, + "IngredientDeltaValidationResult": { + "description": "Represents any changes or deltas between the current and previous validation results for an ingredient's manifest.", + "type": "object", + "required": [ + "ingredientAssertionURI", + "validationDeltas" + ], + "properties": { + "ingredientAssertionURI": { + "description": "JUMBF URI reference to the ingredient assertion", + "type": "string" + }, + "validationDeltas": { + "description": "Validation results for the ingredient's active manifest", + "allOf": [ + { + "$ref": "#/definitions/StatusCodes" + } + ] + } + } + }, + "Item": { + "description": "Description of the boundaries of an identified range.", + "type": "object", + "required": [ + "identifier", + "value" + ], + "properties": { + "identifier": { + "description": "The container-specific term used to identify items, such as \"track_id\" for MP4 or \"item_ID\" for HEIF.", + "type": "string" + }, + "value": { + "description": "The value of the identifier, e.g. a value of \"2\" for an identifier of \"track_id\" would imply track 2 of the asset.", + "type": "string" + } + } + }, + "Metadata": { + "description": "The Metadata structure can be used as part of other assertions or on its own to reference others", + "type": "object", + "properties": { + "dataSource": { + "anyOf": [ + { + "$ref": "#/definitions/DataSource" + }, + { + "type": "null" + } + ] + }, + "dateTime": { + "anyOf": [ + { + "$ref": "#/definitions/DateT" + }, + { + "type": "null" + } + ] + }, + "reference": { + "anyOf": [ + { + "$ref": "#/definitions/HashedUri" + }, + { + "type": "null" + } + ] + }, + "regionOfInterest": { + "anyOf": [ + { + "$ref": "#/definitions/RegionOfInterest" + }, + { + "type": "null" + } + ] + }, + "reviewRatings": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/ReviewRating" + } + } + }, + "additionalProperties": true + }, + "Range": { + "description": "A spatial, temporal, frame, or textual range describing the region of interest.", + "type": "object", + "required": [ + "type" + ], + "properties": { + "frame": { + "description": "A frame range.", + "anyOf": [ + { + "$ref": "#/definitions/Frame" + }, + { + "type": "null" + } + ] + }, + "item": { + "description": "A item identifier.", + "anyOf": [ + { + "$ref": "#/definitions/Item" + }, + { + "type": "null" + } + ] + }, + "shape": { + "description": "A spatial range.", + "anyOf": [ + { + "$ref": "#/definitions/Shape" + }, + { + "type": "null" + } + ] + }, + "text": { + "description": "A textual range.", + "anyOf": [ + { + "$ref": "#/definitions/Text" + }, + { + "type": "null" + } + ] + }, + "time": { + "description": "A temporal range.", + "anyOf": [ + { + "$ref": "#/definitions/Time" + }, + { + "type": "null" + } + ] + }, + "type": { + "description": "The type of range of interest.", + "allOf": [ + { + "$ref": "#/definitions/RangeType" + } + ] + } + } + }, + "RangeType": { + "description": "The type of range for the region of interest.", + "oneOf": [ + { + "description": "A spatial range, see [`Shape`] for more details.", + "type": "string", + "enum": [ + "spatial" + ] + }, + { + "description": "A temporal range, see [`Time`] for more details.", + "type": "string", + "enum": [ + "temporal" + ] + }, + { + "description": "A spatial range, see [`Frame`] for more details.", + "type": "string", + "enum": [ + "frame" + ] + }, + { + "description": "A textual range, see [`Text`] for more details.", + "type": "string", + "enum": [ + "textual" + ] + }, + { + "description": "A range identified by a specific identifier and value, see [`Item`] for more details.", + "type": "string", + "enum": [ + "identified" + ] + } + ] + }, + "RegionOfInterest": { + "description": "A region of interest within an asset describing the change.\n\nThis struct can be used from [`Action::changes`][crate::assertions::Action::changes] or [`Metadata::region_of_interest`][crate::assertions::Metadata::region_of_interest].", + "type": "object", + "required": [ + "region" + ], + "properties": { + "description": { + "description": "A free-text string.", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "description": "A free-text string representing a machine-readable, unique to this assertion, identifier for the region.", + "type": [ + "string", + "null" + ] + }, + "metadata": { + "description": "Additional information about the asset.", + "anyOf": [ + { + "$ref": "#/definitions/Metadata" + }, + { + "type": "null" + } + ] + }, + "name": { + "description": "A free-text string representing a human-readable name for the region which might be used in a user interface.", + "type": [ + "string", + "null" + ] + }, + "region": { + "description": "A range describing the region of interest for the specific asset.", + "type": "array", + "items": { + "$ref": "#/definitions/Range" + } + }, + "role": { + "description": "A value from our controlled vocabulary or an entity-specific value (e.g., com.litware.coolArea) that represents the role of a region among other regions.", + "anyOf": [ + { + "$ref": "#/definitions/Role" + }, + { + "type": "null" + } + ] + }, + "type": { + "description": "A value from a controlled vocabulary such as or an entity-specific value (e.g., com.litware.newType) that represents the type of thing(s) depicted by a region.\n\nNote this field serializes/deserializes into the name `type`.", + "type": [ + "string", + "null" + ] + } + } + }, + "Relationship": { + "type": "string", + "enum": [ + "parentOf", + "componentOf", + "inputTo" + ] + }, + "ResourceRef": { + "description": "A reference to a resource to be used in JSON serialization.\n\nThe underlying data can be read as a stream via [`Reader::resource_to_stream`][crate::Reader::resource_to_stream].", + "type": "object", + "required": [ + "format", + "identifier" + ], + "properties": { + "alg": { + "description": "The algorithm used to hash the resource (if applicable).", + "type": [ + "string", + "null" + ] + }, + "data_types": { + "description": "More detailed data types as defined in the C2PA spec.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/AssetType" + } + }, + "format": { + "description": "The mime type of the referenced resource.", + "type": "string" + }, + "hash": { + "description": "The hash of the resource (if applicable).", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "description": "A URI that identifies the resource as referenced from the manifest.\n\nThis may be a JUMBF URI, a file path, a URL or any other string. Relative JUMBF URIs will be resolved with the manifest label. Relative file paths will be resolved with the base path if provided.", + "type": "string" + } + } + }, + "ResourceStore": { + "description": "Resource store to contain binary objects referenced from JSON serializable structures", + "type": "object", + "required": [ + "resources" + ], + "properties": { + "base_path": { + "type": [ + "string", + "null" + ] + }, + "label": { + "type": [ + "string", + "null" + ] + }, + "resources": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + } + } + } + } + }, + "ReviewRating": { + "description": "A rating on an Assertion.\n\nSee .", + "type": "object", + "required": [ + "explanation", + "value" + ], + "properties": { + "code": { + "type": [ + "string", + "null" + ] + }, + "explanation": { + "type": "string" + }, + "value": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + } + } + }, + "Role": { + "description": "A role describing the region.", + "oneOf": [ + { + "description": "Arbitrary area worth identifying.", + "type": "string", + "enum": [ + "c2pa.areaOfInterest" + ] + }, + { + "description": "This area is all that is left after a crop action.", + "type": "string", + "enum": [ + "c2pa.cropped" + ] + }, + { + "description": "This area has had edits applied to it.", + "type": "string", + "enum": [ + "c2pa.edited" + ] + }, + { + "description": "The area where an ingredient was placed/added.", + "type": "string", + "enum": [ + "c2pa.placed" + ] + }, + { + "description": "Something in this area was redacted.", + "type": "string", + "enum": [ + "c2pa.redacted" + ] + }, + { + "description": "Area specific to a subject (human or not).", + "type": "string", + "enum": [ + "c2pa.subjectArea" + ] + }, + { + "description": "A range of information was removed/deleted.", + "type": "string", + "enum": [ + "c2pa.deleted" + ] + }, + { + "description": "Styling was applied to this area.", + "type": "string", + "enum": [ + "c2pa.styled" + ] + }, + { + "description": "Invisible watermarking was applied to this area for the purpose of soft binding.", + "type": "string", + "enum": [ + "c2pa.watermarked" + ] + } + ] + }, + "Shape": { + "description": "A spatial range representing rectangle, circle, or a polygon.", + "type": "object", + "required": [ + "origin", + "type", + "unit" + ], + "properties": { + "height": { + "description": "The height of a rectnagle.\n\nThis field can be ignored for circles and polygons.", + "type": [ + "number", + "null" + ], + "format": "double" + }, + "inside": { + "description": "If the range is inside the shape.\n\nThe default value is true.", + "type": [ + "boolean", + "null" + ] + }, + "origin": { + "description": "THe origin of the coordinate in the shape.", + "allOf": [ + { + "$ref": "#/definitions/Coordinate" + } + ] + }, + "type": { + "description": "The type of shape.", + "allOf": [ + { + "$ref": "#/definitions/ShapeType" + } + ] + }, + "unit": { + "description": "The type of unit for the shape range.", + "allOf": [ + { + "$ref": "#/definitions/UnitType" + } + ] + }, + "vertices": { + "description": "The vertices of the polygon.\n\nThis field can be ignored for rectangles and circles.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Coordinate" + } + }, + "width": { + "description": "The width for rectangles or diameter for circles.\n\nThis field can be ignored for polygons.", + "type": [ + "number", + "null" + ], + "format": "double" + } + } + }, + "ShapeType": { + "description": "The type of shape for the range.", + "oneOf": [ + { + "description": "A rectangle.", + "type": "string", + "enum": [ + "rectangle" + ] + }, + { + "description": "A circle.", + "type": "string", + "enum": [ + "circle" + ] + }, + { + "description": "A polygon.", + "type": "string", + "enum": [ + "polygon" + ] + } + ] + }, + "StatusCodes": { + "description": "Contains a set of success, informational, and failure validation status codes.", + "type": "object", + "required": [ + "failure", + "informational", + "success" + ], + "properties": { + "failure": { + "type": "array", + "items": { + "$ref": "#/definitions/ValidationStatus" + } + }, + "informational": { + "type": "array", + "items": { + "$ref": "#/definitions/ValidationStatus" + } + }, + "success": { + "type": "array", + "items": { + "$ref": "#/definitions/ValidationStatus" + } + } + } + }, + "Text": { + "description": "A textual range representing multiple (possibly discontinuous) ranges of text.", + "type": "object", + "required": [ + "selectors" + ], + "properties": { + "selectors": { + "description": "The ranges of text to select.", + "type": "array", + "items": { + "$ref": "#/definitions/TextSelectorRange" + } + } + } + }, + "TextSelector": { + "description": "Selects a range of text via a fragment identifier.\n\nThis is modeled after the W3C Web Annotation selector model.", + "type": "object", + "required": [ + "fragment" + ], + "properties": { + "end": { + "description": "The end character offset or the end of the fragment if not present.", + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "fragment": { + "description": "Fragment identifier as per RFC3023 (XML) or ISO 32000-2 (PDF), Annex O.", + "type": "string" + }, + "start": { + "description": "The start character offset or the start of the fragment if not present.", + "type": [ + "integer", + "null" + ], + "format": "int32" + } + } + }, + "TextSelectorRange": { + "description": "One or two [`TextSelector`][TextSelector] identifiying the range to select.", + "type": "object", + "required": [ + "selector" + ], + "properties": { + "end": { + "description": "The end of the text range.", + "anyOf": [ + { + "$ref": "#/definitions/TextSelector" + }, + { + "type": "null" + } + ] + }, + "selector": { + "description": "The start (or entire) text range.", + "allOf": [ + { + "$ref": "#/definitions/TextSelector" + } + ] + } + } + }, + "Time": { + "description": "A temporal range representing a starting time to an ending time.", + "type": "object", + "properties": { + "end": { + "description": "The end time or the end of the asset if not present.", + "type": [ + "string", + "null" + ] + }, + "start": { + "description": "The start time or the start of the asset if not present.", + "type": [ + "string", + "null" + ] + }, + "type": { + "description": "The type of time.", + "default": "npt", + "allOf": [ + { + "$ref": "#/definitions/TimeType" + } + ] + } + } + }, + "TimeType": { + "description": "The type of time.", + "oneOf": [ + { + "description": "Times are described using Normal Play Time (npt) as described in RFC 2326.", + "type": "string", + "enum": [ + "npt" + ] + } + ] + }, + "UnitType": { + "description": "The type of unit for the range.", + "oneOf": [ + { + "description": "Use pixels.", + "type": "string", + "enum": [ + "pixel" + ] + }, + { + "description": "Use percentage.", + "type": "string", + "enum": [ + "percent" + ] + } + ] + }, + "UriOrResource": { + "anyOf": [ + { + "$ref": "#/definitions/ResourceRef" + }, + { + "$ref": "#/definitions/HashedUri" + } + ] + }, + "ValidationResults": { + "description": "A map of validation results for a manifest store.\n\nThe map contains the validation results for the active manifest and any ingredient deltas. It is normal for there to be many", + "type": "object", + "properties": { + "activeManifest": { + "anyOf": [ + { + "$ref": "#/definitions/StatusCodes" + }, + { + "type": "null" + } + ] + }, + "ingredientDeltas": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/IngredientDeltaValidationResult" + } + } + } + }, + "ValidationStatus": { + "description": "A `ValidationStatus` struct describes the validation status of a specific part of a manifest.\n\nSee .", + "type": "object", + "required": [ + "code" + ], + "properties": { + "code": { + "type": "string" + }, + "explanation": { + "type": [ + "string", + "null" + ] + }, + "success": { + "writeOnly": true, + "type": [ + "boolean", + "null" + ] + }, + "url": { + "type": [ + "string", + "null" + ] + } + } + } + } +} \ No newline at end of file diff --git a/_data/sidebar.yml b/_data/sidebar.yml index bbc583d..20411fb 100644 --- a/_data/sidebar.yml +++ b/_data/sidebar.yml @@ -9,6 +9,12 @@ children: - title: Reference with CAI styling url: reference-cai + - title: NEW manifest definition ref. + url: manifest-def + + - title: NEW manifest def w/CAI stylng + url: manifest-def-cai + - title: Reference with comments url: annotated-manifest-reference children: diff --git a/pages/annotated-manifest-ref.md b/pages/annotated-manifest-ref.md index 3fdccb0..2495573 100644 --- a/pages/annotated-manifest-ref.md +++ b/pages/annotated-manifest-ref.md @@ -11,4 +11,4 @@ This is a work in progress may not be accurate or complete. Doc notes from `ManifestStore_schema_annotated.json` are highlighted below.
See also: [Additional schema questions / comments](review-questions) {: .comment} -{% include_relative reference.md annotated="true" %} +{% include_relative reference.md schema="annotated" %} diff --git a/pages/manifest-definition-cai.md b/pages/manifest-definition-cai.md new file mode 100644 index 0000000..3ec1516 --- /dev/null +++ b/pages/manifest-definition-cai.md @@ -0,0 +1,13 @@ +--- +title: CAI manifest definition reference +permalink: manifest-def-cai +toc: false +layout: cai +--- + +This page is generated from the unmodified JSON schema generated from `c2pa-rs` on 02/26/2025. It **does not** currently have anything redacted per the [Review comments and questions](review-questions#schema-manual-edits). +{: .warning} + + + +{% include_relative reference.md layout="cai" schema="ManifestDefintion" %} diff --git a/pages/manifest-definition.md b/pages/manifest-definition.md new file mode 100644 index 0000000..173c2f9 --- /dev/null +++ b/pages/manifest-definition.md @@ -0,0 +1,12 @@ +--- +title: CAI manifest definition reference +permalink: manifest-def +toc: false +--- + +This page is generated from the unmodified JSON schema generated from `c2pa-rs` on 02/26/2025. It **does not** currently have anything redacted per the [Review comments and questions](review-questions#schema-manual-edits). +{: .warning} + + + +{% include_relative reference.md schema="ManifestDefintion" %} diff --git a/pages/manifest-ref-cai.md b/pages/manifest-ref-cai.md index 541f25c..96afe9a 100644 --- a/pages/manifest-ref-cai.md +++ b/pages/manifest-ref-cai.md @@ -5,5 +5,5 @@ layout: cai --- {% include_relative manifest-diagram.md %} -{% include_relative reference.md layout="cai" edits="true" %} +{% include_relative reference.md layout="cai" schema="edited" %} diff --git a/pages/manifest-ref.md b/pages/manifest-ref.md index 1ac362e..48041a3 100644 --- a/pages/manifest-ref.md +++ b/pages/manifest-ref.md @@ -8,4 +8,4 @@ This page is generated from the unmodified JSON schema and contains some informa {: .warning} {% include_relative manifest-diagram.md %} -{% include_relative reference.md edits="true" %} +{% include_relative reference.md %} diff --git a/pages/reference.md b/pages/reference.md index a702434..79f88f0 100644 --- a/pages/reference.md +++ b/pages/reference.md @@ -1,16 +1,19 @@ -{% if include.annotated %} - {% assign schema = site.data.ManifestStore_schema_annotated %} +{% case include.schema %} + {% when "annotated" %} + {% assign schema = site.data.ManifestStore_schema_annotated %} -{% elsif include.edits %} - {% assign schema = site.data.ManifestStore_schema_edited %} + {% when "edited" %} + {% assign schema = site.data.ManifestStore_schema_edited %} -{% else %} - {% assign schema = site.data.ManifestStore_schema %} + {% when "ManifestDefintion" %} + {% assign schema = site.data.ManifestDefinition_schema %} -{% endif %} + {% else %} + {% assign schema = site.data.ManifestStore_schema %} +{% endcase %} -## ManifestStore +## {{schema.title}} {{schema.description}}.