CellML 2.0 Conformance Report

Small CellML 2.0 files, each about one numbered rule of the CellML 2.0 Normative Specification, release 2.0.1, read by several implementations. This page shows where they agree with each other and with the specification, and where they differ.

A CellML 2.0 iteration of cellml-validation by Michael Clerx, begun at the University of Oxford and continued at the University of Nottingham. An independent project, not run by the CellML project or its editors.

Versions

Specification: CellML 2.0 Normative Specification, release 2.0.1.
Environment: Python 3.12.15 on Linux.

ImplementationVersionWhat “reported an issue” means
libCellML0.7.2Its Parser (strict mode) or its Validator reported at least one error. Warnings and messages are shown, not counted.
Myokit1.39.2Its CellML 2.0 reader (myokit.formats.cellml.v2.parse_file), which checks the rules as it reads, raised CellMLParsingError. Python warnings are shown, not counted.

Summary

107 files: 46 valid, 61 invalid and 0 unclear.

libCellMLMyokit
Matches the spec76 of 107102 of 107
Differs from the spec31 of 1075 of 107
Stopped unexpectedly (any folder)92

The implementations give the same outcome on 73 of 107 files, and different outcomes on 34.

How to read this report

Disagreement matrix

FileSpeclibCellMLMyokitImplementations
2.1.1.model_name_plainvalid✓ accepted✓ acceptedagree
2.1.1.model_name_emptyinvalid✓ reported an issue✓ reported an issueagree
2.1.1.model_name_hypheninvalid✓ reported an issue✓ reported an issueagree
2.1.1.model_name_leading_digitinvalid✓ reported an issue✓ reported an issueagree
2.1.1.model_name_leading_underscoreinvalid≠ accepted✓ reported an issuediffer
2.1.1.model_name_non_latin_letterinvalid✓ reported an issue✓ reported an issueagree
2.1.1.model_name_single_lettervalid✓ accepted✓ acceptedagree
2.1.1.model_name_spaceinvalid✓ reported an issue✓ reported an issueagree
2.1.1.model_name_underscore_insidevalid✓ accepted✓ acceptedagree
2.1.1.model_name_upper_casevalid✓ accepted✓ acceptedagree
2.5.1.units_name_plainvalid✓ accepted✓ acceptedagree
2.5.1.units_name_emptyinvalid✓ reported an issue✓ reported an issueagree
2.5.1.units_name_hypheninvalid✓ reported an issue✓ reported an issueagree
2.5.1.units_name_leading_digitinvalid✓ reported an issue✓ reported an issueagree
2.5.1.units_name_leading_underscoreinvalid≠ accepted✓ reported an issuediffer
2.5.1.units_name_non_latin_letterinvalid✓ reported an issue✓ reported an issueagree
2.5.1.units_name_single_lettervalid✓ accepted✓ acceptedagree
2.5.1.units_name_spaceinvalid✓ reported an issue✓ reported an issueagree
2.5.1.units_name_underscore_insidevalid✓ accepted✓ acceptedagree
2.5.1.units_name_upper_casevalid✓ accepted✓ acceptedagree
2.6.2.1.unit_prefix_plainvalid✓ accepted✓ acceptedagree
2.6.2.1.unit_prefix_decimalinvalid✓ reported an issue✓ reported an issueagree
2.6.2.1.unit_prefix_e_notationinvalid✓ reported an issue✓ reported an issueagree
2.6.2.1.unit_prefix_emptyinvalid≠ accepted✓ reported an issuediffer
2.6.2.1.unit_prefix_largevalid✓ accepted≠ reported an issuediffer
2.6.2.1.unit_prefix_leading_plusvalid✓ accepted✓ acceptedagree
2.6.2.1.unit_prefix_name_capitalizedinvalid✓ reported an issue✓ reported an issueagree
2.6.2.1.unit_prefix_name_decavalid✓ accepted✓ acceptedagree
2.6.2.1.unit_prefix_name_dekainvalid✓ reported an issue✓ reported an issueagree
2.6.2.1.unit_prefix_name_millivalid✓ accepted✓ acceptedagree
2.6.2.1.unit_prefix_negativevalid✓ accepted✓ acceptedagree
2.6.2.1.unit_prefix_sign_onlyinvalid✓ reported an issue✓ reported an issueagree
2.6.2.2.unit_multiplier_plainvalid✓ accepted✓ acceptedagree
2.6.2.2.unit_multiplier_beyond_double_rangevalid≠ reported an issue≠ stopped unexpectedlydiffer
2.6.2.2.unit_multiplier_emptyinvalid✓ reported an issue✓ reported an issueagree
2.6.2.2.unit_multiplier_leading_plusvalid≠ reported an issue✓ accepteddiffer
2.6.2.2.unit_multiplier_point_onlyinvalid≠ stopped unexpectedly✓ reported an issuediffer
2.6.2.2.unit_multiplier_sign_and_point_onlyinvalid≠ stopped unexpectedly✓ reported an issuediffer
2.6.2.2.unit_multiplier_sign_onlyinvalid≠ stopped unexpectedly✓ reported an issuediffer
2.6.2.3.unit_exponent_plainvalid✓ accepted✓ acceptedagree
2.6.2.3.unit_exponent_beyond_double_rangevalid≠ reported an issue≠ stopped unexpectedlydiffer
2.6.2.3.unit_exponent_emptyinvalid✓ reported an issue✓ reported an issueagree
2.6.2.3.unit_exponent_leading_plusvalid≠ reported an issue✓ accepteddiffer
2.6.2.3.unit_exponent_point_onlyinvalid≠ stopped unexpectedly✓ reported an issuediffer
2.6.2.3.unit_exponent_sign_and_point_onlyinvalid≠ stopped unexpectedly✓ reported an issuediffer
2.6.2.3.unit_exponent_sign_onlyinvalid≠ stopped unexpectedly✓ reported an issuediffer
2.7.1.component_name_plainvalid✓ accepted✓ acceptedagree
2.7.1.component_name_emptyinvalid✓ reported an issue✓ reported an issueagree
2.7.1.component_name_hypheninvalid✓ reported an issue✓ reported an issueagree
2.7.1.component_name_leading_digitinvalid✓ reported an issue✓ reported an issueagree
2.7.1.component_name_leading_underscoreinvalid≠ accepted✓ reported an issuediffer
2.7.1.component_name_non_latin_letterinvalid✓ reported an issue✓ reported an issueagree
2.7.1.component_name_single_lettervalid✓ accepted✓ acceptedagree
2.7.1.component_name_spaceinvalid✓ reported an issue✓ reported an issueagree
2.7.1.component_name_underscore_insidevalid✓ accepted✓ acceptedagree
2.7.1.component_name_upper_casevalid✓ accepted✓ acceptedagree
2.8.1.1.variable_name_plainvalid✓ accepted✓ acceptedagree
2.8.1.1.variable_name_emptyinvalid✓ reported an issue✓ reported an issueagree
2.8.1.1.variable_name_hypheninvalid✓ reported an issue✓ reported an issueagree
2.8.1.1.variable_name_leading_digitinvalid✓ reported an issue✓ reported an issueagree
2.8.1.1.variable_name_leading_underscoreinvalid≠ accepted✓ reported an issuediffer
2.8.1.1.variable_name_non_latin_letterinvalid✓ reported an issue✓ reported an issueagree
2.8.1.1.variable_name_single_lettervalid✓ accepted✓ acceptedagree
2.8.1.1.variable_name_spaceinvalid✓ reported an issue✓ reported an issueagree
2.8.1.1.variable_name_underscore_insidevalid✓ accepted✓ acceptedagree
2.8.1.1.variable_name_upper_casevalid✓ accepted✓ acceptedagree
2.8.2.2.initial_value_plainvalid✓ accepted✓ acceptedagree
2.8.2.2.initial_value_beyond_double_rangevalid✓ accepted✓ acceptedagree
2.8.2.2.initial_value_emptyinvalid≠ accepted✓ reported an issuediffer
2.8.2.2.initial_value_leading_plusvalid≠ reported an issue✓ accepteddiffer
2.8.2.2.initial_value_point_onlyinvalid≠ accepted✓ reported an issuediffer
2.8.2.2.initial_value_sign_and_point_onlyinvalid≠ accepted✓ reported an issuediffer
2.8.2.2.initial_value_sign_onlyinvalid≠ accepted✓ reported an issuediffer
2.12.5.cn_plainvalid✓ accepted✓ acceptedagree
2.12.5.cn_beyond_double_rangevalid≠ reported an issue✓ accepteddiffer
2.12.5.cn_emptyinvalid✓ reported an issue✓ reported an issueagree
2.12.5.cn_leading_plusvalid≠ reported an issue✓ accepteddiffer
2.12.5.cn_point_onlyinvalid≠ stopped unexpectedly✓ reported an issuediffer
2.12.5.cn_sign_and_point_onlyinvalid≠ stopped unexpectedly✓ reported an issuediffer
2.12.5.cn_sign_onlyinvalid≠ stopped unexpectedly✓ reported an issuediffer
2.12.5.cn_base_plainvalid✓ accepted✓ acceptedagree
2.12.5.cn_base_16invalid✓ reported an issue✓ reported an issueagree
2.12.5.cn_base_8invalid✓ reported an issue✓ reported an issueagree
2.12.5.cn_in_degree_plainvalid✓ accepted✓ acceptedagree
2.12.5.cn_in_degree_beyond_double_rangevalid✓ accepted✓ acceptedagree
2.12.5.cn_in_degree_emptyinvalid≠ accepted✓ reported an issuediffer
2.12.5.cn_in_degree_leading_plusvalid✓ accepted✓ acceptedagree
2.12.5.cn_in_degree_point_onlyinvalid≠ accepted✓ reported an issuediffer
2.12.5.cn_in_degree_sign_and_point_onlyinvalid≠ accepted✓ reported an issuediffer
2.12.5.cn_in_degree_sign_onlyinvalid≠ accepted✓ reported an issuediffer
2.12.5.1.cn_e_notation_exponent_plainvalid✓ accepted✓ acceptedagree
2.12.5.1.cn_e_notation_exponent_decimalinvalid✓ reported an issue✓ reported an issueagree
2.12.5.1.cn_e_notation_exponent_emptyinvalid✓ reported an issue✓ reported an issueagree
2.12.5.1.cn_e_notation_exponent_leading_plusvalid✓ accepted✓ acceptedagree
2.12.5.1.cn_e_notation_exponent_negativevalid✓ accepted✓ acceptedagree
2.12.5.1.cn_e_notation_significand_plainvalid✓ accepted✓ acceptedagree
2.12.5.1.cn_e_notation_significand_decimalvalid✓ accepted✓ acceptedagree
2.12.5.1.cn_e_notation_significand_emptyinvalid✓ reported an issue✓ reported an issueagree
2.12.5.1.cn_e_notation_significand_leading_plusvalid≠ reported an issue✓ accepteddiffer
2.12.5.1.cn_e_notation_significand_negativevalid✓ accepted✓ acceptedagree
2.12.5.1.cn_e_notation_significand_with_exponentinvalid✓ reported an issue✓ reported an issueagree
2.12.5.1.cn_type_plainvalid✓ accepted✓ acceptedagree
2.12.5.1.cn_type_capitalizedinvalid✓ reported an issue✓ reported an issueagree
2.12.5.1.cn_type_doubleinvalid✓ reported an issue≠ accepteddiffer
2.12.5.1.cn_type_e_notation_without_sepinvalid✓ reported an issue✓ reported an issueagree
2.12.5.1.cn_type_emptyinvalid≠ accepted✓ reported an issuediffer
2.12.5.1.cn_type_integerinvalid✓ reported an issue≠ accepteddiffer

