diff --git a/CMakeLists.txt b/CMakeLists.txt index 0529699..c1fe815 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,14 +65,28 @@ endif () # to the library structure later on will encounter issues caused by the # generative nature of the project. message("Generating Traits with openassetio-traitgen") + +# Locate the openassetio-traitgen executable. This allows the user to +# override which traitgen is used via CMake mechanisms, e.g. +# CMAKE_PREFIX_PATH, or by directly setting +# OPENASSETIO_TRAITGEN_EXECUTABLE. +find_program( + OPENASSETIO_TRAITGEN_EXECUTABLE + NAMES openassetio-traitgen + REQUIRED +) +message(STATUS "Found openassetio-traitgen at: ${OPENASSETIO_TRAITGEN_EXECUTABLE}") + # Mark the traits source as a configure dependency by copying it to the # binary dir, and use that file to run traitgen from. # This means if the source traits file is changed, configure will rerun. configure_file(${CMAKE_CURRENT_LIST_DIR}/traits.yml ${PROJECT_BINARY_DIR}/traits.yml) -execute_process(COMMAND openassetio-traitgen ${PROJECT_BINARY_DIR}/traits.yml - -o ${PROJECT_BINARY_DIR}/cpp -g cpp - COMMAND_ERROR_IS_FATAL ANY - COMMAND_ECHO STDERR) +execute_process( + COMMAND ${OPENASSETIO_TRAITGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/traits.yml + -o ${PROJECT_BINARY_DIR}/cpp -g cpp + COMMAND_ERROR_IS_FATAL ANY + COMMAND_ECHO STDERR +) if (OPENASSETIO_MEDIACREATION_GENERATE_PYTHON) # Generate the python package by running traitgen. @@ -87,10 +101,12 @@ if (OPENASSETIO_MEDIACREATION_GENERATE_PYTHON) # `pip install .` (and invoking setup.py), but that's not a # guarentee going forward, as additional elements of the python # package may be added to mediacreation. - execute_process(COMMAND openassetio-traitgen ${PROJECT_BINARY_DIR}/traits.yml + execute_process( + COMMAND ${OPENASSETIO_TRAITGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/traits.yml -o ${PROJECT_BINARY_DIR}/python -g python COMMAND_ERROR_IS_FATAL ANY - COMMAND_ECHO STDERR) + COMMAND_ECHO STDERR + ) endif() add_library(openassetio-mediacreation INTERFACE) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index d7b0706..8d725a5 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,6 +1,16 @@ Release Notes ============= +v1.0.0-alpha.x +--------------- + +### Breaking changes + +- Update the traits YAML to be compatible with the new schema defined in + `openassetio-traitgen` v1.0.0-alpha.13+, which adds versioning to + traits and specifications. + [#98](https://github.com/OpenAssetIO/OpenAssetIO-MediaCreation/issues/98) + v1.0.0-alpha.12 --------------- diff --git a/pyproject.toml b/pyproject.toml index bc4745a..38cae78 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ [build-system] requires = [ "setuptools>=65.5.0", - "openassetio-traitgen==1.0.0a12" + "openassetio-traitgen>=1.0.0a13" ] build-backend = "setuptools.build_meta" diff --git a/tests/cpp/test.cpp b/tests/cpp/test.cpp index 3b21938..97da486 100644 --- a/tests/cpp/test.cpp +++ b/tests/cpp/test.cpp @@ -9,7 +9,8 @@ using namespace openassetio_mediacreation; int main() { auto traits = openassetio::trait::TraitsData::make(); - auto trait = traits::managementPolicy::ManagedTrait(traits); + auto deprecated = traits::managementPolicy::ManagedTrait(traits); + auto trait = traits::managementPolicy::ManagedTrait_v1(traits); trait.imbue(); return 0; } diff --git a/tests/python/openassetio_mediacreation/test_imports.py b/tests/python/openassetio_mediacreation/test_imports.py index 258ac79..f141ff9 100644 --- a/tests/python/openassetio_mediacreation/test_imports.py +++ b/tests/python/openassetio_mediacreation/test_imports.py @@ -39,6 +39,7 @@ def test_importing_namespace_succeeds(self): def test_importing_LocatableContentTrait_succeeds(self): from openassetio_mediacreation.traits.content import LocatableContentTrait + from openassetio_mediacreation.traits.content import LocatableContentTrait_v1 class Test_trait_imports_managementPolicy: @@ -47,6 +48,7 @@ def test_importing_namespace_succeeds(self): def test_importing_ManagedTrait_succeeds(self): from openassetio_mediacreation.traits.managementPolicy import ManagedTrait + from openassetio_mediacreation.traits.managementPolicy import ManagedTrait_v1 class Test_trait_imports_identity: @@ -55,6 +57,7 @@ def test_importing_namespace_succeeds(self): def test_importing_DisplayNameTrait_succeeds(self): from openassetio_mediacreation.traits.identity import DisplayNameTrait + from openassetio_mediacreation.traits.identity import DisplayNameTrait_v1 class Test_trait_imports_auth: @@ -63,6 +66,7 @@ def test_importing_namespace_succeeds(self): def test_importing_BearerToken_succeeds(self): from openassetio_mediacreation.traits.auth import BearerTokenTrait + from openassetio_mediacreation.traits.auth import BearerTokenTrait_v1 class Test_trait_imports_application: @@ -71,12 +75,15 @@ def test_importing_namespace_succeeds(self): def test_importing_Config_succeeds(self): from openassetio_mediacreation.traits.application import ConfigTrait + from openassetio_mediacreation.traits.application import ConfigTrait_v1 def test_importing_Manifest_succeeds(self): from openassetio_mediacreation.traits.application import ManifestTrait + from openassetio_mediacreation.traits.application import ManifestTrait_v1 def test_importing_Work_succeeds(self): from openassetio_mediacreation.traits.application import WorkTrait + from openassetio_mediacreation.traits.application import WorkTrait_v1 class Test_trait_imports_usage: @@ -85,9 +92,11 @@ def test_importing_namespace_succeeds(self): def test_importing_Entity_succeeds(self): from openassetio_mediacreation.traits.usage import EntityTrait + from openassetio_mediacreation.traits.usage import EntityTrait_v1 def test_importing_Relationship_succeeds(self): from openassetio_mediacreation.traits.usage import RelationshipTrait + from openassetio_mediacreation.traits.usage import RelationshipTrait_v1 class Test_trait_imports_lifecycle: @@ -96,9 +105,11 @@ def test_importing_namespace_succeeds(self): def test_importing_Version_succeeds(self): from openassetio_mediacreation.traits.lifecycle import VersionTrait + from openassetio_mediacreation.traits.lifecycle import VersionTrait_v1 def test_importing_Stable_succeeds(self): from openassetio_mediacreation.traits.lifecycle import StableTrait + from openassetio_mediacreation.traits.lifecycle import StableTrait_v1 class Test_trait_imports_relationship: @@ -107,9 +118,11 @@ def test_importing_namespace_succeeds(self): def test_importing_Singular_succeeds(self): from openassetio_mediacreation.traits.relationship import SingularTrait + from openassetio_mediacreation.traits.relationship import SingularTrait_v1 def test_importing_Unbounded_succeeds(self): from openassetio_mediacreation.traits.relationship import UnboundedTrait + from openassetio_mediacreation.traits.relationship import UnboundedTrait_v1 class Test_trait_imports_representation: @@ -118,9 +131,11 @@ def test_importing_namespace_succeeds(self): def test_importing_Proxy_succeeds(self): from openassetio_mediacreation.traits.representation import ProxyTrait + from openassetio_mediacreation.traits.representation import ProxyTrait_v1 def test_importing_Original_succeeds(self): from openassetio_mediacreation.traits.representation import OriginalTrait + from openassetio_mediacreation.traits.representation import OriginalTrait_v1 class Test_trait_imports_timeDomain: @@ -129,9 +144,11 @@ def test_importing_namespace_succeeds(self): def test_importing_FrameRanged_succeeds(self): from openassetio_mediacreation.traits.timeDomain import FrameRangedTrait + from openassetio_mediacreation.traits.timeDomain import FrameRangedTrait_v1 def test_importing_Static_succeeds(self): from openassetio_mediacreation.traits.timeDomain import StaticTrait + from openassetio_mediacreation.traits.timeDomain import StaticTrait_v1 class Test_trait_imports_twoDimensional: @@ -140,12 +157,15 @@ def test_importing_namespace_succeeds(self): def test_importing_Image_succeeds(self): from openassetio_mediacreation.traits.twoDimensional import ImageTrait + from openassetio_mediacreation.traits.twoDimensional import ImageTrait_v1 def test_importing_PixelBased_succeeds(self): from openassetio_mediacreation.traits.twoDimensional import PixelBasedTrait + from openassetio_mediacreation.traits.twoDimensional import PixelBasedTrait_v1 def test_importing_Deep_succeeds(self): from openassetio_mediacreation.traits.twoDimensional import DeepTrait + from openassetio_mediacreation.traits.twoDimensional import DeepTrait_v1 class Test_trait_imports_threeDimensional: @@ -154,24 +174,31 @@ def test_importing_namespace_succeeds(self): def test_importing_Spatial_succeeds(self): from openassetio_mediacreation.traits.threeDimensional import SpatialTrait + from openassetio_mediacreation.traits.threeDimensional import SpatialTrait_v1 def test_importing_GeometryTrait_succeeds(self): from openassetio_mediacreation.traits.threeDimensional import GeometryTrait + from openassetio_mediacreation.traits.threeDimensional import GeometryTrait_v1 def test_importing_Lighting_succeeds(self): from openassetio_mediacreation.traits.threeDimensional import LightingTrait + from openassetio_mediacreation.traits.threeDimensional import LightingTrait_v1 def test_importing_Shader_succeeds(self): from openassetio_mediacreation.traits.threeDimensional import ShaderTrait + from openassetio_mediacreation.traits.threeDimensional import ShaderTrait_v1 def test_importing_IESProfile_succeeds(self): from openassetio_mediacreation.traits.threeDimensional import IESProfileTrait + from openassetio_mediacreation.traits.threeDimensional import IESProfileTrait_v1 def test_importing_SourcePath_succeeds(self): from openassetio_mediacreation.traits.threeDimensional import SourcePathTrait + from openassetio_mediacreation.traits.threeDimensional import SourcePathTrait_v1 def test_importing_SourcePaths_succeeds(self): from openassetio_mediacreation.traits.threeDimensional import SourcePathsTrait + from openassetio_mediacreation.traits.threeDimensional import SourcePathsTrait_v1 class Test_trait_imports_metadata: @@ -180,6 +207,7 @@ def test_importing_namespace_succeeds(self): def test_importing_Camera_succeeds(self): from openassetio_mediacreation.traits.metadata import ArbitraryMetadataTrait + from openassetio_mediacreation.traits.metadata import ArbitraryMetadataTrait_v1 class Test_trait_imports_imaging: @@ -188,6 +216,7 @@ def test_importing_namespace_succeeds(self): def test_importing_Camera_succeeds(self): from openassetio_mediacreation.traits.imaging import CameraTrait + from openassetio_mediacreation.traits.imaging import CameraTrait_v1 class Test_trait_imports_color: @@ -196,6 +225,7 @@ def test_importing_namespace_succeeds(self): def test_importing_Camera_succeeds(self): from openassetio_mediacreation.traits.color import OCIOColorManagedTrait + from openassetio_mediacreation.traits.color import OCIOColorManagedTrait_v1 class Test_trait_imports_audio: @@ -204,9 +234,11 @@ def test_importing_namespace_succeeds(self): def test_importing_Audio_succeeds(self): from openassetio_mediacreation.traits.audio import AudioTrait + from openassetio_mediacreation.traits.audio import AudioTrait_v1 def test_importing_SampleBased_succeeds(self): from openassetio_mediacreation.traits.audio import SampleBasedTrait + from openassetio_mediacreation.traits.audio import SampleBasedTrait_v1 class Test_specification_imports_lifecycle: @@ -216,16 +248,19 @@ def test_importing_namespace_succeeds(self): def test_importing_EntityVersionsRelationship_succeeds(self): from openassetio_mediacreation.specifications.lifecycle import ( EntityVersionsRelationshipSpecification, + EntityVersionsRelationshipSpecification_v1, ) def test_importing_StableEntityVersionsRelationship_succeeds(self): from openassetio_mediacreation.specifications.lifecycle import ( StableEntityVersionsRelationshipSpecification, + StableEntityVersionsRelationshipSpecification_v1, ) def test_importing_StableReferenceRelationship_succeeds(self): from openassetio_mediacreation.specifications.lifecycle import ( StableReferenceRelationshipSpecification, + StableReferenceRelationshipSpecification_v1, ) @@ -236,11 +271,13 @@ def test_importing_namespace_succeeds(self): def test_importing_OriginalRepresentationRelationship_succeeds(self): from openassetio_mediacreation.specifications.representation import ( OriginalRepresentationRelationshipSpecification, + OriginalRepresentationRelationshipSpecification_v1, ) def test_importing_ProxyRepresentationRelationship_succeeds(self): from openassetio_mediacreation.specifications.representation import ( ProxyRepresentationRelationshipSpecification, + ProxyRepresentationRelationshipSpecification_v1, ) @@ -249,16 +286,21 @@ def test_importing_namespace_succeeds(self): from openassetio_mediacreation.specifications import twoDimensional def test_importing_Image_succeeds(self): - from openassetio_mediacreation.specifications.twoDimensional import ImageSpecification + from openassetio_mediacreation.specifications.twoDimensional import ( + ImageSpecification, + ImageSpecification_v1, + ) def test_importing_BitmapImageResource_succeeds(self): from openassetio_mediacreation.specifications.twoDimensional import ( BitmapImageResourceSpecification, + BitmapImageResourceSpecification_v1, ) def test_importing_DeepBitmapImageResource_succeeds(self): from openassetio_mediacreation.specifications.twoDimensional import ( DeepBitmapImageResourceSpecification, + DeepBitmapImageResourceSpecification_v1, ) @@ -267,36 +309,45 @@ def test_importing_namespace_succeeds(self): from openassetio_mediacreation.specifications import threeDimensional def test_importing_Spatial_succeeds(self): - from openassetio_mediacreation.specifications.threeDimensional import SpatialSpecification + from openassetio_mediacreation.specifications.threeDimensional import ( + SpatialSpecification, + SpatialSpecification_v1, + ) def test_importing_SceneResource_succeeds(self): from openassetio_mediacreation.specifications.threeDimensional import ( SceneResourceSpecification, + SceneResourceSpecification_v1, ) def test_importing_SceneGeometryResource_succeeds(self): from openassetio_mediacreation.specifications.threeDimensional import ( SceneGeometryResourceSpecification, + SceneGeometryResourceSpecification_v1, ) def test_importing_SceneCameraResource_succeeds(self): from openassetio_mediacreation.specifications.threeDimensional import ( SceneCameraResourceSpecification, + SceneCameraResourceSpecification_v1, ) def test_importing_SceneLightingResource_succeeds(self): from openassetio_mediacreation.specifications.threeDimensional import ( SceneLightingResourceSpecification, + SceneLightingResourceSpecification_v1, ) def test_importing_ShaderResource_succeeds(self): from openassetio_mediacreation.specifications.threeDimensional import ( ShaderResourceSpecification, + ShaderResourceSpecification_v1, ) def test_importing_IESProfileResource_succeeds(self): from openassetio_mediacreation.specifications.threeDimensional import ( IESProfileResourceSpecification, + IESProfileResourceSpecification_v1, ) @@ -305,11 +356,15 @@ def test_importing_namespace_succeeds(self): from openassetio_mediacreation.specifications import audio def test_importing_Audio_succeeds(self): - from openassetio_mediacreation.specifications.audio import AudioSpecification + from openassetio_mediacreation.specifications.audio import ( + AudioSpecification, + AudioSpecification_v1, + ) def test_importing_SampledAudioResource_succeeds(self): from openassetio_mediacreation.specifications.audio import ( SampledAudioResourceSpecification, + SampledAudioResourceSpecification_v1, ) @@ -318,4 +373,7 @@ def test_importing_namespace_succeeds(self): from openassetio_mediacreation.specifications import application def test_importing_workfile_succeeds(self): - from openassetio_mediacreation.specifications.application import WorkfileSpecification + from openassetio_mediacreation.specifications.application import ( + WorkfileSpecification, + WorkfileSpecification_v1, + ) diff --git a/tests/python/openassetio_mediacreation/test_specifications.py b/tests/python/openassetio_mediacreation/test_specifications.py index c5ac914..329ca34 100644 --- a/tests/python/openassetio_mediacreation/test_specifications.py +++ b/tests/python/openassetio_mediacreation/test_specifications.py @@ -46,7 +46,7 @@ def test_relationship_names_suffixed(self): """ for cls in self.__specifications(): if RelationshipTrait.kId in cls.kTraitSet: - assert cls.__name__.endswith("RelationshipSpecification") + assert cls.__name__.endswith("RelationshipSpecification_v1") def __specifications(self): """ @@ -57,7 +57,7 @@ def __specifications(self): for _, namespace in namespaces: classes = inspect.getmembers(namespace, inspect.isclass) for _, cls in classes: - if cls.__name__.endswith("Specification"): + if cls.__name__.endswith("Specification_v1"): specs.append(cls) assert specs return specs diff --git a/traits.yml b/traits.yml index 3e408b8..e663d26 100644 --- a/traits.yml +++ b/traits.yml @@ -11,115 +11,125 @@ traits: one of these should be included in any given Specification. members: Entity: - description: The trait set defines qualities of an entity. - usage: - - entity + versions: + "1": + description: The trait set defines qualities of an entity. + usage: + - entity Relationship: - description: > - The trait set defines a relationship between one or more - entities. - usage: - - relationship + versions: + "1": + description: > + The trait set defines a relationship between one or more + entities. + usage: + - relationship UI: - description: > - The trait set defines qualities of a user interface. - usage: - - ui + versions: + "1": + description: > + The trait set defines qualities of a user interface. + usage: + - ui color: description: Traits related to chromatic information in entity data. members: OCIOColorManaged: - description: > - Color data is managed using the OpenColorIO color management - system. - - - https://opencolorio.readthedocs.io - usage: - - entity - properties: - colorspace: + versions: + "1": description: > - An OCIO colorspace name available in the "current" OCIO context. - type: string + Color data is managed using the OpenColorIO color management + system. + + + https://opencolorio.readthedocs.io + usage: + - entity + properties: + colorspace: + description: > + An OCIO colorspace name available in the "current" OCIO context. + type: string content: description: Traits related to abstract content. members: LocatableContent: - description: > - This trait characterizes an entity whose data is persisted - externally to the API through data accessible via a valid - URL. - - - The `location` property holds the most applicable location - of the entity's content for the current process environment - - considering platform, host, etc. Location is in the form - of a URL. - usage: - - entity - properties: - location: - type: string + versions: + "1": description: > - The location of the entity's external content. - - - This must be a valid URL, so special characters need to - be encoded accordingly. - mimeType: - type: string - description: > - The MIME type of the data referenced by the location - property. - - - A single MIME type may be insufficient. For example, - `isTemplated` is true and the MIME type may vary depending - on the substitution; or LocatableContent is used as a - filter predicate where multiple types are supported. - - - Multiple MIME types can be represented in two ways. - Firstly, a wildcard may be used in place of the subtype, - e.g. "image/*". Secondly, multiple MIME types may be - separated with a comma, e.g. "image/jpeg,image/png". - - - Common references for MIME types are the IANA standard: - https://www.iana.org/assignments/media-types/media-types.xhtml - and the XDG standard (which adds e.g. "inode/directory"): - https://specifications.freedesktop.org/shared-mime-info-spec/latest/index.html - - - In addition There are several other non-standard MIME - types in use in the media creation industry. For example, - - - - "application/x-nuke" for Nuke scripts. - - "application/vnd.aswf.opentimelineio" for OpenTimelineIO - ".otio" files. - isTemplated: - type: boolean - description: > - The URL in the location property contains variables (post - decoding) that must be expanded before any loading is - attempted. - - - Variables use the OpenAssetIO syntax (eg: - "image.{frame:04d}.{view}.exr") see the OpenAssetIO - documentation for more details. - - - The following well-known variables are defined within the - MediaCreation ecosystem, and must be used where applicable - to any specific workflow: - - - frame: An integer frame number for the current time. - - view: A string representing the current view (eg. - "left"). + This trait characterizes an entity whose data is persisted + externally to the API through data accessible via a valid + URL. + + + The `location` property holds the most applicable location + of the entity's content for the current process environment + - considering platform, host, etc. Location is in the form + of a URL. + usage: + - entity + properties: + location: + type: string + description: > + The location of the entity's external content. + + + This must be a valid URL, so special characters need to + be encoded accordingly. + mimeType: + type: string + description: > + The MIME type of the data referenced by the location + property. + + + A single MIME type may be insufficient. For example, + `isTemplated` is true and the MIME type may vary depending + on the substitution; or LocatableContent is used as a + filter predicate where multiple types are supported. + + + Multiple MIME types can be represented in two ways. + Firstly, a wildcard may be used in place of the subtype, + e.g. "image/*". Secondly, multiple MIME types may be + separated with a comma, e.g. "image/jpeg,image/png". + + + Common references for MIME types are the IANA standard: + https://www.iana.org/assignments/media-types/media-types.xhtml + and the XDG standard (which adds e.g. "inode/directory"): + https://specifications.freedesktop.org/shared-mime-info-spec/latest/index.html + + + In addition There are several other non-standard MIME + types in use in the media creation industry. For example, + + + - "application/x-nuke" for Nuke scripts. + - "application/vnd.aswf.opentimelineio" for OpenTimelineIO + ".otio" files. + isTemplated: + type: boolean + description: > + The URL in the location property contains variables (post + decoding) that must be expanded before any loading is + attempted. + + + Variables use the OpenAssetIO syntax (eg: + "image.{frame:04d}.{view}.exr") see the OpenAssetIO + documentation for more details. + + + The following well-known variables are defined within the + MediaCreation ecosystem, and must be used where applicable + to any specific workflow: + + - frame: An integer frame number for the current time. + - view: A string representing the current view (eg. + "left"). application: description: > Traits that describe the usage or function of structured data, @@ -127,75 +137,87 @@ traits: namespace. members: Config: - description: > - The entity data represents the configuration of a system, - application or tool. - usage: - - entity + versions: + "1": + description: > + The entity data represents the configuration of a system, + application or tool. + usage: + - entity Manifest: - description: > - The entity data represents a list or other manifest of - associated entities or information. - usage: - - entity + versions: + "1": + description: > + The entity data represents a list or other manifest of + associated entities or information. + usage: + - entity Work: - description: > - The entity data is the product of some manual task or process, - that often defines how to produce or derive other data. + versions: + "1": + description: > + The entity data is the product of some manual task or process, + that often defines how to produce or derive other data. - Common examples are the documents opened, worked on and saved - by artists using DCC tools to create models/images/etc. + Common examples are the documents opened, worked on and saved + by artists using DCC tools to create models/images/etc. + usage: + - entity identity: description: Traits that aid the identification of an entity. members: DisplayName: - description: > - Names that can be presented to a user in order to identify - and/or disambiguate the entity. These strings are potentially - unstable and should not be used as a UUID or other persistent - anchor. - usage: - - entity - properties: - name: - type: string - description: > - The humanized name of entity itself, not including any - hierarchy or classification. - - - For example: - - `"Cuttlefish v1"` - for a version of an asset - - `"seq003"` - for a sequence in a hierarchy - - qualifiedName: - type: string + versions: + "1": description: > - An unambiguous, humanized name for the entity. - - - The display name may want to consider the host, and any other - relevant Context information to form a display name for an - entity that can uniquely identify the entity in that context. - - - For example: - - `"dive / build / cuttlefish / model / v1"` for a version - of an asset in an 'open recent' menu. - - `"Sequence 003 [ Dive / Episode 1 ]"` for a sequence in - a hierarchy as a window title. + Names that can be presented to a user in order to identify + and/or disambiguate the entity. These strings are potentially + unstable and should not be used as a UUID or other persistent + anchor. + usage: + - entity + properties: + name: + type: string + description: > + The humanized name of entity itself, not including any + hierarchy or classification. + + + For example: + - `"Cuttlefish v1"` - for a version of an asset + - `"seq003"` - for a sequence in a hierarchy + + qualifiedName: + type: string + description: > + An unambiguous, humanized name for the entity. + + + The display name may want to consider the host, and any other + relevant Context information to form a display name for an + entity that can uniquely identify the entity in that context. + + + For example: + - `"dive / build / cuttlefish / model / v1"` for a version + of an asset in an 'open recent' menu. + - `"Sequence 003 [ Dive / Episode 1 ]"` for a sequence in + a hierarchy as a window title. imaging: description: > Traits that are concerned with entities related to the derivation of an image from other source data. members: Camera: - description: > - The entity represents a device that captures a view through - re-projection or encoding into some other form. - usage: - - entity + versions: + "1": + description: > + The entity represents a device that captures a view through + re-projection or encoding into some other form. + usage: + - entity metadata: description: > Traits that are concerned with describing additional data @@ -203,524 +225,606 @@ traits: primary definition. members: ArbitraryMetadata: - description: > - Additional key/value pairs associated with the entity that - have no standardised definition of their values. This allows - extra data specific to any given use case or pipeline to be - conveyed through the Traits mechanism. + versions: + "1": + description: > + Additional key/value pairs associated with the entity that + have no standardised definition of their values. This allows + extra data specific to any given use case or pipeline to be + conveyed through the Traits mechanism. - Hosts may propagate this data throughout their own data model - for use in downstream actions. + Hosts may propagate this data throughout their own data model + for use in downstream actions. - As there are no standardised keys, the low level TraitsData - API must be used to determine which keys/values are present. + As there are no standardised keys, the low level TraitsData + API must be used to determine which keys/values are present. + usage: + - entity threeDimensional: description: > Traits that are concerned with describing three-dimensional data, such as models, scenes, cameras, lights, etc. members: Spatial: - description: > - A family trait that should be composed with more specific - traits for any entity that holds data described in three - dimensions. - usage: - - entity - properties: - upAxis: - type: string + versions: + "1": description: > - The axis considered to point "up", legal values are: "y" or "z". - - - It is assumed that the "x" axis is always horizontal, - perpendicular to the depth axis. Consequently the depth - axis is always which ever of "y" or "z" that is not set as - the upAxis. - handedness: - type: string - description: > - Determines which direction positive depth is based on the - "left hand or right hand rule" - - Legal values are "left" and "right" - metersPerUnit: - type: float - description: > - How many meters are represented by a linear unit in the - data. + A family trait that should be composed with more specific + traits for any entity that holds data described in three + dimensions. + usage: + - entity + properties: + upAxis: + type: string + description: > + The axis considered to point "up", legal values are: "y" or "z". + + + It is assumed that the "x" axis is always horizontal, + perpendicular to the depth axis. Consequently the depth + axis is always which ever of "y" or "z" that is not set as + the upAxis. + handedness: + type: string + description: > + Determines which direction positive depth is based on the + "left hand or right hand rule" + + Legal values are "left" and "right" + metersPerUnit: + type: float + description: > + How many meters are represented by a linear unit in the + data. Geometry: - description: > - The entity represents one or more "objects" within - three-dimensional space. - usage: - - entity + versions: + "1": + description: > + The entity represents one or more "objects" within + three-dimensional space. + usage: + - entity Lighting: - description: > - The entity represents scene or object lighting, which may be a - single light, a rig, or any other relevant construction. - usage: - - entity + versions: + "1": + description: > + The entity represents scene or object lighting, which may be a + single light, a rig, or any other relevant construction. + usage: + - entity Shader: - description: > - The entity represents a parameterised algorithm that is - evaluated during processing of a three-dimensional scene. - usage: - - entity + versions: + "1": + description: > + The entity represents a parameterised algorithm that is + evaluated during processing of a three-dimensional scene. + usage: + - entity IESProfile: - description: > - The entity represent an IES lighting profile, as defined by - IES-LM-63, see: + versions: + "1": + description: > + The entity represent an IES lighting profile, as defined by + IES-LM-63, see: - https://store.ies.org/product/lm-63-19-approved-method-ies-standard-file-format-for-the-electronic-transfer-of-photometric-data-and-related-information + https://store.ies.org/product/lm-63-19-approved-method-ies-standard-file-format-for-the-electronic-transfer-of-photometric-data-and-related-information + usage: + - entity SourcePath: - description: > - Defines a singular path within the entity's scene - hierarchy that should be used as the root, ignoring any other - peer paths. - - For example "/cameras/1103/camera" - usage: - - entity - properties: - path: + versions: + "1": description: > - A forward slash (/) delimited path considered absolute - from the root of the entity's scene hierarchy. - type: string + Defines a singular path within the entity's scene + hierarchy that should be used as the root, ignoring any other + peer paths. + + For example "/cameras/1103/camera" + usage: + - entity + properties: + path: + description: > + A forward slash (/) delimited path considered absolute + from the root of the entity's scene hierarchy. + type: string SourcePaths: - description: > - Defines the root paths within the entity data that form the - start of a discrete hierarchy, labelled by the property key. + versions: + "1": + description: > + Defines the root paths within the entity data that form the + start of a discrete hierarchy, labelled by the property key. - For example: - left: "/cameras/1103/camera/left" - right: "/cameras/1103/camera/right" + For example: + left: "/cameras/1103/camera/left" + right: "/cameras/1103/camera/right" - As there are no standardised keys, the low level TraitsData - API must be used to determine which keys/values are present. - usage: - - entity + As there are no standardised keys, the low level TraitsData + API must be used to determine which keys/values are present. + usage: + - entity timeDomain: description: > Traits that are concerned with describing how data changes or is parameterised over time. members: FrameRanged: - description: The data varies over a number of discrete frames. - usage: - - entity - properties: - startFrame: - description: > - The first frame covered by the entity data (inclusive). - type: integer - endFrame: - description: > - The last frame covered by the entity data (inclusive). - type: integer - inFrame: - description: > - The first frame to be used within startFrame/endFrame - (inclusive). - type: integer - outFrame: - description: > - The last frame to be used within startFrame/endFrame - (inclusive). - type: integer - framesPerSecond: - description: > - The number of frames that occur within one second. - type: float - step: - description: > - The interval between frames of the entity's data. A - startFrame of 21 and a step of 10 would indicate that the - entity data only covers frames 21, 31, 41, ... - type: integer + versions: + "1": + description: The data varies over a number of discrete frames. + usage: + - entity + properties: + startFrame: + description: > + The first frame covered by the entity data (inclusive). + type: integer + endFrame: + description: > + The last frame covered by the entity data (inclusive). + type: integer + inFrame: + description: > + The first frame to be used within startFrame/endFrame + (inclusive). + type: integer + outFrame: + description: > + The last frame to be used within startFrame/endFrame + (inclusive). + type: integer + framesPerSecond: + description: > + The number of frames that occur within one second. + type: float + step: + description: > + The interval between frames of the entity's data. A + startFrame of 21 and a step of 10 would indicate that the + entity data only covers frames 21, 31, 41, ... + type: integer Static: - description: The data does not vary over time. - usage: - - entity + versions: + "1": + description: The data does not vary over time. + usage: + - entity twoDimensional: description: > Traits that are concerned with describing two-dimensional data, more colloquially known as 'images'. members: Image: - description: > - A family trait that should be composed with more specific - traits for any entity that holds two-dimensional data. - usage: - - entity - ImageCollection: - description: > - A family trait for any entity that is not an image itself but - is a collection of one or more images. - usage: - - entity - PixelBased: - description: > - Entity data is encoded in a pixel grid of two dimensions. - Also known as 'raster' data. - - - Note: Properties (or most likely traits) to describe overscan - and/or other cases where the data window differs, need to be - added once we have a more concrete definition of required - workflows. - properties: - displayWindowWidth: + versions: + "1": description: > - The number of pixels in the width dimension before - pixel aspect ratio is taken into account. If the data - contains additional hidden pixels (overscan) then this - should not be included in this value. - type: integer - displayWindowHeight: + A family trait that should be composed with more specific + traits for any entity that holds two-dimensional data. + usage: + - entity + ImageCollection: + versions: + "1": description: > - The number of pixels in the height dimension - before pixel aspect ratio is taken into account. If the - data contains additional hidden pixels (overscan) then - this should not be included in this value. - type: integer - pixelAspectRatio: + A family trait for any entity that is not an image itself but + is a collection of one or more images. + usage: + - entity + PixelBased: + versions: + "1": description: > - The aspect ratio of each pixel expressed as width divided - by height. The value represents how much the width of the - pixel should be stretched for display. - type: float - usage: - - entity + Entity data is encoded in a pixel grid of two dimensions. + Also known as 'raster' data. + + + Note: Properties (or most likely traits) to describe overscan + and/or other cases where the data window differs, need to be + added once we have a more concrete definition of required + workflows. + usage: + - entity + properties: + displayWindowWidth: + description: > + The number of pixels in the width dimension before + pixel aspect ratio is taken into account. If the data + contains additional hidden pixels (overscan) then this + should not be included in this value. + type: integer + displayWindowHeight: + description: > + The number of pixels in the height dimension + before pixel aspect ratio is taken into account. If the + data contains additional hidden pixels (overscan) then + this should not be included in this value. + type: integer + pixelAspectRatio: + description: > + The aspect ratio of each pixel expressed as width divided + by height. The value represents how much the width of the + pixel should be stretched for display. + type: float Planar: - description: > - The entity data contains a single sample for each data point - in the two dimensional width/height domain, such that the - resulting image lies on a plane. + versions: + "1": + description: > + The entity data contains a single sample for each data point + in the two dimensional width/height domain, such that the + resulting image lies on a plane. + usage: + - entity Deep: - description: > - The entity data contains multiple depth samples for each data - point in the two dimensional width/height domain. - usage: - - entity + versions: + "1": + description: > + The entity data contains multiple depth samples for each data + point in the two dimensional width/height domain. + usage: + - entity lifecycle: description: > Traits that are concerned with describing aspects of the life cycle of an entity, such as versioning. members: Version: - description: > - Describes a specific version of an entity. - - - A version is defined as a revision or iteration of what is - otherwise the same logical entity. If supported by a manager, - versions are created when new data is published to an existing - entity. Not all managers may version all types of entity. - - - There is no requirement for version to be a singular atomic - series, managers may wish to support "meta versions", such as - 'vLatest' or similar, or provide multiple parallel versioning - streams. - - - This trait can be used in several places: - - When resolved, the manager should provide information about - the version of the referenced entity. This trait should only - be imbued if the target entity is considered versioned by the - manager, and it can populate the stableTag property. - - When responding to managementPolicy for an entity trait set, - the manager should imbue this trait if that type of entity - is version managed by the manager (not all managers version - all types of entity). - - When used within a relationship query, this trait indicates - that the returned entities should be constrained to other - versions of the logical entity targeted by the reference. - usage: - - entity - - relationship - - managementPolicy - properties: - specifiedTag: - type: string - description: > - An unambiguous identifier (tag) for the specific version of - an entity targeted by a specific reference. - - - Examples of version tags include "1", "v2", "latest". - - - If the reference itself does not contain a version - specifier and relies on dynamic behaviour, this will be - set to a tag that produces equivalent behaviour. This can - then be used for user presentation or as a filter with a - relationship query. - stableTag: - type: string + versions: + "1": description: > - The tag (see 'specifiedTag') targeted by the reference once - meta-versions or other dynamic behaviour is applied. - - - If, for example, references without an explicit version - yield the most recent, then this would be set to - the tag of that version. When referencing some other - semantic state (eg. approval), this would be set to the - tag of the concrete version that matches the specific - state. - - - Examples of stable version tags include "1", "v2". - - - This property should always be set when the Version trait - is imbued as part of a resolve response. If the entity is - not versioned, then the trait itself should not be imbued. + Describes a specific version of an entity. + + + A version is defined as a revision or iteration of what is + otherwise the same logical entity. If supported by a manager, + versions are created when new data is published to an existing + entity. Not all managers may version all types of entity. + + + There is no requirement for version to be a singular atomic + series, managers may wish to support "meta versions", such as + 'vLatest' or similar, or provide multiple parallel versioning + streams. + + + This trait can be used in several places: + - When resolved, the manager should provide information about + the version of the referenced entity. This trait should only + be imbued if the target entity is considered versioned by the + manager, and it can populate the stableTag property. + - When responding to managementPolicy for an entity trait set, + the manager should imbue this trait if that type of entity + is version managed by the manager (not all managers version + all types of entity). + - When used within a relationship query, this trait indicates + that the returned entities should be constrained to other + versions of the logical entity targeted by the reference. + usage: + - entity + - relationship + - managementPolicy + properties: + specifiedTag: + type: string + description: > + An unambiguous identifier (tag) for the specific version of + an entity targeted by a specific reference. + + + Examples of version tags include "1", "v2", "latest". + + + If the reference itself does not contain a version + specifier and relies on dynamic behaviour, this will be + set to a tag that produces equivalent behaviour. This can + then be used for user presentation or as a filter with a + relationship query. + stableTag: + type: string + description: > + The tag (see 'specifiedTag') targeted by the reference once + meta-versions or other dynamic behaviour is applied. + + + If, for example, references without an explicit version + yield the most recent, then this would be set to + the tag of that version. When referencing some other + semantic state (eg. approval), this would be set to the + tag of the concrete version that matches the specific + state. + + + Examples of stable version tags include "1", "v2". + + + This property should always be set when the Version trait + is imbued as part of a resolve response. If the entity is + not versioned, then the trait itself should not be imbued. Stable: - description: > - Defines that the entity references returned from a - relationship query with this trait must be devoid of any - dynamic behaviour. This includes concepts such as - meta-versioning or context-specific variation that results - logically different data being supplied. + versions: + "1": + description: > + Defines that the entity references returned from a + relationship query with this trait must be devoid of any + dynamic behaviour. This includes concepts such as + meta-versioning or context-specific variation that results + logically different data being supplied. - This is generally used to snapshot/bookmark specific - configurations to avoid temporal instability and/or ensure - processes are repeatable. + This is generally used to snapshot/bookmark specific + configurations to avoid temporal instability and/or ensure + processes are repeatable. - Note: This does not include variations such as regional - adaptation of the LocatableContent trait, where the underlying - data remains the same. - usage: - - relationship + Note: This does not include variations such as regional + adaptation of the LocatableContent trait, where the underlying + data remains the same. + usage: + - relationship managementPolicy: description: Traits used in a Manager's managementPolicy response. members: Managed: - description: > - A trait indicating that the data matching the supplied trait set - is handled by the manager. - - - There are three possible policies determined by - applying/querying this trait: - * If the response is not imbued with this trait, then the - Manager has no interest in participating in the management of - entities that match the queried trait set, for either read or - write. - * If the response is imbued with this trait, but the "exclusive" - property is not set, or set to False, then the Manager would - like the opportunity to manage the data, but the user should - still be presented with standard Host UI for the type as an - option. - * If the "exclusive" property is set to true, then the Manager - takes exclusive control over data with the queried trait set, - and any standard host interfaces etc should be suppressed. - usage: - - managementPolicy - properties: - exclusive: - type: boolean + versions: + "1": description: > - Determines if the manager exclusively handles data matching - the supplied trait set. - - - If True, then standard host controls should be disabled - in favour of manager delegated UI. For example, file system - browsers when determining where to load/save data. - - - If False, then standard host controls can be presented in - addition to any custom manager UI. + A trait indicating that the data matching the supplied trait set + is handled by the manager. + + + There are three possible policies determined by + applying/querying this trait: + * If the response is not imbued with this trait, then the + Manager has no interest in participating in the management of + entities that match the queried trait set, for either read or + write. + * If the response is imbued with this trait, but the "exclusive" + property is not set, or set to False, then the Manager would + like the opportunity to manage the data, but the user should + still be presented with standard Host UI for the type as an + option. + * If the "exclusive" property is set to true, then the Manager + takes exclusive control over data with the queried trait set, + and any standard host interfaces etc should be suppressed. + usage: + - managementPolicy + properties: + exclusive: + type: boolean + description: > + Determines if the manager exclusively handles data matching + the supplied trait set. + + + If True, then standard host controls should be disabled + in favour of manager delegated UI. For example, file system + browsers when determining where to load/save data. + + + If False, then standard host controls can be presented in + addition to any custom manager UI. relationship: description: Traits specific to qualities of a relationship. members: Singular: - description: > - The relationship should return at most one reference for each - input. Unless otherwise qualified, relationships are - considered one-to-many. - usage: - - relationship + versions: + "1": + description: > + The relationship should return at most one reference for each + input. Unless otherwise qualified, relationships are + considered one-to-many. + usage: + - relationship Unbounded: - description: > - The relationship may return large numbers of results for each - input, and so must be used with the paged API methods, such as - Manager.getWithRelationshipPaged. - usage: - - relationship + versions: + "1": + description: > + The relationship may return large numbers of results for each + input, and so must be used with the paged API methods, such as + Manager.getWithRelationshipPaged. + usage: + - relationship representation: description: > Traits relating to alternate representations of what is otherwise logically the same entity. members: Proxy: - description: > - An alternate scale/quality representation. In the case of - images, this is usually either a lower resolution, a reduced - quality encoding or a comnination of the two. For spatial data - this may be reduced spacial fedlity or number of points. - usage: - - entity - - relationship - properties: - scaleRatio: - type: float + versions: + "1": description: > - The ratio of the representation's dimensions compared to - the original. - qualityRatio: - type: float - description: > - The ratio of the representation's quality compared to the - original. - label: - type: string - description: > - A short user-facing label that identifies the representation. - This should not be the Entity name. - - e.g. "half", "mobile friendly" + An alternate scale/quality representation. In the case of + images, this is usually either a lower resolution, a reduced + quality encoding or a comnination of the two. For spatial data + this may be reduced spacial fedlity or number of points. + usage: + - entity + - relationship + properties: + scaleRatio: + type: float + description: > + The ratio of the representation's dimensions compared to + the original. + qualityRatio: + type: float + description: > + The ratio of the representation's quality compared to the + original. + label: + type: string + description: > + A short user-facing label that identifies the representation. + This should not be the Entity name. + + e.g. "half", "mobile friendly" Original: - description: > - The original canonical/source representation of the entity - from which other proxy representations may have been derived. - usage: - - entity - - relationship + versions: + "1": + description: > + The original canonical/source representation of the entity + from which other proxy representations may have been derived. + usage: + - entity + - relationship auth: description: Traits related to authentication and authorization. members: BearerToken: - description: > - This trait holds an authentication token that the manager may - pass to a back-end service. - usage: - - locale - properties: - token: - type: string + versions: + "1": description: > - Contents of the token. + This trait holds an authentication token that the manager may + pass to a back-end service. + usage: + - locale + properties: + token: + type: string + description: > + Contents of the token. audio: description: Traits related to sound. members: Audio: - description: > - A family trait that should be composed with more specific - traits for any entity that hold audio data. + versions: + "1": + description: > + A family trait that should be composed with more specific + traits for any entity that hold audio data. + usage: + - entity SampleBased: - description: > - Audio that is encoded in a series of discrete time samples, - for some number of channels. + versions: + "1": + description: > + Audio that is encoded in a series of discrete time samples, + for some number of channels. + usage: + - entity ui: description: Traits related to UI delegation members: EntityProvider: - description: > - State updates from the UI element should include one or more - entity references. - usage: - - ui + versions: + "1": + description: > + State updates from the UI element should include one or more + entity references. + usage: + - ui MetadataProvider: - description: > - State updates from the UI element should include one or more - traits, with all appropriate properties filled. - usage: - - ui + versions: + "1": + description: > + State updates from the UI element should include one or more + traits, with all appropriate properties filled. + usage: + - ui EntityInfo: - description: > - The UI element should display relevant information about one - or more entities. - - - When choosing which information to display, take into account - - - - Context locale (e.g. any application-specific traits). - - Access mode (e.g. read vs. write). - - Available area (e.g. if Inline trait is also imbued). - usage: - - ui + versions: + "1": + description: > + The UI element should display relevant information about one + or more entities. + + + When choosing which information to display, take into account + + + - Context locale (e.g. any application-specific traits). + - Access mode (e.g. read vs. write). + - Available area (e.g. if Inline trait is also imbued). + usage: + - ui Browser: - description: > - The UI element supports choosing a subset of resources from a - set of candidate resources. - usage: - - ui + versions: + "1": + description: > + The UI element supports choosing a subset of resources from a + set of candidate resources. + usage: + - ui Singular: - description: > - The UI element is associated with a single entity. - usage: - - ui + versions: + "1": + description: > + The UI element is associated with a single entity. + usage: + - ui SingleUse: - description: > - The first state update from the UI element will be used by the - host and all subsequent updates will be ignored. The host may - destroy the UI element after this initial update. - usage: - - ui + versions: + "1": + description: > + The first state update from the UI element will be used by the + host and all subsequent updates will be ignored. The host may + destroy the UI element after this initial update. + usage: + - ui InPlace: - description: > - The initial state provided to the UI delegate includes a - container UI element that should be mutated by the delegate. - usage: - - ui + versions: + "1": + description: > + The initial state provided to the UI delegate includes a + container UI element that should be mutated by the delegate. + usage: + - ui Detached: - description: > - A new UI element should be emitted in the state object, not - yet attached to the UI hierarchy. The host is responsible for - attaching the UI element. - usage: - - ui + versions: + "1": + description: > + A new UI element should be emitted in the state object, not + yet attached to the UI hierarchy. The host is responsible for + attaching the UI element. + usage: + - ui Inline: - description: > - The UI element will be placed alongside other elements in a - layout of related elements. The UI element should be simple - and compact, assuming limited available screen space. - usage: - - ui + versions: + "1": + description: > + The UI element will be placed alongside other elements in a + layout of related elements. The UI element should be simple + and compact, assuming limited available screen space. + usage: + - ui Tabbed: - description: > - The UI element should be a new tab in a tabbed panel. - usage: - - ui + versions: + "1": + description: > + The UI element should be a new tab in a tabbed panel. + usage: + - ui uiPolicy: description: Policy traits related to UI delegation members: Managed: - description: > - A trait indicating that a UI element can be delegated if it - matches the supplied traits, taking into account context and - access mode. - usage: - - uiPolicy - properties: - exclusive: - type: boolean + versions: + "1": description: > - Determines if the manager exclusively handles data matching - the supplied trait set. + A trait indicating that a UI element can be delegated if it + matches the supplied traits, taking into account context and + access mode. + usage: + - uiPolicy + properties: + exclusive: + type: boolean + description: > + Determines if the manager exclusively handles data matching + the supplied trait set. - If True, then standard host controls should be disabled - in favour of manager delegated UI. For example, file system - browsers when determining where to load/save data. + If True, then standard host controls should be disabled + in favour of manager delegated UI. For example, file system + browsers when determining where to load/save data. - If False, then standard host controls can be presented in - addition to any custom manager UI. + If False, then standard host controls can be presented in + addition to any custom manager UI. specifications: @@ -729,330 +833,445 @@ specifications: Specifications for commonly encountered sound data types. members: Audio: - description: > - Any entity that holds audio data - usage: - - entity - traitSet: - - namespace: usage - name: Entity - - namespace: audio - name: Audio + versions: + "1": + description: > + Any entity that holds audio data + usage: + - entity + traitSet: + - namespace: usage + name: Entity + version: "1" + - namespace: audio + name: Audio + version: "1" SampledAudioResource: - description: > - Any entity that holds time-sampled audio data in an - independent resource. - usage: - - entity - traitSet: - - namespace: usage - name: Entity - - namespace: audio - name: Audio - - namespace: content - name: LocatableContent + versions: + "1": + description: > + Any entity that holds time-sampled audio data in an + independent resource. + usage: + - entity + traitSet: + - namespace: usage + name: Entity + version: "1" + - namespace: audio + name: Audio + version: "1" + - namespace: content + name: LocatableContent + version: "1" application: description: > Specifications for entities that undertake specific functional roles. members: Workfile: - description: > - The entity is the product of some manual task or process, - that often defines how to produce or derive other data. - - - Common examples are the documents opened, worked on and saved - by artists using DCC tools to create models/images/etc. - usage: - - entity - traitSet: - - namespace: usage - name: Entity - - namespace: application - name: Work - - namespace: content - name: LocatableContent + versions: + "1": + description: > + The entity is the product of some manual task or process, + that often defines how to produce or derive other data. + + + Common examples are the documents opened, worked on and saved + by artists using DCC tools to create models/images/etc. + usage: + - entity + traitSet: + - namespace: usage + name: Entity + version: "1" + - namespace: application + name: Work + version: "1" + - namespace: content + name: LocatableContent + version: "1" threeDimensional: description: > Specifications for commonly encountered three-dimensional data types. members: Spatial: - description: > - Any entity that holds three-dimensional data. - usage: - - entity - traitSet: - - namespace: usage - name: Entity - - namespace: threeDimensional - name: Spatial + versions: + "1": + description: > + Any entity that holds three-dimensional data. + usage: + - entity + traitSet: + - namespace: usage + name: Entity + version: "1" + - namespace: threeDimensional + name: Spatial + version: "1" SceneResource: - description: > - Any entity that holds three-dimensional data in an independent - resource. - usage: - - entity - traitSet: - - namespace: usage - name: Entity - - namespace: threeDimensional - name: Spatial - - namespace: content - name: LocatableContent + versions: + "1": + description: > + Any entity that holds three-dimensional data in an independent + resource. + usage: + - entity + traitSet: + - namespace: usage + name: Entity + version: "1" + - namespace: threeDimensional + name: Spatial + version: "1" + - namespace: content + name: LocatableContent + version: "1" SceneGeometryResource: - description: > - Any entity that holds three-dimensional data describing one or - more objects, in an independent resource. - usage: - - entity - traitSet: - - namespace: usage - name: Entity - - namespace: threeDimensional - name: Spatial - - namespace: threeDimensional - name: Geometry - - namespace: content - name: LocatableContent + versions: + "1": + description: > + Any entity that holds three-dimensional data describing one or + more objects, in an independent resource. + usage: + - entity + traitSet: + - namespace: usage + name: Entity + version: "1" + - namespace: threeDimensional + name: Spatial + version: "1" + - namespace: threeDimensional + name: Geometry + version: "1" + - namespace: content + name: LocatableContent + version: "1" SceneCameraResource: - description: > - Any entity that holds a digital representation of a camera, in - an independent resource. - usage: - - entity - traitSet: - - namespace: usage - name: Entity - - namespace: threeDimensional - name: Spatial - - namespace: imaging - name: Camera - - namespace: content - name: LocatableContent + versions: + "1": + description: > + Any entity that holds a digital representation of a camera, in + an independent resource. + usage: + - entity + traitSet: + - namespace: usage + name: Entity + version: "1" + - namespace: threeDimensional + name: Spatial + version: "1" + - namespace: imaging + name: Camera + version: "1" + - namespace: content + name: LocatableContent + version: "1" SceneLightingResource: - description: > - Any entity that holds three-dimensional data describing scene - or object lighting, in an independent resource. - usage: - - entity - traitSet: - - namespace: usage - name: Entity - - namespace: threeDimensional - name: Spatial - - namespace: threeDimensional - name: Lighting - - namespace: content - name: LocatableContent + versions: + "1": + description: > + Any entity that holds three-dimensional data describing scene + or object lighting, in an independent resource. + usage: + - entity + traitSet: + - namespace: usage + name: Entity + version: "1" + - namespace: threeDimensional + name: Spatial + version: "1" + - namespace: threeDimensional + name: Lighting + version: "1" + - namespace: content + name: LocatableContent + version: "1" ShaderResource: - description: > - Any entity that holds a parameterised algorithm that is - evaluated during processing of a three-dimensional scene, in - an independent resource. - usage: - - entity - traitSet: - - namespace: usage - name: Entity - - namespace: threeDimensional - name: Spatial - - namespace: threeDimensional - name: Shader - - namespace: content - name: LocatableContent + versions: + "1": + description: > + Any entity that holds a parameterised algorithm that is + evaluated during processing of a three-dimensional scene, in + an independent resource. + usage: + - entity + traitSet: + - namespace: usage + name: Entity + version: "1" + - namespace: threeDimensional + name: Spatial + version: "1" + - namespace: threeDimensional + name: Shader + version: "1" + - namespace: content + name: LocatableContent + version: "1" IESProfileResource: - description: > - Any entity that holds an IES lighting profile, as defined by - IES-LM-63, in an independent resource. See: - - https://store.ies.org/product/lm-63-19-approved-method-ies-standard-file-format-for-the-electronic-transfer-of-photometric-data-and-related-information - usage: - - entity - traitSet: - - namespace: usage - name: Entity - - namespace: threeDimensional - name: Spatial - - namespace: threeDimensional - name: IESProfile - - namespace: content - name: LocatableContent + versions: + "1": + description: > + Any entity that holds an IES lighting profile, as defined by + IES-LM-63, in an independent resource. See: + + https://store.ies.org/product/lm-63-19-approved-method-ies-standard-file-format-for-the-electronic-transfer-of-photometric-data-and-related-information + usage: + - entity + traitSet: + - namespace: usage + name: Entity + version: "1" + - namespace: threeDimensional + name: Spatial + version: "1" + - namespace: threeDimensional + name: IESProfile + version: "1" + - namespace: content + name: LocatableContent + version: "1" twoDimensional: description: Specifications for commonly encountered image types. members: Image: - description: Any entity that holds two-dimensional data - usage: - - entity - traitSet: - - namespace: usage - name: Entity - - namespace: twoDimensional - name: Image + versions: + "1": + description: Any entity that holds two-dimensional data + usage: + - entity + traitSet: + - namespace: usage + name: Entity + version: "1" + - namespace: twoDimensional + name: Image + version: "1" BitmapImageResource: - description: > - Any entity that holds two-dimensional data as a pixel grid in - an independent resource. - usage: - - entity - traitSet: - - namespace: usage - name: Entity - - namespace: twoDimensional - name: Image - - namespace: twoDimensional - name: PixelBased - - namespace: content - name: LocatableContent + versions: + "1": + description: > + Any entity that holds two-dimensional data as a pixel grid in + an independent resource. + usage: + - entity + traitSet: + - namespace: usage + name: Entity + version: "1" + - namespace: twoDimensional + name: Image + version: "1" + - namespace: twoDimensional + name: PixelBased + version: "1" + - namespace: content + name: LocatableContent + version: "1" BitmapImageResourceCollection: - description: > - An entity that holds a collection of bitmap image resources - in some external resource. - usage: - - entity - traitSet: - - namespace: usage - name: Entity - - namespace: twoDimensional - name: ImageCollection - - namespace: twoDimensional - name: PixelBased - - namespace: content - name: LocatableContent + versions: + "1": + description: > + An entity that holds a collection of bitmap image resources + in some external resource. + usage: + - entity + traitSet: + - namespace: usage + name: Entity + version: "1" + - namespace: twoDimensional + name: ImageCollection + version: "1" + - namespace: twoDimensional + name: PixelBased + version: "1" + - namespace: content + name: LocatableContent + version: "1" BitmapImageResourceSequence: - description: > - An entity that holds a collection of image resources, where - those image resources are ordered into a bounded list of - frames. - usage: - - entity - traitSet: - - namespace: usage - name: Entity - - namespace: twoDimensional - name: ImageCollection - - namespace: twoDimensional - name: PixelBased - - namespace: timeDomain - name: FrameRanged - - namespace: content - name: LocatableContent + versions: + "1": + description: > + An entity that holds a collection of image resources, where + those image resources are ordered into a bounded list of + frames. + usage: + - entity + traitSet: + - namespace: usage + name: Entity + version: "1" + - namespace: twoDimensional + name: ImageCollection + version: "1" + - namespace: twoDimensional + name: PixelBased + version: "1" + - namespace: timeDomain + name: FrameRanged + version: "1" + - namespace: content + name: LocatableContent + version: "1" PlanarBitmapImageResource: - description: > - Any entity that holds two-dimensional data as a pixel grid - with a single sample per pixel, in an independent resource. - usage: - - entity - traitSet: - - namespace: usage - name: Entity - - namespace: twoDimensional - name: Image - - namespace: twoDimensional - name: PixelBased - - namespace: twoDimensional - name: Planar - - namespace: content - name: LocatableContent + versions: + "1": + description: > + Any entity that holds two-dimensional data as a pixel grid + with a single sample per pixel, in an independent resource. + usage: + - entity + traitSet: + - namespace: usage + name: Entity + version: "1" + - namespace: twoDimensional + name: Image + version: "1" + - namespace: twoDimensional + name: PixelBased + version: "1" + - namespace: twoDimensional + name: Planar + version: "1" + - namespace: content + name: LocatableContent + version: "1" DeepBitmapImageResource: - description: > - Any entity that holds two-dimensional data as a pixel grid - with multiple depth samples per pixel, in an independent - resource. - usage: - - entity - traitSet: - - namespace: usage - name: Entity - - namespace: twoDimensional - name: Image - - namespace: twoDimensional - name: PixelBased - - namespace: twoDimensional - name: Deep - - namespace: content - name: LocatableContent + versions: + "1": + description: > + Any entity that holds two-dimensional data as a pixel grid + with multiple depth samples per pixel, in an independent + resource. + usage: + - entity + traitSet: + - namespace: usage + name: Entity + version: "1" + - namespace: twoDimensional + name: Image + version: "1" + - namespace: twoDimensional + name: PixelBased + version: "1" + - namespace: twoDimensional + name: Deep + version: "1" + - namespace: content + name: LocatableContent + version: "1" lifecycle: - description: + description: > Specifications that are concerned with describing aspects of the life cycle of an entity, such as versioning. members: EntityVersionsRelationship: - description: > - A relationship between alternate versions of the same logical - entity. This may include unstable versions such as "latest". - Results will be ordered with the most relevant first. This - is usually reverse chronological order. - traitSet: - - namespace: usage - name: Relationship - - namespace: relationship - name: Unbounded - - namespace: lifecycle - name: Version - usage: - - relationship + versions: + "1": + description: > + A relationship between alternate versions of the same logical + entity. This may include unstable versions such as "latest". + Results will be ordered with the most relevant first. This + is usually reverse chronological order. + usage: + - relationship + traitSet: + - namespace: usage + name: Relationship + version: "1" + - namespace: relationship + name: Unbounded + version: "1" + - namespace: lifecycle + name: Version + version: "1" StableEntityVersionsRelationship: - description: > - Retrieves references to alternate stable versions of the same - logical entity. This will not include unstable versions such - as "latest". - traitSet: - - namespace: usage - name: Relationship - - namespace: relationship - name: Unbounded - - namespace: lifecycle - name: Version - - namespace: lifecycle - name: Stable - usage: - - relationship + versions: + "1": + description: > + Retrieves references to alternate stable versions of the same + logical entity. This will not include unstable versions such + as "latest". + usage: + - relationship + traitSet: + - namespace: usage + name: Relationship + version: "1" + - namespace: relationship + name: Unbounded + version: "1" + - namespace: lifecycle + name: Version + version: "1" + - namespace: lifecycle + name: Stable + version: "1" StableReferenceRelationship: - description: > - Retrieves a stable reference to the supplied entity that is - guaranteed to always point to that specific entity and version. - - - This will apply and remove any dynamic behaviour such as - "latest version" or other context-sensitive behaviour. The - result may be used as a persistent bookmark (such as in an - "open recent" menu), or to snapshot the specific entities used - by a process for archival. - traitSet: - - namespace: usage - name: Relationship - - namespace: relationship - name: Singular - - namespace: lifecycle - name: Stable - usage: - - relationship + versions: + "1": + description: > + Retrieves a stable reference to the supplied entity that is + guaranteed to always point to that specific entity and version. + + + This will apply and remove any dynamic behaviour such as + "latest version" or other context-sensitive behaviour. The + result may be used as a persistent bookmark (such as in an + "open recent" menu), or to snapshot the specific entities used + by a process for archival. + usage: + - relationship + traitSet: + - namespace: usage + name: Relationship + version: "1" + - namespace: relationship + name: Singular + version: "1" + - namespace: lifecycle + name: Stable + version: "1" representation: description: > Specifications for alternative presentations of a specific entity. members: OriginalRepresentationRelationship: - description: > - Defines the definitive representation of an entity. - usage: - - relationship - traitSet: - - namespace: usage - name: Relationship - - namespace: relationship - name: Singular - - namespace: representation - name: Original + versions: + "1": + description: > + Defines the definitive representation of an entity. + usage: + - relationship + traitSet: + - namespace: usage + name: Relationship + version: "1" + - namespace: relationship + name: Singular + version: "1" + - namespace: representation + name: Original + version: "1" ProxyRepresentationRelationship: - description: > - Defines alternative representations of an entity that depict - the same logical content, but at different quality or scale. - usage: - - relationship - traitSet: - - namespace: usage - name: Relationship - - namespace: representation - name: Proxy + versions: + "1": + description: > + Defines alternative representations of an entity that depict + the same logical content, but at different quality or scale. + usage: + - relationship + traitSet: + - namespace: usage + name: Relationship + version: "1" + - namespace: representation + name: Proxy + version: "1"