Source : ISO 10303-41
SCHEMA document_schema;
REFERENCE FROM
product_definition_schema -- ISO 10303-41
(product,
product_definition,
product_definition_formation);
REFERENCE FROM
support_resource_schema -- ISO 10303-41
(bag_to_set,
identifier,
label,
text);
TYPE product_or_formation_or_definition =
SELECT
(product,
product_definition_formation,
product_definition);
END_TYPE;
ENTITY document;
id : identifier;
name : label;
description :
OPTIONAL
text;
kind : document_type;
INVERSE
representation_types : SET[0:?] OF document_representation_type FOR represented_document;
END_ENTITY;
ENTITY document_product_association;
name : label;
description :
OPTIONAL
text;
relating_document : document;
related_product : product_or_formation_or_definition;
END_ENTITY;
ENTITY document_relationship;
name : label;
description :
OPTIONAL
text;
relating_document : document;
related_document : document;
END_ENTITY;
ENTITY document_representation_type;
name : label;
represented_document : document;
END_ENTITY;
ENTITY document_type;
product_data_type : label;
END_ENTITY;
ENTITY document_usage_constraint;
source : document;
subject_element : label;
subject_element_value : text;
END_ENTITY;
ENTITY document_with_class
SUBTYPE OF (document);
class : identifier;
END_ENTITY;
FUNCTION acyclic_document_relationship
(relation : document_relationship; relatives : SET[1:?] OF document; specific_relation : STRING) : BOOLEAN;
LOCAL x : SET OF document_relationship; END_LOCAL; IF relation.relating_document IN relatives THEN RETURN (FALSE); END_IF; x := QUERY(doc <* bag_to_set(USEDIN(relation.relating_document, 'DOCUMENT_SCHEMA.' + 'DOCUMENT_RELATIONSHIP.' + 'RELATED_DOCUMENT')) | specific_relation IN TYPEOF(doc)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_document_relationship(x[i], relatives + relation.relating_document, specific_relation) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (TRUE);
END_FUNCTION;
END_SCHEMA; -- document_schema