Information technology — SEDRIS —
Part 1:  Functional specification

7 DRM class constraints

7.1 Introduction

7.1.1 Topics

Table 7.1 lists the topics of this clause.

Table 7.1 — Topics

7 DRM class constraints

7.1 Introduction

7.1.1 Topics

7.1.2 Description

7.2 Constraints

7.2.1 Overview

7.2.2 Animation related organizing principle

7.2.3 Characteristics of <DRM Property Table Reference>

7.2.4 Colour mapping constraints

7.2.5 Constraints on associates

7.2.6 Constraints on components

7.2.7 Contained edge constraints

7.2.8 Contained node constraints

7.2.9 Continuous LOD constraints

7.2.10 Cylindrical structure

7.2.11 Distinct <DRM Geometric Centre>

7.2.12 Distinct link objects

7.2.13 Distinct time significance

7.2.14 <DRM Classification Data> constraints

7.2.15 <DRM Colour Table> size

7.2.16 <DRM Conformal Behaviour> constraints

7.2.17 <DRM Control Link> constraints

7.2.18 <DRM Environment Root> SRF

7.2.19 <DRM Face Direction> levels 0 - 3

7.2.20 <DRM Feature Edge> constraints

7.2.21 <DRM Finite Element Mesh> structure

7.2.22 <DRM Image Anchor> SRF

7.2.23 <DRM Linear Geometry> structure

7.2.24 <DRM LSR Transformation> components

7.2.25 <DRM Model> SRF

7.2.26 <DRM Polyhedron> structure

7.2.27 <DRM Presentation Domain> constraints

7.2.28 <DRM Primitive Summary Item> constraints

7.2.29 <DRM Property> constraints

7.2.30 <DRM Property Characteristic> constraints

7.2.31 <DRM Property Grid> constraints

7.2.32 <DRM Property Set Table> size

7.2.33 <DRM Reference Surface> constraints

7.2.34 <DRM Stamp Behaviour> constraints

7.2.35 <DRM Table Property Description> constraints

7.2.36 Edges bordering faces

7.2.37 Face ring edge consistency

7.2.38 Faces bordering volumes

7.2.39 General axis constraints

7.2.40 Hierarchy summary constraints

7.2.41 Homogeneous light rendering properties

7.2.42 Image mapping functions and texture coordinates

7.2.43 Index codes within tables

7.2.44 Inheritance rule for <DRM Location>

7.2.45 LOD related organizing principle

7.2.46 Mandatory metadata

7.2.47 Model reference type constraints

7.2.48 Nested primitive geometry

7.2.49 Non-cyclic aggregations

7.2.50 Non-empty <DRM Environment Root> instance

7.2.51 Non-empty <DRM Model> instance

7.2.52 Non-overlapping DRM class summary items

7.2.53 Non-selfoverlapping perimeter data locations

7.2.54 Octant related organizing principle

7.2.55 Parallelepiped structure

7.2.56 Perimeter related organizing principle

7.2.57 Polygon as bounded plane

7.2.58 Precedence of <DRM Property Set Index>

7.2.59 Publishable object

7.2.60 Quadrant related organizing principle

7.2.61 Required reference vector location

7.2.62 Separating plane organizing principle

7.2.63 Spatial axis constraints

7.2.64 Spatial index related organizing principle

7.2.65 State related organizing principle

7.2.66 Time dependency

7.2.67 Time interval calculation

7.2.68 Union organizing principle

7.2.69 Valid node/edge relationships

7.2.70 Variable meaning constraints

7.2.71 Volume shell face consistency

7.1.2 Description

This clause specifies the constraints that specify the rules for using instances of the DRM classes. These constraints describe the allowable behaviours and relationships beyond those specified by the allowable association, component, and aggregate relationships.

7.2 Constraints

7.2.1 Overview

The constraints stated below specify the restrictions on field values and associations that may apply when creating and modifying DRM class instances. Since many of these constraints apply to multiple DRM classes, they are specified here and only referenced in 6.2 DRM class specifications.

7.2.2 Animation related organizing principle

For every <DRM Animation Related Geometry> instance A with N <DRM Geometry Hierarchy> components, the following shall hold:

  1. No <DRM Geometry Hierarchy> instance shall appear more than once as a component of A.
  2. For every <DRM Animation Behaviour> component B of A:
    1. The beginning_frame field of  B shall have a value in the range 1..N.
    2. The ending_frame field of B shall have a value in the range beginning_frame..N.

7.2.3 Characteristics of <DRM Property Table Reference>

For any <DRM Property Table Reference> instance R specifying a <DRM Property Table> instance T:

  1. T shall be a component of a <DRM Data Table Library> instance.
  2. T shall have a <DRM Axis> component, the axis_type of which corresponds to that specified by R.
  3. The <DRM Axis> instance thus specified shall have axis_value_count greater than or equal to (index_on_axis + 1), where index_on_axis is that specified by R.

7.2.4 Colour mapping constraints

The colour_mapping field of a <DRM Colour> instance shall not be empty.

In addition,

  1. The PRIMARY and SECONDARY flags may only be used for DRM objects with <DRM Light Rendering Properties> components.
  2. The PRIMARY_LIGHT_RENDERING_BEHAVIOUR flag may not be combined with any other use of the 5.2.8.2 Colour_Mapping data type.
  3. The SECONDARY_LIGHT_RENDERING_BEHAVIOUR flag may not be combined with any other use of the 5.2.8.2 Colour_Mapping data type.

7.2.5 Constraints on associates

DRM objects are constrained in taking associate DRM objects as follows:

  1. Let M be a <DRM Model> instance.
    1. Let M have a <DRM Feature Model> component F, and let F1 be a <DRM Feature Representation> instance in the component tree of F and T be a <DRM Feature Topology> instance in the component tree of F.
      1. F1 shall not associate to a <DRM Feature Representation> instance outside the component tree of F.
      2. No <DRM Feature Representation> instance outside the component tree of F shall associate to F1.
      3. F1 shall not associate to a <DRM Feature Topology> instance outside the component tree of F.
      4. No <DRM Feature Topology> instance outside the component tree of F shall associate to F1.
      5. T shall not associate to a <DRM Feature Topology> instance outside the component tree of F.
      6. No <DRM Feature Topology> instance outside the component tree of F shall associate to T.
    2. Let M have a <DRM Geometry Model> component G, and let G1 be a <DRM Geometry Representation> instance in the component tree of G and T be a <DRM Geometry Topology> instance in the component tree of G.
      1. G1 shall not associate to a <DRM Geometry Representation> instance outside the component tree of G.
      2. No <DRM Geometry Representation> instance outside the component tree of G shall associate to G1.
      3. G1 shall not associate to a <DRM Geometry Topology> instance outside the component tree of G.
      4. No <DRM Geometry Topology> instance outside the component tree of G shall associate to G1.
      5. T shall not associate to a <DRM Geometry Topology> instance outside the component tree of G.
      6. No <DRM Geometry Topology> instance outside the component tree of G shall associate to T.
    3. Let M have both a <DRM Feature Model> component F and a <DRM Geometry Model> component G. Let F1 be a <DRM Feature Representation> instance in the component tree of F and let G1 be a <DRM Geometry Representation> instance in the component tree of G.
      1. F1 shall not associate to a <DRM Geometry Representation> instance outside the component tree of G.
      2. No <DRM Geometry Representation> instance outside the component tree of G shall associate to F1.
      3. G1 shall not associate to a <DRM Feature Representation> instance outside the component tree of F.
      4. No <DRM Feature Representation> instance outside the component tree of F shall associate to G1.
    4. Let M have a <DRM Interface Template> component T.
      1. For every <DRM Variable> instance V in the component tree of M, V shall associate exactly once with T.
      2. If V is a <DRM Variable> instance that does not appear in the component tree of M, T shall not associate with V.
  2. Let R be a <DRM Environment Root> instance.
    1. Let R2 be a <DRM Environment Root> instance, where the srf_context_info of R does not match that of R2.
      1. Let R have a <DRM Feature Hierarchy> component F, and let X be a <DRM Feature Representation> instance in the component tree of F. Let R2 have a <DRM Feature Hierarchy> component F2, and let X2 be a <DRM Feature Representation> instance in the component tree of F2. X shall not associate to X2, and X2 shall not associate to X.
      2. Let R have a <DRM Geometry Hierarchy> component G, and let Y be a <DRM Geometry Representation> instance in the component tree of G. Let R2 have a <DRM Geometry Hierarchy> component G2, and let Y2 be a <DRM Geometry Representation> instance in the component tree of G2. Y shall not associate to Y2, and Y2 shall not associate to Y.
      3. Let R have a <DRM Feature Hierarchy> component F, and let X be a <DRM Feature Representation> instance in the component tree of F. Let R2 have a <DRM Geometry Hierarchy> component G2, and let Y2 be a <DRM Geometry Representation> instance in the component tree of G2. X shall not associate to Y2, and Y2 shall not associate to X.
    2. Let R have a <DRM Interface Template> component T.
      1. For every <DRM Variable> instance V in the component tree of R, V shall associate exactly once with T.
      2. If V is a <DRM Variable> instance that does not appear in the component tree of R, T shall not associate with V.

7.2.6 Constraints on components

DRM objects are constrained in taking component DRM objects as follows:

  1. Let M be a <DRM Model> instance.
    1. Let T be a <DRM Property Table> instance. If T appears in the component tree of M, T shall not appear in the component tree of a <DRM Data Table Library> instance.
    2. Let X be a <DRM Property Grid> instance that is not a component of a <DRM Data Table Library> instance, where X appears in the component tree of M.
      1. X shall not appear in the component tree of a <DRM Model> instance other than M.
      2. X shall not appear in the component tree of a <DRM Environment Root> instance.
    3. Let V be a <DRM Variable> instance, where V appears in the component tree of M.
      1. V shall not appear in the component tree of a <DRM Model> instance other than M.
      2. V shall not appear in the component tree of a <DRM Environment Root> instance.
      3. M shall have a <DRM Interface Template> component, which shall comply with 7.2.5 Constraints on associates.
    4. Let X be an instance of a class other than <DRM Property Grid> or <DRM Symbol>, where X appears in the component tree of M.
      1. X shall not appear in the component tree of a <DRM Model> instance other than M.
      2. X shall not appear in the component tree of a <DRM Environment Root> instance.
  2. Let R be a <DRM Environment Root> instance.
    1. Let T be a <DRM Property Table> instance. If T appears in the component tree of R, T shall not appear in the component tree of a <DRM Data Table Library> instance.
    2. Let X be an instance of <DRM Property Grid> that is not a component of a <DRM Data Table Library> instance, where X appears in the component tree of R.
      1. X shall not appear in the component tree of a <DRM Environment Root> instance other than R.
      2. X shall not appear in the component tree of a <DRM Model> instance.
    3. Let V be a <DRM Variable> instance, where V appears in the component tree of R.
      1. V shall not appear in the component tree of a <DRM Model> instance other than R.
      2. V shall not appear in the component tree of a <DRM Environment Root> instance.
      3. R shall have a <DRM Interface Template> component, which shall comply with 7.2.5 Constraints on associates.
    4. Let X be an instance of a class other than <DRM Property Grid> or <DRM Symbol>, where X appears in the component tree of R.
      1. X shall not appear in the component tree of a <DRM Model> instance.
      2. If X appears in the component tree of another <DRM Environment Root> instance R2, the srf_context_info of R2 shall match that of R.

7.2.7 Contained edge constraints

