Skip to content

Latest commit

 

History

History
398 lines (355 loc) · 61.3 KB

sbol2-conformance.md

File metadata and controls

398 lines (355 loc) · 61.3 KB

SBOL 2.3.0 Conformance Report

This file is generated by cargo run -p sbol2 --bin generate-sbol2-conformance-report. It is committed and CI runs git diff --exit-code docs/sbol2-conformance.md to enforce freshness after every change to the SBOL 2 rule catalog.

Source spec: spec/SBOL2.3.0.md (version 2.3.0).

The catalog is the libSBOLj machine ruleset: the 268 numbered SBOL 2 validation rules sbol-rulegen emits from rules.toml. It is the SBOL 2 peer of the SBOL 3 catalog in conformance.md; both share the sbol_core classification types and the same ValidationConfig.

Headline coverage

Every one of the 222 machine-checkable rules is backed by a firing negative fixture and a non-firing positive fixture. Each rule has a hermetic, minimal SBOL 2 document that violates exactly that rule and is asserted to report it at the catalog severity (MUST rules as errors, SHOULD rules as warnings), plus a valid instance of the same construct asserted not to report it, all evaluated under ValidationConfig::all_on(). The suite fails at build time if any machine-checkable rule lacks either fixture, so the 222/222 coverage is enforced, not asserted. The per-rule matrix is committed at sbol2-negative-coverage.md and the fixtures live in crates/sbol2/tests/rule_cases/; this matches the SBOL 3 validator's standard in negative-coverage.md.

All 222 of the 222 machine-checkable rules carry validation logic. None are marked Unimplemented (100.0%). The empirical SBOLTestSuite negative corpus is reported separately under InvalidFiles below; its Deferred rows record downloaded corpus fixtures not yet strictly error-rejected (SHOULD-level warnings, reader-scope cases, and the ▲ rules that require cross-document resolution), each of which nonetheless has a firing hermetic negative in the per-rule corpus above.

The catalog tracks all 268 SBOL 2.3.0 validation rules. 46 carry the ▲ status: conditions the spec does not expect a tool to machine-report (they depend on ontology membership, external resolution, or human judgement). Those are tracked separately from the headline percentage: the runtime signals them as RuleCoverage::not_applied { MachineUncheckable }, and the validator emits at most warnings (never errors) when its local subset can decide a sub-case.

Count
Total rules in catalog 268
▲ machine-uncheckable 46
Machine-checkable 222
  → with validation logic 222
  → marked Unimplemented 0

Status taxonomy

Every rule classifies into one of five statuses shared with the SBOL 3 catalog. The Blocker column carries the secondary axis where it applies.

Status Count Algorithm Diagnostics Blocker meaning
Error 158 Complete Errors (none)
Warning 30 Complete Warnings (none)
Configurable 34 Complete; scope or severity varies by config Errors / Warnings per config Which configuration axis: Resolver, Ontology snapshot, Policy, or External
MachineUncheckable 46 May have local subset Warnings only, on positively-decidable cases Why the rule is ▲: Ontology, Policy, or External
Unimplemented 0 None Never emits What's needed: Ontology data, Resolver protocol, Policy decision
Total 268

By normative force

RFC 2119 keyword Count
MUST 222
SHOULD 46

Validation gate model

libSBOLj dispatches rule families from distinct passes controlled by four validation-mode flags. Each rule declares the gate (the pass) that runs it. Always rules run in every configuration; the other gates run only when their ValidationConfig flag is set.

Gate ValidationConfig flag Count Runs when
Always (always) 198 Every validation configuration.
Compliant compliant 5 The compliant-URI structural family (default on).
Complete complete 17 The document-completeness family: every referenced object present (default on).
BestPractice best_practice 48 The SHOULD-level recommendation family (default off).

ValidationConfig is the same type the SBOL 3 validator uses. The SBOL 2 validator reads its compliant, complete, and best_practice flags to select gates, plus types_in_uri (compliant-URI type-token expectations) and keep_going (collect every issue rather than stopping at the first). ValidationConfig::all_on() enables every gate; ValidationConfig::default() runs compliant + complete and leaves best_practice off, matching libSBOLj's default.

Configurable

34 rules. Behavior depends on configuration. The Blocker column names the axis:

  • Resolver: algorithm needs cross-document resolution for full scope. Without it, coverage records LocalReferencesOnly.
  • Ontology: algorithm correct for every snapshot-known term; out-of-snapshot terms left undecided by design.
  • Policy: algorithm runs at the conservative default; stricter or looser modes alter emit behavior.
  • External: local-only mode is the implementation. The spec scope is structurally unreachable without external infrastructure; the validator does what it can locally and documents the boundary.

By configuration axis

