Part 1: Functional specification
6 DRM classes
6.1 Introduction
6.1.1 Table of contents
Table 6.1 is the table of contents for this clause.
Table 6.1 — Table of contents
6.1.2 Description
This clause specifies the DRM classes used within this part of ISO/IEC 18023 to
specify the various objects that are to be represented. Such DRM classes are
composed of both fundamental data types and references to other DRM classes
using the handle data types specified in 5.4.3 Object. These
are used as the building blocks for more complex data structures that describe
composites of information.
6.2 Constraints
6.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.3 DRM class specifications.
6.2.2 Axis type constraints
The following constraints apply:
- In a <DRM Enumeration
Axis> instance X,
- The axis_type
of X shall correspond to an EA T bound to the abstract value type
ENUMERATION.
- The entries of X's axis_value_array
shall be distinct, valid EEs for T.
- In a <DRM Interval Axis>
instance X,
- The axis_type shall correspond to an EA bound to a numeric value type.
- Each individual entry in X's axis_interval_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_interval_value_array.
- If the axis_type is bound to an EQ, the value_unit shall
be a member of the specified EQ.
- If the axis_type is not bound to an EQ,
the value_unit and
scale_unit shall be set to EUC_UNITLESS
and ESC_UNI, respectively.
- All entries in X's axis_interval_value_array
shall be mutually disjoint.
- The entries in X's axis_interval_value_array
shall be arranged in either monotonically ascending or monotonically descending
order.
- In a <DRM Irregular Axis>
instance X,
- The axis_type shall correspond to an EA bound to a numeric value type.
- 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.
- If the axis_type is bound to an EQ, the value_unit shall
be a member of the specified EQ.
- If the axis_type is not bound to an EQ,
the value_unit and
scale_unit shall be set to EUC_UNITLESS
and ESC_UNI, respectively.
- All entries in X's axis_value_array
shall be distinct, and
- The entries in X's axis_value_array
shall be arranged in either monotonically ascending or monotonically descending
order.
- In a <DRM Regular Axis>
instance X,
- The axis_type shall correspond to an EA bound to a numeric value type.
- 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 axis_type's value is bound.
- If the axis_type is bound to an EQ, the value_unit shall
be a member of the specified EQ.
- If the axis_type is not bound to an EQ,
the value_unit and
scale_unit shall be set to EUC_UNITLESS
and ESC_UNI, respectively.
- In regard to spatial <DRM Axis>
instances,
- A spatial <DRM Axis> is a
<DRM Axis> instance with one of the
following as its axis_type.
- For angular coordinates, such as latitude and longitude, EAC_SPATIAL_ANGULAR_PRIMARY_COORDINATE and
EAC_SPATIAL_ANGULAR_SECONDARY_COORDINATE;
- For x, y coordinates,
EAC_SPATIAL_LINEAR_PRIMARY_COORDINATE and
EAC_SPATIAL_LINEAR_SECONDARY_COORDINATE; and
- For z and elevation coordinates,
EAC_SPATIAL_LINEAR_TERTIARY_COORDINATE.
- The first spatial_axes_count
<DRM Axis> components of a <DRM Property Grid> instance shall
be spatial <DRM Axis> instances, each
of which uniquely corresponds to a coordinate of the <DRM Property Grid> instance's spatial
reference frame.
- No other <DRM Axis> instances in
any other context shall be spatial.
6.2.3 Colour mapping constraints
The colour_mapping
field of a <DRM Colour> shall not be
empty.
In addition,
- The colour_mapping
field of a <DRM Colour> shall not be
empty.
- The PRIMARY and SECONDARY
flags may only be used for objects with <DRM Light Rendering
Properties>.
- The PRIMARY flag may not be combined with any other
use of the Colour_Mapping data type.
- The SECONDARY
flag may not be combined with any other use of the
Colour_Mapping data type.
6.2.4 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> are free to have different types of <DRM Primitive Colour>
components from other <DRM Colour
Table> components.
EXAMPLE Some components use <DRM Specular Colour>; some do not.
6.2.5 Connected edge constraints
The following constraints apply to instances of connected
edge DRM classes:
- A <DRM Feature Node> N has the
following relationship with its
<DRM Feature Edge> components, if any exist.
- For each <Feature
Edge> that has N as a starting node, N shall be associated to that <DRM Feature
Edge>.
- For each <Feature
Edge> that has N as an ending node, N shall be associated to that <DRM Feature
Edge>.
- If N is neither the starting node nor the ending node of a given <DRM Feature Edge>, N shall be
associated to that <DRM Feature Edge>.
- Consequently, for any given <DRM
Feature Edge> E of which N is a starting or ending node, E shall
appear among the associates of N either:
- once, if N is E’s starting node and not its ending node,
- once, if N is E’s ending node and not its starting node, or
- twice, if E is a loop.
- A <DRM Geometry Node>
N has the following relationship with its associated <DRM
Geometry Edge> instances, if any exist.
- For each <DRM Geometry
Edge> that has N as a starting node, N shall be associated to that <DRM
Geometry Edge>.
- For each <DRM Geometry
Edge> that has N as an ending node, N shall be associated to that <DRM Geometry
Edge>.
- If N is neither the starting node nor the ending node of a given <DRM Geometry Edge>, N shall not
be associated to that <Geometry
Edge>.
- Consequently, for any given <DRM
Geometry Edge> E of which N is a starting or ending node, E shall
appear among the associates of N either:
- once, if N is E’s starting node and not its ending node,
- once, if N is E’s ending node and not its starting node, or
- twice, if E is a loop.
6.2.6 Contained node constraints
The following constraints apply to instances of contained
node DRM classes:
- A <DRM Feature Face>
instance F shall have the
following relationship with its associated <DRM
Feature Node> instances, if any exist. 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. Conversely, if a
<DRM Feature Node> instance N lies
within the boundaries of F, N shall be associated with F. If no
<DRM Feature Node> instances lie
within the boundaries of F, F shall not be associated with any
<DRM Feature Node> instances.
- A <DRM Feature Volume> instance V
shall have the following relationship with its associated <DRM Feature Node> instances, if
any exist. 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. Conversely, if a <DRM Feature Node> instance N lies
within the boundaries of V, N shall be associated with V. If no <DRM Feature Node> instances lie
within the boundaries of V, V shall not be associated with any <DRM Feature Node> instances.
- A <DRM Geometry Face> instance F
shall have the following relationship with its associated
<DRM Geometry Node> instances, if
any. At any geometry topology level, if E is associated with any
<DRM Geometry Node> instances N,
N shall lie within the interior of F. Conversely, if a
<DRM Geometry Node> instance N
lies within the interior of F, N shall be associated with F. If no
<DRM Geometry Node> instances lie
within the boundaries of F, F shall not be associated with any
<DRM Geometry Node> instances.
- A <DRM Geometry Volume>
instance V shall have the following relationship with its associated
<DRM Geometry Node> instances, if
any exist. At any geometry topology level, if V is associated with any
<DRM Geometry Node> instance N,
N shall lie within the interior of V. Conversely, if a
<DRM Geometry Node> instance N
lies within the interior of V, N shall be associated with V. If no
<DRM Geometry Node> instances lie
within the interior of V, V shall not be associated with any
<DRM Geometry Node> instances.
6.2.7 Continuous LOD constraints
The following constraints apply:
- <DRM
Continuous LOD Related Geometry> instances can be used only in
the scope of some <DRM Environment
Root>.
- A <DRM Primitive
Geometry> instance that is within the component tree of a
<DRM
Continuous LOD Related Geometry> shall not have a <DRM Union Of Primitive
Geometry> component
6.2.8 Corresponding same data type
When the characteristic_value of an instance of class <DRM_Property_Characteristic>
corresponds to an actual numerical value such as the UPPER_BOUND,
the value shall have the same data type, units, and scale as the attribute being constrained.
6.2.9 Cylindrical structure
For a <DRM
Cylindrical Volume Extent> instance C, the following conditions shall
hold:
- The <DRM Reference
Vector> components of C shall comply with the restrictions imposed in
the specification of the <DRM
Cylindrical Volume Extent> class, including the restrictions on the
vector_type field values and the orientation relative to one another.
- If a <DRM Reference
Vector> component of C specifies a <DRM
Location> subclass component L, L shall be the <DRM Location 3D> specified by the
volume context in which C appears.
For a <DRM Volume Object> instance E, the following conditions shall hold:
- The <DRM Reference
Vector> components of E shall comply with the restrictions imposed in
the specification of the <DRM Volume
Object> class, including the restrictions on the vector_type
field values and the orientation relative to one another.
- If a <DRM Reference
Vector> component of E specifies a <DRM
Location> subclass component L, L shall be the <DRM Location 3D> component of E.
6.2.10 Distinct link objects
The following constraints apply to link objects:
- Under any single <DRM Aggregate
Feature> or <DRM Aggregate
Geometry> instance, the link objects (if any) shall have non-identical field
values. In the case of
<DRM
Separating Plane Related Geometry>, 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.
- Under any single topology hierarchy, whether an instance of <DRM Feature Topology
Hierarchy> or <DRM
Geometry Topology Hierarchy>, the link objects shall have non-identical field
values.
- Under any single model instance, whether a <DRM Feature Model Instance>
or a <DRM Geometry Model
Instance>, the <DRM
Model Instance Template Index> instances shall be distinct.
6.2.11 Edges bordering faces
<DRM Feature
Edge> instances have the following relationship with <DRM Feature Face> instances:
- If a <DRM Feature Edge>
instance E associates to a <DRM Feature
Face> instance F, E shall be part of one of the <DRM Feature Face Ring>
instances of F.
- At feature topology level 3 or higher, if a <DRM Feature Edge> instance E is
part of any <DRM Feature Face
Ring> instance of a <DRM Feature
Face> instance F, E shall have an association to F. At lower levels
of topology, this relationship may be present, but it is not required.
<DRM Geometry Edge> instances have
the following relationship with <DRM
Geometry Face> instances:
- If a <DRM
Geometry Edge> instance E associates to a
<Geometry
Face> instance F, E shall be part of one of the <DRM Geometry Face Ring>
instances of F.
- At geometry topology level 3 or higher, if a <DRM Geometry
Edge> instance E is part of any <DRM Geometry Face Ring>
instance of a <DRM Geometry Face>
instance F, E shall have an
association to F. At lower levels of topology, this relationship may be
present, but it is not required.
6.2.12 Environment_Root spatial reference frame
Consider a <DRM
Transmittal Root> instance TR having one or more <DRM Environment Root>
instances as components:
- For TR, no two <DRM
Environment Root> instances may have identical spatial reference frame
parameters.
- All <DRM Location> instances
appearing in the hierarchy rooted at a given <DRM Environment Root> instance
shall be specified within the spatial reference frame of that <DRM Environment Root>
instance, unless such <DRM Location>
instances
fall within the scope of an object that specifies its own spatial reference
frame, such as a <Property Grid>
or <DRM Image Anchor>.
- No <DRM Location> instances
under a <DRM Environment Root>
may be invalid within that spatial reference frame; they shall be either valid,
or "extended".
6.2.13 Face_Direction levels 0 - 3
At feature topology levels 0 through 3, the front field of <DRM Face Direction> shall
always be true.
6.2.14 Feature_Edge constraints
The following restrictions apply:
- The <DRM Location> instances within a <DRM Feature Edge> shall be
distinct (that is, no two may have the same coordinates).
- <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.
- At feature topology level 2 or higher, no <DRM Feature Edge> may intersect with or
overlap another <DRM Feature Edge>.
- At feature topology level 3, each <DRM
Feature Edge> forms part of the boundaries of exactly two <DRM Feature Face> instances.
6.2.15 Face ring edge consistency
The following constraints apply:
- For each consecutive <DRM
Feature Edge> within a <DRM
Feature Face Ring>, and for each consecutive <DRM Geometry Edge> within a <DRM Geometry Face Ring>,
the <DRM Edge Direction>
shall be consistent with the starting and ending nodes of the edge.
- A <DRM
Feature Edge> shall appear no more than twice in a <DRM Feature Face Ring>, once
with each orientation.
- A <DRM Geometry Edge>
shall appear no more than twice in a <DRM
Geometry Face Ring>, once with each orientation.
6.2.16 Hierarchy summary constraints
The following constraints apply:
- An instance of <DRM
Hierarchy Summary Item> shall have a drm_class field value corresponding
to one of the following:
- <DRM Feature
Hierarchy> or one of its subclasses, or
- <DRM Geometry
Hierarchy> or one of its subclasses.
- 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.
- Consider a <DRM Environment
Root> instance E,
- 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:
- S’s drm_class shall match that of H.
- S’s multiplicity_meaning value
shall be EXACT, and its multiplicity
field shall have value 1.
- 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.
- 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 constraint
- S’s drm_class shall match that of H.
- S’s multiplicity_meaning shall be
EXACT, and its multiplicity
shall have value 1.
- 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.
- Consider a <DRM Model> instance M.
- 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.
- S’s drm_class shall match that of H.
- S’s multiplicity_meaning shall be
EXACT, and its multiplicity
shall have value 1.
- 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.
- If M has a <DRM Feature
Model> 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.
- S’s drm_class shall match that of H.
- S’s multiplicity_meaning shall be
EXACT, and its multiplicity
shall have value 1.
- 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.
- 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.
6.2.17
Homogeneous light rendering properties
A <DRM
Light Rendering Properties> may only contain one subclass of <DRM Directional Light
Behaviour>.
6.2.18 Image_Anchor spatial reference frame
Consider a <DRM
Image Anchor> instance X.
- The <DRM Location> instances
in the scope of X shall be valid or “extended” within the spatial
reference frame specified by X's srf_parameters.
- 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.
- If X is a component of a <DRM
Image Mapping Function> instance F, and if F appears within the context
of some spatial reference frame S, X's srf_parameters shall equal those
specified by S.
6.2.19 Image mapping functions
and texture coordinates
The number of
<DRM Image Mapping Function>
instances an instance of a concrete subclass 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 a concrete subclass of
<DRM Geometry Representation>.
<DRM Image
Mapping Function> instances for instances of a concrete subclass of
<DRM
Feature Representation>, on the other hand, 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 a concrete subclass 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.
6.2.20 Index_Codes within tables
The following constraints apply:
- No <DRM Property> instance,
other than a <DRM Table
Property Description> instance, shall have an Index_Code
meaning value.
Consider a <DRM Data Table>
instance DT, with a component <DRM Table Property
Description> instance X, where X has a meaning value of
DATA_TABLE_LIBRARY.
For each corresponding cell value N in the <DRM Data Table> instance D, if N
is not a sentinel value for missing or excluded, N is an index into the ordered
set of <DRM Data Table>
components of a <DRM Data Table
Library> instance where:
- The transmittal in which the <DRM
Data Table> instance D resides shall have a <DRM Data Table Library> instance L,
- The <DRM Data Table
Library> instance L shall have at least N ordered <DRM Data Table> components, and
- The Nth <DRM Data Table>
component of the <DRM Data Table
Library> instance L shall have a <DRM
Classification Data> instance whose tag
matches the component_data_table_ecc of the <DRM Table Property
Description> instance X.
- If the <DRM
Classification Data> instance of the referenced Nth <DRM Data Table> instance has no component <DRM Property Value> instances, the<DRM Table Property
Description> instance X shall have none.
- If the <DRM
Classification Data> instance of the referenced Nth <DRM Data Table> instance has j component <DRM Property Value> instances, the <DRM Table Property
Description> instance X shall have exactly j matching <DRM Property Value> instances.
- 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 DATA_TABLE_COMPONENT.
For each corresponding cell value N in the <DRM Data Table> instance D, if N
is not a sentinel value for missing or excluded, N is an index into the ordered
set of <DRM Data Table>
components of D, where:
- The <DRM Data Table> D
shall have at least N ordered <DRM Data
Table> components,
- The Nth <DRM Data Table>
component of D shall have a <Classification Data>
instance whose
tag matches the component_data_table_ecc
of the <DRM Table
Property Description> instance X.
- If the <DRM
Classification Data> instance of the referenced Nth <DRM Data Table> instance has no component <DRM Property Value> instance, the <DRM Table Property
Description> instance X shall have none.
- If the <DRM
Classification Data> instance of the referenced Nth <DRM Data Table> instance has j component <DRM Property Value> instances the <DRM Table Property
Description> instance X shall have exactly j matching <DRM Property Value> instances.
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
PROP_TABLE_REF_COMPONENT.
For each corresponding cell value N in the <DRM Data Table> instance D, if N
is not a sentinel value for missing or excluded, N is an index into the ordered
set of <DRM Property Table
Reference> components of D, where:,
- The <DRM Data Table>
instance D
shall have at least N ordered <DRM
Property Table Reference> components,
- 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.
- If the <DRM
Classification Data> of the referenced <DRM Property Table> has no
component <DRM Property Value>
instances,
the <DRM Table Property
Description> instance X shall have none.
- If the <DRM
Classification Data> instance of the referenced <DRM Property Table> instance has j
component <DRM Property Value>
instances,
the <DRM Table Property
Description> instance X shall have exactly j matching <DRM Property Value> instances.
- 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.
- Consider a <DRM Data Table>
instance D, with a component <DRM Table Property
Description> instance X where X has an EAC as its
meaning. If X has <DRM Property
Value> components, they shall exist to qualify the meaning of X such that X
is considered unique among the <DRM Table Property
Description> components of DT if its qualified meaning is unique among
them.
- A <DRM Table
Property Description> instance that is not covered by b, c, d, or f
above shall have no <DRM Property
Value> components.
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 N in the <DRM Data Table> instance D, if N
is not a sentinel value for missing or excluded, N 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.
6.2.21 Inheritance rule for Location
Given any 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
aggregation tree stemming from that object.
6.2.22 Level
of detail related organizing principle
For any level of detail related organization L, whether a
<DRM LOD
Related Features> or <DRM
LOD
Related Geometry>:
- The instance of a concrete subclass of
<DRM Base
LOD Data> for each branch of L shall match the class
specified by L’s lod_data_type field.
- For each pair of branches, if the instances of a concrete subclass of
<DRM Base
LOD Data> overlap, neither shall be a subset of the other.
- For instances of <DRM Distance
LOD Data>, neither interval shall be contained within the other. Specifically:
- The ranges may touch at their endpoints; that is, the
minimum_range of
one may equal the maximum_range of the other.
- 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.
- For instances of <DRM Volume
LOD Data>:
- If the two branches both have outside = FALSE,
neither volume may be contained within the other.
- 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 6.2.10 Distinct link objects.
- 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:
- If C is a <DRM Distance
LOD Data> and L is of type DISTANCE,
each link object specified by L shall specify a range within the region covered by C.
- If C is a <DRM Volume
LOD Data> and L is of type VOLUME,
each link object specified by L shall specify a volume lying within that of C.
- No other classes of C permit a matching L to occur in their inheritance tree.
6.2.23 LSR model and reference surfaces
A <DRM Model> specified
using an LSR spatial reference frame (SRF) may not contain (aggregate) any <DRM Reference Surface>
instances.
6.2.24 LSR_Transformation components
An <DRM LSR
Transformation> instance L shall have a <DRM Local 4x4>, an ordered set of <DRM LSR Transformation Step>
components, or both. If L has both a <DRM
Local 4x4> 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>.
6.2.25 Mandatory metadata
Table 6.2 lists
metadata classes. When these classes are instanced, at least the designated
fields shall be populated.
Table 6.2 — Mandatory metadata
|
<DRM Access>
|
Consider a <DRM Access> instance A.
- If A's access_constraints
is set to OTHER_CONSTRAINTS.
A's other_constraints
field shall contain a non-empty string specifying what those other constraints
are.
- If A's use_constraints
is set to OTHER_CONSTRAINTS.
A's other_constraints
field shall contain a non-empty string specifying what those other constraints
are.
|
|
<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.
|
|
<DRM Description>
|
The field abstract shall be a non-empty string
|
|
<DRM Keywords>
|
The field keyword_array shall be
non-NULL.
For each entry in keyword_array, the thesaurus field shall contain a non-empty string.
To indicate that no thesaurus is applicable, the thesaurus
field shall have the value NONE.
For each entry in keyword_array, the keyword_list shall be a non-empty string, where keywords
are separated by semicolons.
For any two entries in keyword_array, either the
code fields or the thesaurus fields
shall have different values.
|
|
<DRM Lineage>
|
An instance of <DRM Lineage> shall specify at least
one of the following:
- a <DRM Process Step>,
- a <DRM Source>, or
- a non-empty string within its statement field.
|
|
<DRM Responsible Party>
|
The locale of each
String field within a <DRM
Responsible Party> instance shall be specified using the same country
code as that specified by its address field.
At least one of the
following fields shall contain a non-empty string:
- individual_name,
- position_name, or
- organization_name.
The voice_phone field of the
Contact_Information value shall be a non-empty string.
The email_address field of the
Contact_Information value shall contain a comma-separated
list of syntactically valid e-mail addresses.
The web_site field of the
Contact_Information> value,
if specified, shall contain a comma-separated list of syntactically valid
URLs.
At least one of the following shall be a non-empty string:
- individual_name,
- position_name, and/or
- organization_name.
email_address shall be
a non-empty string, and shall be a comma-separated list of syntactically valid
email addresses
web_site, if specified,
shall be a comma-separated list of syntactically valid URLs
The locale of each
String field within an instance of
<DRM
Responsible Party> shall be specified using the same country code as
that used by the address except as noted above.
|
|
<DRM Process
Step>
|
Given an instance P of
<DRM Process Step>, the following
conditions shall hold:
- P’s description field shall be a non-empty
string.
- P’s <DRM Absolute Time> component shall have a time_significance value of
OCCURRENCE.
- If P has <DRM Responsible Party>
components, each shall specify PROCESSOR as its role.
|
|
<DRM Source>
|
The description field value shall be a non-empty string.
|
6.2.26 Model reference type constraints
The following constraints apply:
- If an instance of <DRM Model>
has model_reference_type value set to ROOT
or ROOT_AND_COMPONENT,
the <DRM Model> instance’s name shall
be unique in the scope of its aggregate <DRM
Model Library>.
- If an instance of <DRM Model>
has model_reference_type set to COMPONENT,
the following also apply:
- Any <DRM Geometry
Model Instance> or <DRM
Feature Model Instance> referencing that <DRM
Model> shall be in the scope of another <DRM
Model> instance;
- Its dynamic_model_processing flag shall be FALSE.
6.2.27 Model spatial reference frame
The following constraints apply:
- Consider a <DRM Model>
instance M specified in a spatial reference frame other than Local Space Rectangular.
- M shall be instanced only by
<DRM Geometry Model
Instance> and/or <DRM
Feature Model Instance> instances specified in a matching spatial
reference frame, and
- M’s has_moving_parts field shall be set to
FALSE.
- Consider a <DRM Model> instance M
specified in a Local Space Rectangular spatial reference frame.
- If M’s has_units field is set to
FALSE, M shall not be referenced by any
<DRM Geometry Model
Instance> or <DRM
Feature Model Instance> instances.
- If M is to be instanced into a non-LSR reference frame 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.
- M cannot be instanced into another Local Space Rectangular reference frame
unless the target spatial reference frame has identical parameters to the
parameters of M.
- 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, M’s has_moving_parts
field shall be set to TRUE;
otherwise, M’s has_moving_parts
field shall be set to FALSE.
- All <DRM Location> instances
under a <DRM Model> instance shall be expressed
in the spatial reference frame specified by that <DRM
Model> instance.
6.2.28 Nested primitive geometry
When a <DRM
Primitive Geometry> instance contains a <DRM Union Of Primitive
Geometry> instance, for nesting reasons, the resulting geometry shall be coplanar.
The possible combinations at any level of nesting are:
- <DRM Polygon> can nest:
<DRM Polygon>, <DRM Ellipse>, <DRM Line>, <DRM
Arc>, <DRM Point>, and <DRM Finite Element Mesh>.
- <DRM Ellipse> can
nest:
<DRM Polygon>, <DRM Ellipse>, <DRM Line>, <DRM
Arc>, <DRM Point>, and <DRM Finite Element Mesh>.
- <DRM Line> can nest:
<DRM Line>, <DRM
Arc>, and <DRM Point>.
- <DRM Arc> can nest:
<DRM Line>, <DRM
Arc>, and <DRM Point>.
- <DRM Point> can nest:
<DRM Point>.
- <DRM Volume Object> can nest:
<DRM Finite Element Mesh>
as an interior 3D mesh.
- <DRM Finite
Element Mesh> cannot nest.
6.2.29 Non-crossing aggregations
Aggregations cannot cross <DRM
Model> instances and/or <DRM
Environment Root> instances.
6.2.30 Non-crossing associations
Associations cannot cross <DRM
Model> instances and/or <DRM
Environment Root> instances, except for <DRM Geometry Model
Instance> instance to <DRM
Geometry Model> instance, and <DRM Feature Model Instance>
instance to <DRM Feature Model>
instance.
6.2.31 Non-cyclic aggregations
Aggregations are not allowed to form cycles. Associations
are. By this rule:
- an object can associate to itself; e.g., a <DRM Point Feature> can associate
with itself;
- a <DRM Feature
Representation> instance
can associate to a <DRM Geometry
Hierarchy> instance that associates to the
<DRM Feature
Representation>; and
- an object cannot have itself as a component.
6.2.32 Non-empty Environment_Root
An <DRM
Environment Root> shall have as components a <DRM
Feature Hierarchy> and/or a <DRM
Geometry Hierarchy> instance.
6.2.33 Non-empty Model
The following constraints apply:
- All <DRM Model> instances shall
have either a <DRM Feature Model>,
a <DRM Geometry Model>, or
both.
- A <DRM Model> is permitted to
have an empty <DRM Geometry
Model>, that is, a <DRM Geometry
Model> without a component <DRM
Geometry Hierarchy>, only if:
- The <DRM Model> either does not
have a <DRM Feature Model>, or
its <DRM Feature Model> is
empty;
- The <DRM Model> has a <DRM Classification Data>
component with tag set to ECC_OBJECT;
- The <DRM Model> is tagged as
ROOT_AND_COMPONENT so
that it can be instanced within <DRM
Environment Root> scopes as well as other <DRM
Model> instances; and
- The empty <DRM Geometry
Model> 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.
- A <DRM Model> is permitted to
have an empty <DRM Feature
Model>, that is, a <DRM
Feature Model> without
a <DRM Feature Hierarchy>
component, only if:
- The <DRM Model> either does not
have a <DRM Geometry Model>,
or its <DRM Geometry Model>
is empty;
- The <DRM Model> has a <DRM Classification Data>
component with tag set to ECC_OBJECT; and
- The <DRM Model> is tagged as
ROOT_AND_COMPONENT so that it can be instanced
within <DRM Environment Root>
scopes as well as other <DRM Model>
instances.
- No <DRM Model> other than a
properly constructed empty <DRM Model>
is permitted to have a <DRM Classification
Data> with ECC_OBJECT
6.2.34 Non-overlapping DRM class
summary items
In a list of <DRM
DRM Class Summary Item> instances, no two shall have their type fields
set to the same class type.
6.2.35 Non-selfoverlapping
perimeter data locations
The perimeter specified by a <DRM Perimeter Data> instance
shall not intersect with or overlap itself.
6.2.36 No property conflicts
The following restrictions apply:
No two directly attached <DRM
Property Value> components of an object instance may specify identical
values for their meaning fields.
If an inherited <DRM Property Value>
has the same meaning field value as a directly attached
<DRM Property Value>, the
directly attached component replaces the inherited component in the inheritance
context.
No two directly attached <DRM
Property Description> components of an object instance may specify
identical values for their meaning fields.
If an inherited
<DRM Property Description>
has the same meaning field value as a directly attached
<DRM Property Description>,
the directly attached component replaces the inherited component in the
inheritance context.
6.2.37 Octant related organizing
principle
For any oct tree-related organization O, whether a <DRM Octant Related
Geometry> or a <DRM Octant
Related Features> instance,
- O shall have a <DRM
Spatial Extent> component, specifying the bounding
volume that the oct tree is organizing into octants. Since a volume is being
specified, this <DRM Spatial Extent>
shall be specified in terms of <DRM Location
3D> components.
- Each branch of O shall comply with the following constraints:
- 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.
- The regions specified by the branches shall not overlap; that is, the
corresponding <DRM
Spatial Extent>
instances shall not overlap.
- 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.
- If a branch with UPPER_NORTHWEST
is present, its <DRM
Spatial Extent> instance
shall specify the area of the upper northwest octant, from point “h” to point
“o” in Figure
5.3, such that:
- its eastern boundary aligns with the western boundary of the UPPER_NORTHEAST octant’s
<DRM Spatial Extent> instance, if
present;
- its southern boundary aligns with the northern boundary of the UPPER_SOUTHWEST octant’s
<DRM Spatial Extent> instance, if
present; and
- its lower boundary aligns with the upper boundary of the LOWER_NORTHWEST octant’s
<DRM Spatial Extent> instance, if
present.
- If a branch with UPPER_NORTHEAST
is present, its <DRM Spatial Extent>
instance
shall specify the area of the upper northeast octant, from point “g” to point
“n” in Figure
5.3, such that:
- the <DRM Location 3D>
instance representing its upper northeast corner corresponds to that of O's <DRM Spatial Extent> instance;
- its western boundary aligns with the eastern boundary of the UPPER_NORTHWEST octant’s
<DRM Spatial Extent> instance, if
present, and its southern boundary aligns with the northern boundary of the UPPER_SOUTHEAST octant’s
<DRM Spatial Extent> instance, if
present; and
- its lower boundary aligns with the upper boundary of the LOWER_NORTHEAST octant’s
<DRM Spatial Extent> instance,
if present.
- If a branch with UPPER_SOUTHWEST
is present, its <DRM
Spatial Extent> instance shall specify the area of the southwest octant, from
point “f” to point “m” in
Figure
5.3, such that:
- its eastern boundary aligns with the western boundary of the UPPER_SOUTHEAST octant’s
<DRM Spatial Extent> instance, if
present;
- its northern boundary aligns with the southern boundary of the UPPER_NORTHWEST octant’s
<DRM Spatial Extent> instance, if
present; and
- its lower boundary aligns with the upper boundary of the LOWER_SOUTHWEST octant’s
<DRM Spatial Extent> instance, if
present.
- If a branch with UPPER_SOUTHEAST
is present, its <DRM Spatial Extent>
instance
shall specify the area of the southeast octant, from point “e” to point “l” in
Figure
5.3, such that:
- its western boundary aligns with the eastern boundary of the UPPER_SOUTHWEST octant’s
<DRM Spatial Extent> instance, if
present;
- its northern boundary aligns with the southern boundary of the UPPER_NORTHEAST octant’s
<DRM Spatial Extent> instance, if
present; and
- its lower boundary aligns with the upper boundary of the LOWER_SOUTHEAST octant’s
<DRM Spatial Extent> instance, if
present.
- If a branch with LOWER_NORTHWEST
is present, its <DRM Spatial Extent>
instance
shall specify the area of the upper northwest octant, from point “d” to point
“k” in Figure
5.3, such that:
- its eastern boundary aligns with the western boundary of the LOWER_NORTHEAST octant’s
<DRM Spatial Extent> instance, if
present;
- its southern boundary aligns with the northern boundary of the LOWER_SOUTHWEST octant’s
<DRM Spatial Extent> instance, if
present; and
- its upper boundary aligns with the lower boundary of the UPPER_NORTHWEST octant’s
<DRM Spatial Extent> instance, if
present.
- If a branch with LOWER_NORTHEAST
is present, its <DRM Spatial Extent>
instance
shall specify the area of the upper northeast octant, from point “c” to point
“j” in Figure
5.3, such that:
- its western boundary aligns with the eastern boundary of the LOWER_NORTHWEST octant’s
<DRM Spatial Extent> instance, if
present;
- its southern boundary aligns with the northern boundary of the LOWER_SOUTHEAST octant’s
<DRM Spatial Extent> instance, if
present; and
- its upper boundary aligns with the lower boundary of the UPPER_NORTHEAST octant’s
<DRM Spatial Extent> instance, if
present.
- If a branch with LOWER_SOUTHWEST
is present, its <DRM
Spatial Extent> instance shall specify the area of the southwest octant, from
point “b” to point “i” in
Figure
5.3, such that:
- the <DRM Location 3D>
instance representing its lower southwest corner corresponds to that of O's <DRM Spatial Extent> instance;
- its eastern boundary aligns with the western boundary of the LOWER_SOUTHEAST octant’s
<DRM Spatial Extent> instance, if
present;
- its northern boundary aligns with the southern boundary of the LOWER_NORTHWEST octant’s
<DRM Spatial Extent> instance, if
present; and
- its upper boundary aligns with the lower boundary of the UPPER_SOUTHWEST octant’s
<DRM Spatial Extent> instance, if
present.
- If a branch with LOWER_SOUTHEAST
is present, its <DRM Spatial Extent>
shall specify the area of the southeast octant, from point “a” to point “h” in
Figure
5.3, such that:
- its western boundary aligns with the eastern boundary of the LOWER_SOUTHWEST octant’s
<DRM Spatial Extent>, if
present;
- its northern boundary aligns with the southern boundary of the LOWER_NORTHEAST octant’s
<DRM Spatial Extent>, if
present; and
- its upper boundary aligns with the lower boundary of the UPPER_SOUTHEAST octant’s
<DRM Spatial Extent>, if
present.
- The strict_organizing_principle and
unique_descendants field values of O shall be
TRUE.
6.2.38 Perimeter
related feature topology partitioning
The following conditions apply to
DRM_Perimeter_Related_Feature_Topology
DRM class instances:
- The regions specified by the components of a DRM_Perimeter_Related_Feature_Topology
object shall not overlap.
- A DRM_Feature_Topology
object may belong to at most one
DRM_Perimeter_Related_Feature_Topology
instance.
6.2.39 Perimeter related
organizing principle
The following constraints apply:
- For any perimeter-related organization,
- 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.
- For each branch of the organization, every primitive within that branch
shall have a spatial extent overlapping that of the branch.
- For topological organizations:
- A <DRM Feature Topology>
instance shall belong to at most one <DRM Perimeter
Related Feature Topology> instance.
- A <DRM Geometry
Topology> instance shall belong to at most one <DRM Perimeter
Related Geometry Topology> nstance.
- Consider a perimeter-related organization P, which is either <DRM Perimeter Related
Features> instance or a <DRM
Perimeter Related Geometry> instance.
- 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.
- 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.
- If P is a <DRM
Perimeter Related Features>, 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.
- If P is a <DRM Perimeter Related Geometry>, 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.
6.2.40 Precedence of
Property_Set_Index
Instances of concrete subclasses of
<DRM Geometry Representation>
or <DRM Feature
Representation> may
contain attribute and/or metadata objects and also <DRM Property Set Index>
objects that refer to <DRM Property
Set> objects. If there is a clash between the attribute or metadata objects
that are contained by the instance of a concrete subclass of
<DRM Geometry Representation>
or <DRM Feature
Representation>
and any attribute or metadata objects that are contained by <DRM Property Set> objects, objects
contained directly by instances of concrete subclasses of
<DRM Geometry Representation>
or <DRM Feature
Representation> take precedence.
DRM Geometry Representation
and <DRM Feature> instances may contain an
ordered list of <DRM Property
Set Index> instances. If a <DRM
Geometry> or <DRM Feature>
contains references to more than one <DRM
Property Set> and there is a clash between the property objects they
contain, property objects contained in <DRM
Property Set>s referenced first in this ordered list have precedence
over those contained in <DRM Property
Set> instances that are referenced later.
Precedence will behave differently depending on the
multiplicity of the relationship that the attribute or metadata object in
question has with the containing <DRM
Geometry> or <DRM Feature>.
In the event of a clash, the following rules will apply based on this
enumeration.
- Zero or one:
The object contained directly by the <DRM
Geometry> or <DRM Feature>
is used. If the clash is between objects in <DRM
Property Set> s, the object contained in the <DRM Property Set> that is
referenced earliest in the list of <DRM
Property Set Index> objects is used.
- Zero or more:
Those objects contained directly by the <DRM
Geometry> or <DRM Feature> instances
are used, followed by those contained in the <DRM Property Set> instances, in the order
that the <DRM Property Set> instances
are referenced by the <DRM Geometry> or
<DRM Feature> instances.
- Zero or more {ordered}:
Those objects contained directly by the <DRM
Geometry> or <DRM Feature> instances
are used in order. Those contained in the <DRM
Property Set> instance referenced by the first <DRM Property Set Index>
object in the list are used, in order followed by those contained in the
<DRM Property Set> instance referenced by
the second <DRM Property Set
Index> object in the list, in order.
This is continued until there are no further objects in the
list.
6.2.41 Primitive summary item constraints
The following constraints apply:
- An instance of <DRM
Primitive Summary Item> shall have a drm_class
field value corresponding to one of the following:
- <DRM Primitive Feature>
or one of its subclasses,
- <DRM Primitive
Geometry> or one of its subclasses, or
- classes that may legally appear in the component tree of a <DRM Primitive Feature>
or <DRM Primitive Geometry>
instance.
- 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.
- 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, either in its
<DRM Feature Hierarchy>
instance, its