Details

2.1.1.model_name_plain

models_2_0/valid/2.1.1.model_name_plain.cellml: rule 2.1.1, in valid.

<model name="x1">. Valid: a Basic Latin letter followed by a digit (rule 1.3.1.1). This is the control file for this place: every other file for it differs in this one value.

2.1.1.model_name_empty

models_2_0/invalid/2.1.1.model_name_empty.cellml: rule 2.1.1, in invalid.

<model name="">. Invalid: an identifier has at least one character, a Basic Latin letter (rule 1.3.1.1), and an empty name has none.

2.1.1.model_name_hyphen

models_2_0/invalid/2.1.1.model_name_hyphen.cellml: rule 2.1.1, in invalid.

<model name="x-y">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has a hyphen-minus.

2.1.1.model_name_leading_digit

models_2_0/invalid/2.1.1.model_name_leading_digit.cellml: rule 2.1.1, in invalid.

<model name="1x">. Invalid: an identifier must begin with a Basic Latin letter (rule 1.3.1.1), and this name begins with a digit.

2.1.1.model_name_leading_underscore

models_2_0/invalid/2.1.1.model_name_leading_underscore.cellml: rule 2.1.1, in invalid.

<model name="_x">. Invalid: an identifier must begin with a Basic Latin letter (rule 1.3.1.1), and this name begins with an underscore.