The following constraints apply to instances of <DRM Feature Volume>/<DRM Geometry Volume>, respectively:

  1. A <DRM Feature Volume> instance V shall have the following relationship with its associated <DRM Feature Edge> instances, if any exist:
    1. At any feature topology level, if V is associated with any <DRM Feature Edge> instance E, E shall lie completely within the external shell of V, if any, and shall not lie within any of the internal shells of V, if any.
    2. At feature topology levels 5 and higher, if a <DRM Feature Edge> instance E lies within the boundaries of V, E shall be associated with V.
    3. At any feature topology level, if no <DRM Feature Edge> instances lie within its boundaries, V shall not be associated with any <DRM Feature Edge> instances.
  2. A <DRM Geometry Volume> instance V shall have the following relationship with its associated <DRM Geometry Edge> instances, if any exist:
    1. At any geometry topology level, if V is associated with any <DRM Geometry Edge> instance E, E shall lie completely within the interior of V.
    2. At geometry topology levels 5 and higher, if a <DRM Geometry Edge> instance E lies completely within the interior of V, E shall be associated with V.
    3. At any geometry topology level, if no <DRM Geometry Edge> instances lie completely within its interior, V shall not be associated with any <DRM Geometry Edge> instances.

7.2.8 Contained node constraints

The following constraints apply to instances of <DRM Feature Node>/<DRM Geometry Node> that are contained within an instance of <DRM Feature Face>/<DRM Geometry Face> or <DRM Feature Volume>/<DRM Geometry Volume>, respectively.:

  1. A <DRM Feature Face> instance F shall have the following relationship with its associated <DRM Feature Node> instances, if any exist.
    1. At any feature topology level, if F is associated with any <DRM Feature Node> instance N, N shall lie within the external ring of F, if any, and shall not lie within any of the internal rings of F, if any.
    2. At feature topology levels 3 and higher, if a <DRM Feature Node> instance N lies within the boundaries of F, N shall be associated with F.
    3. At any feature topology level, if no <DRM Feature Node> instances lie within the boundaries of F, F shall not be associated with any <DRM Feature Node> instances.
  2. A <DRM Feature Volume> instance V shall have the following relationship with its associated <DRM Feature Node> instances, if any exist.
    1. At any feature topology level, if V is associated with any <DRM Feature Node> instance N, N shall lie completely within the external shell of V, if any, and shall not lie within any of the internal shells of V, if any.
    2. At feature topology levels 5 and higher, if a <DRM Feature Node> instance N lies within the boundaries of V, N shall be associated with V.
    3. At any feature topology level, if no <DRM Feature Node> instances lie within the boundaries of V, V shall not be associated with any <DRM Feature Node> instances.
  3. A <DRM Geometry Face> instance F shall have the following relationship with its associated <DRM Geometry Node> instances, if any.
    1. At any geometry topology level, if F is associated with any <DRM Geometry Node> instances N, N shall lie within the interior of F.
    2. At geometry topology levels 3 and higher, if a <DRM Geometry Node> instance N lies within the interior of F, N shall be associated with F.
    3. At any geometry topology level, if no <DRM Geometry Node> instances lie within the boundaries of F, F shall not be associated with any <DRM Geometry Node> instances.
  4. A <DRM Geometry Volume> instance V shall have the following relationship with its associated <DRM Geometry Node> instances, if any exist.
    1. At any geometry topology level, if V is associated with any <DRM Geometry Node> instance N, N shall lie within the interior of V.
    2. At geometry topology levels 5 and higher, if a <DRM Geometry Node> instance N lies within the interior of V, N shall be associated with V.
    3. At any geometry topology level, if no <DRM Geometry Node> instances lie within the interior of V, V shall not be associated with any <DRM Geometry Node> instances.

7.2.9 Continuous LOD constraints

The following constraints apply:

  1. <DRM Continuous LOD Related Geometry> instances can be used only in the component tree of a <DRM Environment Root> instance.
  2. A <DRM Primitive Geometry> instance that is within the component tree of a <DRM Continuous LOD Related Geometry>  instance shall not have a <DRM Union Of Primitive Geometry> component

7.2.10 Cylindrical structure

For a <DRM Cylindrical Volume Extent> instance C, the following conditions shall hold:

  1. The <DRM Reference Vector> components of C shall be perpendicular to one another, and shall comply with restrictions imposed in the specification of the <DRM Cylindrical Volume Extent> class on their vector_type field values.
  2. If a <DRM Reference Vector> component of C specifies a <DRM Location> subclass component L, L shall be the <DRM Location 3D> instance specified by the volume context in which C appears.

7.2.11 Distinct <DRM Geometric Centre>

If a <DRM Aggregate Geometry> instance specifies more than one <DRM Geometric Centre> component, each shall specify a different value for its meaning field.

7.2.12 Distinct link objects

The following constraints apply to link objects:

  1. Under any single <DRM Aggregate Feature> instance or <DRM Aggregate Geometry> instance, the link objects (if any) shall have non-identical field values or components, as appropriate. In the case of <DRM Separating Plane Related Geometry> instance, this constraint applies to the link objects of the <DRM Separating Plane Relations> components of the aggregate, as the aggregate itself does not have link objects.
  2. Under any single topology hierarchy, whether a <DRM Feature Topology Hierarchy> instance or a <DRM Geometry Topology Hierarchy> instance, the link objects shall have non-identical field values or components, as appropriate.
  3. Under any single model instance, whether a <DRM Feature Model Instance> instance or a <DRM Geometry Model Instance> instance, the index field values of the <DRM Model Instance Template Index> link objects shall be distinct.

7.2.13 Distinct time significance

For any instance of <DRM Transmittal Root> or <DRM Environment Root>, no two <DRM Base Time Data> components shall specify the same time_significance value.

7.2.14 <DRM Classification Data> constraints

For a <DRM Union of Features> instance F:

  1. If F has a directly attached <DRM Classification Data> component, the  union_reason field of F shall not have value OTHER.
  2. If F has an inherited <DRM Classification Data> component, the  union_reason field of F shall not have value OTHER.
  3. Otherwise,  the  union_reason field of F shall have value OTHER.

For a <DRM Union of Geometry> instance G:

  1. If G has a directly attached <DRM Classification Data> component, the  union_reason field of G shall not have value OTHER.
  2. If G has an inherited <DRM Classification Data> component, the  union_reason field of G shall not have value OTHER.
  3. Otherwise, the  union_reason field of G shall have value OTHER.

7.2.15 <DRM Colour Table> size

For a given <DRM Colour Table Group> instance G with table_size = k, each <DRM Colour Table> component T of G shall have k <DRM Primitive Colour> components. <DRM Colour Table> components of a <DRM Colour Table Group> instance are free to have different types of <DRM Primitive Colour> components from other <DRM Colour Table> components.

EXAMPLE  Some components use <DRM Specular Colour> instances; some do not.

7.2.16 <DRM Conformal Behaviour> constraints

For every <DRM Conformal Behaviour> instance C, the following constraints shall apply.

  1. Where C is a component of a <DRM Geometry Hierarchy> instance G, one of the following shall apply:
    1. If G is part of the component tree of a <DRM Environment Root> instance, G shall be specified within a context in which a <DRM Reference Surface> instance R applies, where the (possibly qualified) classification of C matches that of R.
    2. If G is part of the component tree of a <DRM Model> instance M, any <DRM Geometry Model Instance> instance or <DRM Feature Model Instance> instance that instantiates M shall be specified in a context in which a <DRM Reference Surface> instance R applies, where the (possibly qualified) classification of C matches that of R.
    3. C shall not be a component of a <DRM Geometry Hierarchy> instance G that does not comply with either a.1 or a.2.
  2. If C is a component of a <DRM Point> instance P, any <DRM Union Of Primitive Geometry> instance of which P is a component shall comply with a.
  3. If C is a component of a <DRM Vertex> instance V, every <DRM Union Of Primitive Geometry> instance U for which V appears in the component tree of U shall comply with a.

7.2.17 <DRM Control Link> constraints

For any given <DRM Control Link> instance with one or more index fields containing non-zero values,  there shall be a corresponding <DRM Expression> component that is referenced by each non-zero index field value.

For any <DRM Control Link> instance containing an upper and lower bound index field both of whose values are non-zero, the value produced by the <DRM Expression> component for the lower bound shall be less than or equal to the value produced by the <DRM Expression> component for the upper bound.

7.2.18 <DRM Environment Root> SRF

Consider a <DRM Transmittal Root> instance TR having one or more <DRM Environment Root> instances as components:

  1. For TR, no two <DRM Environment Root> instances may have identical SRF parameters.
  2. All <DRM Location> instances appearing in the hierarchy rooted at a given <DRM Environment Root> instance shall be specified within the SRF  of that <DRM Environment Root> instance, unless such <DRM Location> instances fall within the scope of a DRM object that specifies its own SRF , such as a <DRM Property Grid> instance or a <DRM Image Anchor> instance.
  3. No <DRM Location> instances under a <DRM Environment Root> instance may be invalid within that SRF ; they shall be either valid or extended.

7.2.19 <DRM Face Direction> levels 0 - 3

At feature topology levels 0 through 3, the front field of <DRM Face Direction> shall always be TRUE.

7.2.20 <DRM FeatureEdge> constraints

The following restrictions apply:

  1. The <DRM Location> instances within a <DRM Feature Edge> instance shall be distinct; that is, no two <DRM Location> instances may have the same position in space.
  2. <DRM Feature Edge> instances may meet only at <DRM Feature Node> instances, and <DRM Feature Face> instances may meet only along one or more <DRM Feature Edge> instances.
  3. At feature topology level 2 or higher, no <DRM Feature Edge> instance may intersect with or overlap another <DRM Feature Edge> instance.
  4. At feature topology level 3, each <DRM Feature Edge> instance forms part of the boundaries of exactly two <DRM Feature Face> instances.
  5. At feature topology level 4, at least one <DRM Feature Edge> instance forms part of the boundary of more than two <DRM Feature Face> instances.
  6. At feature topology level 5, if a <DRM Feature Edge> instance E is located within a <DRM Feature Volume> instance V, E shall associate to V.

7.2.21 <DRM Finite Element Mesh> structure

For a <DRM Finite Element Mesh> instance F with a <DRM Mesh Face Table> component M, the following conditions shall hold:

  1. Each <DRM Vertex> component of F shall appear exactly once as a component of F.
  2. No two <DRM Vertex> components of F shall occupy the same position in space.
  3. If F has a <DRM Property Table> component P such that P’s <DRM Classification Data> component classifies P as an ECC_MESH_NODE_PROPERTY_SET, P shall be the only <DRM Property Table component of F that is so classified, and shall have the structure specified in the definition of the <DRM Finite Element Mesh> class for a <DRM Property Table> instance of its classification.
  4. If F has a <DRM Property Table> component P such that P’s <DRM Classification Data> component classifies P as an ECC_MESH_FACE_PROPERTY_SET, P shall be the only <DRM Property Table> component of F that is so classified, and shall have the structure specified in the definition of the <DRM Finite Element Mesh> class for a <DRM Property Table> instance of its classification.
  5. If F has a <DRM Property Table> component P such that P’s <DRM Classification Data> component classifies P as an ECC_MESH_SOLID_SET, P shall be the only <DRM Property Table> component of F that is so classified, and shall have the structure specified in the definition of the <DRM Finite Element Mesh> class for a <DRM Property Table> instance of its classification.
  6. If F has a <DRM Property Table> component P such that P’s <DRM Classification Data> component classifies P as an ECC_MESH_SOLID_PROPERTY_SET, P shall be the only <DRM Property Table> component of F that is so classified, and shall have the structure specified in the definition of the <DRM Finite Element Mesh> class for a <DRM Property Table> instance of its classification.

7.2.22 <DRM Image Anchor> SRF

Consider a <DRM Image Anchor> instance X.

  1. The <DRM Location> components of X shall be valid or extended as allowed by the SRF specified by the srf_context_info field of X.
  2. The <DRM Location> components of X shall specify distinct coordinate values that shall not be collinear.
  3. X shall be either a component of one or more <DRM Image> instances or of one or more <DRM Image Mapping Function> instances, but not both.
  4. If X is a component of a <DRM Image Mapping Function> instance F, and if F appears within the context of some SRF  S, the following shall apply.
    1. The srf_context_info field of X shall specify the same SRF as S.
    2. If X specifies a non-planar projection, the <DRM Location> components of X shall specify the endpoints of orthogonal axes.

