chemicalml 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rubocop.yml +20 -0
  4. data/CHANGELOG.md +21 -0
  5. data/CLAUDE.md +198 -0
  6. data/Gemfile +14 -0
  7. data/LICENSE +24 -0
  8. data/NOTICES.adoc +115 -0
  9. data/README.adoc +87 -0
  10. data/Rakefile +8 -0
  11. data/TODO.align/01-cml-base-mixins.md +122 -0
  12. data/TODO.align/02-real-schema-hierarchies.md +88 -0
  13. data/TODO.align/03-configuration.md +50 -0
  14. data/TODO.align/04-parse-entry-points.md +59 -0
  15. data/TODO.align/05-schema-aware-translator.md +33 -0
  16. data/TODO.align/06-no-respond-to.md +44 -0
  17. data/TODO.align/07-canon-xml-comparison.md +43 -0
  18. data/TODO.align/08-expand-fixtures.md +37 -0
  19. data/TODO.align/09-final-spec-lint.md +29 -0
  20. data/TODO.align/10-role-marker-modules.md +54 -0
  21. data/TODO.align/11-dry-configuration.md +63 -0
  22. data/TODO.align/12-wire-class-macro.md +51 -0
  23. data/TODO.align/13-wire-namespace.md +44 -0
  24. data/TODO.align/14-schema24-correctness.md +37 -0
  25. data/TODO.align/15-canon-fixture-roundtrip.md +38 -0
  26. data/TODO.align/16-schema24-convention-coverage.md +33 -0
  27. data/TODO.align/17-final-spec-lint.md +28 -0
  28. data/TODO.align/README.md +27 -0
  29. data/TODO.align/README.round2.md +24 -0
  30. data/TODO.cml-full/01-reference-docs.md +43 -0
  31. data/TODO.cml-full/02-schema-versioned-model.md +70 -0
  32. data/TODO.cml-full/03-fixtures-scrape.md +52 -0
  33. data/TODO.cml-full/04-convention-framework.md +69 -0
  34. data/TODO.cml-full/05-dictionary-layer.md +77 -0
  35. data/TODO.cml-full/06-extend-canonical-translator.md +60 -0
  36. data/TODO.cml-full/07-attribution-notices.md +42 -0
  37. data/TODO.cml-full/08-autoload-only.md +48 -0
  38. data/TODO.cml-full/09-spec-coverage.md +38 -0
  39. data/TODO.cml-full/README.md +23 -0
  40. data/chemicalml.gemspec +35 -0
  41. data/data/dictionaries/_index.yaml +14 -0
  42. data/data/dictionaries/compchem.yaml +481 -0
  43. data/data/dictionaries/unit_non_si.yaml +53 -0
  44. data/data/dictionaries/unit_si.yaml +87 -0
  45. data/data/dictionaries/unit_type.yaml +113 -0
  46. data/lib/chemicalml/cml/array.rb +10 -0
  47. data/lib/chemicalml/cml/atom.rb +10 -0
  48. data/lib/chemicalml/cml/atom_array.rb +10 -0
  49. data/lib/chemicalml/cml/atom_parity.rb +10 -0
  50. data/lib/chemicalml/cml/base/array.rb +36 -0
  51. data/lib/chemicalml/cml/base/atom.rb +38 -0
  52. data/lib/chemicalml/cml/base/atom_array.rb +22 -0
  53. data/lib/chemicalml/cml/base/atom_parity.rb +24 -0
  54. data/lib/chemicalml/cml/base/bond.rb +28 -0
  55. data/lib/chemicalml/cml/base/bond_array.rb +22 -0
  56. data/lib/chemicalml/cml/base/bond_stereo.rb +28 -0
  57. data/lib/chemicalml/cml/base/cml_module.rb +40 -0
  58. data/lib/chemicalml/cml/base/dictionary.rb +32 -0
  59. data/lib/chemicalml/cml/base/dictionary_entry.rb +34 -0
  60. data/lib/chemicalml/cml/base/document.rb +26 -0
  61. data/lib/chemicalml/cml/base/formula.rb +38 -0
  62. data/lib/chemicalml/cml/base/identifier.rb +26 -0
  63. data/lib/chemicalml/cml/base/label.rb +28 -0
  64. data/lib/chemicalml/cml/base/list.rb +36 -0
  65. data/lib/chemicalml/cml/base/matrix.rb +38 -0
  66. data/lib/chemicalml/cml/base/metadata.rb +30 -0
  67. data/lib/chemicalml/cml/base/metadata_list.rb +28 -0
  68. data/lib/chemicalml/cml/base/molecule.rb +40 -0
  69. data/lib/chemicalml/cml/base/name.rb +26 -0
  70. data/lib/chemicalml/cml/base/parameter.rb +34 -0
  71. data/lib/chemicalml/cml/base/parameter_list.rb +28 -0
  72. data/lib/chemicalml/cml/base/product.rb +22 -0
  73. data/lib/chemicalml/cml/base/product_list.rb +22 -0
  74. data/lib/chemicalml/cml/base/property.rb +34 -0
  75. data/lib/chemicalml/cml/base/property_list.rb +28 -0
  76. data/lib/chemicalml/cml/base/reactant.rb +22 -0
  77. data/lib/chemicalml/cml/base/reactant_list.rb +22 -0
  78. data/lib/chemicalml/cml/base/reaction.rb +32 -0
  79. data/lib/chemicalml/cml/base/reaction_list.rb +22 -0
  80. data/lib/chemicalml/cml/base/scalar.rb +32 -0
  81. data/lib/chemicalml/cml/base/substance.rb +30 -0
  82. data/lib/chemicalml/cml/base/unit.rb +38 -0
  83. data/lib/chemicalml/cml/base/unit_list.rb +30 -0
  84. data/lib/chemicalml/cml/base/unit_type.rb +28 -0
  85. data/lib/chemicalml/cml/base/unit_type_list.rb +30 -0
  86. data/lib/chemicalml/cml/base.rb +51 -0
  87. data/lib/chemicalml/cml/bond.rb +10 -0
  88. data/lib/chemicalml/cml/bond_array.rb +10 -0
  89. data/lib/chemicalml/cml/bond_stereo.rb +10 -0
  90. data/lib/chemicalml/cml/cml_module.rb +10 -0
  91. data/lib/chemicalml/cml/dictionary.rb +10 -0
  92. data/lib/chemicalml/cml/dictionary_entry.rb +10 -0
  93. data/lib/chemicalml/cml/document.rb +10 -0
  94. data/lib/chemicalml/cml/elements.rb +58 -0
  95. data/lib/chemicalml/cml/formula.rb +10 -0
  96. data/lib/chemicalml/cml/identifier.rb +10 -0
  97. data/lib/chemicalml/cml/label.rb +10 -0
  98. data/lib/chemicalml/cml/list.rb +10 -0
  99. data/lib/chemicalml/cml/matrix.rb +10 -0
  100. data/lib/chemicalml/cml/metadata.rb +10 -0
  101. data/lib/chemicalml/cml/metadata_list.rb +10 -0
  102. data/lib/chemicalml/cml/molecule.rb +10 -0
  103. data/lib/chemicalml/cml/name.rb +10 -0
  104. data/lib/chemicalml/cml/namespace.rb +17 -0
  105. data/lib/chemicalml/cml/parameter.rb +10 -0
  106. data/lib/chemicalml/cml/parameter_list.rb +10 -0
  107. data/lib/chemicalml/cml/product.rb +10 -0
  108. data/lib/chemicalml/cml/product_list.rb +10 -0
  109. data/lib/chemicalml/cml/property.rb +10 -0
  110. data/lib/chemicalml/cml/property_list.rb +10 -0
  111. data/lib/chemicalml/cml/reactant.rb +10 -0
  112. data/lib/chemicalml/cml/reactant_list.rb +10 -0
  113. data/lib/chemicalml/cml/reaction.rb +10 -0
  114. data/lib/chemicalml/cml/reaction_list.rb +10 -0
  115. data/lib/chemicalml/cml/role/array.rb +13 -0
  116. data/lib/chemicalml/cml/role/atom.rb +13 -0
  117. data/lib/chemicalml/cml/role/atom_array.rb +13 -0
  118. data/lib/chemicalml/cml/role/atom_parity.rb +13 -0
  119. data/lib/chemicalml/cml/role/bond.rb +13 -0
  120. data/lib/chemicalml/cml/role/bond_array.rb +13 -0
  121. data/lib/chemicalml/cml/role/bond_stereo.rb +13 -0
  122. data/lib/chemicalml/cml/role/cml_module.rb +14 -0
  123. data/lib/chemicalml/cml/role/dictionary.rb +13 -0
  124. data/lib/chemicalml/cml/role/dictionary_entry.rb +13 -0
  125. data/lib/chemicalml/cml/role/document.rb +13 -0
  126. data/lib/chemicalml/cml/role/formula.rb +13 -0
  127. data/lib/chemicalml/cml/role/identifier.rb +13 -0
  128. data/lib/chemicalml/cml/role/label.rb +13 -0
  129. data/lib/chemicalml/cml/role/list.rb +13 -0
  130. data/lib/chemicalml/cml/role/matrix.rb +13 -0
  131. data/lib/chemicalml/cml/role/metadata.rb +13 -0
  132. data/lib/chemicalml/cml/role/metadata_list.rb +13 -0
  133. data/lib/chemicalml/cml/role/molecule.rb +13 -0
  134. data/lib/chemicalml/cml/role/name.rb +13 -0
  135. data/lib/chemicalml/cml/role/parameter.rb +13 -0
  136. data/lib/chemicalml/cml/role/parameter_list.rb +13 -0
  137. data/lib/chemicalml/cml/role/product.rb +13 -0
  138. data/lib/chemicalml/cml/role/product_list.rb +13 -0
  139. data/lib/chemicalml/cml/role/property.rb +13 -0
  140. data/lib/chemicalml/cml/role/property_list.rb +13 -0
  141. data/lib/chemicalml/cml/role/reactant.rb +13 -0
  142. data/lib/chemicalml/cml/role/reactant_list.rb +13 -0
  143. data/lib/chemicalml/cml/role/reaction.rb +13 -0
  144. data/lib/chemicalml/cml/role/reaction_list.rb +13 -0
  145. data/lib/chemicalml/cml/role/scalar.rb +13 -0
  146. data/lib/chemicalml/cml/role/substance.rb +13 -0
  147. data/lib/chemicalml/cml/role/unit.rb +13 -0
  148. data/lib/chemicalml/cml/role/unit_list.rb +13 -0
  149. data/lib/chemicalml/cml/role/unit_type.rb +13 -0
  150. data/lib/chemicalml/cml/role/unit_type_list.rb +13 -0
  151. data/lib/chemicalml/cml/role.rb +54 -0
  152. data/lib/chemicalml/cml/scalar.rb +10 -0
  153. data/lib/chemicalml/cml/schema24/configuration.rb +19 -0
  154. data/lib/chemicalml/cml/schema24.rb +40 -0
  155. data/lib/chemicalml/cml/schema3/configuration.rb +17 -0
  156. data/lib/chemicalml/cml/schema3.rb +40 -0
  157. data/lib/chemicalml/cml/substance.rb +10 -0
  158. data/lib/chemicalml/cml/translator/value_translations.rb +265 -0
  159. data/lib/chemicalml/cml/translator.rb +233 -0
  160. data/lib/chemicalml/cml/unit.rb +10 -0
  161. data/lib/chemicalml/cml/unit_list.rb +10 -0
  162. data/lib/chemicalml/cml/unit_type.rb +10 -0
  163. data/lib/chemicalml/cml/unit_type_list.rb +10 -0
  164. data/lib/chemicalml/cml/visitable.rb +65 -0
  165. data/lib/chemicalml/cml/wire_class_macro.rb +45 -0
  166. data/lib/chemicalml/cml.rb +55 -0
  167. data/lib/chemicalml/context_configuration.rb +127 -0
  168. data/lib/chemicalml/convention/base.rb +48 -0
  169. data/lib/chemicalml/convention/compchem/constraints/compchem_module_must_contain_job_list.rb +33 -0
  170. data/lib/chemicalml/convention/compchem/constraints/job_must_contain_initialization.rb +38 -0
  171. data/lib/chemicalml/convention/compchem/constraints.rb +14 -0
  172. data/lib/chemicalml/convention/compchem.rb +28 -0
  173. data/lib/chemicalml/convention/constraint.rb +79 -0
  174. data/lib/chemicalml/convention/dictionary/constraints/entry_ids_unique_within_dictionary.rb +33 -0
  175. data/lib/chemicalml/convention/dictionary/constraints/entry_must_have_id_and_term.rb +34 -0
  176. data/lib/chemicalml/convention/dictionary/constraints.rb +14 -0
  177. data/lib/chemicalml/convention/dictionary.rb +28 -0
  178. data/lib/chemicalml/convention/molecular/constraints/atom_array_must_contain_atoms.rb +30 -0
  179. data/lib/chemicalml/convention/molecular/constraints/atom_ids_unique_within_molecule.rb +42 -0
  180. data/lib/chemicalml/convention/molecular/constraints/bond_must_reference_atoms_in_same_molecule.rb +54 -0
  181. data/lib/chemicalml/convention/molecular/constraints.rb +19 -0
  182. data/lib/chemicalml/convention/molecular.rb +29 -0
  183. data/lib/chemicalml/convention/registry.rb +50 -0
  184. data/lib/chemicalml/convention/unit_dictionary/constraints/unit_must_have_symbol_and_unit_type.rb +46 -0
  185. data/lib/chemicalml/convention/unit_dictionary/constraints.rb +12 -0
  186. data/lib/chemicalml/convention/unit_dictionary.rb +27 -0
  187. data/lib/chemicalml/convention/unit_type_dictionary/constraints/unit_type_must_have_id_and_name.rb +34 -0
  188. data/lib/chemicalml/convention/unit_type_dictionary/constraints.rb +12 -0
  189. data/lib/chemicalml/convention/unit_type_dictionary.rb +27 -0
  190. data/lib/chemicalml/convention/violation.rb +36 -0
  191. data/lib/chemicalml/convention.rb +39 -0
  192. data/lib/chemicalml/dictionary/entry.rb +59 -0
  193. data/lib/chemicalml/dictionary/enum.rb +51 -0
  194. data/lib/chemicalml/dictionary/link.rb +32 -0
  195. data/lib/chemicalml/dictionary/loader.rb +60 -0
  196. data/lib/chemicalml/dictionary/model.rb +64 -0
  197. data/lib/chemicalml/dictionary/registry.rb +75 -0
  198. data/lib/chemicalml/dictionary.rb +26 -0
  199. data/lib/chemicalml/errors.rb +7 -0
  200. data/lib/chemicalml/model/atom.rb +40 -0
  201. data/lib/chemicalml/model/bond.rb +33 -0
  202. data/lib/chemicalml/model/cml_array.rb +27 -0
  203. data/lib/chemicalml/model/cml_module.rb +45 -0
  204. data/lib/chemicalml/model/document.rb +29 -0
  205. data/lib/chemicalml/model/formula.rb +34 -0
  206. data/lib/chemicalml/model/identifier.rb +21 -0
  207. data/lib/chemicalml/model/label.rb +21 -0
  208. data/lib/chemicalml/model/matrix.rb +29 -0
  209. data/lib/chemicalml/model/metadata.rb +23 -0
  210. data/lib/chemicalml/model/metadata_list.rb +25 -0
  211. data/lib/chemicalml/model/molecule.rb +38 -0
  212. data/lib/chemicalml/model/name.rb +21 -0
  213. data/lib/chemicalml/model/node.rb +45 -0
  214. data/lib/chemicalml/model/parameter.rb +27 -0
  215. data/lib/chemicalml/model/parameter_list.rb +25 -0
  216. data/lib/chemicalml/model/product.rb +21 -0
  217. data/lib/chemicalml/model/product_list.rb +21 -0
  218. data/lib/chemicalml/model/property.rb +28 -0
  219. data/lib/chemicalml/model/property_list.rb +25 -0
  220. data/lib/chemicalml/model/reactant.rb +21 -0
  221. data/lib/chemicalml/model/reactant_list.rb +21 -0
  222. data/lib/chemicalml/model/reaction.rb +41 -0
  223. data/lib/chemicalml/model/reaction_list.rb +23 -0
  224. data/lib/chemicalml/model/scalar.rb +25 -0
  225. data/lib/chemicalml/model/substance.rb +25 -0
  226. data/lib/chemicalml/model.rb +38 -0
  227. data/lib/chemicalml/schema/definition.rb +41 -0
  228. data/lib/chemicalml/schema/registry.rb +30 -0
  229. data/lib/chemicalml/schema.rb +35 -0
  230. data/lib/chemicalml/version.rb +5 -0
  231. data/lib/chemicalml/versioned_parser.rb +43 -0
  232. data/lib/chemicalml.rb +47 -0
  233. data/lib/tasks/reference_fetch.rake +105 -0
  234. data/lib/tasks/scrape_fixtures.rake +133 -0
  235. data/reference-docs/conventions/compchem.md +141 -0
  236. data/reference-docs/conventions/dictionary.md +119 -0
  237. data/reference-docs/conventions/index.md +56 -0
  238. data/reference-docs/conventions/molecular.md +115 -0
  239. data/reference-docs/conventions/unit-dictionary.md +92 -0
  240. data/reference-docs/conventions/unitType-dictionary.md +51 -0
  241. data/reference-docs/dictionaries/compchem.md +335 -0
  242. data/reference-docs/dictionaries/index.md +52 -0
  243. data/reference-docs/examples/schema24-index.md +50 -0
  244. data/reference-docs/examples/schema3-compchem-index.md +14 -0
  245. data/reference-docs/examples/schema3-molecular-index.md +28 -0
  246. data/reference-docs/schemas/schema24/schema.xsd +10624 -0
  247. data/reference-docs/schemas/schema3/schema.xsd +11459 -0
  248. metadata +306 -0