2.1.1.model_name_non_latin_letter

models_2_0/invalid/2.1.1.model_name_non_latin_letter.cellml: rule 2.1.1, in invalid.

<model name="xé">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has the letter é (e with an acute accent), which is not Basic Latin.

2.1.1.model_name_single_letter

models_2_0/valid/2.1.1.model_name_single_letter.cellml: rule 2.1.1, in valid.

<model name="x">. Valid: one Basic Latin letter is a whole identifier (rule 1.3.1.1).

2.1.1.model_name_space

models_2_0/invalid/2.1.1.model_name_space.cellml: rule 2.1.1, in invalid.

<model name="x y">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has a space.

2.1.1.model_name_underscore_inside

models_2_0/valid/2.1.1.model_name_underscore_inside.cellml: rule 2.1.1, in valid.

<model name="x_1">. Valid: after the first letter, underscores are allowed (rule 1.3.1.1).

2.1.1.model_name_upper_case

models_2_0/valid/2.1.1.model_name_upper_case.cellml: rule 2.1.1, in valid.

<model name="X1">. Valid: a Basic Latin letter may be upper or lower case (rule 1.3.1.1).

2.5.1.units_name_plain

models_2_0/valid/2.5.1.units_name_plain.cellml: rule 2.5.1, in valid.

<units name="x1">. Valid: a Basic Latin letter followed by a digit (rule 1.3.1.1). This is the control file for this place: every other file for it differs in this one value.

2.5.1.units_name_empty

models_2_0/invalid/2.5.1.units_name_empty.cellml: rule 2.5.1, in invalid.

<units name="">. Invalid: an identifier has at least one character, a Basic Latin letter (rule 1.3.1.1), and an empty name has none.

2.5.1.units_name_hyphen

models_2_0/invalid/2.5.1.units_name_hyphen.cellml: rule 2.5.1, in invalid.

<units name="x-y">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has a hyphen-minus.

2.5.1.units_name_leading_digit

models_2_0/invalid/2.5.1.units_name_leading_digit.cellml: rule 2.5.1, in invalid.

<units name="1x">. Invalid: an identifier must begin with a Basic Latin letter (rule 1.3.1.1), and this name begins with a digit.

2.5.1.units_name_leading_underscore

models_2_0/invalid/2.5.1.units_name_leading_underscore.cellml: rule 2.5.1, in invalid.

<units name="_x">. Invalid: an identifier must begin with a Basic Latin letter (rule 1.3.1.1), and this name begins with an underscore.

2.5.1.units_name_non_latin_letter

models_2_0/invalid/2.5.1.units_name_non_latin_letter.cellml: rule 2.5.1, in invalid.

<units name="xé">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has the letter é (e with an acute accent), which is not Basic Latin.

2.5.1.units_name_single_letter