7.2.23 <DRM Linear Geometry> structure

For a <DRM Linear Geometry> instance G, the following conditions shall hold:

  1. Each <DRM Vertex> component of G shall appear exactly once as a component of G.
  2. No two <DRM Vertex> components of G shall occupy the same position in space.
  3. If G is a <DRM Arc> instance, the <DRM Location> component of G shall not occupy the same position in space as any of the <DRM Vertex> components of G.
  4. For any <DRM Geometry Edge> instance E associated with G, the <DRM Geometry Node> instances forming the endpoints of E shall be associated with <DRM Vertex> components of G.

7.2.24 <DRM LSR Transformation> components

A <DRM LSR Transformation> instance L shall have a <DRM Local 4x4> component, an ordered set of <DRM LSR Transformation Step> components, or both. If L has both a <DRM Local 4x4> component and a set of <DRM LSR Transformation Step> components, the ordered set of <DRM LSR Transformation Step> components shall be mathematically equivalent to the <DRM Local 4x4> component. If a <DRM LSR Transformation> instance is specified by a <DRM Local 4x4> component only, it shall be possible to express the <DRM LSR Transformation> instance as an ordered set of <DRM LSR Transformation Step> components.

7.2.25 <DRM Model> SRF

The following constraints apply:

  1. Consider a <DRM Model> instance M specified in an SRF other than LSR.
    1. M shall be instanced only by <DRM Geometry Model Instance> and/or <DRM Feature Model Instance> instances specified in a matching SRF, and
    2. The has_moving_parts field of M shall be set to FALSE.
  2. Consider a <DRM Model> instance M specified in an LSR SRF.
    1. If the has_units field of M  is set to FALSE, M shall not be referenced by any <DRM Geometry Model Instance> or <DRM Feature Model Instance> instances.
    2. If M is to be instanced into a non-LSR SRF by any <DRM Geometry Model Instance> or <DRM Feature Model Instance> instances, each such <DRM Geometry Model Instance> instance and <DRM Feature Model Instance> instance shall specify a <DRM World Transformation> instance.
    3. M cannot be instanced into another LSR SRF unless the target SRF has identical parameters to the parameters of M or the <DRM Geometry Model Instance> instance or <DRM Feature Model Instance> instance that references M contains a <DRM Transformation> component that maps the SRF of M into the target SRF.
    4. If the component hierarchy of M contains any <DRM LSR Transformation> instances that have <DRM Control Link> instances, and if M provides controlling <DRM Variable> instances to those <DRM Control Link> instances such that they allow motion, the has_moving_parts field  of M  shall be set to TRUE; otherwise, the has_moving_parts field  of M shall be set to FALSE.
    5. M shall not contain any <DRM Reference Surface> instances.
  3. All <DRM Location> instances under a <DRM Model> instance shall be expressed in the SRF specified by that <DRM Model> instance.

7.2.26 <DRM Polyhedron> structure

The collection of <DRM Polygon> components of a <DRM Polyhedron> instance shall completely enclose a region of 3D space.

7.2.27 <DRM Presentation Domain> constraints

The following constrains the use of <DRM Presentation Domain> instances:

  1. In a given transmittal, every instance of <DRM Colour>, <DRM Image Mapping Function>, and <DRM Rendering Properties> shall specify a <DRM Presentation Domain> component, whether directly or through inheritance.
  2. In a given transmittal, every instance of <DRM Image> that specifies a <DRM Image Anchor> component shall specify a <DRM Presentation Domain> component.
  3. Let X be a DRM object such that X has <DRM Image Mapping Function> components F1 and F2. F1 shall specify a <DRM Presentation Domain> component P1 and F2 shall specify a <DRM Presentation Domain> component P2 such that the presentation domain sets of P1 and P2 do not intersect.
  4. Let X be a DRM object such that X has <DRM Colour> components F1 and F2. F1 shall specify a <DRM Presentation Domain> component P1 and F2 shall specify a <DRM Presentation Domain> component P2 such that the presentation domain sets of P1 and P2 do not intersect.
  5. The presentation_domain field of a <DRM Presentation Domain> instance shall not be empty.

7.2.28 <DRM Primitive Summary Item> constraints

The following constraints apply:

  1. An instance of <DRM Primitive Summary Item> shall have a drm_class field value corresponding to one of the following:
    1. <DRM Primitive Feature> or one of its subclasses,
    2. <DRM Primitive Geometry> or one of its subclasses, or
    3. classes that may legally appear in the component tree of a <DRM Primitive Feature> or <DRM Primitive Geometry> instance.
  2. For any <DRM Primitive Summary Item> instance B that is a component of another <DRM Primitive Summary Item> instance A, the drm_class represented by B shall be specified as a formal component of A, and the multiplicity of B shall comply with the corresponding component relationship between the two classes.
  3. For any <DRM Primitive Summary Item> component S of a <DRM Environment Root> instance ER, where the drm_class field corresponds to a class P, the component tree of ER shall contain at least one instance of P, in its <DRM Feature Hierarchy> instance and/or its <DRM Geometry Hierarchy> instance, such that the component tree of the instance of P conforms with the pattern specified by S.
  4. For any <DRM Primitive Summary Item> component S of a <DRM Model> instance M, where the drm_class field corresponds to a class P, the component tree of M shall contain at least one instance of P, in the <DRM Feature Hierarchy> instance  of its <DRM Feature Model> instance and/or the <DRM Geometry Hierarchy> instance of its <DRM Geometry Model>  instance,, such that the component tree of the instance of P conforms with the pattern specified by S.
  5. An empty <DRM Model> cannot have <DRM Primitive Summary Item> components.

7.2.29 <DRM Property> constraints

For every <DRM Property> instance P, the following shall hold.

  1. If P is a <DRM Property Value> instance, the attribute_value_type of the value field of P shall be consistent with the storage type imposed by the meaning field of P.

  2. No two directly attached <DRM Property Value> components of a DRM object may specify identical values for their meaning fields.

    If an inherited <DRM Property Value> instance has the same meaning field value as a directly attached <DRM Property Value> instance, the directly attached component replaces the inherited component in the inheritance context.

  3. No two directly attached <DRM Property Description> components of a DRM object may specify identical values for their meaning fields.

    If an inherited <DRM Property Description> instance has the same meaning field value as a directly attached <DRM Property Description> instance, the directly attached component replaces the inherited component in the inheritance context.

7.2.30 <DRM Property Characteristic> constraints

Consider a <DRM Property Characteristic> instance C and a DRM object P such that C is a component of P, where P is a <DRM Property> instance or a <DRM Table Property Description> instance.

  1. The attribute_value_type entry of the characteristic_value field of C shall correspond to the value type imposed by the meaning field of P, except in the case where the meaning field of P specifies an EA bound to the abstract value type ENUMERATION and the meaning field of C specifies one of the qualitative EVs EVC_NOT_APPLICABLE, EVC_MISSING, EVC_VALUE_WITHHELD, EVC_MULTIPLE, or EVC_UNDESIGNATED. In that case, C shall be bound to the abstract value type INTEGER with a characteristic_value that does not correspond to the numeric value of a valid EE for the given EA.
  2. If the attribute_value_type entry of the characteristic_value field of C is not numeric, C shall not have an EV with an applicability of numeric as its meaning.
  3. If C is not real valued, it shall not have EVC_TOLERANCE as its meaning.
  4. Consider another, distinct <DRM Property Characteristic> instance C2 that is also a component of P.
    1. The meaning field values of C and C2 shall be distinct.
    2. If C specifies EVC_MINIMUM_VALUE and C2 specifies EVC_MAXIMUM_VALUE, the characteristic_value of C shall be less than or equal to that of C2.

7.2.31 <DRM Property Grid> constraints

Let G be a <DRM Property Grid> instance. G shall not be a component of a <DRM Data Table Library> instance unless the relative_to_hook_point field of G is TRUE.

7.2.32 <DRM Property Set Table> size

For a given <DRM Property Set Table Group> instance G with table_size = k, each <DRM Property Set Table> component T of G shall have k <DRM Property Set> components.

For any given T within G, if the regular field of T has value TRUE, each of the k <DRM Property Set> components of T shall contain the same number of DRM class instances, and these DRM class instances shall belong to the same classes. If the regular field has value FALSE for T, no such constraint holds.

NOTE  G may have both regular and non-regular <DRM Property Set Table> components, and that even if all <DRM Property Set Table> components of G are regular, there is no constraint that they are all regular in the same way.

7.2.33 <DRM Reference Surface> constraints

Consider a <DRM Reference Surface> instance R.

  1. R shall appear in the context of a 3D SRF.
  2. R shall not appear in the component tree of any <DRM Model> instance specified in an LSR SRF.
  3. Let S be the <DRM Geometry Hierarchy> instnace to which R is associated such that S specifies the reference surface of R.
    1. The SRF within which S is specified shall match that within which R is specified, unless S is a <DRM Property Grid Hook Point> instance.
    2. If S is a <DRM Property Grid Hook Point> instance, S shall have at least one <DRM Property Grid> component G such that the following apply.
      1. The SRF within which S is specified shall match that specified by G.
      2. G shall have two spatial <DRM Axis> components corresponding to the primary and secondary coordinates of the SRF specified by G.
      3. G shall have a <DRM Table Property Description> component for height, elevation, or bathymetry.
      4. The qualified classification specified by G shall match that specified by R.
    3. If S is a <DRM LOD Related Geometry> instance, the lod_data_type field of S shall not have the value VOLUME.

7.2.34 <DRM Stamp Behaviour> constraints

A <DRM Stamp Behaviour> instance shall be specified only within the context of an LSR 3D SRF.

7.2.35 <DRM Table Property Description> constraints

For a <DRM Table Property Description> instance P, the following conditions shall hold:

  1. Its value_type field and those of the corresponding elements of any applicable <DRM Data Table> instances shall be consistent with the restrictions imposed by the meaning field of P.
  2. If P specifies a real-valued EA or real-valued Variable_Code M as its meaning field value, the value_unit of P shall specify a unit belonging to the EDCS Unit Equivalence class to which M is bound.
  3. If P does not specify a real-valued EA or real-valued Variable_Code as its meaning field value, the value_unit and value_scale shall be set to EUC_UNITLESS and EUC_UNI, respectively.

7.2.36 Edges bordering faces

<DRM Feature Edge> instances have the following relationship with <DRM Feature Face> instances:

  1. At any feature topology level, if a <DRM Feature Edge> instance E associates to a <DRM Feature Face> instance F, F shall have a <DRM Feature Face Ring> component that associates to E.
  2. At feature topology level 3 or higher, if a <DRM Feature Face> instance F has a <DRM Feature Face Ring> component that associates to a <DRM Feature Edge> instance E, E shall associate to F.

<DRM Geometry Edge> instances have the following relationship with <DRM Geometry Face> instances:

  1. At any geometry topology level, if a <DRM Geometry Edge> instance E associates to a <DRM Geometry Face> instance F, F shall associate to E.
  2. b. At geometry topology level 3 or higher, if a <DRM Geometry Face> instance F associates to a <DRM Geometry Edge> instance E, E shall associate to F.

7.2.37 Face ring edge consistency

The following constraints apply:

  1. For each consecutive <DRM Feature Edge> instance within a <DRM Feature Face Ring> instance, and for each consecutive <DRM Geometry Edge> instance within a <DRM Geometry Face> instance, the <DRM Edge Direction> instance shall be consistent with the starting and ending nodes of the edge.
  2. A <DRM Feature Edge> instance shall appear no more than twice in a <DRM Feature Face Ring> instance, once with each orientation.
  3. A <DRM Geometry Edge> instance shall appear no more than twice in a <DRM Geometry Face> instance, once with each orientation.

7.2.38 Faces bordering volumes

