openphar 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 (108) hide show
  1. checksums.yaml +7 -0
  2. data/README.adoc +221 -0
  3. data/lib/openphar/cli/main.rb +137 -0
  4. data/lib/openphar/cli.rb +11 -0
  5. data/lib/openphar/core/slug_generator.rb +107 -0
  6. data/lib/openphar/core.rb +11 -0
  7. data/lib/openphar/errors/configuration_error.rb +8 -0
  8. data/lib/openphar/errors/monograph_not_found_error.rb +15 -0
  9. data/lib/openphar/errors/parse_error.rb +18 -0
  10. data/lib/openphar/errors/unknown_format_error.rb +8 -0
  11. data/lib/openphar/errors/unknown_publisher_error.rb +8 -0
  12. data/lib/openphar/errors/unknown_type_error.rb +8 -0
  13. data/lib/openphar/errors/validation_error.rb +15 -0
  14. data/lib/openphar/errors.rb +17 -0
  15. data/lib/openphar/exporters/coverage_validator.rb +265 -0
  16. data/lib/openphar/exporters/neo4j/model_registry.rb +130 -0
  17. data/lib/openphar/exporters/neo4j/node_builder.rb +84 -0
  18. data/lib/openphar/exporters/neo4j/property_mapper.rb +154 -0
  19. data/lib/openphar/exporters/neo4j/relationship_builder.rb +87 -0
  20. data/lib/openphar/exporters/neo4j.rb +16 -0
  21. data/lib/openphar/exporters/neo4j_exporter.rb +199 -0
  22. data/lib/openphar/exporters.rb +15 -0
  23. data/lib/openphar/linkers/chp/cross_edition_linker.rb +101 -0
  24. data/lib/openphar/linkers/chp.rb +11 -0
  25. data/lib/openphar/linkers/cross_publisher_linker.rb +295 -0
  26. data/lib/openphar/linkers/herbapedia_linker.rb +125 -0
  27. data/lib/openphar/linkers.rb +13 -0
  28. data/lib/openphar/migrators/chp/classifier.rb +86 -0
  29. data/lib/openphar/migrators/chp.rb +15 -0
  30. data/lib/openphar/migrators/chp_migrator.rb +130 -0
  31. data/lib/openphar/migrators/jp_migrator.rb +345 -0
  32. data/lib/openphar/migrators/phint_migrator.rb +426 -0
  33. data/lib/openphar/migrators.rb +15 -0
  34. data/lib/openphar/models/ahp.rb +25 -0
  35. data/lib/openphar/models/amino_acid_monograph.rb +28 -0
  36. data/lib/openphar/models/api.rb +29 -0
  37. data/lib/openphar/models/assay_specification.rb +19 -0
  38. data/lib/openphar/models/base_entity.rb +221 -0
  39. data/lib/openphar/models/biological_substance_monograph.rb +31 -0
  40. data/lib/openphar/models/chemical_drug_monograph.rb +39 -0
  41. data/lib/openphar/models/chp/biologic.rb +28 -0
  42. data/lib/openphar/models/chp/chemical_preparation.rb +28 -0
  43. data/lib/openphar/models/chp/chemical_substance.rb +28 -0
  44. data/lib/openphar/models/chp/general_chapter.rb +30 -0
  45. data/lib/openphar/models/chp/monograph.rb +116 -0
  46. data/lib/openphar/models/chp/section.rb +37 -0
  47. data/lib/openphar/models/chp/tcm_crude_drug.rb +28 -0
  48. data/lib/openphar/models/chp/tcm_extract.rb +29 -0
  49. data/lib/openphar/models/chp/tcm_formulation.rb +28 -0
  50. data/lib/openphar/models/chp.rb +33 -0
  51. data/lib/openphar/models/crude_drug_monograph.rb +31 -0
  52. data/lib/openphar/models/edition.rb +41 -0
  53. data/lib/openphar/models/formulation_monograph.rb +31 -0
  54. data/lib/openphar/models/hkcmms.rb +26 -0
  55. data/lib/openphar/models/identification_specification.rb +19 -0
  56. data/lib/openphar/models/jp/kampo_formula.rb +94 -0
  57. data/lib/openphar/models/jp.rb +21 -0
  58. data/lib/openphar/models/limit.rb +54 -0
  59. data/lib/openphar/models/mineral_substance_monograph.rb +28 -0
  60. data/lib/openphar/models/monograph.rb +58 -0
  61. data/lib/openphar/models/ph_int/buffer_solution.rb +38 -0
  62. data/lib/openphar/models/ph_int/dosage_form_monograph.rb +43 -0
  63. data/lib/openphar/models/ph_int/radiopharmaceutical_monograph.rb +52 -0
  64. data/lib/openphar/models/ph_int/reagent.rb +50 -0
  65. data/lib/openphar/models/ph_int/reference_substance.rb +50 -0
  66. data/lib/openphar/models/ph_int/test_method.rb +50 -0
  67. data/lib/openphar/models/ph_int/test_solution.rb +39 -0
  68. data/lib/openphar/models/ph_int/volumetric_solution.rb +38 -0
  69. data/lib/openphar/models/ph_int.rb +37 -0
  70. data/lib/openphar/models/physical_specification.rb +17 -0
  71. data/lib/openphar/models/publisher.rb +98 -0
  72. data/lib/openphar/models/purity_specification.rb +16 -0
  73. data/lib/openphar/models/supplement.rb +31 -0
  74. data/lib/openphar/models/test_specification.rb +29 -0
  75. data/lib/openphar/models/thp.rb +24 -0
  76. data/lib/openphar/models/vitamin_monograph.rb +28 -0
  77. data/lib/openphar/models.rb +58 -0
  78. data/lib/openphar/monograph_merger.rb +374 -0
  79. data/lib/openphar/parsers/base_monograph_parser.rb +108 -0
  80. data/lib/openphar/parsers/jp_html_parser.rb +92 -0
  81. data/lib/openphar/parsers/jp_html_parser_base.rb +113 -0
  82. data/lib/openphar/parsers/jp_ja_html_parser.rb +220 -0
  83. data/lib/openphar/parsers/phint_json_parser.rb +332 -0
  84. data/lib/openphar/parsers.rb +21 -0
  85. data/lib/openphar/registry/publisher_registry.rb +46 -0
  86. data/lib/openphar/registry/type_registry.rb +147 -0
  87. data/lib/openphar/registry.rb +24 -0
  88. data/lib/openphar/repositories/monograph_repository.rb +350 -0
  89. data/lib/openphar/repositories.rb +11 -0
  90. data/lib/openphar/transformers/jsonld_transformer.rb +106 -0
  91. data/lib/openphar/transformers.rb +11 -0
  92. data/lib/openphar/version.rb +5 -0
  93. data/lib/openphar.rb +119 -0
  94. data/ontology/bibliographic/edition.ttl +267 -0
  95. data/ontology/context/chp.jsonld +69 -0
  96. data/ontology/context/crude-drugs.jsonld +56 -0
  97. data/ontology/context/pharmacopoeia.jsonld +631 -0
  98. data/ontology/core/identification.ttl +456 -0
  99. data/ontology/core/pharmacopoeia.ttl +3427 -0
  100. data/ontology/core/substance-form.ttl +302 -0
  101. data/ontology/core/unit.ttl +493 -0
  102. data/ontology/publisher/chp/extensions.ttl +186 -0
  103. data/ontology/publisher/phint/extensions.ttl +327 -0
  104. data/ontology/quality/test-method.ttl +610 -0
  105. data/shapes/chp/monograph.ttl +153 -0
  106. data/shapes/edition-shapes.ttl +230 -0
  107. data/shapes/monograph-shapes.ttl +1324 -0
  108. metadata +319 -0