Axis Count
Resolver 17
Ontology 16
External 1
Rule Axis Note
sbol2-10220 External Objects with the same persistentIdentity MUST be instances of the same class.
sbol2-10222 Resolver Each URI contained by the wasGeneratedBys property of an Identified object MUST refer to an Activity object.
sbol2-10307 Resolver Each URI contained by the attachments property of a TopLevel MUST refer to an Attachment object.
sbol2-10407 Ontology The encoding property of a Sequence SHOULD contain a URI from Table 1.
sbol2-10511 Ontology The roles property of a ComponentDefinition SHOULD NOT contain a URI that refers to a term from the sequence feature branch of the SO unless its types property contains the DNA or RNA type URI listed in Table 2.
sbol2-10513 Resolver Each URI contained by the sequences property of a ComponentDefinition MUST refer to a Sequence object.
sbol2-10525 Ontology The types property of a ComponentDefinition SHOULD contain a URI from Table 2.
sbol2-10527 Ontology If the types property of a ComponentDefinition contains the DNA or RNA type URI, then its roles property SHOULD contain exactly one URI that refers to a term from the sequence feature branch of the SO.
sbol2-10528 Ontology If the types property of a ComponentDefinition contains the DNA or RNA type URI, then its types property SHOULD also contain at most one URI that refers to a term from the topology attribute branch of the SO.
sbol2-10529 Ontology The types property of a ComponentDefinition SHOULD NOT contain a URI that refers to a term from the topology attribute or strand attribute branch of the SO unless its types property contains the DNA or RNA type URI listed in Table 2.
sbol2-10604 Resolver The URI contained by the definition property MUST refer to a ComponentDefinition object.
sbol2-10706 Ontology The roles property of a Component SHOULD NOT contain a URI that refers to a term from the sequence feature branch of the SO unless the types property of the ComponentDefinition referred to by its definition property contains the DNA or RNA type URI listed in Table 2.
sbol2-10707 Ontology If the types property of the ComponentDefinition referred to by its definition contains the DNA or RNA type URI, then its roles property SHOULD contain no more than one URI that refers to a term from the sequence feature branch of the SO.
sbol2-10807 Resolver The ComponentInstance referred to by the remote property of a MapsTo MUST have an access property that contains the URI http://sbols.org/v2#public.
sbol2-11412 Ontology The URI contained by the restriction property SHOULD come from Table 7.
sbol2-11507 Ontology The language property of a Model SHOULD contain a URI that refers to a term from the EDAM ontology.
sbol2-11511 Ontology The framework property SHOULD contain a URI that refers to a term from the modeling framework branch of the SBO.
sbol2-11608 Resolver Each URI contained by the models property of a ModuleDefinition MUST refer to a Model.
sbol2-11703 Resolver The URI contained by the definition property of Module MUST refer to a ModuleDefinition.
sbol2-11905 Ontology Exactly one URI contained by the types property of an Interaction SHOULD refer to a term from the occurring entity relationship branch of the SBO.
sbol2-11907 Ontology If the participations property of an Interaction refers to one or more Participation objects, and one of the types of this Interaction comes from Table 11, then the Participation objects SHOULD have a role from the set of roles that is cross-listed with this type in Table 12.
sbol2-12007 Ontology Exactly one role in the set of roles SHOULD be a URI from the participant role branch of the SBO.
sbol2-12103 Resolver Each URI contained by the members property of a Collection MUST reference a TopLevel object.
sbol2-12407 Resolver Each URI contained by the wasInformedBys property of an Activity MUST refer to a Activity object.
sbol2-12604 Resolver The URI contained by the plan property MUST refer to a Plan object.
sbol2-12606 Resolver The URI contained by the agent property MUST refer to an Agent object.
sbol2-12905 Resolver The URI contained by the template property of a CombinatorialDerivation MUST refer to a ComponentDefinition.
sbol2-13008 Resolver The URIs contained by the variants property of a VariableComponent MUST refer to ComponentDefinition objects.
sbol2-13010 Resolver The URIs contained by the variantCollections property of a VariableComponent MUST refer to Collection objects.
sbol2-13012 Resolver The members property of a Collection that is referred to by the variantCollections property of a VariableComponent MUST refer only to ComponentDefinition objects.
sbol2-13014 Resolver The URIs contained by the variantDerivations property of a VariableComponent MUST refer to CombinatorialDerivation objects.
sbol2-13103 Resolver The built property URI, if specified, MUST refer to either a ComponentDefinition or a ModuleDefinition.
sbol2-13206 Ontology The format property of an Attachment SHOULD contain a URI that refers to a term from the EDAM ontology.
sbol2-13505 Ontology If the types property of a Measure is non-empty, then exactly one of the URIs that this property contains SHOULD refer to a term from the systems description parameter branch of the SBO.

▲ MachineUncheckable

46 rules. Violations are NOT to be machine-reported. The validator runs a local subset for some of these and emits warnings on positively-decidable cases; the broader spec rule is always recorded in RuleCoverage::not_applied { MachineUncheckable }.