models_2_0/valid/2.5.1.units_name_single_letter.cellml: rule 2.5.1, in valid.

<units name="x">. Valid: one Basic Latin letter is a whole identifier (rule 1.3.1.1).

2.5.1.units_name_space

models_2_0/invalid/2.5.1.units_name_space.cellml: rule 2.5.1, in invalid.

<units name="x y">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has a space.

2.5.1.units_name_underscore_inside

models_2_0/valid/2.5.1.units_name_underscore_inside.cellml: rule 2.5.1, in valid.

<units name="x_1">. Valid: after the first letter, underscores are allowed (rule 1.3.1.1).

2.5.1.units_name_upper_case

models_2_0/valid/2.5.1.units_name_upper_case.cellml: rule 2.5.1, in valid.

<units name="X1">. Valid: a Basic Latin letter may be upper or lower case (rule 1.3.1.1).

2.6.2.1.unit_prefix_plain

models_2_0/valid/2.6.2.1.unit_prefix_plain.cellml: rule 2.6.2.1, in valid.

prefix="3". Valid: an integer string (rule 1.3.2), so the prefix term is 3 (rule 3.3.1.1.2). This is the control file for this place: every other file for it differs in this one value.

2.6.2.1.unit_prefix_decimal

models_2_0/invalid/2.6.2.1.unit_prefix_decimal.cellml: rule 2.6.2.1, in invalid.

prefix="3.0". Invalid: it has a decimal point, so it is not an integer string (rule 1.3.2), and it is not a name in Table 3.2 either (rule 3.3.1.1.3).

2.6.2.1.unit_prefix_e_notation

models_2_0/invalid/2.6.2.1.unit_prefix_e_notation.cellml: rule 2.6.2.1, in invalid.

prefix="1e3". Invalid: it has an exponent, so it is not an integer string (rule 1.3.2), and it is not a name in Table 3.2 either (rule 3.3.1.1.3).

2.6.2.1.unit_prefix_empty

models_2_0/invalid/2.6.2.1.unit_prefix_empty.cellml: rule 2.6.2.1, in invalid.

prefix="". Invalid: an empty value has no digits (rule 1.3.2.3), so it is not an integer string (rule 1.3.2), and it is not a name in Table 3.2 either (rule 3.3.1.1.3).

2.6.2.1.unit_prefix_large

models_2_0/valid/2.6.2.1.unit_prefix_large.cellml: rule 2.6.2.1, in valid.

prefix="400". Valid: an integer string, and the specification sets no range for the prefix term (rule 3.3.1.1.2).

2.6.2.1.unit_prefix_leading_plus

models_2_0/valid/2.6.2.1.unit_prefix_leading_plus.cellml: rule 2.6.2.1, in valid.

prefix="+3". Valid: rule 1.3.2.2 lets an integer string begin with a single + sign.

2.6.2.1.unit_prefix_name_capitalized

models_2_0/invalid/2.6.2.1.unit_prefix_name_capitalized.cellml: rule 2.6.2.1, in invalid.

prefix="Kilo". Invalid: Table 3.2 lists kilo in lower case, and a value that is not an integer string must be taken from its Name column as written (rule 3.3.1.1.3).

2.6.2.1.unit_prefix_name_deca

models_2_0/valid/2.6.2.1.unit_prefix_name_deca.cellml: rule 2.6.2.1, in valid.

prefix="deca". Valid: deca is in the Name column of Table 3.2, with the value 1 (rule 3.3.1.1.3).

2.6.2.1.unit_prefix_name_deka

models_2_0/invalid/2.6.2.1.unit_prefix_name_deka.cellml: rule 2.6.2.1, in invalid.

prefix="deka". Invalid: Table 3.2 spells this prefix deca, and a value that is not an integer string must be taken from its Name column (rule 3.3.1.1.3).

2.6.2.1.unit_prefix_name_milli

models_2_0/valid/2.6.2.1.unit_prefix_name_milli.cellml: rule 2.6.2.1, in valid.

prefix="milli". Valid: milli is in the Name column of Table 3.2, with the value -3 (rule 3.3.1.1.3).

2.6.2.1.unit_prefix_negative

models_2_0/valid/2.6.2.1.unit_prefix_negative.cellml: rule 2.6.2.1, in valid.

prefix="-3". Valid: rule 1.3.2.2 lets an integer string begin with a single hyphen-minus sign, so the prefix term is -3, the same as milli.

2.6.2.1.unit_prefix_sign_only

models_2_0/invalid/2.6.2.1.unit_prefix_sign_only.cellml: rule 2.6.2.1, in invalid.

prefix="-". Invalid: it has a sign and no digits (rule 1.3.2.3), so it is not an integer string (rule 1.3.2), and it is not a name in Table 3.2 either (rule 3.3.1.1.3).

2.6.2.2.unit_multiplier_plain

models_2_0/valid/2.6.2.2.unit_multiplier_plain.cellml: rule 2.6.2.2, in valid.

multiplier="2". Valid: a plain real number string. This is the control file for this place: every other file for it differs in this one value.

2.6.2.2.unit_multiplier_beyond_double_range

models_2_0/valid/2.6.2.2.unit_multiplier_beyond_double_range.cellml: rule 2.6.2.2, in valid.