@@ -0,0 +1,456 @@
1
+ # Open Pharmacopoeia - Identification Test Ontology
2
+ #
3
+ # This module defines classes and properties for representing identification
4
+ # test patterns including alternatives ("A or B and C"), references to general
5
+ # identification tests, and microbiology test requirements.
6
+ #
7
+ # This addresses a key gap identified in the International Pharmacopoeia
8
+ # where identification tests often have complex logical structures.
9
+ #
10
+ @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
11
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
12
+ @prefix owl: <http://www.w3.org/2002/07/owl#> .
13
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
14
+ @prefix skos: <http://www.w3.org/2004/02/skos/core#> .
15
+ @prefix dct: <http://purl.org/dc/terms/> .
16
+ @prefix op: <https://www.openphar.org/ontology/core/> .
17
+ @prefix id: <https://www.openphar.org/ontology/identification/> .
18
+
19
+ <https://www.openphar.org/ontology/identification/>
20
+ a owl:Ontology ;
21
+ rdfs:label "Open Pharmacopoeia Identification Test Ontology"@en ;
22
+ rdfs:comment """
23
+ Ontology for representing identification test patterns including
24
+ logical alternatives, general test references, and microbiology
25
+ test requirements. Enables modeling of complex identification
26
+ test structures like "Test A or Test B and Test C".
27
+ """@en ;
28
+ owl:imports <https://www.openphar.org/ontology/core/> ;
29
+ dct:created "2026-02-26"^^xsd:date ;
30
+ dct:modified "2026-02-26"^^xsd:date .
31
+
32
+ # =============================================================================
33
+ # IDENTIFICATION TEST CLASSES
34
+ # =============================================================================
35
+
36
+ id:IdentificationTest
37
+ a owl:Class ;
38
+ rdfs:label "Identification Test"@en ;
39
+ rdfs:comment """
40
+ A test used to identify or confirm the identity of a pharmaceutical
41
+ substance. May be a single test or a composite with logical structure.
42
+ """@en .
43
+
44
+ id:SingleIdentificationTest
45
+ a owl:Class ;
46
+ rdfs:label "Single Identification Test"@en ;
47
+ rdfs:comment "A single, atomic identification test."@en ;
48
+ rdfs:subClassOf id:IdentificationTest .
49
+
50
+ id:CompositeIdentificationTest
51
+ a owl:Class ;
52
+ rdfs:label "Composite Identification Test"@en ;
53
+ rdfs:comment """
54
+ An identification test composed of multiple sub-tests with logical
55
+ relationships (AND, OR).
56
+ """@en ;
57
+ rdfs:subClassOf id:IdentificationTest ;
58
+ rdfs:subClassOf [
59
+ a owl:Restriction ;
60
+ owl:onProperty id:hasComponent ;
61
+ owl:minCardinality 2
62
+ ] .
63
+
64
+ id:hasComponent
65
+ a owl:ObjectProperty ;
66
+ rdfs:label "has component"@en ;
67
+ rdfs:comment "A component test in this composite test."@en ;
68
+ rdfs:domain id:CompositeIdentificationTest ;
69
+ rdfs:range id:IdentificationTestComponent .
70
+
71
+ # =============================================================================
72
+ # LOGICAL OPERATORS
73
+ # =============================================================================
74
+
75
+ id:LogicalOperator
76
+ a owl:Class ;
77
+ rdfs:label "Logical Operator"@en ;
78
+ rdfs:comment "A logical operator for combining tests."@en .
79
+
80
+ id:AndOperator
81
+ a id:LogicalOperator ;
82
+ rdfs:label "AND Operator"@en ;
83
+ skos:prefLabel "AND"@en ;
84
+ rdfs:comment "All tests must pass."@en .
85
+
86
+ id:OrOperator
87
+ a id:LogicalOperator ;
88
+ rdfs:label "OR Operator"@en ;
89
+ skos:prefLabel "OR"@en ;
90
+ rdfs:comment "At least one test must pass."@en .
91
+
92
+ # =============================================================================
93
+ # IDENTIFICATION TEST COMPONENT
94
+ # =============================================================================
95
+
96
+ id:IdentificationTestComponent
97
+ a owl:Class ;
98
+ rdfs:label "Identification Test Component"@en ;
99
+ rdfs:comment """
100
+ A component of a composite identification test, including the test
101
+ and its logical relationship to other components.
102
+ """@en .
103
+
104
+ id:componentTest
105
+ a owl:ObjectProperty ;
106
+ rdfs:label "component test"@en ;
107
+ rdfs:comment "The identification test for this component."@en ;
108
+ rdfs:domain id:IdentificationTestComponent ;
109
+ rdfs:range id:IdentificationTest .
110
+
111
+ id:logicalOperator
112
+ a owl:ObjectProperty ;
113
+ rdfs:label "logical operator"@en ;
114
+ rdfs:comment "The logical operator for this component."@en ;
115
+ rdfs:domain id:IdentificationTestComponent ;
116
+ rdfs:range id:LogicalOperator .
117
+
118
+ id:componentOrder
119
+ a owl:DatatypeProperty ;
120
+ rdfs:label "component order"@en ;
121
+ rdfs:comment "The order of this component in the composite test."@en ;
122
+ rdfs:domain id:IdentificationTestComponent ;
123
+ rdfs:range xsd:integer .
124
+
125
+ # =============================================================================
126
+ # IDENTITY TEST ALTERNATIVE
127
+ # =============================================================================
128
+
129
+ id:IdentityTestAlternative
130
+ a owl:Class ;
131
+ rdfs:label "Identity Test Alternative"@en ;
132
+ rdfs:comment """
133
+ Represents an alternative identity test pattern like "A or B and C".
134
+ Used when multiple tests are acceptable for identification, with
135
+ different logical combinations.
136
+ """@en ;
137
+ rdfs:subClassOf id:CompositeIdentificationTest .
138
+
139
+ id:alternativePattern
140
+ a owl:DatatypeProperty ;
141
+ rdfs:label "alternative pattern"@en ;
142
+ rdfs:comment """
143
+ The pattern of alternatives as a string (e.g., "A or B and C").
144
+ For human readability and documentation.
145
+ """@en ;
146
+ rdfs:domain id:IdentityTestAlternative ;
147
+ rdfs:range xsd:string .
148
+
149
+ id:minimumTestsRequired
150
+ a owl:DatatypeProperty ;
151
+ rdfs:label "minimum tests required"@en ;
152
+ rdfs:comment """
153
+ The minimum number of tests that must pass for the identification
154
+ to be successful.
155
+ """@en ;
156
+ rdfs:domain id:IdentityTestAlternative ;
157
+ rdfs:range xsd:integer .
158
+
159
+ # =============================================================================
160
+ # GENERAL IDENTIFICATION TEST
161
+ # =============================================================================
162
+
163
+ id:GeneralIdentificationTest
164
+ a owl:Class ;
165
+ rdfs:label "General Identification Test"@en ;
166
+ rdfs:comment """
167
+ A reference to a general test method defined elsewhere (e.g., in
168
+ a general tests chapter). Common in pharmacopoeias where certain
169
+ identification methods are defined once and referenced by many
170
+ monographs.
171
+ """@en ;
172
+ rdfs:subClassOf id:SingleIdentificationTest .
173
+
174
+ id:generalTestReference
175
+ a owl:DatatypeProperty ;
176
+ rdfs:label "general test reference"@en ;
177
+ rdfs:comment """
178
+ The reference to the general test (e.g., "General Test 2.2.23",
179
+ "Appendix III.A").
180
+ """@en ;
181
+ rdfs:domain id:GeneralIdentificationTest ;
182
+ rdfs:range xsd:string .
183
+
184
+ id:generalTestMethod
185
+ a owl:ObjectProperty ;
186
+ rdfs:label "general test method"@en ;
187
+ rdfs:comment "Link to the full definition of the general test method."@en ;
188
+ rdfs:domain id:GeneralIdentificationTest ;
189
+ rdfs:range op:TestMethod .
190
+
191
+ # =============================================================================
192
+ # SPECIFIC IDENTIFICATION TEST TYPES
193
+ # =============================================================================
194
+
195
+ id:SpectroscopicIdentification
196
+ a owl:Class ;
197
+ rdfs:label "Spectroscopic Identification"@en ;
198
+ rdfs:comment "Identification using spectroscopic methods (IR, UV, NMR)."@en ;
199
+ rdfs:subClassOf id:SingleIdentificationTest .
200
+
201
+ id:ChromatographicIdentification
202
+ a owl:Class ;
203
+ rdfs:label "Chromatographic Identification"@en ;
204
+ rdfs:comment "Identification using chromatographic methods (TLC, HPLC, GC)."@en ;
205
+ rdfs:subClassOf id:SingleIdentificationTest .
206
+
207
+ id:ChemicalReactionIdentification
208
+ a owl:Class ;
209
+ rdfs:label "Chemical Reaction Identification"@en ;
210
+ rdfs:comment "Identification using chemical reactions (color, precipitate)."@en ;
211
+ rdfs:subClassOf id:SingleIdentificationTest .
212
+
213
+ id:PhysicalPropertyIdentification
214
+ a owl:Class ;
215
+ rdfs:label "Physical Property Identification"@en ;
216
+ rdfs:comment "Identification using physical properties (melting point, rotation)."@en ;
217
+ rdfs:subClassOf id:SingleIdentificationTest .
218
+
219
+ # =============================================================================
220
+ # MICROBIOLOGY IDENTIFICATION
221
+ # =============================================================================
222
+
223
+ id:MicrobiologyIdentification
224
+ a owl:Class ;
225
+ rdfs:label "Microbiology Identification"@en ;
226
+ rdfs:comment """
227
+ Identification using microbiological methods, including culture
228
+ characteristics, biochemical tests, and organism-specific tests.
229
+ """@en ;
230
+ rdfs:subClassOf id:SingleIdentificationTest .
231
+
232
+ id:TestOrganism
233
+ a owl:Class ;
234
+ rdfs:label "Test Organism"@en ;
235
+ rdfs:comment """
236
+ A microorganism used in microbiological testing. May be a test
237
+ organism for potency assays or a challenge organism for sterility
238
+ or antimicrobial effectiveness testing.
239
+ """@en .
240
+
241
+ id:organismName
242
+ a owl:DatatypeProperty ;
243
+ rdfs:label "organism name"@en ;
244
+ rdfs:comment "The scientific name of the test organism."@en ;
245
+ rdfs:domain id:TestOrganism ;
246
+ rdfs:range xsd:string .
247
+
248
+ id:organismStrain
249
+ a owl:DatatypeProperty ;
250
+ rdfs:label "organism strain"@en ;
251
+ rdfs:comment "The strain designation (e.g., ATCC number)."@en ;
252
+ rdfs:domain id:TestOrganism ;
253
+ rdfs:range xsd:string .
254
+
255
+ id:organismType
256
+ a owl:ObjectProperty ;
257
+ rdfs:label "organism type"@en ;
258
+ rdfs:comment "The type of organism (bacteria, fungus, virus)."@en ;
259
+ rdfs:domain id:TestOrganism ;
260
+ rdfs:range id:OrganismType .
261
+
262
+ id:OrganismType
263
+ a owl:Class ;
264
+ rdfs:label "Organism Type"@en ;
265
+ rdfs:comment "The type of microorganism."@en .
266
+
267
+ id:Bacteria
268
+ a id:OrganismType ;
269
+ rdfs:label "Bacteria"@en ;
270
+ skos:prefLabel "Bacteria"@en .
271
+
272
+ id:Fungus
273
+ a id:OrganismType ;
274
+ rdfs:label "Fungus"@en ;
275
+ skos:prefLabel "Fungus"@en .
276
+
277
+ id:Yeast
278
+ a id:OrganismType ;
279
+ rdfs:label "Yeast"@en ;
280
+ skos:prefLabel "Yeast"@en ;
281
+ rdfs:subClassOf id:Fungus .
282
+
283
+ id:Mold
284
+ a id:OrganismType ;
285
+ rdfs:label "Mold"@en ;
286
+ skos:prefLabel "Mold"@en ;
287
+ rdfs:subClassOf id:Fungus .
288
+
289
+ id:Virus
290
+ a id:OrganismType ;
291
+ rdfs:label "Virus"@en ;
292
+ skos:prefLabel "Virus"@en .
293
+
294
+ # =============================================================================
295
+ # CULTURE MEDIUM
296
+ # =============================================================================
297
+
298
+ id:CultureMedium
299
+ a owl:Class ;
300
+ rdfs:label "Culture Medium"@en ;
301
+ rdfs:comment """
302
+ A growth medium used for culturing microorganisms in microbiological
303
+ testing. May be solid (agar), liquid (broth), or semi-solid.
304
+ """@en .
305
+
306
+ id:mediumName
307
+ a owl:DatatypeProperty ;
308
+ rdfs:label "medium name"@en ;
309
+ rdfs:comment "The name of the culture medium."@en ;
310
+ rdfs:domain id:CultureMedium ;
311
+ rdfs:range xsd:string .
312
+
313
+ id:mediumType
314
+ a owl:ObjectProperty ;
315
+ rdfs:label "medium type"@en ;
316
+ rdfs:comment "The type of culture medium."@en ;
317
+ rdfs:domain id:CultureMedium ;
318
+ rdfs:range id:MediumType .
319
+
320
+ id:MediumType
321
+ a owl:Class ;
322
+ rdfs:label "Medium Type"@en ;
323
+ rdfs:comment "The physical type of culture medium."@en .
324
+
325
+ id:SolidMedium
326
+ a id:MediumType ;
327
+ rdfs:label "Solid Medium"@en ;
328
+ skos:prefLabel "Solid"@en ;
329
+ rdfs:comment "Solid medium (e.g., agar plate)."@en .
330
+
331
+ id:LiquidMedium
332
+ a id:MediumType ;
333
+ rdfs:label "Liquid Medium"@en ;
334
+ skos:prefLabel "Liquid"@en ;
335
+ rdfs:comment "Liquid medium (e.g., broth)."@en .
336
+
337
+ id:SemiSolidMedium
338
+ a id:MediumType ;
339
+ rdfs:label "Semi-Solid Medium"@en ;
340
+ skos:prefLabel "Semi-Solid"@en ;
341
+ rdfs:comment "Semi-solid medium."@en .
342
+
343
+ id:mediumPH
344
+ a owl:DatatypeProperty ;
345
+ rdfs:label "medium pH"@en ;
346
+ rdfs:comment "The pH of the culture medium after sterilization."@en ;
347
+ rdfs:domain id:CultureMedium ;
348
+ rdfs:range xsd:decimal .
349
+
350
+ id:incubationTemperature
351
+ a owl:DatatypeProperty ;
352
+ rdfs:label "incubation temperature"@en ;
353
+ rdfs:comment "The incubation temperature in degrees Celsius."@en ;
354
+ rdfs:domain id:CultureMedium ;
355
+ rdfs:range xsd:decimal .
356
+
357
+ id:incubationTime
358
+ a owl:DatatypeProperty ;
359
+ rdfs:label "incubation time"@en ;
360
+ rdfs:comment "The incubation time (e.g., '24-48 hours')."@en ;
361
+ rdfs:domain id:CultureMedium ;
362
+ rdfs:range xsd:string .
363
+
364
+ # =============================================================================
365
+ # COMMON CULTURE MEDIA
366
+ # =============================================================================
367
+
368
+ id:SoybeanCaseinDigestMedium
369
+ a id:CultureMedium ;
370
+ rdfs:label "Soybean-Casein Digest Medium"@en ;
371
+ skos:prefLabel "SCDM"@en ;
372
+ skos:altLabel "Tryptic Soy Broth"@en ;
373
+ id:mediumName "Soybean-Casein Digest Medium" ;
374
+ id:mediumType id:LiquidMedium .
375
+
376
+ id:FluidThioglycollateMedium
377
+ a id:CultureMedium ;
378
+ rdfs:label "Fluid Thioglycollate Medium"@en ;
379
+ skos:prefLabel "FTM"@en ;
380
+ id:mediumName "Fluid Thioglycollate Medium" ;
381
+ id:mediumType id:LiquidMedium .
382
+
383
+ id:SabouraudDextroseAgar
384
+ a id:CultureMedium ;
385
+ rdfs:label "Sabouraud Dextrose Agar"@en ;
386
+ skos:prefLabel "SDA"@en ;
387
+ id:mediumName "Sabouraud Dextrose Agar" ;
388
+ id:mediumType id:SolidMedium .
389
+
390
+ id:PotatoDextroseAgar
391
+ a id:CultureMedium ;
392
+ rdfs:label "Potato Dextrose Agar"@en ;
393
+ skos:prefLabel "PDA"@en ;
394
+ id:mediumName "Potato Dextrose Agar" ;
395
+ id:mediumType id:SolidMedium .
396
+
397
+ # =============================================================================
398
+ # LINKING PROPERTIES ON MONOGRAPH
399
+ # =============================================================================
400
+
401
+ op:hasIdentificationTest
402
+ a owl:ObjectProperty ;
403
+ rdfs:label "has identification test"@en ;
404
+ rdfs:comment "An identification test for this substance."@en ;
405
+ rdfs:domain op:PharmacopoeiaMonograph ;
406
+ rdfs:range id:IdentificationTest .
407
+
408
+ op:usesTestOrganism
409
+ a owl:ObjectProperty ;
410
+ rdfs:label "uses test organism"@en ;
411
+ rdfs:comment "A test organism used in testing this substance."@en ;
412
+ rdfs:domain op:PharmacopoeiaMonograph ;
413
+ rdfs:range id:TestOrganism .
414
+
415
+ op:usesCultureMedium
416
+ a owl:ObjectProperty ;
417
+ rdfs:label "uses culture medium"@en ;
418
+ rdfs:comment "A culture medium used in testing this substance."@en ;
419
+ rdfs:domain op:PharmacopoeiaMonograph ;
420
+ rdfs:range id:CultureMedium .
421
+
422
+ # =============================================================================
423
+ # EXAMPLE: COMPLEX IDENTIFICATION TEST
424
+ # =============================================================================
425
+
426
+ # Example instance data would look like:
427
+ #
428
+ # op:SomeDrug-Monograph a op:ChemicalDrugMonograph ;
429
+ # op:hasIdentificationTest id:SomeDrug-Identification .
430
+ #
431
+ # id:SomeDrug-Identification a id:IdentityTestAlternative ;
432
+ # rdfs:label "Identification for Some Drug"@en ;
433
+ # id:alternativePattern "Test A or Test B and Test C" ;
434
+ # id:minimumTestsRequired 2 ;
435
+ # id:hasComponent [
436
+ # id:componentTest id:SomeDrug-IR ;
437
+ # id:logicalOperator id:OrOperator ;
438
+ # id:componentOrder 1
439
+ # ] , [
440
+ # id:componentTest id:SomeDrug-UV ;
441
+ # id:logicalOperator id:OrOperator ;
442
+ # id:componentOrder 2
443
+ # ] , [
444
+ # id:componentTest id:SomeDrug-TLC ;
445
+ # id:logicalOperator id:AndOperator ;
446
+ # id:componentOrder 3
447
+ # ] .
448
+ #
449
+ # id:SomeDrug-IR a id:SpectroscopicIdentification ;
450
+ # rdfs:label "IR Spectroscopy"@en .
451
+ #
452
+ # id:SomeDrug-UV a id:SpectroscopicIdentification ;
453
+ # rdfs:label "UV Spectroscopy"@en .
454
+ #
455
+ # id:SomeDrug-TLC a id:ChromatographicIdentification ;
456
+ # rdfs:label "TLC"@en .