<DRM Feature Face> instances shall have the following relationship with <DRM Feature Volume> instances. At any topology level, if a <DRM Feature Face> instance FF associates to a <DRM Feature Volume> instance FV, FV shall have a <DRM Feature Volume Shell> component that associates to FF. Conversely, if a <DRM Feature Volume> instance FV has a <DRM Feature Volume Shell> instance that associates to a <DRM Feature Face> instance FF, FF shall also associate to FV.

<DRM Geometry Face> instances shall have the following relationship with <DRM Geometry Volume> instances. At any topology level, if a <DRM Geometry Face> instance GF associates to a <DRM Geometry Volume> instance GV, GV shall also associate to GF. Conversely, if a <DRM Geometry Volume> instance GV associates to a <DRM Geometry Face> instance GF, GF shall also associate to GV.

7.2.39 General axis constraints

The following constraints apply:

  1. In a <DRM Enumeration Axis> instance X,
    1. The axis_type of X shall correspond to an EA T bound to the abstract value type ENUMERATION.
    2. The entries of X’s axis_value_array shall be distinct and valid EEs for T.
  2. In a <DRM Interval Axis> instance X,
    1. The axis_type shall correspond to an EA bound to a numeric value type.
    2. Each individual entry in X’s axis_interval_value_array shall have a value_type consistent with the numeric data type to which the value of the  axis_type is bound, and this value_type shall be the same for all entries in the axis_interval_value_array.
    3. If the axis_type is bound to an EQ, the value_unit shall be a member of the specified EQ.
    4. If the axis_type is not bound to an EQ, the value_unit and value_scale shall be set to EUC_UNITLESS and ESC_UNI, respectively.
    5. All entries in X’s axis_interval_value_array shall be mutually disjoint.
    6. The entries in X’s axis_interval_value_array shall be arranged in either monotonically ascending or monotonically descending order.
  3. In a <DRM Irregular Axis> instance X,
    1. The axis_type shall correspond to an EA bound to a numeric value type.
    2. Each individual entry in X’s axis_value_array shall have a value_type consistent with the numeric data type to which the axis_type's value is bound, and this value_type shall be the same for all entries in the axis_value_array.
    3. If the axis_type is bound to an EQ, the value_unit shall be a member of the specified EQ.
    4. If the axis_type is not bound to an EQ, the value_unit and value_scale shall be set to EUC_UNITLESS and ESC_UNI, respectively.
    5. All entries in X’s axis_value_array shall be distinct.
    6. The entries in X’s axis_value_array shall be arranged in either monotonically ascending or monotonically descending order.
  4. In a <DRM Regular Axis> instance X,
    1. The axis_type shall correspond to an EA bound to a numeric value type.
    2. The value_type of the first_value and spacing field values shall be the same, and shall be consistent with the numeric data type to which the value of the axis_type is bound.
    3. If the axis_type is bound to an EQ, the value_unit shall be a member of the specified EQ.
    4. If the axis_type is not bound to an EQ, the value_unit and value_scale shall be set to EUC_UNITLESS and ESC_UNI, respectively.

7.2.40 Hierarchy summary constraints

The following constraints apply:

  1. An instance of <DRM Hierarchy Summary Item> shall have a drm_class field value corresponding to one of the following:
    1. <DRM Feature Hierarchy> or one of its subclasses, or
    2. <DRM Geometry Hierarchy> or one of its subclasses.
  2. For any <DRM Hierarchy Summary Item> instance B that is a component of another <DRM Hierarchy Summary Item> instance A, the class represented by B’s drm_class field value shall be specified as a formal component of A, and the multiplicity and multiplicity_meaning of B shall comply with the corresponding component relationship between the two classes.
  3. Consider a <DRM Environment Root> instance E,
    1. If E has a <DRM Geometry Hierarchy> component H, E shall have at most one <DRM Hierarchy Summary Item> component S for which the drm_class field corresponds to a <DRM Geometry Hierarchy> subclass. If such a component instance S exists, its field values shall comply with the following constraints:
      1. S’s drm_class shall match that of H.
      2. S’s multiplicity_meaning value shall be EXACT, and its multiplicity field shall have value 1.
    2. If E does not have a <DRM Geometry Hierarchy> component, E shall not have any <DRM Hierarchy Summary Item> component for which the drm_class field corresponds to a <DRM Geometry Hierarchy> subclass.
    3. If E has a <DRM Feature Hierarchy> component H, E shall have at most one <DRM Hierarchy Summary Item> component S for which the drm_class field corresponds to a <DRM Feature Hierarchy> subclass. If such a component instance S exists, its field values shall comply with the following constraints:
      1. S’s drm_class shall match that of H.
      2. S’s multiplicity_meaning value shall be EXACT, and its multiplicity field shall have value 1.
    4. If E does not have a <DRM Feature Hierarchy> component, E shall not have any <DRM Hierarchy Summary Item> component for which the drm_class field corresponds to a <DRM Feature Hierarchy> subclass.
  4. Consider a <DRM Model> instance M.
    1. If M has a <DRM Geometry Model> with a <DRM Geometry Hierarchy> component H, M shall have at most one <DRM Hierarchy Summary Item> component S for which the drm_class field corresponds to a <DRM Geometry Hierarchy> subclass. If such a component instance S exists, its field values shall comply with the following constraints.
      1. S’s drm_class shall match that of H.
      2. S’s multiplicity_meaning value shall be EXACT, and its multiplicity field shall have value 1.
    2. If M does not have a <DRM Geometry Model> component, or its <DRM Geometry Model> does not have a <DRM Geometry Hierarchy> component, M shall not have any <DRM Hierarchy Summary Item> component for which the drm_class field corresponds to a <DRM Geometry Hierarchy> subclass.
    3. If M has a <DRM Feature Model> instance with a <DRM Feature Hierarchy> component H, M shall have at most one <DRM Hierarchy Summary Item> component S for which the drm_class field corresponds to a <DRM Feature Hierarchy> subclass. If such a component instance S exists, its field values shall comply with the following constraints.
      1. S’s drm_class shall match that of H.
      2. S’s multiplicity_meaning value shall be EXACT, and its multiplicity field shall have value 1.
    4. If M does not have a <DRM Feature Model> component, or its <DRM Feature Model> does not have a <DRM Feature Hierarchy> component, M shall not have any <DRM Hierarchy Summary Item> component for which the drm_class field corresponds to a <DRM Feature Hierarchy> subclass.
  5. All <DRM Geometry Hierarchy> associates (or <DRM Feature Hierarchy> associates) of a given <DRM Hierarchy Summary Item> instance shall be instances of the class specified by its drm_class field value, and shall conform to the structure that it specifies.

7.2.41 Homogeneous light rendering properties

A <DRM Light Rendering Properties> instance may contain instances of only one subclass of <DRM Directional Light Behaviour>.

7.2.42 Image mapping functions and texture coordinates

The number of <DRM Image Mapping Function> components that an instance of <DRM Geometry Representation> has shall be equal to the number of <DRM Texture Coordinate> instances for each <DRM Vertex> instance and <DRM Tack Point> instance within that instance of <DRM Geometry Representation>.

<DRM Image Mapping Function> instances for instances of <DRM Feature Representation> shall either have <DRM Image Anchor> components or specify <DRM Image> instances that have <DRM Image Anchor> components.

EXCEPTION:
If a <DRM Image Mapping Function> instance is used to specify a non-planar projection (e.g., spherical or cylindrical) it shall use a <DRM Image Anchor> component and the instance of <DRM Geometry Representation> to which the <DRM Image Mapping Function> instance is attached cannot have <DRM Texture Coordinate> instances or a <DRM Tack Point> instance.

7.2.43 Index codes within tables

The following constraints apply:

  1. Consider a <DRM Data Table> instance D, with a <DRM Table Property Description> component X, where X has a meaning value of DATA_TABLE_LIBRARY.

    For each corresponding cell value C in the <DRM Data Table> instance D, if C is not a sentinel value for missing or excluded, C is an index into the ordered set of <DRM Data Table> components of a <DRM Data Table Library> instance where:

    1. The transmittal in which the <DRM Data Table> instance D resides shall have a <DRM Data Table Library> instance L.
    2. L shall have at least N ordered <DRM Data Table> components.
    3. The Nth <DRM Data Table> component of L shall have a <DRM Classification Data> instance whose tag field matches the component_data_table_ecc field of the <DRM Table Property Description> instance X, as follows:
      1. If the <DRM Classification Data> instance of the referenced Nth <DRM Data Table> instance has no <DRM Property Value> components, the <DRM Table Property Description> instance X shall have none.
      2. If the <DRM Classification Data> instance of the referenced Nth <DRM Data Table> instance has j <DRM Property Value> components, the <DRM Table Property Description> instance X shall have exactly j matching <DRM Property Value> instances.
  2. Consider a <DRM Data Table> instance D, with a <DRM Table Property Description> components X, where X has a meaning Index_Code value of DATA_TABLE_COMPONENT.

    For each corresponding cell value C in the <DRM Data Table> instance D, if C is not a sentinel value for missing or excluded, C is an index into the ordered set of <DRM Data Table> components of D, where:

    1. The <DRM Data Table> instance D shall have at least N ordered <DRM Data Table> components.
    2. The Nth <DRM Data Table> component of D shall have a <Classification Data> instance whose tag field matches the component_data_table_ecc field of the <DRM Table Property Description> instance X, as follows:
      1. If the <DRM Classification Data> instance of the referenced Nth <DRM Data Table> instance has no <DRM Property Value> component, the <DRM Table Property Description> instance X shall have none.
      2. If the <DRM Classification Data> instance of the referenced Nth <DRM Data Table> instance has j <DRM Property Value> components the <DRM Table Property Description> instance X shall have exactly j matching <DRM Property Value> instances.
  3. Consider a <DRM Data Table> instance D, with a <DRM Table Property Description> component X, where X has a meaning Index_Code value of PROP_TABLE_REF_COMPONENT.

    For each corresponding cell value C in the <DRM Data Table> instance D, if C is not a sentinel value for missing or excluded, C is an index into the ordered set of <DRM Property Table Reference> components of D, where:

    1. The <DRM Data Table> instance D shall have at least N ordered <DRM Property Table Reference> components.
    2. The Nth <DRM Property Table Reference> component of D shall refer to a <DRM Property Table> instance whose <DRM Classification Data> instance with a tag field that matches the component_data_table_ecc of the <DRM Table Property Description> instance X, as follows:
      1. If the <DRM Classification Data> of the referenced <DRM Property Table> has no <DRM Property Value> components, the <DRM Table Property Description> instance X shall have none.
      2. If the <DRM Classification Data> instance of the referenced <DRM Property Table> instance has j <DRM Property Value> components, the <DRM Table Property Description> instance X shall have exactly j matching <DRM Property Value> instances.
  4. A <DRM Table Property Description> instance that is not covered by b, c, or d above shall have ECC_OBJECT as its component_data_table_ecc value.
  5. Consider a <DRM Data Table> instance D, with a <DRM Table Property Description> component X where X has meaning specified by an EAC. If X has <DRM Property Value> components, they qualify the meaning value of X.
  6. A <DRM Table Property Description> instance that is not covered by b, c, d, or f above shall have no <DRM Property Value> components.
  7. Consider a <DRM Data Table> instance D, with a component <DRM Table Property Description> instance X, where X has a meaning Index_Code value of IMAGE_MAPPING_FUNCTION.

    For each corresponding cell value C in the <DRM Data Table> instance D, if C is not a sentinel value for missing or excluded, C is an index into the ordered set of <DRM Image Mapping Function> components of D, where the <DRM Data Table> instance D shall have at least N ordered <DRM Image Mapping Function> components.

7.2.44 Inheritance rule for <DRM Location>

Given any DRM object that has a <DRM Location> component, that <DRM Location> component (or the first <DRM Location> component in an ordered list of <DRM Location> components) becomes the (default) <DRM Location> component in the context for the component tree stemming from that DRM object.