Rule Blocker Note
sbol2-10105 External An SBOL document MUST be serialized as a well-formed RDF/XML file that adheres to the grammar defined by: "https://www.w3.org/TR/rdf-syntax-grammar/" This is a serialization well-formedness constraint enforced by the RDF/XML reader: a malformed document fails to parse and never reaches validation, so no single-document validation report can carry it.
sbol2-10106 External All namespaces specified in an SBOL document MUST end with a valid delimiter ('/', '#', or ':'). The reader discards the document's prefix-to-namespace bindings once the triple graph is built, so this namespace-delimiter constraint has no representation the validator can inspect after parsing.
sbol2-10202 External The identity property of an Identified object MUST be globally unique. Global uniqueness spans documents and a global registry; within a single RDF graph a subject IRI denotes one node, so a duplicate-identity violation is not representable and cannot be isolated by a single-document negative.
sbol2-10214 External The annotations property of an Identified object is OPTIONAL and MAY contain a set of Annotation objects.
sbol2-10305 External If the wasDerivedFroms property of one TopLevel object refers to another TopLevel object with the same persistentIdentity property, then version property of the second TopLevel object MUST precede that of the first if both objects have a version.
sbol2-10404 External The encoding property of a Sequence MUST indicate how the elements property of the Sequence is to be formed and interpreted.
sbol2-10406 External The encoding property of a Sequence MUST contain a URI from Table 1 if it is well-described by this URI.
sbol2-10504 External Each URI contained by the types property of a ComponentDefinition MUST refer to an ontology term that describes the category of biochemical or physical entity that is represented by the ComponentDefinition.
sbol2-10505 External The types property of a ComponentDefinition MUST contain a URI from Table 2 if it is well-described by this URI.
sbol2-10506 External All URIs contained by the types property of a ComponentDefinition MUST refer to non-conflicting ontology terms.
sbol2-10508 External Each URI contained by the roles property of a ComponentDefinition MUST refer to an ontology term that clarifies the potential function of the ComponentDefinition in a biochemical or physical context.
sbol2-10509 External Each URI contained by the roles property of a ComponentDefinition MUST refer to an ontology term that is consistent with its types property.
sbol2-10510 External The roles property of a ComponentDefinition MUST contain a URI from Table 3 if it is well-described by this URI.
sbol2-10514 External The Sequence objects referred to by the sequences property of a ComponentDefinition MUST be consistent with each other, such that well-defined mappings exist between their elements properties in accordance with their encoding properties.
sbol2-10515 External The sequences property of a ComponentDefinition MUST NOT refer to Sequence objects with conflicting encoding properties.
sbol2-10703 External Each URI contained by the roles property of a Component MUST refer to an ontology term that clarifies the potential function of the Component in a biochemical or physical context.
sbol2-10704 External Each URI contained by the roles property of a Component MUST refer to an ontology term that is consistent with the types property of the ComponentDefinition referred to by its definition property.
sbol2-10705 Ontology The roles property of a Component MUST contain a URI from Table 4 if it is well-described by this URI. The "if it is well-described by this URI" clause is a human-judgement condition: no tool can decide whether a Component is well-described by a Table 4 role, so a mechanical single-document violation cannot be constructed.
sbol2-10808 Resolver If a MapsTo is contained by a ComponentInstance, then the remote property of the MapsTo MUST refer to a Component in the ComponentDefinition that is referenced by the definition property of the ComponentInstance. The remote must resolve to a Component of the ComponentDefinition named by the ComponentInstance's definition, which the spec permits to live in another document; isolating this violation requires cross-document resolution of that referenced definition.
sbol2-10809 Resolver If a MapsTo is contained by a Module, then the remote property of the MapsTo MUST refer to a FunctionalComponent in the ModuleDefinition that is referenced by the definition property of the Module. The remote must resolve to a FunctionalComponent of the ModuleDefinition named by the Module's definition, which the spec permits to live in another document; isolating this violation requires cross-document resolution of that referenced definition.
sbol2-10811 Resolver If the refinement property of a MapsTo contains the URI http://sbols.org/v2#verifyIdentical, then the ComponentInstance objects referred to by local and remote properties of the MapsTo MUST refer to the same ComponentDefinition via their definition properties. verifyIdentical compares the definitions of the local and remote ComponentInstances, which the spec permits to live in another document; isolating this violation requires cross-document resolution of those referenced definitions.
sbol2-10907 External Each URI contained by the roles property of a SequenceAnnotation MUST refer to an ontology term that clarifies the potential function of the SequenceAnnotation in a biochemical or physical context.
sbol2-10908 External The roles property of a SequenceAnnotation MUST contain a URI from Table 4 if it is well-described by this URI.
sbol2-11408 External The URI contained by the restriction property of a SequenceConstraint MUST indicate the type of structural restriction on the relative, sequence-based positions or orientations of the Component objects referred to by the subject and object properties of the SequenceConstraint.
sbol2-11503 External The URI contained by the source property of a Model MUST specify the location of the model's source file.
sbol2-11505 External The URI contained by the language property of a Model MUST specify the language in which the model is encoded.
sbol2-11506 External The language property of a Model MUST contain a URI from Table 8 if it is well-described by this URI.
sbol2-11509 External The URI contained by the framework property of a Model MUST specify the modeling framework of the model.
sbol2-11510 External The framework property of a Model MUST contain a URI from Table 9 if it is well-described by this URI.
sbol2-11603 External Each URI contained by roles property of a ModuleDefinition MUST refer to a resource that clarifies the intended function of the ModuleDefinition.
sbol2-11903 External Each URI contained by the types property of an Interaction MUST refer to an ontology term that describes the behavior represented by the Interaction.
sbol2-11904 External All URIs contained by the types property of an Interaction MUST refer to non-conflicting ontology terms.
sbol2-12005 External Each URI contained by the roles property of an Participation MUST refer to an ontology term that describes the behavior represented by the Participation.
sbol2-12006 External All URIs contained by the roles property of an Participation MUST refer to non-conflicting ontology terms.
sbol2-12201 External The name property of an Annotation is REQUIRED and MUST contain a QName. SBOL 2 Annotations are unreified extension triples; the reader stores them as generic properties with IRI predicates and literal/IRI/nested values, so a document the reader accepts already satisfies this constraint and no violation is representable.
sbol2-12203 External An AnnotationValue MUST be a literal (a String, Integer, Double, or Boolean), URI, or a NestedAnnotations object. SBOL 2 Annotations are unreified extension triples; every value the reader accepts is already a literal, URI, or nested-annotation resource, so no single-document violation is representable.
sbol2-12204 External The nestedQName property of a NestedAnnotations object is REQUIRED and MUST contain a QName. NestedAnnotations are unreified extension triples; the reader represents the nestedQName as the RDF predicate, which is always a QName, so no single-document violation is representable.
sbol2-12205 External The nestedURI property of a NestedAnnotations object is REQUIRED and MUST contain a URI. NestedAnnotations are unreified extension triples; the reader represents the nestedURI as an RDF resource, so no single-document violation is representable.
sbol2-12206 External The annotations property of a NestedAnnotations object is OPTIONAL and MAY contain a set of Annotation objects. NestedAnnotations are unreified extension triples; the annotations they carry are generic properties, so no single-document violation is representable.
sbol2-12908 Resolver If the wasDerivedFroms property of a ComponentDefinition refers to a CombinatorialDerivation and the template ComponentDefinition of the CombinatorialDerivation contains SequenceConstraint objects, then any Component contained by the first ComponentDefinition that has a wasDerivedFroms property that refers to the subject or object Component of any of the SequenceConstraint objects MUST adhere to the restriction properties of these SequenceConstraint objects. The constraint spans the template ComponentDefinition of a referenced CombinatorialDerivation and its SequenceConstraint objects, which the spec permits to live in another document; isolating this violation requires cross-document resolution.
sbol2-13005 Resolver The URI contained by the variable property of a VariableComponent MUST refer to a Component contained by the components property of the template ComponentDefinition of the CombinatorialDerivation that contains the VariableComponent. The variable must resolve to a Component of the template ComponentDefinition of the containing CombinatorialDerivation, which the spec permits to live in another document; isolating this violation requires cross-document resolution.
sbol2-13011 Resolver The members property of a Collection that is referred to by the variantCollections property of a VariableComponent MUST NOT be empty. The constraint is defined over the members of a Collection named by variantCollections, which the spec permits to live in another document; isolating this violation requires cross-document resolution of that referenced Collection.
sbol2-13016 Resolver If the wasDerivedFroms property of a Component refers to a Component in the template ComponentDefinition of a CombinatorialDerivation, and the second Component is referred to by the variable property of any VariableComponent in the CombinatorialDerivation, then the definition property of the first Component MUST refer to a ComponentDefinition specified by the variants property, a ComponentDefinition that is one of the members of a Collection specified by the variantCollections property, or a ComponentDefinition with a wasDerivedFroms property that refers to a CombinatorialDerivation specified by the variantDerivations property of the VariableComponent. The constraint relates a derived Component to a Component of a referenced template ComponentDefinition and the variant sources of a VariableComponent, which the spec permits to live in another document; isolating this violation requires cross-document resolution.
sbol2-13017 Resolver If the wasDerivedFroms property of a Component refers to a Component in the template ComponentDefinition of a CombinatorialDerivation, and the second Component is not referred to by the variable property of any VariableComponent in the CombinatorialDerivation, then the definition property of the first Component MUST refer to the same ComponentDefinition as the definition property of the second Component. The constraint relates a derived Component to a Component of a referenced template ComponentDefinition, which the spec permits to live in another document; isolating this violation requires cross-document resolution.
sbol2-13203 External The URI contained by the source property of an Attachment MUST specify the location of the model's source file.
sbol2-13205 External The URI contained by the format property of an Attachment MUST specify the file type of the attachment.