multiplier="1e999". Valid: rules 1.3.3 and 1.3.4 allow this syntax and the specification sets no range. 10 to the power 999 has no IEEE 754 double value, and the specification's maintainers confirmed in spec issue 366 that a number a computer cannot represent is still valid CellML: https://github.com/cellml/cellml-specification/issues/366

2.6.2.2.unit_multiplier_empty

models_2_0/invalid/2.6.2.2.unit_multiplier_empty.cellml: rule 2.6.2.2, in invalid.

multiplier="". Invalid: an empty value has no digits at all, so it is not a real number string (rule 1.3.3.4).

2.6.2.2.unit_multiplier_leading_plus

models_2_0/valid/2.6.2.2.unit_multiplier_leading_plus.cellml: rule 2.6.2.2, in valid.

multiplier="+2". Valid: rule 1.3.3.2 lets a basic real number string begin with a single + sign.

2.6.2.2.unit_multiplier_point_only

models_2_0/invalid/2.6.2.2.unit_multiplier_point_only.cellml: rule 2.6.2.2, in invalid.

multiplier=".". Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a decimal point.

2.6.2.2.unit_multiplier_sign_and_point_only

models_2_0/invalid/2.6.2.2.unit_multiplier_sign_and_point_only.cellml: rule 2.6.2.2, in invalid.

multiplier="-.". Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign and a decimal point.

2.6.2.2.unit_multiplier_sign_only

models_2_0/invalid/2.6.2.2.unit_multiplier_sign_only.cellml: rule 2.6.2.2, in invalid.

multiplier="-". Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign.

2.6.2.3.unit_exponent_plain

models_2_0/valid/2.6.2.3.unit_exponent_plain.cellml: rule 2.6.2.3, in valid.

exponent="2". Valid: a plain real number string. This is the control file for this place: every other file for it differs in this one value.

2.6.2.3.unit_exponent_beyond_double_range

models_2_0/valid/2.6.2.3.unit_exponent_beyond_double_range.cellml: rule 2.6.2.3, in valid.

exponent="1e999". Valid: rules 1.3.3 and 1.3.4 allow this syntax and the specification sets no range. 10 to the power 999 has no IEEE 754 double value, and the specification's maintainers confirmed in spec issue 366 that a number a computer cannot represent is still valid CellML: https://github.com/cellml/cellml-specification/issues/366

2.6.2.3.unit_exponent_empty

models_2_0/invalid/2.6.2.3.unit_exponent_empty.cellml: rule 2.6.2.3, in invalid.

exponent="". Invalid: an empty value has no digits at all, so it is not a real number string (rule 1.3.3.4).

2.6.2.3.unit_exponent_leading_plus

models_2_0/valid/2.6.2.3.unit_exponent_leading_plus.cellml: rule 2.6.2.3, in valid.

exponent="+2". Valid: rule 1.3.3.2 lets a basic real number string begin with a single + sign.

2.6.2.3.unit_exponent_point_only

models_2_0/invalid/2.6.2.3.unit_exponent_point_only.cellml: rule 2.6.2.3, in invalid.

exponent=".". Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a decimal point.

2.6.2.3.unit_exponent_sign_and_point_only

models_2_0/invalid/2.6.2.3.unit_exponent_sign_and_point_only.cellml: rule 2.6.2.3, in invalid.

exponent="-.". Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign and a decimal point.

2.6.2.3.unit_exponent_sign_only

models_2_0/invalid/2.6.2.3.unit_exponent_sign_only.cellml: rule 2.6.2.3, in invalid.

exponent="-". Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign.

2.7.1.component_name_plain

models_2_0/valid/2.7.1.component_name_plain.cellml: rule 2.7.1, in valid.

<component name="x1">. Valid: a Basic Latin letter followed by a digit (rule 1.3.1.1). This is the control file for this place: every other file for it differs in this one value.

2.7.1.component_name_empty

models_2_0/invalid/2.7.1.component_name_empty.cellml: rule 2.7.1, in invalid.

<component name="">. Invalid: an identifier has at least one character, a Basic Latin letter (rule 1.3.1.1), and an empty name has none.

2.7.1.component_name_hyphen

models_2_0/invalid/2.7.1.component_name_hyphen.cellml: rule 2.7.1, in invalid.

<component name="x-y">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has a hyphen-minus.

2.7.1.component_name_leading_digit

models_2_0/invalid/2.7.1.component_name_leading_digit.cellml: rule 2.7.1, in invalid.

<component name="1x">. Invalid: an identifier must begin with a Basic Latin letter (rule 1.3.1.1), and this name begins with a digit.

2.7.1.component_name_leading_underscore

models_2_0/invalid/2.7.1.component_name_leading_underscore.cellml: rule 2.7.1, in invalid.

<component name="_x">. Invalid: an identifier must begin with a Basic Latin letter (rule 1.3.1.1), and this name begins with an underscore.

2.7.1.component_name_non_latin_letter

models_2_0/invalid/2.7.1.component_name_non_latin_letter.cellml: rule 2.7.1, in invalid.

<component name="xé">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has the letter é (e with an acute accent), which is not Basic Latin.

2.7.1.component_name_single_letter

models_2_0/valid/2.7.1.component_name_single_letter.cellml: rule 2.7.1, in valid.

<component name="x">. Valid: one Basic Latin letter is a whole identifier (rule 1.3.1.1).

2.7.1.component_name_space

models_2_0/invalid/2.7.1.component_name_space.cellml: rule 2.7.1, in invalid.