7.2.45 LOD related organizing principle

For any level of detail related organization L, whether an instance of <DRM LOD Related Features> or <DRM LOD Related Geometry>, the following applies:

  1. The instance of <DRM Base LOD Data> for each branch of L shall match the class specified by L’s lod_data_type field.
  2. For each pair of branches with <DRM Distance LOD Data> or <DRM Volume LOD Data> instances that overlap, neither shall be a subset of the other, as follows:
    1. For instances of <DRM Distance LOD Data>, neither interval shall be contained within the other. Specifically:
      1. The ranges may touch at their endpoints; that is, the minimum_range of one may equal the maximum_range of the other.
      2. If the ranges overlap by more than one endpoint, each shall have at least one fade band, so that one is fading in while the other is fading out for the overlap range.
    2. For instances of <DRM Volume LOD Data>:
      1. If the two branches both have outside = FALSE, neither volume may be contained within the other.
      2. The volumes specified may be identical if the link objects specify different values for their outside fields, provided that L complies with the constraint specified in 7.2.10 Distinct link objects.
  3. If L inherited a <DRM Base LOD Data> instance C as a component, such that C matches its lod_data_type, L’s link objects shall fall within the scope specified by C:
    1. If C is a <DRM Distance LOD Data> instance and L is of type DISTANCE, each link object specified by L shall specify a range within the region covered by C.
    2. If C is a <DRM Volume LOD Data> instance and L is of type VOLUME, each link object specified by L shall specify a volume lying within that of C.
    3. No other classes of C permit a matching L to occur in their inheritance tree.

7.2.46 Mandatory metadata

Table 7.2 lists metadata classes. When these classes are instanced, at least the designated fields shall be populated.

Table 7.2 — Mandatory metadata

Metadata DRM class Constraint

<DRM Browse Media>

The field name shall specify a non-empty string.

The field media_urn shall be a valid URN.

<DRM Citation>

The field title shall be a non-empty string. If a <DRM Citation> instance has multiple <DRM Absolute Time> components, their time_significance field values shall be distinct.

<DRM Identification>

The field abstract shall be a non-empty string.

A <DRM Identification> instance that is a <DRM Transmittal Root> component shall have a <DRM Citation> component, at least one <DRM Keywords> component, at least one <DRM Responsible Party> component through a <DRM Role Data> link object with role = POINT_OF_CONTACT, and a <DRM Security Constraints> component.

<DRM Keywords>

No two <DRM Keywords> components shall have distinct type codes. Within a given <DRM Keywords> instance, the entries of the keyword_array field shall be distinct.
<DRM Legal Constraints> If the access_constraints field is set to OTHER_RESTRICTIONS, the other_constraints field shall contain a non-empty string specifying what those other restrictions are.

If the use_constraints is set to OTHER_RESTRICTIONS, the other_constraints shall contain a non-empty string specifying what those other restrictions are.

<DRM Lineage>

An instance of <DRM Lineage> shall specify at least one of the following:

  1. a <DRM Process Step> instance,
  2. a <DRM Source> instance, and/or
  3. a non-empty string within its statement field.
<DRM Process Step> The description field shall specify a non-empty string.

The <DRM Absolute Time> component shall have time_significance = OCCURRENCE.

If the <DRM Process Step> instance has <DRM Responsible Party> components, each corresponding <DRM Role Data> link object shall specify role = PROCESSOR.

<DRM Responsible Party>

Each email_address entry within contact_information shall specify a syntactically valid email address.

The linkage portion of the online_resource entry within contact_information shall specify a syntactically valid URL.

The locale entry of each String field (see 5.3.3.262 String) within a <DRM Responsible Party> instance shall be specified using the same country code as that specified by its address entry of  contact_information except that the email_address entries shall be syntactically valid email addresses (with locale values set accordingly).

At least one of the following fields shall contain a non-empty string:

  1. individual_name,
  2. position_name, and/or
  3. organization_name.

For a given DRM object with two <DRM Responsible Party> components through <DRM Role Data> link objects specifying identical role values, the <DRM Responsible Party> components shall specify distinct individual_name, position_name, and/or organization_name fields.

For a given DRM object with two <DRM Responsible Party> components having identical individual_name, position_name, and organization_name fields, the <DRM Responsible Party> components shall be specified through <DRM Role Data> link objects specifying distinct role values.

<DRM Security Constraints> If classification has a value other than UNCLASSIFIED, classification_system field shall be a non-empty string.

<DRM Source>

The description field value shall be a non-empty string.

7.2.47 Model reference type constraints

The following constraints apply:

  1. If an instance of <DRM Model> has model_reference_type value set to ROOT or ROOT_AND_COMPONENT, the name of the <DRM Model> instance shall be unique in the scope of its aggregate <DRM Model Library> instance.
  2. If an instance of <DRM Model> has model_reference_type set to COMPONENT, the following also apply:
    1. Any <DRM Geometry Model Instance> or <DRM Feature Model Instance> instance referencing that <DRM Model> instance shall be in the scope of another <DRM Model> instance;
    2. Its dynamic_model_processing flag shall be FALSE.

7.2.48 Nested primitive geometry

When a <DRM Primitive Geometry> instance contains a <DRM Union Of Primitive Geometry> instance, the resulting geometry shall lie on the surface of the parent geometry.

Allowed nesting combinations are:

  1. <DRM Polygon> can nest:
    <DRM Polygon>, <DRM Ellipse>, <DRM Line>, <DRM Arc>, <DRM Point>, and <DRM Finite Element Mesh>.
  2. <DRM Ellipse> can nest:
    <DRM Polygon>, <DRM Ellipse>, <DRM Line>, <DRM Arc>, <DRM Point>, and <DRM Finite Element Mesh>.
  3. <DRM Line> can nest:
    <DRM Line>, <DRM Arc>, and <DRM Point>.
  4. <DRM Arc> can nest:
    <DRM Line>, <DRM Arc>, and <DRM Point>.
  5. <DRM Point> can nest:
    <DRM Point>.
  6. <DRM Volume Object> can nest:
    <DRM Finite Element Mesh> as an interior 3D mesh.
  7. <DRM Finite Element Mesh> cannot nest.

7.2.49 Non-cyclic aggregations

Aggregations are not allowed to form cycles. Associations are, as follows:

  1. a DRM object can associate to itself; e.g., a <DRM Point Feature> instance can associate with itself;
  2. a <DRM Feature Representation> instance can associate to a <DRM Geometry Hierarchy> instance that associates to the <DRM Feature Representation> instance; and
  3. a DRM object cannot have itself as a component.

7.2.50 Non-empty <DRM Environment Root> instance

A <DRM Environment Root> instance shall have as components a <DRM Feature Hierarchy> instance and/or a <DRM Geometry Hierarchy> instance.

7.2.51 Non-empty <DRM Model> instance

The following constraints apply:

  1. A <DRM Model> instance shall have a <DRM Feature Model> instance and/or a <DRM Geometry Model> instance.
  2. A <DRM Model> instance is permitted to have an empty <DRM Geometry Model> instance (e.g., a <DRM Geometry Model> instance without a <DRM Geometry Hierarchy> component), only if:
    1. The <DRM Model> instance either does not have a <DRM Feature Model> instance, or its <DRM Feature Model> instance is empty;
    2. The <DRM Model> instance has a <DRM Classification Data> component with tag field set to ECC_OBJECT;
    3. The <DRM Model> instance is tagged as ROOT_AND_COMPONENT so that it can be instanced within the scopes of a  <DRM Environment Root> instance as well as other <DRM Model> instances; and
    4. The empty <DRM Geometry Model> instance has no <DRM Attachment Point>, <DRM Contact Point>, or <DRM LSR Transformation> component, since these components require the presence of a <DRM Geometry Hierarchy> instance.
  3. A <DRM Model> instance is permitted to have an empty <DRM Feature Model> instance (e.g., a <DRM Feature Model> instance without a <DRM Feature Hierarchy> component), only if:
    1. The <DRM Model> instance either does not have a <DRM Geometry Model> instance, or its <DRM Geometry Model> instance is empty;
    2. The <DRM Model> instance has a <DRM Classification Data> component with tag field set to ECC_OBJECT; and
    3. The <DRM Model> instance is tagged as ROOT_AND_COMPONENT so that it can be instanced within the scope of a <DRM Environment Root> instance as well as other <DRM Model> instances.
  4. No <DRM Model> instance other than a properly constructed empty <DRM Model> instnace is permitted to have a <DRM Classification Data> instance with tag field set to ECC_OBJECT.

7.2.52 Non-overlapping DRM class summary items

In a list of <DRM DRM Class Summary Item> instances, no two shall have their drm_class fields set to the same DRM class.

7.2.53 Non-selfoverlapping perimeter data locations

The perimeter specified by a <DRM Perimeter Data> instance shall not intersect with or overlap itself.

7.2.54 Octant related organizing principle