SBOLTestSuite corpus results

The validator is exercised against the SBOLTestSuite SBOL 2 corpora (SynBioDex/SBOLTestSuite). The corpus is bootstrapped on demand rather than committed; these outcomes are pinned by the tests named below and re-checked on every run.

Valid corpora

Every file in each corpus parses with 0 parse failures, and each corpus isolates one validation axis (crates/sbol2/tests/conformance.rs):

Corpus Files Flag behavior
SBOL2 179 Valid: pass under both the default config and all_on.
SBOL2_ic 71 Incomplete: pass with complete off; the completeness family flags them when complete is on.
SBOL2_nc 30 Non-compliant: pass with compliant off; the compliant-URI family flags them when compliant is on.
SBOL2_bp 11 Best-practice: error-free under the default; the ontology-usage family flags them at warning severity when best_practice is on.

InvalidFiles: per-rule negative corpus

InvalidFiles/sbol-NNNNN.xml each violate rule sbol2-NNNNN. Under ValidationConfig::all_on() the validator must reject every file: either the reader fails to parse it (a structural violation caught at read time) or validation reports an error (crates/sbol2/tests/invalid_files.rs):

Outcome Count Meaning
Strict 166 The file's exact expected rule fires.
Loose 14 Rejected via a related error rather than the exact rule id.
Parse-rejected 3 The RDF/XML reader rejects the file at read time.
Deferred 48 Exercised but not error-rejected: the violation needs a resolver or cross-document context, is a ▲ machine-uncheckable condition, is a reader-scope concern, or is a SHOULD-level warning that does not fail the file. Every deferred rule still has a firing hermetic negative in crates/sbol2/tests/rule_cases/. Tracked in crates/sbol2/tests/invalid_files_deferred.in so the strict set is explicit.

Cross-implementation agreement

Parser/serializer output is compared triple-for-triple against libSBOLj 2.4.0 reference RDF/XML over 10 committed fixtures in tests/fixtures/cross-impl-sbol2/ (crates/sbol2/tests/cross_impl.rs). Each fixture parses and serializes to a normalized triple set identical to the libSBOLj reference output. This compares parser/serializer output only; the two libraries' validator outputs have not been systematically compared.

Error

158 rules. Algorithm complete; MUST violations emit as Severity::Error.