<component name="x y">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has a space.

2.7.1.component_name_underscore_inside

models_2_0/valid/2.7.1.component_name_underscore_inside.cellml: rule 2.7.1, in valid.

<component name="x_1">. Valid: after the first letter, underscores are allowed (rule 1.3.1.1).

2.7.1.component_name_upper_case

models_2_0/valid/2.7.1.component_name_upper_case.cellml: rule 2.7.1, in valid.

<component name="X1">. Valid: a Basic Latin letter may be upper or lower case (rule 1.3.1.1).

2.8.1.1.variable_name_plain

models_2_0/valid/2.8.1.1.variable_name_plain.cellml: rule 2.8.1.1, in valid.

<variable name="x1">. Valid: a Basic Latin letter followed by a digit (rule 1.3.1.1). This is the control file for this place: every other file for it differs in this one value.

2.8.1.1.variable_name_empty

models_2_0/invalid/2.8.1.1.variable_name_empty.cellml: rule 2.8.1.1, in invalid.

<variable name="">. Invalid: an identifier has at least one character, a Basic Latin letter (rule 1.3.1.1), and an empty name has none.

2.8.1.1.variable_name_hyphen

models_2_0/invalid/2.8.1.1.variable_name_hyphen.cellml: rule 2.8.1.1, in invalid.

<variable name="x-y">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has a hyphen-minus.

2.8.1.1.variable_name_leading_digit

models_2_0/invalid/2.8.1.1.variable_name_leading_digit.cellml: rule 2.8.1.1, in invalid.

<variable name="1x">. Invalid: an identifier must begin with a Basic Latin letter (rule 1.3.1.1), and this name begins with a digit.

2.8.1.1.variable_name_leading_underscore

models_2_0/invalid/2.8.1.1.variable_name_leading_underscore.cellml: rule 2.8.1.1, in invalid.

<variable name="_x">. Invalid: an identifier must begin with a Basic Latin letter (rule 1.3.1.1), and this name begins with an underscore.

2.8.1.1.variable_name_non_latin_letter

models_2_0/invalid/2.8.1.1.variable_name_non_latin_letter.cellml: rule 2.8.1.1, in invalid.

<variable name="xé">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has the letter é (e with an acute accent), which is not Basic Latin.

2.8.1.1.variable_name_single_letter

models_2_0/valid/2.8.1.1.variable_name_single_letter.cellml: rule 2.8.1.1, in valid.

<variable name="x">. Valid: one Basic Latin letter is a whole identifier (rule 1.3.1.1).

2.8.1.1.variable_name_space

models_2_0/invalid/2.8.1.1.variable_name_space.cellml: rule 2.8.1.1, in invalid.

<variable name="x y">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has a space.

2.8.1.1.variable_name_underscore_inside

models_2_0/valid/2.8.1.1.variable_name_underscore_inside.cellml: rule 2.8.1.1, in valid.

<variable name="x_1">. Valid: after the first letter, underscores are allowed (rule 1.3.1.1).

2.8.1.1.variable_name_upper_case

models_2_0/valid/2.8.1.1.variable_name_upper_case.cellml: rule 2.8.1.1, in valid.

<variable name="X1">. Valid: a Basic Latin letter may be upper or lower case (rule 1.3.1.1).

2.8.2.2.initial_value_plain

models_2_0/valid/2.8.2.2.initial_value_plain.cellml: rule 2.8.2.2, in valid.

initial_value="2". Valid: a plain real number string. This is the control file for this place: every other file for it differs in this one value.

2.8.2.2.initial_value_beyond_double_range

models_2_0/valid/2.8.2.2.initial_value_beyond_double_range.cellml: rule 2.8.2.2, in valid.

initial_value="1e999". Valid: rules 1.3.3 and 1.3.4 allow this syntax and the specification sets no range. 10 to the power 999 has no IEEE 754 double value, and the specification's maintainers confirmed in spec issue 366 that a number a computer cannot represent is still valid CellML: https://github.com/cellml/cellml-specification/issues/366

2.8.2.2.initial_value_empty

models_2_0/invalid/2.8.2.2.initial_value_empty.cellml: rule 2.8.2.2, in invalid.

initial_value="". Invalid: an empty value has no digits at all, so it is not a real number string (rule 1.3.3.4). It is not a variable reference either (rule 3.6.2).

2.8.2.2.initial_value_leading_plus

models_2_0/valid/2.8.2.2.initial_value_leading_plus.cellml: rule 2.8.2.2, in valid.

initial_value="+2". Valid: rule 1.3.3.2 lets a basic real number string begin with a single + sign.

2.8.2.2.initial_value_point_only

models_2_0/invalid/2.8.2.2.initial_value_point_only.cellml: rule 2.8.2.2, in invalid.

initial_value=".". Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a decimal point. It is not a variable reference either (rule 3.6.2).

2.8.2.2.initial_value_sign_and_point_only

models_2_0/invalid/2.8.2.2.initial_value_sign_and_point_only.cellml: rule 2.8.2.2, in invalid.

initial_value="-.". Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign and a decimal point. It is not a variable reference either (rule 3.6.2).

2.8.2.2.initial_value_sign_only

models_2_0/invalid/2.8.2.2.initial_value_sign_only.cellml: rule 2.8.2.2, in invalid.

initial_value="-". Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign. It is not a variable reference either (rule 3.6.2).