Consider an instance O that is either a <DRM Octant Related Features or a <DRM Octant Related Geometry> instance.

  1. O shall have a <DRM Spatial Extent> component, specifying the bounding volume that is being organized into octants. Since a volume is being specified, this <DRM Spatial Extent> shall be specified in terms of <DRM Location 3D> components.
  2. Each branch of O shall comply with the following constraints:
    1. Each component representing an octant shall have a <DRM Spatial Extent> component. In the case of octants represented by <DRM Geometry Model Instance> or <DRM Feature Model Instance> instances, the <DRM Model> instance being referenced shall have the <DRM Spatial Extent> component. Since a subdivision of a volume is being specified, this <DRM Spatial Extent> instance shall be specified in terms of <DRM Location 3D> instances.
    2. For each branch of O, each primitive within the branch shall have a spatial extent fully contained within that specified by the <DRM Spatial Extent> instance corresponding to the branch. Consequently, the unique_descendants field of O shall be set to TRUE, because no DRM object can be fully contained within the <DRM Spatial Extent> instance of more than one branch of O.
    3. The regions specified by the branches shall not overlap; that is, the corresponding <DRM Spatial Extent> instances shall not overlap.
    4. The eight possible octant components’ <DRM Spatial Extent> instances shall be specified in their native SRF within the area specified by the O’s <DRM Spatial Extent> instance as shown in Figure 5.3. Consider the bounding area specified by the <DRM Spatial Extent> instance of O, as divided into eight octants of equal size with the area specified from point “a” to point “o” in Figure 5.3.
    5. If a branch with UPPER_RIGHT_BACK is present, its <DRM Spatial Extent> instance shall specify the area of the upper right back octant, from point “h” to point “o” in Figure 5.3, such that:
      1. its left boundary aligns with the right boundary of the UPPER_LEFT_BACK octant’s <DRM Spatial Extent> instance, if present;
      2. its front boundary aligns with the back boundary of the UPPER_RIGHT_FRONT octant’s <DRM Spatial Extent> instance, if present; and
      3. its lower boundary aligns with the upper boundary of the LOWER_RIGHT_BACK octant’s <DRM Spatial Extent> instance, if present.
      4. In the case where a primitive lies entirely along the right boundary of the branch, the primitive is considered to lie within the spatial extent of the UPPER_RIGHT_BACK octant and not that of the UPPER_LEFT_BACK octant.
      5. In the case where a primitive lies entirely along the front boundary of the branch, the primitive is considered to lie within the spatial extent of the UPPER_RIGHT_BACK octant and not within that of the UPPER_RIGHT_FRONT octant.
      6. In the case where a primitive lies entirely along the lower boundary of the branch, the primitive is considered to lie within the spatial extent of the UPPER_RIGHT_BACK octant and not within that of the LOWER_RIGHT_BACK octant.
    6. If a branch with UPPER_LEFT_BACK is present, its <DRM Spatial Extent> instance shall specify the area of the upper left back octant, from point “g” to point “n” in Figure 5.3, such that:
      1. the <DRM Location 3D> instance representing its upper left back corner corresponds to that of O’s <DRM Spatial Extent> instance;
      2. its right boundary aligns with the left boundary of the UPPER_RIGHT_BACK octant’s <DRM Spatial Extent> instance, if present, and its front boundary aligns with the back boundary of the UPPER_LEFT_FRONT octant’s <DRM Spatial Extent> instance, if present; and
      3. its lower boundary aligns with the upper boundary of the LOWER_LEFT_BACK octant’s <DRM Spatial Extent> instance, if present.
      4. In the case where a primitive lies entirely along the right boundary of the branch, the primitive is considered not to lie within the spatial extent of the UPPER_LEFT_BACK octant but within that of the UPPER_RIGHT_BACK octant.
      5. In the case where a primitive lies entirely along the front boundary of the branch, the primitive is considered to lie within the spatial extent of the UPPER_LEFT_BACK octant and not within that of the UPPER_LEFT_FRONT octant.
      6. In the case where a primitive lies entirely along the lower boundary of the branch, the primitive is considered to lie within the spatial extent of the UPPER_LEFT_BACK octant and not within that of the LOWER_LEFT_BACK octant.
    7. If a branch with UPPER_RIGHT_FRONT is present, its <DRM Spatial Extent> instance shall specify the area of the upper right front octant, from point “f” to point “m” in Figure 5.3, such that:
      1. its left boundary aligns with the right boundary of the UPPER_LEFT_FRONT octant’s <DRM Spatial Extent> instance, if present;
      2. its back boundary aligns with the front boundary of the UPPER_RIGHT_BACK octant’s <DRM Spatial Extent> instance, if present; and
      3. its lower boundary aligns with the upper boundary of the LOWER_RIGHT_FRONT octant’s <DRM Spatial Extent> instance, if present.
      4. In the case where a primitive lies entirely along the right boundary of the branch, the primitive is considered to lie within the spatial extent of the UPPER_RIGHT_FRONT octant and not that of the UPPER_LEFT_FRONT octant.
      5. In the case where a primitive lies entirely along the back boundary of the branch, the primitive is considered to lie within the spatial extent of the UPPER_RIGHT_BACK octant and not within that of the UPPER_RIGHT_FRONT octant.
      6. In the case where a primitive lies entirely along the lower boundary of the branch, the primitive is considered to lie within the spatial extent of the UPPER_RIGHT_FRONT octant and not within that of the LOWER_RIGHT_FRONT octant.
    8. If a branch with UPPER_LEFT_FRONT is present, its <DRM Spatial Extent> instance shall specify the area of the upper left front octant, from point “e” to point “l” in Figure 5.3, such that:
      1. its right boundary aligns with the left boundary of the UPPER_RIGHT_FRONT octant’s <DRM Spatial Extent> instance, if present;
      2. its back boundary aligns with the front boundary of the UPPER_LEFT_BACK octant’s <DRM Spatial Extent> instance, if present; and
      3. its lower boundary aligns with the upper boundary of the LOWER_LEFT_FRONT octant’s <DRM Spatial Extent> instance, if present.
      4. In the case where a primitive lies entirely along the right boundary of the branch, the primitive is considered not to lie within the spatial extent of the UPPER_LEFT_FRONT octant but within that of the UPPER_RIGHT_FRONT octant.
      5. In the case where a primitive lies entirely along the back boundary of the branch, the primitive is considered to lie within the spatial extent of the UPPER_LEFT_BACK octant and not within that of the UPPER_LEFT_FRONT octant.
      6. In the case where a primitive lies entirely along the lower boundary of the branch, the primitive is considered to lie within the spatial extent of the UPPER_LEFT_FRONT octant and not within that of the LOWER_LEFT_FRONT octant.
    9. If a branch with LOWER_RIGHT_BACK is present, its <DRM Spatial Extent> instance shall specify the area of the upper right back octant, from point “d” to point “k” in Figure 5.3, such that:
      1. its left boundary aligns with the right boundary of the LOWER_LEFT_BACK octant’s <DRM Spatial Extent> instance, if present;
      2. its front boundary aligns with the back boundary of the LOWER_RIGHT_FRONT octant’s <DRM Spatial Extent> instance, if present; and
      3. its upper boundary aligns with the lower boundary of the UPPER_RIGHT_BACK octant’s <DRM Spatial Extent> instance, if present.
      4. In the case where a primitive lies entirely along the right boundary of the branch, the primitive is considered to lie within the spatial extent of the LOWER_RIGHT_BACK octant and not that of the LOWER_LEFT_BACK octant.
      5. In the case where a primitive lies entirely along the front boundary of the branch, the primitive is considered to lie within the spatial extent of the LOWER_RIGHT_BACK octant and not within that of the LOWER_RIGHT_FRONT octant.
      6. In the case where a primitive lies entirely along the upper boundary of the branch, the primitive is considered to lie within the spatial extent of the UPPER_RIGHT_BACK octant and not within that of the LOWER_RIGHT_BACK octant.
    10. If a branch with LOWER_LEFT_BACK is present, its <DRM Spatial Extent> instance shall specify the area of the lower left back octant, from point “c” to point “j” in Figure 5.3, such that:
      1. its right boundary aligns with the left boundary of the LOWER_RIGHT_BACK octant’s <DRM Spatial Extent> instance, if present;
      2. its front boundary aligns with the back boundary of the LOWER_LEFT_FRONT octant’s <DRM Spatial Extent> instance, if present; and
      3. its upper boundary aligns with the lower boundary of the UPPER_LEFT_BACK octant’s <DRM Spatial Extent> instance, if present.
      4. In the case where a primitive lies entirely along the right boundary of the branch, the primitive is considered not to lie within the spatial extent of the LOWER_LEFT_BACK octant but within that of the LOWER_RIGHT_BACK octant.
      5. In the case where a primitive lies entirely along the front boundary of the branch, the primitive is considered to lie within the spatial extent of the LOWER_LEFT_BACK octant and not within that of the LOWER_LEFT_FRONT octant.
      6. In the case where a primitive lies entirely along the upper boundary of the branch, the primitive is considered to lie within the spatial extent of the UPPER_LEFT_BACK octant and not within that of the LOWER_LEFT_BACK octant.
    11. If a branch with LOWER_RIGHT_FRONT is present, its <DRM Spatial Extent> instance shall specify the area of the lower right front octant, from point “b” to point “i” in Figure 5.3, such that:
      1. the <DRM Location 3D> instance representing its lower front right corner corresponds to that of O's <DRM Spatial Extent> instance;
      2. its left boundary aligns with the right boundary of the LOWER_LEFT_FRONT octant’s <DRM Spatial Extent> instance, if present;
      3. its back boundary aligns with the front boundary of the LOWER_RIGHT_BACK octant’s <DRM Spatial Extent> instance, if present; and
      4. its upper boundary aligns with the lower boundary of the UPPER_RIGHT_FRONT octant’s <DRM Spatial Extent> instance, if present.
      5. In the case where a primitive lies entirely along the right boundary of the branch, the primitive is considered to lie within the spatial extent of the LOWER_RIGHT_FRONT octant and not that of the LOWER_LEFT_FRONT octant.
      6. In the case where a primitive lies entirely along the back boundary of the branch, the primitive is considered to lie within the spatial extent of the LOWER_RIGHT_BACK octant and not within that of the LOWER_RIGHT_FRONT octant.
      7. In the case where a primitive lies entirely along the upper boundary of the branch, the primitive is considered to lie within the spatial extent of the UPPER_RIGHT_FRONT octant and not within that of the LOWER_RIGHT_FRONT octant.
    12. If a branch with LOWER_LEFT_FRONT is present, its <DRM Spatial Extent> shall specify the area of the lower left front octant, from point “a” to point “h” in Figure 5.3, such that:
      1. its right boundary aligns with the left boundary of the LOWER_RIGHT_FRONT octant’s <DRM Spatial Extent>, if present;
      2. its back boundary aligns with the front boundary of the LOWER_LEFT_BACK octant’s <DRM Spatial Extent>, if present; and
      3. its upper boundary aligns with the lower boundary of the UPPER_LEFT_FRONT octant’s <DRM Spatial Extent>, if present.
      4. In the case where a primitive lies entirely along the right boundary of the branch, the primitive is considered not to lie within the spatial extent of the LOWER_LEFT_FRONT octant but within that of the LOWER_RIGHT_FRONT octant.
      5. In the case where a primitive lies entirely along the back boundary of the branch, the primitive is considered to lie within the spatial extent of the LOWER_LEFT_BACK octant and not within that of the LOWER_LEFT_FRONT octant.
      6. In the case where a primitive lies entirely along the upper boundary of the branch, the primitive is considered to lie within the spatial extent of the UPPER_LEFT_FRONT octant and not within that of the LOWER_LEFT_FRONT octant.
  3. If O has eight branches, the strict_organizing_principle field of O shall be set to TRUE; otherwise it shall be set to FALSE.

7.2.55 Parallelepiped structure

For a <DRM Parallelepiped Volume Extent> instance P, the following conditions shall hold:

  1. The <DRM Reference Vector> components of P shall comply with the restrictions imposed in the specification of the <DRM Parallelepiped Volume Extent> class.
  2. The relative orientations of the <DRM Reference Vector> components of P shall specify a parallelepiped volume.

7.2.56 Perimeter related organizing principle

The following constraints apply:

  1. For any perimeter-related organization,
    1. The regions specified by its branches shall not overlap; that is, the <DRM Perimeter Data> on the branches shall specify regions that do not overlap.
    2. For each branch of the organization, every primitive within that branch shall have a spatial extent overlapping that of the branch.
    3. In the case of a primitive lying on the boundary specified by the <DRM Perimeter Data> instance corresponding to a branch, the primitive shall be considered to have a spatial extent fully contained within that specified by the <DRM Perimeter Data> instance.
  2. For topological organizations:
    1. A <DRM Feature Topology> instance shall belong to at most one <DRM Perimeter Related Feature Topology> instance.
    2. A <DRM Geometry Topology> instance shall belong to at most one <DRM Perimeter Related Geometry Topology> instance.
  3. Consider a perimeter-related organization P, which is either a <DRM Perimeter Related Features> instance or a <DRM Perimeter Related Geometry> instance.
    1. If P’s strict_organizing_principle field has value TRUE, for each branch of P, each primitive within the branch shall have a spatial extent fully contained within that specified by the <DRM Perimeter Data> instance corresponding to the branch.
    2. If P’s strict_organizing_principle has value FALSE, no guarantees exist as to how accurately the objects of the component tree rooted at P were placed into their sorted bins (that is, the branches of P), apart from that specified by a.1 above.
    3. If P is a <DRM Perimeter Related Features> instance, and the same <DRM Feature Representation> instance belongs to more than one of its branches, the unique_descendants and strict_organizing_principle flags of P shall be set to FALSE.
    4. If P is a <DRM Perimeter Related Geometry> instance, and the same <DRM Geometry Representation> instance belongs to more than one of its branches, the unique_descendants and strict_organizing_principle fields of P shall be set to FALSE.

7.2.57 Polygon as bounded plane

Consider a <DRM Polygon> instance P having N ordered <DRM Vertex> components Vi, where i is a member of {1, 2, ..., N}. For each Vi, let Li refer to the <DRM Location> instance referenced by Vi as its <DRM Location> instance. The following conditions shall hold:

  1. Each Li shall specify unique spatial coordinates among Lk, where k is a member of {1, 2, ..., N}.
  2. For each pair of line segments Lij, Lrs, Lij and Lrs shall not intersect unless i = s or j = r, in which case they shall intersect only at that common <DRM Vertex> instance.
  3. The sequence of line segments Lij shall specify a bounded portion of a plane.
  4. The concave flag of the polygon_flags field of P shall be set to TRUE if P forms a concave polygon; otherwise the concave flag shall be set to FALSE.

7.2.58 Precedence of <DRM Property Set Index>