Rule Gate Note
sbol2-10101 Always An SBOL document MUST declare the use of the following XML namespace: "http://sbols.org/v2#".
sbol2-10201 Always The identity property of an Identified object is REQUIRED and MUST contain a URI that adheres to the syntax defined by: "http://www.w3.org/1999/02/22-rdf-syntax#about"
sbol2-10203 Always The persistentIdentity property of an Identified object is OPTIONAL and MAY contain a URI that MUST adhere to the syntax defined by: "http://www.w3.org/1999/02/22-rdf-syntax#about"
sbol2-10204 Always The displayId property of an Identified object is OPTIONAL and MAY contain a String that MUST be composed of only alphanumeric or underscore characters and MUST NOT begin with a digit.
sbol2-10206 Always The version property of an Identified object is OPTIONAL and MAY contain a String that MUST be composed of only alphanumeric characters, underscores, hyphens, or periods and MUST begin with a digit.
sbol2-10208 Always The wasDerivedFroms property of an Identified object is OPTIONAL and MAY contain a URI.
sbol2-10212 Always The name property of an Identified object is OPTIONAL and MAY contain a String.
sbol2-10213 Always The description property of an Identified object is OPTIONAL and MAY contain a String.
sbol2-10215 Compliant The displayId property of a compliant Identified object is REQUIRED.
sbol2-10216 Compliant The persistentIdentity property of a compliant TopLevel object is REQUIRED and MUST contain a URI that ends with a delimiter ('/', '#', or ':') followed by the displayId of the TopLevel object.
sbol2-10217 Compliant The persistentIdentity property of a compliant Identified object that is not also a TopLevel object is REQUIRED and MUST contain a URI that begins with the persistentIdentity of the compliant object's parent and is immediately followed by a delimiter ('/', '#', or ':') and the displayId of the compliant object.
sbol2-10218 Compliant If a compliant Identified object has no version property, then its identity property MUST contain the same URI as its persistentIdentity property. Otherwise, the compliant object's identity property MUST contain a URI that begins with its persistentIdentity and is immediately followed by a delimiter ('/', '#', or ':') and its version.
sbol2-10219 Compliant The version property of a compliant Identified object that is not also a TopLevel object is REQUIRED to contain the same String as the version property of the compliant object's parent.
sbol2-10221 Always The wasGeneratedBys property of an Identified object is OPTIONAL and MAY contain a set of URIs.
sbol2-10223 Always Provenance history formed by wasGeneratedBy properties of Identified objects and entity references in Usage objects MUST NOT form circular reference chains.
sbol2-10228 Always An Identified object must have no more than one rdfType property in each of the http://sbols.org/v2# and http://www.w3.org/ns/prov# namespaces.
sbol2-10303 Always The wasDerivedFroms property of an TopLevel object MUST NOT contain a URI reference to the TopLevel object itself.
sbol2-10304 Always TopLevel objects MUST NOT form circular reference chains via their wasDerivedFroms properties.
sbol2-10306 Always The attachments property of a TopLevel is OPTIONAL and MAY contain a set of URIs.
sbol2-10401 Always A Sequence MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms , wasGeneratedBys , name, description, annotations, elements, and encoding.
sbol2-10402 Always The elements property of a Sequence is REQUIRED and MUST contain a String.
sbol2-10403 Always The encoding property of Sequence is REQUIRED and MUST contain a URI.
sbol2-10405 Always The elements property of a Sequence MUST be consistent with its encoding property.
sbol2-10501 Always A ComponentDefinition MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, types, roles, components, sequences, sequenceAnnotations, and sequenceConstraints.
sbol2-10502 Always The types property of a ComponentDefinition is REQUIRED and MUST contain a non-empty set of URIs.
sbol2-10503 BestPractice The types property of a ComponentDefinition MUST NOT contain more than one URI from Table 2.
sbol2-10507 Always The roles property of a ComponentDefinition is OPTIONAL and MAY contain a set of URIs.
sbol2-10512 Always The sequences property of a ComponentDefinition is OPTIONAL and MAY contain a set of URIs.
sbol2-10516 BestPractice If the sequences property of a ComponentDefinition refers to one or more Sequence objects, and one of the types of this ComponentDefinition comes from Table 2, then one of the Sequence objects MUST have the encoding that is cross-listed with this type in Table 1.
sbol2-10519 Always The components property of a ComponentDefinition is OPTIONAL and MAY contain a set of Component objects.
sbol2-10521 Always The sequenceAnnotations property of a ComponentDefinition is OPTIONAL and MAY contain a set of SequenceAnnotation objects.
sbol2-10522 Always The sequenceAnnotations property of a ComponentDefinition MUST NOT contain two or more SequenceAnnotation objects that refer to the same Component.
sbol2-10524 Always The sequenceConstraints property of a ComponentDefinition is OPTIONAL and MAY contain a set of SequenceConstraint objects.
sbol2-10526 Always If multiple MapsTos belonging to the Components of a ComponentDefinition have local properties that refer to the same Component, then there MUST NOT be more than one such MapsTo that has a refinement property that contains the URI http://sbols.org/v2# useRemote.
sbol2-10602 Always The definition property of a ComponentInstance is REQUIRED and MUST contain a URI.
sbol2-10603 Always The definition property of a ComponentInstance MUST NOT contain a URI reference to the ComponentDefinition that contains the ComponentInstance.
sbol2-10605 Always ComponentInstance objects MUST NOT form circular reference chains via their definition properties and parent ComponentDefinition objects.
sbol2-10606 Always The mapsTos property of a ComponentInstance is OPTIONAL and MAY contain a set of MapsTo objects.
sbol2-10607 Always The access property of a ComponentInstance is REQUIRED and MUST contain a URI from Table4.
sbol2-10608 Always The measures property of a ComponentInstance is OPTIONAL and may contain a set of Measure objects.
sbol2-10701 Always A Component MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, access, definition, mapsTos, roles, roleIntegration, and sourceLocations.
sbol2-10702 Always The roles property of a Component is OPTIONAL and MAY contain a set of URIs.
sbol2-10708 Always The roleIntegration property of a Component, if provided, MUST contain a URI from Table 6.
sbol2-10709 Always The roleIntegration property of a Component is REQUIRED, if roles property includes one or more roles.
sbol2-10710 Always The sourceLocations property of a Component is OPTIONAL and MAY contain a set of Location objects.
sbol2-10801 Always A MapsTo MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, refinement, local, and remote.
sbol2-10802 Always The local property of a MapsTo is REQUIRED and MUST contain a URI.
sbol2-10803 Always If a MapsTo is contained by a Component in a ComponentDefinition, then the local property of the MapsTo MUST refer to another Component in the ComponentDefinition.
sbol2-10804 Always If a MapsTo is contained by a FunctionalComponent or Module in a ModuleDefinition, then the local property of the MapsTo MUST refer to another FunctionalComponent in the ModuleDefinition.
sbol2-10805 Always The remote property of a MapsTo is REQUIRED and MUST contain a URI.
sbol2-10810 Always The refinement property of a MapsTo is REQUIRED and MUST contain a URI from Table 5.
sbol2-10901 Always A SequenceAnnotation MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, component, locations, and roles.
sbol2-10902 Always The locations property of a SequenceAnnotation is REQUIRED and MUST contain a non-empty set of Location objects.
sbol2-10904 Always The component property is OPTIONAL and MAY contain a URI reference to a Component.
sbol2-10905 Always The Component referenced by the component property of a SequenceAnnotation MUST be contained by the ComponentDefinition that contains the SequenceAnnotation.
sbol2-10906 Always The roles property of a SequenceAnnotation is OPTIONAL and MAY contain a set of URIs.
sbol2-10909 Always A SequenceAnnotation MUST NOT include both a component property and a roles property.
sbol2-11002 Always The orientation property of a Location is OPTIONAL and MAY contain a URI from Table 6.
sbol2-11003 Always The sequence property of a Location is OPTIONAL. If present, it MUST contain the URI of a Sequence referenced by the ComponentDefinition containing the Location.
sbol2-11101 Always A Range MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, sequence, annotations, orientation, start, and end.
sbol2-11102 Always The start property of a Range is REQUIRED and MUST contain an Integer greater than zero.
sbol2-11103 Always The end property of a Range is REQUIRED and MUST contain an Integer greater than zero.
sbol2-11104 Always The value of the end property of a Range MUST be greater than or equal to the value of its start property.
sbol2-11201 Always A Cut MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, sequence, annotations, orientation, and at.
sbol2-11202 Always The at property is REQUIRED and MUST contain an Integer greater than or equal to zero.
sbol2-11301 Always A GenericLocation MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, sequence, and orientation.
sbol2-11401 Always A SequenceConstraint MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, restriction, subject, and object.
sbol2-11402 Always The subject property is REQUIRED and MUST contain a URI reference to a Component.
sbol2-11403 Always The Component referenced by the subject property of a SequenceConstraint MUST be contained by the ComponentDefinition that contains the SequenceConstraint.
sbol2-11404 Always The object property is REQUIRED and MUST contain a URI reference to a Component.
sbol2-11405 Always The Component referenced by the object property of a SequenceConstraint MUST be contained by the ComponentDefinition that contains the SequenceConstraint.
sbol2-11406 Always The object property of a SequenceConstraint MUST NOT refer to the same Component as the subject property of the SequenceConstraint.
sbol2-11407 Always The restriction property is REQUIRED and MUST contain a URI.
sbol2-11409 Always If the restriction property of a SequenceConstraint contains the URI http://sbols.org/v2#precedes, then the position of the Component referred to by the subject property of the SequenceConstraint MUST precede that of the Component referred to by its object property.
sbol2-11410 Always If the restriction property of a SequenceConstraint contains the URI http://sbols.org/v2#sameOrientationAs, then the orientation of the Component referred to by the subject property of the SequenceConstraint MUST be the same as that of the Component referred to by its object property.
sbol2-11411 Always If the restriction property of a SequenceConstraint contains the URI http://sbols.org/v2#oppositeOrientationAs, then the orientation of the Component referred to by the subject property of the SequenceConstraint MUST be opposite that of the Component referred to by its object property.
sbol2-11413 Always If the restriction property of a SequenceConstraint contains the URI http://sbols.org/v2\#differentFrom, then the definition property of the subject Component of the SequenceConstraint MUST NOT contain the same URI as the definition property of the object Component of the SequenceConstraint.
sbol2-11414 Always If the restriction property of a SequenceConstraint contains the URI http://sbols.org/v2\#differentFrom, then the definition property of the subject Component of the SequenceConstraint MUST NOT refer to the same object as the definition property of the object Component of the SequenceConstraint.
sbol2-11501 Always A Model MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, source, language, and framework.
sbol2-11502 Always The source property is a REQUIRED and MUST contain a URI.
sbol2-11504 Always The language property is REQUIRED and MUST contain a URI.
sbol2-11508 Always The framework property is REQUIRED and MUST contain a URI.
sbol2-11601 Always A ModuleDefinition MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, roles, modules, interactions, functionalComponents, and models.
sbol2-11602 Always The roles property is OPTIONAL and MAY contain a set of URIs.
sbol2-11604 Always The modules property OPTIONAL and MAY contain a set of Module objects.
sbol2-11605 Always The interactions property is OPTIONAL and MAY contain a set of Interaction objects.
sbol2-11606 Always The functionalComponents property is OPTIONAL and MAY contain a set of FunctionalComponent objects.
sbol2-11607 Always The models property is OPTIONAL and MAY contain a set of URIs.
sbol2-11609 Always If multiple MapsTos belonging to the Modules and FunctionalComponents of a ModuleDefinition have local properties that refer to the same FunctionalComponent, then there MUST NOT be more than one such MapsTo that has a refinement property that contains the URI http://sbols.org/v2#useRemote.
sbol2-11701 Always A Module MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, definition, and mapsTos.
sbol2-11702 Always The definition property of a Module is REQUIRED and MUST contain a URI.
sbol2-11704 Always The definition property of a Module MUST NOT contain a URI reference to the ModuleDefinition that contains the Module.
sbol2-11705 Always Module objects MUST NOT form circular reference chains via their definition properties and parent ModuleDefinition objects.
sbol2-11706 Always The mapsTos property is OPTIONAL and MAY contain a set of MapsTo objects.
sbol2-11707 Always The measures property of a Module is OPTIONAL andmay contain a set of Measure objects.
sbol2-11801 Always A FunctionalComponent MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, access, definition, and mapsTos, and direction.
sbol2-11802 Always The direction property of a FunctionalComponent is REQUIRED and MUST contain a URI from Table 10.
sbol2-11901 Always An Interaction MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, types, and participations.
sbol2-11902 Always The types property of an Interaction is REQUIRED and MUST contain a non-empty set of URIs.
sbol2-11906 Always The participations property of an Interaction is OPTIONAL and MAY contain a set of Participation objects.
sbol2-11908 Always The measures property of an Interaction is OPTIONAL and may contain a set of Measure objects.
sbol2-12001 Always A Participation MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, roles, and participant.
sbol2-12002 Always The participant property of a Participation is REQUIRED and MUST contain a URI reference to a FunctionalComponent.
sbol2-12003 Always The FunctionalComponent referenced by the participant property of a Participation MUST be contained by the ModuleDefinition that contains the Interaction which contains the Participation.
sbol2-12004 Always The roles property of a Participation is REQUIRED and MUST contain a non-empty set of URIs.
sbol2-12008 Always The measures property of a Participation is OPTIONAL and may contain a set of Measure objects.
sbol2-12101 Always A Collection MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, and members.
sbol2-12102 Always The members property of a Collection is OPTIONAL and MAY contain a set of URIs.
sbol2-12301 Always A GenericTopLevel MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, and annotations.
sbol2-12302 Always The rdfType property of a GenericTopLevel object is REQUIRED and MUST contain a QName.
sbol2-12303 Always The rdfType property of a GenericTopLevel object MUST NOT contain a QName in the "http://sbols.org/v2#" namespace.
sbol2-12401 Always An Activity MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, startedAtTime, endedAtTime, wasInformedBys, usages, and associations.
sbol2-12402 Always The startedAtTime property of an Activity object is OPTIONAL and MAY contain a DateTime.
sbol2-12403 Always The endedAtTime property of an Activity object is OPTIONAL and MAY contain a DateTime.
sbol2-12404 Always The associations property of an Activity is OPTIONAL and MAY contain a set of Association objects.
sbol2-12405 Always The usages property of an Activity is OPTIONAL and MAY contain a set of Usage objects.
sbol2-12406 Always The wasInformedBys property of an Activity is OPTIONAL and MAY contain a set of URIs.
sbol2-12412 Always The types property of an Activity object is OPTIONAL and MAY contain a set of URIs.
sbol2-12501 Always An Usage MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, entity, and roles.
sbol2-12502 Always The entity property of an Usage is REQUIRED and MUST contain a URI.
sbol2-12503 Always The roles property of an Usage is OPTIONAL and MAY contain a set of URIs.
sbol2-12601 Always An Association MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, roles, plan, and agent.
sbol2-12602 Always The roles property of an Association is OPTIONAL and MAY contain a set of URIs.
sbol2-12603 Always The plan property of an Association is OPTIONAL and MAY contain a URI.
sbol2-12605 Always The agent property of an Association is REQUIRED and MUST contain a URI.
sbol2-12701 Always A Plan MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, and annotations.
sbol2-12801 Always An Agent MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, and annotations.
sbol2-12901 Always A CombinatorialDerivation MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, strategy, template, and variableComponents.
sbol2-12902 Always The strategy property of a CombinatorialDerivation MUST contain a URI from Table 15 if the property is not empty.
sbol2-12903 Always If the strategy property of a CombinatorialDerivation contains the URI http://sbols.org/v2#enumerate, then its variableComponents property MUST NOT contain a VariableComponent with an operator property that contains the URI http://sbols.org/v2#zeroOrMore or the URI http://sbols.org/v2#oneOrMore.
sbol2-12904 Always The template property of a CombinatorialDerivation is REQUIRED and MUST contain a URI.
sbol2-12906 Always The variableComponents property of a CombinatorialDerivation is OPTIONAL and MAY contain a set of VariableComponent objects.
sbol2-12907 Always The variableComponents property of a CombinatorialDerivation MUST NOT contain two or more VariableComponent objects with variable properties that contain the same URI.
sbol2-12914 Always The strategy property of an CombinatorialDerivation is OPTIONAL and MAY contain a URI.
sbol2-13001 Always A VariableComponent MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, operator, variable, variants, variantCollections, and variantDerivations.
sbol2-13002 Always The operator property of a VariableComponent is REQUIRED and MUST contain a URI.
sbol2-13003 Always The URI contained by the operator property of a VariableComponent MUST come from Table 16.
sbol2-13004 Always The variable property of a VariableComponent is REQUIRED and MUST contain a URI.
sbol2-13007 Always The variants property of a VariableComponent is OPTIONAL and MAY contain a set of URIs.
sbol2-13009 Always The variantCollections property of a VariableComponent is OPTIONAL and MAY contain a set of URIs.
sbol2-13013 Always The variantDerivations property of a VariableComponent is OPTIONAL and MAY contain a set of URIs.
sbol2-13015 Always VariableComponent objects MUST NOT form circular reference chains via their variantDerivations properties and parent CombinatorialDerivation objects.
sbol2-13101 Always An Implementation MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, and built.
sbol2-13102 Always The built property of an Implementation is OPTIONAL and MAY contain a URI.
sbol2-13201 Always An Attachment MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, source, format, size, and hash.
sbol2-13202 Always The source property of an Attachment is REQUIRED and MUST contain a URI.
sbol2-13204 Always The format property of an Attachment is OPTIONAL and MAY contain a URI.
sbol2-13207 Always The size property of an Attachment is OPTIONAL and MAY contain a Long.
sbol2-13208 Always The hash property of an Attachment is OPTIONAL and MAY contain a String.
sbol2-13301 Always An ExperimentalData MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, and attachments.
sbol2-13401 Always An Experiment MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, attachments, and experimental data.
sbol2-13402 Always The experimentalData property of an Experiment is OPTIONAL and MAY contain a set of URIs.
sbol2-13404 Always Each URI contained by the experimentalData property of a Experiment MUST reference an ExperimentalData object.
sbol2-13501 Always A Measure MUST NOT have properties other than the following: identity, persistentIdentity, displayId, version, wasDerivedFroms, wasGeneratedBys, name, description, annotations, hasNumericalValue, hasUnit, and types.
sbol2-13502 Always The hasNumericalValue property of a Measure is REQUIRED and MUST contain an xsd:float.
sbol2-13503 Always The hasUnit property of a Measure is REQUIRED and MUST contain a URI.
sbol2-13504 Always The types property of a Measure is OPTIONAL and MAY contain a set of URIs.
sbol2-13506 Always The URI contained by the hasUnit property of a MeasureMUST refer to a Unit.