2.12.5.cn_plain

models_2_0/valid/2.12.5.cn_plain.cellml: rule 2.12.5, in valid.

<cn>2</cn>. Valid: a plain real number string. This is the control file for this place: every other file for it differs in this one value.

2.12.5.cn_beyond_double_range

models_2_0/valid/2.12.5.cn_beyond_double_range.cellml: rule 2.12.5, in valid.

<cn>1e999</cn>. Valid: rules 1.3.3 and 1.3.4 allow this syntax and the specification sets no range. 10 to the power 999 has no IEEE 754 double value, and the specification's maintainers confirmed in spec issue 366 that a number a computer cannot represent is still valid CellML: https://github.com/cellml/cellml-specification/issues/366

2.12.5.cn_empty

models_2_0/invalid/2.12.5.cn_empty.cellml: rule 2.12.5, in invalid.

<cn></cn>. Invalid: an empty value has no digits at all, so it is not a real number string (rule 1.3.3.4).

2.12.5.cn_leading_plus

models_2_0/valid/2.12.5.cn_leading_plus.cellml: rule 2.12.5, in valid.

<cn>+2</cn>. Valid: rule 1.3.3.2 lets a basic real number string begin with a single + sign.

2.12.5.cn_point_only

models_2_0/invalid/2.12.5.cn_point_only.cellml: rule 2.12.5, in invalid.

<cn>.</cn>. Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a decimal point.

2.12.5.cn_sign_and_point_only

models_2_0/invalid/2.12.5.cn_sign_and_point_only.cellml: rule 2.12.5, in invalid.

<cn>-.</cn>. Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign and a decimal point.

2.12.5.cn_sign_only

models_2_0/invalid/2.12.5.cn_sign_only.cellml: rule 2.12.5, in invalid.

<cn>-</cn>. Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign.

2.12.5.cn_base_plain

models_2_0/valid/2.12.5.cn_base_plain.cellml: rule 2.12.5, in valid.

<cn base="10">2</cn>. Valid: base 10, written out. This is the control file for this place: every other file for it differs in this one value.

2.12.5.cn_base_16

models_2_0/invalid/2.12.5.cn_base_16.cellml: rule 2.12.5, in invalid.

<cn base="16">2</cn>. Invalid: rule 2.12.5 requires base 10, and this cn is base 16, even though 2 is a digit in both.

2.12.5.cn_base_8

models_2_0/invalid/2.12.5.cn_base_8.cellml: rule 2.12.5, in invalid.

<cn base="8">2</cn>. Invalid: rule 2.12.5 requires base 10, and this cn is base 8, even though 2 is a digit in both.

2.12.5.cn_in_degree_plain

models_2_0/valid/2.12.5.cn_in_degree_plain.cellml: rule 2.12.5, in valid.

<degree><cn>2</cn></degree>. Valid: a plain real number string. This is the control file for this place: every other file for it differs in this one value.

2.12.5.cn_in_degree_beyond_double_range

models_2_0/valid/2.12.5.cn_in_degree_beyond_double_range.cellml: rule 2.12.5, in valid.

<degree><cn>1e999</cn></degree>. Valid: rules 1.3.3 and 1.3.4 allow this syntax and the specification sets no range. 10 to the power 999 has no IEEE 754 double value, and the specification's maintainers confirmed in spec issue 366 that a number a computer cannot represent is still valid CellML: https://github.com/cellml/cellml-specification/issues/366

2.12.5.cn_in_degree_empty

models_2_0/invalid/2.12.5.cn_in_degree_empty.cellml: rule 2.12.5, in invalid.

<degree><cn></cn></degree>. Invalid: an empty value has no digits at all, so it is not a real number string (rule 1.3.3.4).

2.12.5.cn_in_degree_leading_plus

models_2_0/valid/2.12.5.cn_in_degree_leading_plus.cellml: rule 2.12.5, in valid.

<degree><cn>+2</cn></degree>. Valid: rule 1.3.3.2 lets a basic real number string begin with a single + sign.

2.12.5.cn_in_degree_point_only

models_2_0/invalid/2.12.5.cn_in_degree_point_only.cellml: rule 2.12.5, in invalid.

<degree><cn>.</cn></degree>. Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a decimal point.

2.12.5.cn_in_degree_sign_and_point_only

models_2_0/invalid/2.12.5.cn_in_degree_sign_and_point_only.cellml: rule 2.12.5, in invalid.

<degree><cn>-.</cn></degree>. Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign and a decimal point.

2.12.5.cn_in_degree_sign_only

models_2_0/invalid/2.12.5.cn_in_degree_sign_only.cellml: rule 2.12.5, in invalid.

<degree><cn>-</cn></degree>. Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign.

2.12.5.1.cn_e_notation_exponent_plain

models_2_0/valid/2.12.5.1.cn_e_notation_exponent_plain.cellml: rule 2.12.5.1, in valid.

<cn type="e-notation">2<sep/>3</cn>. Valid: 2 times 10 to the power 3. This is the control file for the exponent: every other file for it differs in the exponent only.

2.12.5.1.cn_e_notation_exponent_decimal

models_2_0/invalid/2.12.5.1.cn_e_notation_exponent_decimal.cellml: rule 2.12.5.1, in invalid.

<cn type="e-notation">2<sep/>3.5</cn>. Invalid: the exponent of e-notation is an integer (MathML 2.0, 4.4.1.1), and 3.5 has a decimal point.