Consider an instance P of <DRM Geometry Representation> or <DRM Feature Representation>, where P has a <DRM Property Set Index> component X that references a <DRM Property Set> instance S.

  1. Let S have a component C and let P have a component D such that C and D are instances of the same class.
    1. Let C be an instance of any of the following:

      D takes precedence over C, such that C is not treated as a directly attached component of P.

    2. Let C and D be instances of <DRM Property Table>. If C and D have matching <DRM Classification Data> components, D takes precedence over C, such that C is not treated as a directly attached component of P. Otherwise, C is treated as a directly attached component of P.
    3. Let C and D be instances of <DRM Property Table Reference>. If C and D refer to <DRM Property Table> instances having matching <DRM Classification Data> components, D takes precedence over C, such that C is not treated as a directly attached component of P. Otherwise, C is treated as a directly attached component of P.
    4. Let C and D be instances of <DRM Property Value>. If C and D have matching meaning field values, D takes precedence over C, such that C is not treated as a directly attached component of P. Otherwise, C is treated as a directly attached component of P.
    5. Let C and D be instances of <DRM Colour>. If C and D specify conflicting <DRM Presentation Domain> instances, D takes precedence over C, such that C is not treated as a directly attached component of P.
  2. Let P have another <DRM Property Set Index> component Y that references a <DRM Property Set> instance S2, where Y appears further down the ordered list of <DRM Property Set Index> components of P than does X. Let S have a component C and let S2 have a component C2 such that C and C2 are instances of the same class, where P does not have a component that is an instance of that class.
    1. Let C2 be an instance of any of the following:

      C takes precedence over C2, such that C2 is not treated as a directly attached component of P.

    2. Let C and C2 be instances of <DRM Property Table>. If C and C2 have matching <DRM Classification Data> components, C takes precedence over C2, such that C2 is not treated as a directly attached component of P. Otherwise, C2 is treated as a directly attached component of P.
    3. Let C and C2 be instances of <DRM Property Table Reference>. If C and C2 refer to <DRM Property Table> instances having matching <DRM Classification Data> components, C takes precedence over C2, such that C2 is not treated as a directly attached component of P. Otherwise, C2 is treated as a directly attached component of P.
    4. Let C and C2 be instances of <DRM Property Value>. If C and C2 have matching meaning field values, C takes precedence over C2, such that C2 is not treated as a directly attached component of P. Otherwise, C2 is treated as a directly attached component of P.
    5. Let C and C2 be instances of <DRM Colour>. If C and C2 specify conflicting <DRM Presentation Domain> instances, C takes precedence over C2, such that C2 is not treated as a directly attached component of P.

7.2.59 Publishable object

DRM classes for which instances may be published can be identified from the following lists. Where the list specifies an abstract class, instances of all of its subclasses may be published.:

  1. Instances of the following classes are publishable:

    <DRM Aggregate Feature>
    <DRM Aggregate Geometry>
    <DRM Colour Table Group>
    <DRM Environment Root>
    <DRM Feature Model>
    <DRM Feature Topology>
    <DRM Feature Topology Hierarchy>
    <DRM Geometry Model>
    <DRM Geometry Topology>
    <DRM Geometry Topology Hierarchy>
    <DRM Image>
    <DRM Library>
    <DRM Model>
    <DRM Property Grid Hook Point>
    <DRM Property Set Table Group>
    <DRM Property Table>
    <DRM Separating Plane Relations>
    <DRM Sound>
    <DRM Symbol>

  2. Instances of the following classes may be published, where they serve the role of link objects:

    <DRM Base LOD Data>
    <DRM Classification Data>
    <DRM Hierarchy Data>
    <DRM Octant Data>
    <DRM Perimeter Data>
    <DRM Quadrant Data>
    <DRM Separating Plane Data>
    <DRM Spatial Index Data>
    <DRM State Data>
    <DRM Time Constraints Data>

  3. An instance of a class not covered by a or b above shall not be published.

7.2.60 Quadrant related organizing principle

Consider Q that is either an instance of <DRM Quadrant Related Features> or an instance of <DRM Quadrant Related Geometry>.

  1. Q shall have a <DRM Spatial Extent> instance.
  2. Each branch of Q shall comply with the following constraints.
    1. Each component representing a quadrant shall have a <DRM Spatial Extent> component. In the case of quadrants represented by <DRM Geometry Model Instance> or <DRM Feature Model Instance> instances, the <DRM Model> being referenced shall have the <DRM Spatial Extent> component.
    2. For each branch of Q, each primitive within the branch shall have a spatial extent fully contained within that specified by the <DRM Spatial Extent> instance corresponding to the branch. Consequently, the unique_descendants field of Q shall be set to TRUE, because no DRM object can be fully contained within the <DRM Spatial Extent> instance of more than one branch of Q.
    3. The regions specified by the branches shall not overlap; that is, the <DRM Spatial Extent> components of the component hierarchies shall not overlap.
    4. The four possible quadrant components’ <DRM Spatial Extent> component shall be specified in their native SRF within the area specified by the Q’s <DRM Spatial Extent> component as depicted in Figure 5.4. Consider the bounding area specified by the <DRM Spatial Extent> component of Q, as divided into four quadrants of equal size.

    5. If a branch with quadrant of value LEFT_BACK is present, its <DRM Spatial Extent> instance shall specify the area of the left back quadrant, such that:
      1. its right boundary aligns with the left boundary of the <DRM Spatial Extent> instance of the RIGHT_BACK quadrant, if present, and
      2. its front boundary aligns with the back boundary of the <DRM Spatial Extent> instance of the LEFT_FRONT quadrant, if present.
      3. In the case where a primitive lies entirely along the right boundary of the branch, the primitive is considered not to lie within the spatial extent of the LEFT_BACK quadrant but within that of the RIGHT_BACK quadrant.
      4. In the case where a primitive lies entirely along the front boundary of the branch, the primitive is considered to lie within the spatial extent of the LEFT_BACK quadrant and not within that of the LEFT_FRONT quadrant.
    6. If a branch with quadrant RIGHT_BACK is present, its <DRM Spatial Extent> instance shall specify the area of the right back quadrant, such that:
      1. the <DRM Location> instance representing its right back corner corresponds to that of the <DRM Spatial Extent> component of Q;
      2. its left boundary aligns with the right boundary of the <DRM Spatial Extent> component of the LEFT_BACK quadrant, if present; and
      3. its front boundary aligns with the back boundary of the <DRM Spatial Extent> instance of the RIGHT_FRONT quadrant, if present.
      4. In the case where a primitive lies entirely along the left boundary of the branch, the primitive is considered to lie within the spatial extent of the RIGHT_BACK quadrant and not within that of the LEFT_BACK quadrant.
      5. In the case where a primitive lies entirely along the front boundary of the branch, the primitive is considered to lie within the spatial extent of the RIGHT_BACK quadrant and not within that of the RIGHT_FRONT quadrant.
    7. If a branch with LEFT_FRONT is present, its <DRM Spatial Extent> component shall specify the area of the left front quadrant, such that:
      1. the <DRM Location> instance representing its left front corner corresponds to that of the <DRM Spatial Extent> component of Q;
      2. its left boundary aligns with the right boundary of the <DRM Spatial Extent> component of the RIGHT_FRONT quadrant, if present; and
      3. its back boundary aligns with the front boundary of the <DRM Spatial Extent> component of the LEFT_BACK quadrant, if present.
      4. In the case where a primitive lies entirely along the right boundary of the branch, the primitive is considered not to lie within the spatial extent of the LEFT_FRONT quadrant but within that of the RIGHT_FRONT quadrant.
      5. In the case where a primitive lies entirely along the back boundary of the branch, the primitive is considered to lie within the spatial extent of the LEFT_BACK quadrant and not within that of the LEFT_FRONT quadrant.
    8. If a branch with RIGHT_FRONT is present, its <DRM Spatial Extent> component shall specify the area of the right front quadrant, such that:
      1. its left boundary aligns with the right boundary of the <DRM Spatial Extent> component of the LEFT_FRONT quadrant, if present; and
      2. its back boundary aligns with the front boundary of the <DRM Spatial Extent> component of the RIGHT_BACK quadrant, if present.
      3. In the case where a primitive lies entirely along the left boundary of the branch, the primitive is considered not to lie within the spatial extent of the LEFT_FRONT quadrant but within that of the RIGHT_FRONT quadrant.
      4. In the case where a primitive lies entirely along the back boundary of the branch, the primitive is considered to lie within the spatial extent of the RIGHT_BACK quadrant and not within that of the RIGHT_FRONT quadrant.
  3. If Q has four branches, the strict_organizing_principle field of Q shall be set to TRUE; otherwise it shall be set to FALSE.

7.2.61 Required reference vector location

A <DRM Reference Vector> instance is required to have a <DRM Location> component whenever the <DRM Reference Vector> instance is a component of a <DRM Polygon>, <DRM Line>, <DRM Infinite Light>, <DRM Moving Light Behaviour>, or <DRM Union Of Geometry> instance.

7.2.62 Separating plane organizing principle

The following constraints apply:

  1. The <DRM Location 3D> components of a <DRM Separating Plane> instance shall shall not be collinear or coincident.
  2. For any <DRM Separating Plane Related Geometry> instance S:
    1. No two <DRM Separating Plane Relations> components of S shall specify coplanar <DRM Separating Plane> instances.
    2. For each component <DRM Separating Plane Relations> R of S:
      1. Every primitive within each branch of R shall have a spatial extent overlapping that of the half-space specified by the branch.
      2. If the strict_organizing_principle field of S has value TRUE, every primitive within each branch of R shall have a spatial extent fully contained within the half-space specified by the <DRM Separating Plane Data> instance corresponding to the branch. If the strict_organizing_principle field of S has value FALSE, no guarantees exist as to how accurately the objects of the component tree rooted at S were placed into their sorted half-spaces, apart from that specified by b.2.i above.
    3. For each <DRM Separating Plane Relations> component R of S, let P be the <DRM Separating Plane> component of R:
      1. For each <DRM Primitive Geometry> instance X in the component tree of a branch of R, X shall have a spatial extent overlapping that of the half-space specified for that branch.
      2. Let X be a <DRM Primitive Geometry> instance such that X lies entirely within the plane of P. If X is a <DRM Polygon> component of a <DRM Polyhedron> that otherwise lies entirely within the positive half-space defined by P, X is considered to lie within the positive half-space defined by P. Otherwise, X is considered to lie within the negative half-space defined by P.
      3. If the strict_organizing_principle field of S has the value TRUE, every primitive within each branch of R shall have a spatial extent fully contained within the half-space specified by the <DRM Separating Plane Data> instance corresponding to the branch.
      4. If the strict_organizing_principle field of S has the value FALSE, no guarantees exist as to how accurately the DRM objects of the component tree rooted at S were placed into their sorted bins apart from that specified by b.2.i above.

7.2.63 Spatial axis constraints

In regard to spatial <DRM Axis> instances,

  1. A spatial <DRM Axis> instance is a <DRM Axis> instance with one of the following as its axis_type.
    1. For angular coordinates, such as latitude and longitude, EAC_SPATIAL_ANGULAR_PRIMARY_COORDINATE and
      EAC_SPATIAL_ANGULAR_SECONDARY_COORDINATE
      ;
    2. For x, y coordinates,
      EAC_SPATIAL_LINEAR_PRIMARY_COORDINATE and
      EAC_SPATIAL_LINEAR_SECONDARY_COORDINATE
      ; and
    3. For z and elevation coordinates,
      EAC_SPATIAL_LINEAR_TERTIARY_COORDINATE.
  2. The number of spatial <DRM Axis> components of a <DRM Property Grid> instance is specified by spatial_axes_count. These spatial <DRM Axis> components shall be the first listed <DRM Axis> components of the <DRM Property Grid> instance, and shall correspond to a coordinate of the <DRM Property Grid> instance's SRF.
  3. No other <DRM Axis> instances in any other context shall be spatial.
  4. A spatial <DRM Regular Axis> instance or <DRM Irregular Axis> instance shall not have interpolation_type set to DISALLOWED.