Warning

30 rules. Algorithm complete; SHOULD violations emit as Severity::Warning.

Rule Gate Note
sbol2-10224 BestPractice An Identified with a wasGeneratedBys property that includes a reference to an Activity with a child Association that has a roles property that contains the URI http://sbols.org/v2#design SHOULD be a TopLevel object other than Implementation.
sbol2-10225 BestPractice An Identified with a wasGeneratedBys property that includes a reference to an Activity with a child Association that has a roles property that contains the URI http://sbols.org/v2#build SHOULD be an Implementation.
sbol2-10226 BestPractice An Identified with a wasGeneratedBys property that includes a reference to an Activity with a child Association that has a roles property that contains the URI http://sbols.org/v2#test SHOULD be an Attachment or a Collection of Attachment objects.
sbol2-10227 BestPractice An Identified with a wasGeneratedBys property that includes a reference to an Activity with a child Association that has a roles property that contains the URI http://sbols.org/v2#learn SHOULD not be an Implementation.
sbol2-10302 BestPractice If the wasDerivedFroms property of one TopLevel object refers to another TopLevel object with the same persistentIdentity property, then the version property of the second TopLevel object SHOULD precede that of the first if both objects have a version and it is assumed that these versions follow the conventions of semantic versioning.
sbol2-10518 BestPractice If a ComponentDefinition refers to more than one Sequence with the same encoding, then the elements of these Sequence objects SHOULD have equal lengths.
sbol2-10520 BestPractice If a ComponentDefinition in a ComponentDefinition-Component hierarchy refers to one or more Sequence objects, and there exist ComponentDefinition objects lower in the hierarchy that refer to Sequence objects with the same encoding, then the elements properties of these Sequence objects SHOULD be consistent with each other, such that well-defined mappings exist from the "lower level" elements to the "higher level" elements in accordance with their shared encoding properties. This mapping is subject to any restrictions on the positions of the Component objects in the hierarchy that are imposed by the SequenceAnnotation or SequenceConstraint objects contained by the ComponentDefinition objects in the hierarchy. This mapping is further subject to any restrictions on the sequences property of ComponentDefinition objects implied by the sourceLocations property on the Component objects owned by those ComponentDefinition objects.
sbol2-10523 BestPractice If the sequences property of a ComponentDefinition refers to a Sequence with an IUPAC encoding from Table 1, then each SequenceAnnotation that includes a Range and/or Cut in the sequenceAnnotations property of the ComponentDefinition SHOULD specify a region on the elements of this Sequence.
sbol2-10711 BestPractice The Location objects contained by the sourceLocations property of a single Component SHOULD NOT specify overlapping regions.
sbol2-10712 BestPractice If the sourceLocations property of a Component refers to a set of Ranges, and that Component is referenced by the component property of a SequenceAnnotation whose locations property also refers to a set of Ranges, then the sum of lengths of the two sets of Ranges MUST be equal.
sbol2-10903 BestPractice The Location objects contained by the locations property of a single SequenceAnnotation SHOULD NOT specify overlapping regions.
sbol2-12408 BestPractice An Activity with a child Association that has a roles property that contains the URI http://sbols.org/v2#design SHOULD NOT have child Usage objects that have roles properties that contain the URIs http://sbols.org/v2#build or http://sbols.org/v2#test.
sbol2-12409 BestPractice An Activity with a child Association that has a roles property that contains the URI http://sbols.org/v2#build SHOULD NOT have child Usage objects that have roles properties that contain the URIs http://sbols.org/v2#test or http://sbols.org/v2#learn.
sbol2-12410 BestPractice An Activity with a child Association that has a roles property that contains the URI http://sbols.org/v2#test SHOULD NOT have child Usage objects that have roles properties that contain the URIs http://sbols.org/v2#design or http://sbols.org/v2#learn.
sbol2-12411 BestPractice An Activity with a child Association that has a roles property that contains the URI http://sbols.org/v2#learn SHOULD NOT have child Usage objects that have roles properties that contain the URIs http://sbols.org/v2#design or http://sbols.org/v2#build.
sbol2-12504 BestPractice A Usage that has a roles property that contains the URI http://sbols.org/v2#design SHOULD refer to a TopLevel other than Implementation.
sbol2-12505 BestPractice A Usage that has a roles property that contains the URI http://sbols.org/v2#build SHOULD refer to an Implementation.
sbol2-12506 BestPractice A Usage that has a roles property that contains the URI http://sbols.org/v2#test SHOULD refer to an Attachment or Collection of Attachment objects.
sbol2-12507 BestPractice A Usage that has a roles property that contains the URI http://sbols.org/v2#learn SHOULD NOT refer to an Implementation.
sbol2-12909 BestPractice The components property of the template ComponentDefinition of a CombinatorialDerivation SHOULD contain one or more Component objects.
sbol2-12910 BestPractice If the wasDerivedFroms property of a ComponentDefinition refers to a CombinatorialDerivation, then the types property of this ComponentDefinition SHOULD contain all URIs contained by the types property of the template ComponentDefinition of the CombinatorialDerivation.
sbol2-12911 BestPractice If the wasDerivedFroms property of a ComponentDefinition refers to a CombinatorialDerivation, then the roles property of this ComponentDefinition SHOULD contain all URIs contained by the roles property of the template ComponentDefinition of the CombinatorialDerivation.
sbol2-12912 BestPractice If the members property of a Collection refers only to objects with wasDerivedFroms properties that refer to a CombinatorialDerivation, then the wasDerivedFroms property of the Collection SHOULD also refer to the CombinatorialDerivation.
sbol2-12913 BestPractice If the wasDerivedFroms property of a Collection refers to a CombinatorialDerivation, then the wasDerivedFroms properties of the objects that are referred to by its members property SHOULD also refer to the CombinatorialDerivation.
sbol2-13006 BestPractice At least one of the variants property, variantCollections property, or variantDerivations property of a VariableComponent MUST NOT be empty.
sbol2-13018 BestPractice If the wasDerivedFroms property of a ComponentDefinition refers to a CombinatorialDerivation and the wasDerivedFroms property of a Component contained by the ComponentDefinition refers to a Component contained by the template ComponentDefinition of the CombinatorialDerivation, then the roles property of the first Component SHOULD contain all URIs contained by the roles property of the second Component.
sbol2-13019 BestPractice If the wasDerivedFroms property of a ComponentDefinition refers to a CombinatorialDerivation and the CombinatorialDerivation contains a VariableComponent with an operator property that contains the URI http://sbols.org/v2#zeroOrOne, then the components property of the ComponentDefinition SHOULD NOT contain more than one Component with a wasDerivedFroms property that refers to the same Component as the variable property of the VariableComponent.
sbol2-13020 BestPractice If the wasDerivedFroms property of a ComponentDefinition refers to a CombinatorialDerivation and the CombinatorialDerivation contains a VariableComponent with an operator property that contains the URI http://sbols.org/v2#one, then the components property of the ComponentDefinition SHOULD contain exactly one Component with a wasDerivedFroms property that refers to the same Component as the variable property of the VariableComponent.
sbol2-13021 BestPractice If the wasDerivedFroms property of a ComponentDefinition refers to a CombinatorialDerivation and the CombinatorialDerivation contains a VariableComponent with an operator property that contains the URI http://sbols.org/v2#oneOrMore, then the components property of the ComponentDefinition SHOULD contain at least one Component with a wasDerivedFroms property that refers to the same Component as the variable property of the VariableComponent.
sbol2-13022 BestPractice If the wasDerivedFroms property of a ComponentDefinition refers to a CombinatorialDerivation and the template ComponentDefinition of the CombinatorialDerivation contains a Component that is not referred to by the variable property of any VariableComponent contained by the CombinatorialDerivation, then the first ComponentDefinition SHOULD contain exactly one Component with a wasDerivedFroms property that refers to the Component in the template ComponentDefinition.