@@ -0,0 +1,141 @@
1
+ <!-- Source: http://www.xml-cml.org/convention/compchem -->
2
+ <!-- Editors: Weerapong Phadungsukanan, Sam Adams, Joe Townsend, Jens Thomas -->
3
+ <!-- License: CC-BY-3.0 (http://creativecommons.org/licenses/by/3.0/) -->
4
+
5
+ # CML CompChem Convention
6
+
7
+ **This version:** http://www.xml-cml.org/convention/compchem-20110524
8
+ **Latest version:** http://www.xml-cml.org/convention/compchem
9
+ **Editors:** Weerapong Phadungsukanan, Sam Adams, Joe Townsend (University
10
+ of Cambridge); Jens Thomas (STFC Daresbury Laboratory).
11
+
12
+ ## Abstract
13
+
14
+ This specification defines the requirements of the Chemical Markup Language
15
+ CompChem convention.
16
+
17
+ ## Namespaces
18
+
19
+ | Prefix | Namespace URI | Description |
20
+ | --- | --- | --- |
21
+ | `cml` | `http://www.xml-cml.org/schema` | Chemical Markup Language elements |
22
+ | `convention` | `http://www.xml-cml.org/convention/` | Standard CML convention namespace |
23
+ | `compchem` | `http://www.xml-cml.org/dictionary/compchem/` | CompChem Dictionary namespace |
24
+ | `xhtml` | `http://www.w3.org/1999/xhtml` | XHTML |
25
+ | `dc` | `http://purl.org/dc/elements/1.1/` | Dublin Core Metadata Element Set, v1.1 |
26
+
27
+ ## Applying the CompChem convention
28
+
29
+ The CompChem convention MUST be specified using the `convention`
30
+ attribute on a `module` element, with value `convention:compchem`. A
31
+ CompChem module MUST contain at least one `jobList` module child (e.g.
32
+ `<module dictRef="compchem:jobList" id="jobList-0000">`).
33
+
34
+ ## Core concepts
35
+
36
+ - **JobList** — series of successive subtasks
37
+ - **Job** — a computational job (input + calculations + output + environment)
38
+ - **Initialization** — model parameters/inputs (REQUIRED)
39
+ - **Calculation** — computation/optimisation/iteration (OPTIONAL, nestable)
40
+ - **Finalization** — model outputs/results (OPTIONAL)
41
+ - **Environment** — host, software, runtime metadata (OPTIONAL)
42
+ - **User defined concept** — extension modules with a `dictRef`
43
+
44
+ ## Structural rules
45
+
46
+ ### jobList module
47
+
48
+ - MUST have `dictRef="compchem:jobList"` on a `module` element
49
+ - MUST have an `id` unique within the compchem module
50
+ - MUST contain at least one `job` module child
51
+ - SHOULD have a `title`
52
+
53
+ ### job module
54
+
55
+ - MUST have `dictRef="compchem:job"` on a `module` element
56
+ - MUST have an `id` unique within the compchem module
57
+ - MUST contain exactly one `initialization` module child
58
+ - MAY contain zero or more `calculation` module children
59
+ - MAY contain no more than one `finalization` module child
60
+ - MAY contain no more than one `environment` module child
61
+ - If a `calculation` is present, a `finalization` MUST also be present
62
+
63
+ ### initialization module
64
+
65
+ - MUST have `dictRef="compchem:initialization"`
66
+ - MUST NOT contain more than one `molecule` child (the molecule MUST
67
+ specify its convention, SHOULD be molecular)
68
+ - MUST NOT contain more than one `parameterList`
69
+ - MAY contain any number of `list` elements (for complex objects like
70
+ basis sets, DFT functionals)
71
+ - MUST contain at least one of: `molecule`, `parameterList`, or a
72
+ user-defined module
73
+ - MUST NOT contain `property` or `propertyList` children
74
+
75
+ ### calculation module
76
+
77
+ - MUST have `dictRef="compchem:calculation"`
78
+ - MUST NOT contain more than one `molecule` child
79
+ - MUST contain exactly one `initialization` module child
80
+ - MAY contain zero or more `calculation` module children
81
+ - MAY contain no more than one `finalization` module child
82
+
83
+ ### finalization module
84
+
85
+ - MUST have `dictRef="compchem:finalization"`
86
+ - MUST NOT contain more than one `molecule` child
87
+ - MUST NOT contain more than one `propertyList`
88
+ - MUST contain at least one of: `molecule`, `propertyList`, or a
89
+ user-defined module
90
+ - MUST NOT contain `parameter` or `parameterList` children
91
+
92
+ ### environment module
93
+
94
+ - MUST have `dictRef="compchem:environment"`
95
+ - MUST NOT contain more than one `propertyList`
96
+ - MUST contain at least one of: `parameterList`, user-defined module
97
+ - MUST NOT contain `parameter` or `parameterList` directly (only via
98
+ `propertyList`)
99
+
100
+ ## Value containers
101
+
102
+ CompChem currently only allows `scalar`, `array`, and `matrix` value
103
+ containers.
104
+
105
+ ### scalar
106
+
107
+ - MUST have `dataType` attribute: `xsd:string`, `xsd:integer`, or `xsd:double`
108
+ - MUST have `units` if dataType is `xsd:integer` or `xsd:double`
109
+ (even if "unknown" or "dimensionless")
110
+ - MUST NOT have `units` if dataType is `xsd:string`
111
+
112
+ ### array
113
+
114
+ - MUST have `size` attribute (minimum 1)
115
+ - `dataType` MUST be `xsd:integer` or `xsd:double`
116
+ - MUST have `units` (even if dimensionless)
117
+
118
+ ### matrix
119
+
120
+ - MUST have `rows` and `columns` attributes (minimum 1)
121
+ - `dataType` MUST be `xsd:integer` or `xsd:double`
122
+ - MUST have `units` (even if dimensionless)
123
+
124
+ ## Recommended properties/parameters
125
+
126
+ ### environment module
127
+
128
+ - `hostName`, `runDate`, `program`, `programVersion`
129
+
130
+ ### initialization module
131
+
132
+ - `basisSet`, `charge`, `dftFunctional`, `method`, `pointGroup`,
133
+ `spinMultiplicity`, `task`, `title`, `wavefunctionType`
134
+
135
+ ### finalization module
136
+
137
+ - `nuclearRepulsionEnergy`, `totalEnergy`, `wallTime`
138
+
139
+ ## Acknowledgements
140
+
141
+ Peter Murray-Rust, Joe Townsend, Sam Adams.
@@ -0,0 +1,119 @@
1
+ <!-- Source: http://www.xml-cml.org/convention/dictionary -->
2
+ <!-- Editors: Sam Adams, Joe Townsend (University of Cambridge) -->
3
+ <!-- License: CC-BY-3.0 (http://creativecommons.org/licenses/by/3.0/) -->
4
+
5
+ # CML Dictionary Convention
6
+
7
+ **This version:** http://www.xml-cml.org/convention/dictionary-20110525
8
+ **Latest version:** http://www.xml-cml.org/convention/dictionary
9
+ **Editors:** Sam Adams, Joe Townsend (University of Cambridge)
10
+
11
+ ## Abstract
12
+
13
+ This specification defines the requirements of the Chemical Markup Language
14
+ dictionary convention.
15
+
16
+ ## Namespaces
17
+
18
+ | Prefix | Namespace URI | Description |
19
+ | --- | --- | --- |
20
+ | `cml` | `http://www.xml-cml.org/schema` | Chemical Markup Language elements |
21
+ | `convention` | `http://www.xml-cml.org/convention/` | Standard CML convention namespace |
22
+ | `xhtml` | `http://www.w3.org/1999/xhtml` | XHTML |
23
+
24
+ ## Applying the dictionary convention
25
+
26
+ The dictionary convention MUST be specified using the `convention`
27
+ attribute on either a `cml` or a `dictionary` element. If specified on a
28
+ `cml` element, that element MUST contain a single child `dictionary`
29
+ element in the CML namespace.
30
+
31
+ ## Dictionary Element
32
+
33
+ ### Namespace
34
+
35
+ The `dictionary` element MUST have a `namespace` attribute, the value of
36
+ which MUST be a valid URI defining the scope within which the entry terms
37
+ are unique. The namespace URI SHOULD end with `/` or `#` so terms can be
38
+ referenced by appending them to the URI.
39
+
40
+ ### Prefix
41
+
42
+ The `dictionary` element SHOULD have a `dictionaryPrefix` attribute
43
+ specifying the default prefix. MUST be a valid XML QName prefix, SHOULD
44
+ be unique within the CML domain.
45
+
46
+ ### Title
47
+
48
+ The `dictionary` element SHOULD have a `title` attribute for
49
+ human-readability.
50
+
51
+ ### Description
52
+
53
+ The `dictionary` element SHOULD have a single `description` child
54
+ element. MUST contain one or more child elements in the XHTML namespace.
55
+ MUST NOT contain any non-XHTML child elements.
56
+
57
+ ### Entries
58
+
59
+ The `dictionary` element MUST contain one or more child `entry` elements,
60
+ and MUST NOT contain any other child elements from the CML namespace.
61
+
62
+ ## Entry Elements
63
+
64
+ ### Id
65
+
66
+ An `entry` element MUST have an `id` attribute, the value of which MUST
67
+ be unique within the scope of the dictionary. MUST start with a letter,
68
+ MUST only contain letters, numbers, dot, hyphen or underscore.
69
+
70
+ | | | |
71
+ | --- | --- | --- |
72
+ | `IdStartChar` | ::= | `[A-Z] \| [a-z]` |
73
+ | `IdChar` | ::= | `IdStartChar \| [0-9] \| "." \| "-" \| "_"` |
74
+ | `Id` | ::= | `IdStartChar (IdChar)*` |
75
+
76
+ ### Term
77
+
78
+ An `entry` element MUST have a `term` attribute, the value of which
79
+ provides a unique nounal phrase linguistically identifying the subject
80
+ of the entry.
81
+
82
+ ### Definition
83
+
84
+ An `entry` element MUST contain a single `definition` child element. MUST
85
+ contain one or more child elements in the XHTML namespace. MUST NOT
86
+ contain any non-XHTML child elements.
87
+
88
+ ### Description
89
+
90
+ An `entry` element MAY have a single `description` child element providing
91
+ further information: examples, human-readable semantics, hyperlinks. MUST
92
+ contain XHTML child elements only.
93
+
94
+ ### Data type
95
+
96
+ When applicable, an `entry` SHOULD have `dataType` attribute, value is a
97
+ QName referencing the data type of the value. Common types:
98
+ `xsd:string`, `xsd:double`, `xsd:integer`, `xsd:boolean`.
99
+
100
+ ### Unit type
101
+
102
+ An `entry` MUST have a `unitType` attribute, value is a QName referencing
103
+ the unit type (e.g. temperature). An entry describing a concept that
104
+ should not have units (e.g. name of a program) should have unitType
105
+ `none` in the standard CML unitType dictionary.
106
+
107
+ ### Default units
108
+
109
+ When applicable, an `entry` SHOULD have a `units` attribute, value is a
110
+ QName referencing the default units (e.g. Kelvin).
111
+
112
+ If `unitType` is `unknown`, the `units` attribute MUST NOT be present.
113
+ If `unitType` is `none`, the `units` attribute MUST be present and must
114
+ point to `http://www.xml-cml.org/unit/si#none`.
115
+
116
+ ## Acknowledgements
117
+
118
+ Peter Murray-Rust, Joe Townsend, Nick England, Weerapong Phadungsukanan,
119
+ Daniel Lowe, Sam Adams, Hannah Barjat.
@@ -0,0 +1,56 @@
1
+ <!-- Source: http://www.xml-cml.org/convention/ -->
2
+ <!-- License: CC-BY-3.0 (http://creativecommons.org/licenses/by/3.0/) -->
3
+
4
+ # CML Conventions
5
+
6
+ Different domains of chemistry think about chemistry differently; often this
7
+ means a very tight specification of rules in *your* area of expertise and
8
+ very little if any applied to the rest. The loosening of the CML content
9
+ model in Schema 3 allows users to combine the elements and attributes as
10
+ they need to represent data. However, users still need to be able to
11
+ specify a set of rules (constraints) which model their particular domain.
12
+ This can be likened to thinking of the elements and attributes of CML as
13
+ representing the allowed vocabulary and the set of rules as a grammar
14
+ specifying how these words are allowed to be put together. The entire set
15
+ of constraints which the CML should conform to is called a `convention`.
16
+
17
+ ## Implemented Conventions
18
+
19
+ The list of currently supported conventions is given below:
20
+
21
+ Molecular Convention
22
+ : namespace: `http://www.xml-cml.org/convention/molecular`
23
+
24
+ CompChem Convention
25
+ : namespace: `http://www.xml-cml.org/convention/compchem`
26
+
27
+ Dictionary Convention
28
+ : namespace: `http://www.xml-cml.org/convention/dictionary`
29
+
30
+ Unit Dictionary Convention
31
+ : namespace: `http://www.xml-cml.org/convention/unit-dictionary`
32
+
33
+ Unit-Type Dictionary Convention
34
+ : namespace: `http://www.xml-cml.org/convention/unitType-dictionary`
35
+
36
+ There is also a *toy* convention `simpleUnit` which is used as a very
37
+ simple example in the CMLLite paper. The namespace of the convention is
38
+ `http://www.xml-cml.org/convention/simpleUnit`.
39
+
40
+ The `dictionary` convention is currently in the most finished state and
41
+ acts as a template for how conventions will be described in future.
42
+
43
+ Constraints are defined by using XSL Transformations (XSLT). These allow
44
+ users to put more specific constraints and co-constraints on the allowed
45
+ structure of the CML documents than using only schemas. The output is
46
+ based on the ISO Schematron standard XML report language SVRL
47
+ (Schematron Validation Report Language) to indicate errors and warnings
48
+ in the document.
49
+
50
+ Examples of constraints implemented in the `molecular` convention are:
51
+
52
+ - an `atomArray` must have at least one `atom` child
53
+ - the value of an `atom`'s `id` must be unique within the eldest
54
+ containing molecule
55
+ - a `bond` element must have an `atomRefs2` attribute
56
+ - a `bond` must be between `atom`s within the same molecule
@@ -0,0 +1,115 @@
1
+ <!-- Source: http://www.xml-cml.org/convention/molecular -->
2
+ <!-- Editors: Sam Adams, Joe Townsend (University of Cambridge) -->
3
+ <!-- License: CC-BY-3.0 (http://creativecommons.org/licenses/by/3.0/) -->
4
+
5
+ # CML Molecular Convention
6
+
7
+ **This version:** http://www.xml-cml.org/convention/molecular-20110828
8
+ **Latest version:** http://www.xml-cml.org/convention/molecular
9
+ **Authors:** See acknowledgments.
10
+ **Editors:** Sam Adams, Joe Townsend (University of Cambridge)
11
+
12
+ ## Abstract
13
+
14
+ This specification defines the requirements of the Chemical Markup Language
15
+ Molecular convention. This document describes the concepts which are
16
+ introduced in the molecular convention, explains how to compose a document
17
+ that conforms to the molecular convention and illustrates these with
18
+ examples.
19
+
20
+ ## Namespaces
21
+
22
+ | Prefix | Namespace URI | Description |
23
+ | --- | --- | --- |
24
+ | `cml` | `http://www.xml-cml.org/schema` | Chemical Markup Language elements |
25
+ | `convention` | `http://www.xml-cml.org/convention/` | Standard CML convention namespace |
26
+
27
+ ## Applying the molecular convention
28
+
29
+ The molecular convention MUST be specified using the `convention`
30
+ attribute on a `molecule` element or a `cml` element. The value of the
31
+ attribute MUST be a QName that represents the molecular convention,
32
+ i.e. `convention:molecular`. If the molecular convention is specified
33
+ on a `cml` element then that element MUST have at least one child
34
+ `molecule` element that either has no convention specified or specifies
35
+ the molecular convention.
36
+
37
+ ## Molecule Element
38
+
39
+ Within the molecular convention, a `molecule` is REQUIRED to be a child
40
+ of either `cml` or `molecule` elements.
41
+
42
+ A `molecule` MAY hold any combination of:
43
+
44
+ 1. a string representation of a molecule (`name`, `label`, or `inline`
45
+ attribute on `formula`)
46
+ 2. the chemical composition of a substance (`concise` attribute on
47
+ `formula`, or `atomArray`)
48
+ 3. a connection table of `atom`s connected by `bond`s
49
+
50
+ ### Molecule sub-rules
51
+
52
+ - `id` — REQUIRED, unique within document scope. Pattern:
53
+ `[A-Za-z][A-Za-z0-9._-]*`
54
+ - `count` — REQUIRED on child molecules, MUST NOT appear on top-level
55
+ molecules. Non-negative number.
56
+ - `atomArray` — at most one. Mutually exclusive with child `molecule`s.
57
+ - `bondArray` — at most one. Mutually exclusive with child `molecule`s.
58
+ - `formula` — any number
59
+ - `property` — any number
60
+ - `label` — any number
61
+ - `name` — any number
62
+ - `formalCharge` — RECOMMENDED
63
+ - `spinMultiplicity` — RECOMMENDED
64
+ - `chirality` — OPTIONAL
65
+ - `spectrum` — any number, each MUST specify its own convention
66
+
67
+ ## AtomArray
68
+
69
+ MUST be a child of `molecule` or `formula`. Container for `atom`s.
70
+ MUST contain at least one child `atom`.
71
+
72
+ ## BondArray
73
+
74
+ MUST be a child of `molecule`. Container for `bond`s.
75
+ MUST contain at least one child `bond`.
76
+
77
+ ## Atom Element
78
+
79
+ MUST be a child of `atomArray`. MUST have `elementType` attribute.
80
+ MUST have `id` if inside an `atomArray` in a `molecule` (optional in
81
+ `formula`).
82
+
83
+ Supported attributes: `x2`/`y2` (2D display, must appear together),
84
+ `x3`/`y3`/`z3` (3D coords in Angstrom, right-handed, must appear
85
+ together), `formalCharge`, `isotopeNumber`, `spinMultiplicity`,
86
+ `count` (only inside `formula`), `atomParity` child, any number of
87
+ `label` and `property` children.
88
+
89
+ ## Bond Element
90
+
91
+ MUST be a child of `bondArray`. Bonds are between exactly two `atom`s
92
+ in the same parent `molecule`.
93
+
94
+ - `atomRefs2` — REQUIRED, two distinct atom ids in same molecule
95
+ - `order` — REQUIRED. Recommended values: `S`, `D`, `T`, `Q`, `A`.
96
+ Numeric values NOT recommended. If `other`, MUST have `dictRef`.
97
+ - `id` — RECOMMENDED, unique within eldest containing molecule
98
+ - `bondStereo` child — OPTIONAL
99
+ - `label` children — any number
100
+
101
+ ## BondStereo Element
102
+
103
+ MUST be a child of `bond`. Supports cis (`C`) / trans (`T`) and
104
+ wedge (`W`) / hatch (`H`).
105
+
106
+ - If value is `W` or `H` — MUST have `atomRefs2` (the two atoms in the
107
+ parent bond; first = sharp end, second = blunt end). MUST NOT have
108
+ `atomRefs4`.
109
+ - If value is `C` or `T` — MUST have `atomRefs4` (four distinct atom
110
+ ids; two MUST be the parent bond's atoms). MUST NOT have `atomRefs2`.
111
+ - If value is `other` — MUST have `dictRef`.
112
+
113
+ ## Acknowledgements
114
+
115
+ Joe Townsend, Peter Murray-Rust, Alex Wade, Sam Adams.
@@ -0,0 +1,92 @@
1
+ <!-- Source: http://www.xml-cml.org/convention/unit-dictionary -->
2
+ <!-- Editors: Sam Adams, Joe Townsend (University of Cambridge) -->
3
+ <!-- License: CC-BY-3.0 (http://creativecommons.org/licenses/by/3.0/) -->
4
+
5
+ # CML Unit Dictionary Convention
6
+
7
+ **This version:** http://www.xml-cml.org/convention/unit-dictionary-20110303
8
+ **Latest version:** http://www.xml-cml.org/convention/unit-dictionary
9
+ **Editors:** Sam Adams, Joe Townsend (University of Cambridge)
10
+
11
+ ## Abstract
12
+
13
+ This specification defines the requirements of the Chemical Markup
14
+ Language unit-dictionary convention.
15
+
16
+ ## Applying the unit-dictionary convention
17
+
18
+ The unit-dictionary convention MUST be specified using the `convention`
19
+ attribute on a `unitList` element.
20
+
21
+ ## UnitList Element
22
+
23
+ ### Namespace
24
+
25
+ The `unitList` element MUST have a `namespace` attribute, value MUST be
26
+ a valid URI defining the scope within which the unit ids are unique.
27
+ SHOULD end with `/` or `#`.
28
+
29
+ ### Title
30
+
31
+ The `unitList` element SHOULD have a `title` attribute (non-empty).
32
+
33
+ ### Description
34
+
35
+ The `unitList` element SHOULD have a single `description` child element.
36
+ MUST contain XHTML child elements only.
37
+
38
+ ### Units
39
+
40
+ The `unitList` element MUST contain one or more child `unit` elements,
41
+ and MUST NOT contain any other child elements from the CML namespace.
42
+
43
+ ## Unit Elements
44
+
45
+ ### Id
46
+
47
+ A `unit` element MUST have an `id` attribute, unique within the
48
+ unitList. Pattern: same as dictionary entry ids.
49
+
50
+ ### Title
51
+
52
+ A `unit` element MUST have a `title` attribute — typically the full
53
+ name (id is the abbreviation, e.g. id=`kg`, title=`kilogram`).
54
+
55
+ ### Symbol
56
+
57
+ A `unit` element MUST have a `symbol` attribute — the full symbol used
58
+ to represent this unit (e.g. `K`, `Hz`, `J`, `Bq`).
59
+
60
+ ### Parent SI
61
+
62
+ A `unit` element MUST have a `parentSI` attribute — QName referencing
63
+ the parent SI unit (e.g. calorie's parentSI is joule).
64
+
65
+ ### Multiplier and/or Constant to SI
66
+
67
+ A `unit` element MUST have at least one of `multiplierToSI` or
68
+ `constantToSI` (both doubles).
69
+
70
+ - `multiplierToSI` — factor to multiply by to convert to SI (applied
71
+ before constantToSI). Unity for SI units.
72
+ - `constantToSI` — amount to add to convert to SI (applied after
73
+ multiplierToSI). Zero for SI units.
74
+
75
+ ### Unit Type
76
+
77
+ Every `unit` element MUST have a `unitType` attribute — QName
78
+ referencing the unit type (time, temperature, length, force, ...).
79
+
80
+ ### Definition
81
+
82
+ A `unit` element MUST contain a single `definition` child element with
83
+ XHTML content.
84
+
85
+ ### Description
86
+
87
+ A `unit` element MAY have a single `description` child element with
88
+ XHTML content.
89
+
90
+ ## Acknowledgements
91
+
92
+ Peter Murray-Rust, Joe Townsend, Sam Adams, Egon Willighagen.
@@ -0,0 +1,51 @@
1
+ <!-- Source: http://www.xml-cml.org/convention/unitType-dictionary -->
2
+ <!-- Editors: Sam Adams, Joe Townsend (University of Cambridge) -->
3
+ <!-- License: CC-BY-3.0 (http://creativecommons.org/licenses/by/3.0/) -->
4
+
5
+ # CML Unit-Type Dictionary Convention
6
+
7
+ **Latest version:** http://www.xml-cml.org/convention/unitType-dictionary
8
+ **Editors:** Sam Adams, Joe Townsend (University of Cambridge)
9
+
10
+ ## Abstract
11
+
12
+ This specification defines the requirements of the Chemical Markup
13
+ Language unitType-dictionary convention. Unit types abstract over
14
+ units: e.g. the units metre, angstrom and picometre are all of type
15
+ *length*; Kelvin is of type *temperature*.
16
+
17
+ ## Applying the unitType-dictionary convention
18
+
19
+ The unitType-dictionary convention MUST be specified using the
20
+ `convention` attribute on a `unitTypeList` element.
21
+
22
+ ## UnitTypeList Element
23
+
24
+ The `unitTypeList` element MUST have a `namespace` attribute (valid URI,
25
+ SHOULD end with `/` or `#`).
26
+
27
+ The `unitTypeList` element SHOULD have a `title` attribute (non-empty).
28
+
29
+ The `unitTypeList` element SHOULD have a single `description` child
30
+ element with XHTML content.
31
+
32
+ The `unitTypeList` element MUST contain one or more child `unitType`
33
+ elements, and MUST NOT contain any other CML-namespace child elements.
34
+
35
+ ## UnitType Elements
36
+
37
+ A `unitType` element MUST have an `id` attribute unique within the
38
+ unitTypeList. Pattern: `[A-Za-z][A-Za-z0-9._-]*`.
39
+
40
+ A `unitType` element MUST have a `name` attribute — the full name of
41
+ the unit type (e.g. `length`, `temperature`, `time`).
42
+
43
+ A `unitType` element MUST contain a single `definition` child element
44
+ with XHTML content.
45
+
46
+ A `unitType` element MAY have a single `description` child element with
47
+ XHTML content.
48
+
49
+ ## Acknowledgements
50
+
51
+ Peter Murray-Rust, Joe Townsend, Sam Adams, Egon Willighagen.