7.2.64 Spatial index related organizing principle

The following constraints apply:

  1. For any spatial index related organization S,
    1. the column_width of S shall be a positive number;
    2. the row_width of S shall be a positive number; and
    3. For each branch of the organization, the corresponding <DRM Spatial Index Data> instance shall specify a region in the spatial index, such that:
      1. the column_index of the <DRM Spatial Index Data> instance shall be between 1 and the column_count specified by S;
      2. the row_index of the <DRM Spatial Index Data> instance shall be between 1 and the row_count specified by S; and
      3. each primitive within the branch shall have a spatial extent overlapping that specified by the <DRM Spatial Index Data> instance of the branch. Consider a cell C of S. Where a boundary of C touches that of another cell of S, C is considered to include its lower and left boundaries, but not to include its upper and right boundaries. Consequently, a primitive that lies entirely along the lower and/or left boundary of C is considered to lie within C, but a primitive that lies entirely along the upper and/or right boundary of C is not considered to lie within C.
  2. Consider an instance S, which is either a <DRM Spatial Index Related Features> or <DRM Spatial Index Related Geometry> instance.
    1. If the strict_organizing_principle field of S has value TRUE, for each branch of S, each primitive within the branch shall have a spatial extent fully contained within that specified by the <DRM Spatial Index Data> instance corresponding to the branch.
    2. If the strict_organizing_principle field of S has value FALSE, no guarantees exist as to how accurately the instances of the component tree rooted at S were placed into their indexed bins (i.e., the branches of S), apart from that specified by a.3.iii above.
    3. If S is a <DRM Spatial Index Related Features> instance, and the same <DRM Feature Representation> instance belongs to more than one of its branches, the unique_descendants and strict_organizing_principle fields of S shall be set to FALSE.
    4. If S is a <DRM Spatial Index Related Geometry> instance, and the same <DRM Geometry Representation> instance belongs to more than one of its branches, the unique_descendants and strict_organizing_principle fields of S shall be set to FALSE.

7.2.65 State related organizing principle

For any state related aggregation S, whether a <DRM State Related Features> instance or a <DRM State Related Geometry> instance, the following constraints apply:

  1. The state_tag of S shall specify an EA T that is bound either to the abstract value type ENUMERATION or to a numeric value type. In the latter case, T shall be bound to the EDCS unit equivalence class PURE_NUMBER such that the state values of S are specified with EUC_PERCENT units and ESC_UNI scale factor.
  2. Each branch of S shall comply with the following constraints:
    1. The <DRM State Data> instance associated with that branch shall have a state_value whose value_type field matches that of the active_state_value field of S.
    2. The <DRM State Data> instance associated with that branch shall have a state_value that does not overlap with that of any other branch’s <DRM State Data> instance within S.
  3. If S has a <DRM State Control Link> instance as a component, the return type of each of the <DRM Expression> components of the <DRM State Control Link> instance shall match that of the value_type of the active_state_value field of S.

7.2.66 Time dependency

<DRM Relative Time>, <DRM Absolute Time Interval>, and <DRM Relative Time Interval> instances may each have a <DRM Absolute Time> component. When the <DRM Absolute Time> component is present, the constraints on the field values of the respective <DRM Relative Time>, <DRM Absolute Time Interval>, and <DRM Relative Time Interval> instances depend on the value of the <DRM Absolute Time> component as follows:

  1. If a <DRM Absolute Time> component is present with a time_value configuration entry specifying that the day field is not applicable:
    1. For <DRM Absolute Time Interval> instances, delta_days = 0.
    2. For  <DRM Relative Time> instances,  delta_days = 0.
    3. For <DRM Relative Time Interval> instances, delta_start_days = delta_stop_days = 0.
  2. If a <DRM Absolute Time> component is present with a time_value configuration entry specifying that the month field value is not applicable but that the day field value is applicable:
    1. For <DRM Absolute Time Interval> instances, delta_days shall be in the range [1-day, 30-day] where day is the day entry of the time_value field of the <DRM Absolute Time> instance. For this case, delta_days is allowed to be negative.
    2. For <DRM Relative Time> instances, delta_days shall be in the range [1-day, 30-day] where day is the day entry of the time_value field of the <DRM Absolute Time> instance. For this case, delta_days is allowed to be negative.
  3. If a <DRM Absolute Time> component is present with a time_value configuration entry specifying that the month field value is not applicable and that the year field value is not applicable:
    1. For <DRM Absolute Time Interval> instances, delta_days shall be in the range [0, 365].
    2. For  <DRM Relative Time> instances, delta_days shall be in the range [0, 365].

7.2.67 Time interval calculation

 Let V be a <DRM Time Interval> instance that is referenced to a <DRM Absolute Time> component C.

  1. If C specifies a month, V shall be calculated using the actual number of days in that month.
  2.  If C does not specify a month, V is treated as having a 30 day month such that the fields of V shall specify an interval not exceeding a 30 day period. See 7.2.66 Time dependency, part b.

7.2.68 Union organizing principle

The following specifies the constraints for forming valid unions:

  1. For a <DRM Union Of Primitive Geometry> instance U, the strict_organizing_principle and unique_descendants field values shall be TRUE, and all of U’s <DRM Primitive Geometry> components shall be distinct.
  2. For a <DRM Union Of Feature Topology> instance U, all of U’s <DRM Feature Topology> components shall be distinct.
  3. For a <DRM Union Of Geometry Topology> instance U, all of U’s <DRM Geometry Topology> components shall be distinct.
  4. For a <DRM Union Of Geometry Hierarchy> instance U, all of U’s <DRM Geometry Hierarchy> components shall be distinct. Furthermore, no two <DRM Geometry Hierarchy> components of U shall organize exactly the same collection of geometric data.

7.2.69 Valid node/edge relationships

The following specifies the constraints for forming valid relationships between <DRM Feature Node>/<DRM Geometry Node> instances and <DRM Feature Edge>/<DRM Geometry Edge> instances, respectively:

  1. A <DRM Feature Node> instance FN has the following relationship with its <DRM Feature Edge> instances, if any exist.
    1. For each <Feature Edge> instance that has FN as a starting node, FN shall be associated to that <DRM Feature Edge> instance.
    2. For each <DRM Feature Edge> instance that has FN as an ending node, FN shall be associated to that <DRM Feature Edge> instance.
    3. If FN is neither the starting node nor the ending node of a given <DRM Feature Edge> instance, FN shall not be associated to that <DRM Feature Edge> instance.
    4. Consequently, for any given <DRM Feature Edge> instance FE of which FN is a starting or ending node, FE shall appear among the associates of FN either:
      1. once, if FN is FE’s starting node and not its ending node,
      2. once, if FN is FE’s ending node and not its starting node, or
      3. twice, if FE is a loop.
  2. A <DRM Geometry Node> instance GN has the following relationship with its associated <DRM Geometry Edge> instances, if any exist.
    1. For each <DRM Geometry Edge> instance GE that has GN as a starting node, GN shall be associated to GE.
    2. For each <DRM Geometry Edge> instance GE that has GN as an ending node, GN shall be associated to GE.
    3. If GN is neither the starting node nor the ending node of a given <DRM Geometry Edge> instance GE, GN shall not be associated to GE.
    4. Consequently, for any given <DRM Geometry Edge> instance GE of which GN is a starting or ending node, GE shall appear among the associates of GN once, where GN is either GE’s starting node or GE’s ending node but not both.

7.2.70 Variable meaning constraints

The following constraints apply to a <DRM Variable> instance:

  1. The value_type field shall be consistent with the meaning field.
  2. If an EA or Variable_Code of a value type that represents real numbers is specified in the meaning field, value_unit shall specify a unit belonging to the EDCS Unit Equivalence Class to which the EA or variable code is bound.
  3. If an EA or Variable_Code not of a value type that represents a real number is specified in the meaning field, value_unit field shall specify EUC_UNITLESS and value_scale field shall specify ESC_UNI.

If a <DRM Variable> instance specifies VARIABLE as the Property_Code_Type of its meaning field value, the constraints that apply on the value_type field that can be specified for the <DRM Variable> instance for each Variable_Code value are specified in Table 7.3.

Table 7.3 — <DRM Variable> value_type constraints

Variable_Code value Constraint
ACTIVE_STATE_VALUE The abstract value type shall be EDCS attribute value type BOOLEAN.
COLOUR_COORDINATE_1
COLOUR_COORDINATE_2
COLOUR_COORDINATE_3
The abstract value type shall be EDCS attribute value type REAL. The value_unit field shall specify EUC_UNITLESS and value_scale field shall specify ESC_UNI.
COLOUR_INDEX The abstract value type shall be EDCS attribute value type COUNT.
COLOUR_INTENSITY_LEVEL The abstract value type shall be EDCS attribute value type REAL. The value_unit field shall specify EUC_UNITLESS and value_scale field shall specify ESC_UNI.
GEOMETRY_TEXTURE The abstract value type shall be EDCS attribute value type BOOLEAN.
HEAT_PRODUCTION The abstract value type shall be EDCS attribute value type BOOLEAN.
LIGHT_SOURCE_ACTIVE The abstract value type shall be EDCS attribute value type BOOLEAN.
LIGHT_RENDERING_PROPERTIES_ACTIVE The abstract value type shall be EDCS attribute value type BOOLEAN.
LIGHT_RENDERING_PROPERTIES_CANDELA_VALUE

The abstract value type shall be EDCS attribute value type REAL. The value_unit field shall specify EUC_CANDELA and value_scale field shall specify ESC_UNI.

LSR_3D_LOCATION_U
LSR_3D_LOCATION_V
LSR_3D_LOCATION_W
The abstract value type shall be EDCS attribute value type REAL. The value_unit field shall specify a value that is a member of the EDCS equivalence class LENGTH.
POLYGON_FLAGS_COLLIDIBLE
POLYGON_FLAGS_HAT_TEST
POLYGON_FLAGS_INVISIBLE
POLYGON_FLAGS_LASER_RANGE_FINDING
The abstract value type shall be EDCS attribute value type BOOLEAN.
PROPERTY_SET_INDEX The abstract value type shall be EDCS attribute value type COUNT.
PROPERTY_TABLE_REFERENCE_INDEX_ON_AXIS The abstract value type shall be EDCS attribute value type COUNT.
REFERENCE_VECTOR_V0
REFERENCE_VECTOR_V1
REFERENCE_VECTOR_V2
The abstract value type shall be EDCS attribute value type REAL.
ROTATION_ANGLE The abstract value type shall be EDCS attribute value type REAL. The value_unit field shall specify EUC_RADIAN and value_scale field shall specify ESC_UNI.
SCALE_FACTOR The abstract value type shall be EDCS attribute value type REAL. The value_unit field shall specify a value that is a member of the EDCS equivalence class PURE_NUMBER.
SOUND_INSTANCE_ACTIVE The abstract value type shall be EDCS attribute value type BOOLEAN.
TEXTURE_COORDINATE_S
TEXTURE_COORDINATE_T
The abstract value type shall be EDCS attribute value type REAL. The value_unit field shall specify a value that is a member of the EDCS equivalence class PURE_NUMBER.
TRANSLATION_AMOUNT The abstract value type shall be EDCS attribute value type REAL. The value_unit field shall specify EUC_METRE.
TRANSLUCENCY_VALUE The abstract value type shall be EDCS attribute value type REAL. The value_unit field shall specify a value that is a member of the EDCS equivalence class PURE_NUMBER.

7.2.71 Volume shell face consistency

A <DRM Feature Face> instance shall appear no more than twice in a <DRM Feature Volume Shell> instance, once with a <DRM Face Direction> link object with front set to TRUE and once with a <DRM Face Direction> link object with front set to FALSE.

http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_IEC_18023-1_Ed1.html