2.12.5.1.cn_e_notation_exponent_empty

models_2_0/invalid/2.12.5.1.cn_e_notation_exponent_empty.cellml: rule 2.12.5.1, in invalid.

<cn type="e-notation">2<sep/></cn>. Invalid: the exponent of e-notation is an integer (MathML 2.0, 4.4.1.1), and an empty exponent has no digits.

2.12.5.1.cn_e_notation_exponent_leading_plus

models_2_0/valid/2.12.5.1.cn_e_notation_exponent_leading_plus.cellml: rule 2.12.5.1, in valid.

<cn type="e-notation">2<sep/>+3</cn>. Valid: the exponent is an integer, which may begin with a single + sign (MathML 2.0; rule 1.3.2.2). The informative specification allows this sign too.

2.12.5.1.cn_e_notation_exponent_negative

models_2_0/valid/2.12.5.1.cn_e_notation_exponent_negative.cellml: rule 2.12.5.1, in valid.

<cn type="e-notation">2<sep/>-3</cn>. Valid: the exponent is an integer, which may begin with a single hyphen-minus sign (MathML 2.0; rule 1.3.2.2).

2.12.5.1.cn_e_notation_significand_plain

models_2_0/valid/2.12.5.1.cn_e_notation_significand_plain.cellml: rule 2.12.5.1, in valid.

<cn type="e-notation">2<sep/>3</cn>. Valid: 2 times 10 to the power 3. This is the control file for the significand: every other file for it differs in the significand only.

2.12.5.1.cn_e_notation_significand_decimal

models_2_0/valid/2.12.5.1.cn_e_notation_significand_decimal.cellml: rule 2.12.5.1, in valid.

<cn type="e-notation">2.5<sep/>3</cn>. Valid: the significand is a real in decimal notation, which may have a decimal point (MathML 2.0, 4.4.1.1).

2.12.5.1.cn_e_notation_significand_empty

models_2_0/invalid/2.12.5.1.cn_e_notation_significand_empty.cellml: rule 2.12.5.1, in invalid.

<cn type="e-notation"><sep/>3</cn>. Invalid: the significand is a real in decimal notation (MathML 2.0, 4.4.1.1), and an empty significand has no digits.

2.12.5.1.cn_e_notation_significand_leading_plus

models_2_0/valid/2.12.5.1.cn_e_notation_significand_leading_plus.cellml: rule 2.12.5.1, in valid.

<cn type="e-notation">+2<sep/>3</cn>. Valid: the significand is a real in decimal notation, which may begin with a + sign (MathML 2.0, 4.4.1.1).

2.12.5.1.cn_e_notation_significand_negative

models_2_0/valid/2.12.5.1.cn_e_notation_significand_negative.cellml: rule 2.12.5.1, in valid.

<cn type="e-notation">-2<sep/>3</cn>. Valid: the significand is a real in decimal notation, which may begin with a hyphen-minus sign (MathML 2.0, 4.4.1.1).

2.12.5.1.cn_e_notation_significand_with_exponent

models_2_0/invalid/2.12.5.1.cn_e_notation_significand_with_exponent.cellml: rule 2.12.5.1, in invalid.

<cn type="e-notation">2e1<sep/>3</cn>. Invalid: the significand is a real in decimal notation (MathML 2.0, 4.4.1.1), so it cannot carry an exponent of its own; the exponent goes after the sep.

2.12.5.1.cn_type_plain

models_2_0/valid/2.12.5.1.cn_type_plain.cellml: rule 2.12.5.1, in valid.

<cn type="real">2</cn>. Valid: real is one of the two allowed types, written out. This is the control file for this place: every other file for it differs in this one value.

2.12.5.1.cn_type_capitalized

models_2_0/invalid/2.12.5.1.cn_type_capitalized.cellml: rule 2.12.5.1, in invalid.

<cn type="Real">2</cn>. Invalid: rule 2.12.5.1 allows only the types real and e-notation, and the type is written real, in lower case.

2.12.5.1.cn_type_double

models_2_0/invalid/2.12.5.1.cn_type_double.cellml: rule 2.12.5.1, in invalid.

<cn type="double">2</cn>. Invalid: rule 2.12.5.1 allows only the types real and e-notation, and double is a MathML 3 type, not one of them.

2.12.5.1.cn_type_e_notation_without_sep

models_2_0/invalid/2.12.5.1.cn_type_e_notation_without_sep.cellml: rule 2.12.5.1, in invalid.

<cn type="e-notation">2</cn>. Invalid: e-notation is an allowed type, but MathML 2.0 (section 4.4.1.1) writes it as a significand and an exponent on either side of a sep element, and this cn has no sep (rule 2.12.1).

2.12.5.1.cn_type_empty

models_2_0/invalid/2.12.5.1.cn_type_empty.cellml: rule 2.12.5.1, in invalid.

<cn type="">2</cn>. Invalid: rule 2.12.5.1 allows only the types real and e-notation, and an empty type is neither.

2.12.5.1.cn_type_integer

models_2_0/invalid/2.12.5.1.cn_type_integer.cellml: rule 2.12.5.1, in invalid.

<cn type="integer">2</cn>. Invalid: rule 2.12.5.1 allows only the types real and e-notation, and integer is a MathML type CellML 2.0 leaves out.