@prefix chebi: <http://purl.obolibrary.org/obo/CHEBI_> .
@prefix mnx: <https://rdf.metanetx.org/schema/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rheaV: <http://rdf.rhea-db.org/> .
@prefix sbo: <https://identifiers.org/SBO:> .
@prefix sdo: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix prov: <http://www.w3.org/ns/prov#> .

mnx: rdf:type owl:Ontology ;
	owl:versionIRI <http://purl.org/net/mnx/1.0> ;
	rdfs:label "MetaNetX Schema Vocabulary"@en ;
	rdfs:comment """The MetaNetX Schema defines all classes and properties used to describe 
metabolites, reactions, compartments, and metabolic network models in the MetaNetX/MNXref 
reconciliation framework. All terms in this vocabulary use the 'mnx:' prefix and are 
explicitly linked to this ontology via rdfs:isDefinedBy."""@en ;
    <http://purl.org/dc/terms/abstract> "MetaNetX/MNXref is a reconciliation of metabolites and biochemical reactions, providing cross-links between major public biochemistry and Genome-Scale Metabolic Network (GSMN) databases.";
	<http://purl.org/dc/terms/bibliographicCitation> """MetaNetX/MNXref: unified namespace for metabolites and biochemical reactions in the context of metabolic models
Sébastien Moretti, Van Du T Tran, Florence Mehl, Mark Ibberson, Marco Pagni 
Nucleic Acids Research (2021), 49(D1):D570-D574""" ;
	<http://purl.org/dc/terms/created> "2017-11-13"^^xsd:date ;
    <http://purl.org/dc/terms/creator> <https://orcid.org/0000-0001-9292-9463> ,
									   <https://orcid.org/0000-0003-3947-488X> ;
    <https://w3id.org/widoco/vocab#introduction> """
GSMN reconstruction is one of the foundations of Systems Biology. The development of such 
reconstruction involves the integration of knowledge about reactions and metabolites from 
the scientific literature, public databases and previously published GSMNs. Historically, 
many GSMNs were formulated using metabolites represented as "symbols", i.e. without 
explicit reference to a molecular structure. The initial motivation for creating this 
resource ten years ago was to add molecular structures to existing GSMNs. More generally, 
the goal was to establish cross-links between symbols in GSMNs published by different 
groups and the molecules found in the major biochemical databases. This problem is trivial 
as long as one-to-one mappings can be established between the different resources, but 
this is not always the case. Merging metabolites in a metabolic network may lead to the 
merging of reactions, possibly altering the model properties, and hence the predictions 
that could be made using it.
<br>
<img src="https://www.metanetx.org/images/MNXref_schema.png" alt="drawing" width="800"/>

""";
<http://purl.org/dc/terms/description> "MetaNetX Schema Vocabulary: defines all classes and properties for metabolites, reactions, compartments, and metabolic network models in the MetaNetX/MNXref reconciliation framework.";
    <http://purl.org/dc/terms/issue> "2017-12-01"^^xsd:date ;
    <http://purl.org/dc/terms/license> <https://creativecommons.org/licenses/by/4.0/> ;
    <http://purl.org/dc/terms/modified> "2024-05-14"^^xsd:date ;
    <http://purl.org/dc/terms/title> "MetaNetX Schema Vocabulary"@en ;
    <http://purl.org/vocab/vann/preferredNamespacePrefix> "mnx" ;
    <http://purl.org/vocab/vann/preferredNamespaceUri> <https://rdf.metanetx.org/schema/> ;
    # <http://schema.org/image> <https://www.metanetx.org/images/MNXref_schema.png> ;
 .

# ========================================================================
# CORE CLASSES - Used in create_rdf_ttl.pl for model/network generation
# ========================================================================

mnx:COMP a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
	rdfs:label   'MetaNetX compartment, i.e. a set of sub-cellular compartments' ;
    rdfs:comment 'The type of all sub-cellular compartments, including specific and generic compartments' .

mnx:CHEM a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
	rdfs:label   'MetaNetX metabolite class' ;
    rdfs:comment 'A MetaNetX metabolite is defined as a collection of chemical entity identifiers gathered from external resources and mapped together because they refer to the same underlying compound.' .

mnx:REAC a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
	rdfs:label   'MetaNetX reaction, i.e. a set of chemical reaction' ;
    rdfs:comment 'The type of all reactions, as defined in MNXref (with generic compartments) and in MetaNetX models (with specific compartments)' .

mnx:PEPT a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'The type for a gene or a protein that appears in MetaNetX models' .

mnx:PART a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'The type for a helper class, consisting of a compartmentalized chemical species (mnx:CHEM and mnx:COMP) associated with a particular stoichiometric coefficient' .

mnx:GPR a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'The type for Gene-Protein-Reaction, i.e. this is a helper class to associate a reaction (mnx:REAC) with zero, one or more catalyzers (mnx:CATA)' .

mnx:CATA a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'The type of a helper class to describe one or several protein complexes' .

mnx:MNET a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'The type for metabolic network models' .

mnx:CPLX a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'The type for protein complexes' .

# ========================================================================
# CHEMICAL STRUCTURE CLASSES - Used in StandardizeStruct.pm
# ========================================================================

mnx:ChemXRef a rdf:Class ;
    rdfs:isDefinedBy mnx: ; # USED in StandardizeStruct.pm
	rdfs:label 'chemical entity class'      ;
	rdfs:comment '''An instance of this class is an identifier of a chemical entity. 
    A few chemical entity are defined by MetaNetX, but the vast majority of them an imported from external resources database.
    This class is also the top node of the MetaNetX simple ontology for chemical symbols and entities.
    Its primary purpose is to support 
metabolic resconstruction. 
    It is not meant to become chemical ontology like ChEBI.
    ''' ;
	owl:equivalentClass chebi:24431 .

#mnx:MolCategory a rdfs:Class;
#    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
#	rdfs:label "MetaNetX top level node of its simple ontology for chemical symbols and entity." ;
#	rdfs:comment """MetaNetX simple ontology for chemical symbols and entities. 
#It is designed to categorise instances of ChemXRef that appears in chemical equations 
#in metabolic reconstructions or biochemical databases. Its primary purpose is to support 
#metabolic resconstruction. It is not a real chemical ontology.""" .

mnx:ElemFormula a  rdfs:Class;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
    rdfs:label "Elemental composition" ;
	rdfs:comment "Instance of this class contains a single (atomic) symbol and a number (of atoms)" .

# ========================================================================
# REPLACEMENT/DEPRECATION PROPERTIES - Used in create_rdf_ttl.pl
# ========================================================================

mnx:chemReplacedBy a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'indicate how to replace a deprecated entity' ;
    rdfs:range mnx:CHEM ;
    rdfs:domain mnx:CHEM .

mnx:compReplacedBy a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'indicate how to replace a deprecated entity' ;
    rdfs:range mnx:COMP ;
    rdfs:domain mnx:COMP .

mnx:reacReplacedBy a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'indicate how to replace a deprecated entity' ;
    rdfs:range mnx:REAC ;
    rdfs:domain mnx:REAC .

# ========================================================================
# COMPARTMENT PROPERTIES - Used in create_rdf_ttl.pl
# ========================================================================

mnx:compSource a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'A predicate to design the public IRI that best represents a MNXref compartment' ;
    rdfs:domain mnx:COMP ;
    rdfs:range rdfs:Resource .

mnx:compRefer a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'A predicate to design the public IRI that best represents a MNXref compartment' ;
    rdfs:domain mnx:COMP ;
    rdfs:range rdfs:Resource .

mnx:compXref a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'A predicate to list all public IRIs that are included in a MNXref compartment' ;
    rdfs:domain mnx:COMP ;
    rdfs:range rdfs:Resource .

mnx:isGenericComp a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
    rdfs:comment 'tags generic/placeholder compartment' ;
    rdfs:domain mnx:COMP ;
    rdfs:range xsd:boolean .

mnx:compInMNXref a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'identifies (generic) compartments in MNXref' ;
    rdfs:domain mnx:COMP ;
    rdfs:range xsd:boolean .

# ========================================================================
# CHEMICAL/METABOLITE PROPERTIES - Used in BOTH files
# ========================================================================

mnx:chemSource a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'A predicate to design the public IRI that best represents a MNXref metabolite' ;
    rdfs:domain mnx:CHEM ;
    rdfs:range rdfs:Resource .

mnx:chemRefer a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'A predicate to design the public IRI that best represents a MNXref metabolite' ;
    rdfs:domain mnx:CHEM ;
    rdfs:range rdfs:Resource .

mnx:chemXref a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
	rdfs:label  'contains chem member' ; 
    rdfs:comment 'A predicate to list all public IRIs that are included in a MNXref metabolite' ;
    rdfs:domain mnx:CHEM ;
    rdfs:range rdfs:Resource .

mnx:formula a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment '' ;
    rdfs:domain mnx:CHEM ;
    rdfs:range xsd:string .

mnx:charge a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment '' ;
    rdfs:domain mnx:CHEM ;
    rdfs:range xsd:integer .

mnx:mass a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment '' ;
    rdfs:domain mnx:CHEM ;
    rdfs:range xsd:decimal .

mnx:inchi a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment '';
    rdfs:domain mnx:CHEM ;
    rdfs:range xsd:string .

mnx:inchikey a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment '';
    rdfs:domain mnx:CHEM ;
    rdfs:range xsd:string .

mnx:smiles a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment '';
    rdfs:domain mnx:CHEM ;
    rdfs:range xsd:string .

mnx:hasIsomericChild a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
    owl:sameAs mnx:chemIsom ;
    owl:deprecated true .

mnx:chemIsom a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
	rdfs:label 'has stereo child' ;
    rdfs:comment 'The object molecule has a more detailed description of its stereochemistry (either enantiomers or cis-trans isomers) than the subject molecule, i.e. the subject molecule encompasses the object molecule';
    rdfs:domain mnx:CHEM ;
    rdfs:range mnx:CHEM .

mnx:chemInMNXref a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'identifies metabolites in MNXref' ;
    rdfs:domain mnx:CHEM ;
    rdfs:range xsd:boolean .

# ========================================================================
# REACTION PROPERTIES - Used in create_rdf_ttl.pl
# ========================================================================

mnx:reacSource a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'A predicate to design the public IRI that best represents a MNXref reaction' ;
    rdfs:domain mnx:REAC ;
    rdfs:range rdfs:Resource .

mnx:reacRefer a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
	rdfs:label   'has reference chem' ;
    rdfs:comment 'A predicate to design the public IRI that best represents a MNXref reaction' ;
    rdfs:domain mnx:REAC ;
    rdfs:range rdfs:Resource .

mnx:reacXref a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'A predicate to list all public IRIs that are included in a MNXref reaction' ;
    rdfs:domain mnx:REAC ;
    rdfs:range rdfs:Resource .

mnx:reacIsom rdfs:subPropertyOf mnx:hasIsomericChild ; # NOT USED (WIP)
    rdfs:comment 'The object reaction has a more detailed description of the stereochemistry of its reactants than the subject reaction';
    rdfs:domain mnx:REAC ;
    rdfs:range mnx:REAC .

mnx:isBalanced a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'Is the reaction balanced?' ;
    rdfs:domain mnx:REAC ;
    rdfs:range xsd:boolean .

mnx:isTransport a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:domain mnx:REAC ;
    rdfs:range xsd:boolean .

mnx:classification a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:domain mnx:REAC ;
    rdfs:range xsd:string .

mnx:left a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'A predicate to specify the parts (mnx:PART) on the left side of a chemical equation (mnx:REAC)';
    rdfs:domain mnx:REAC ;
    rdfs:range mnx:PART .

mnx:right a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'A predicate to specify the parts (mnx:PART) on the right side of a chemical equation (mnx:REAC)';
    rdfs:domain mnx:REAC ;
    rdfs:range mnx:PART .

mnx:side a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
    rdfs:comment 'A predicate to specify the parts (mnx:PART) on the both sides of a chemical equation (mnx:REAC)';
    rdfs:seeAlso rheaV:side ;
    rdfs:domain mnx:REAC ;
    rdfs:range mnx:PART .

mnx:mnxr a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'belongs to the MNXref reaction' ;
    rdfs:range mnx:REAC ;
    rdfs:domain mnx:REAC .

mnx:reacInMNXref a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'identifies reactions in MNXref' ;
    rdfs:domain mnx:REAC ;
    rdfs:range xsd:boolean .

# ========================================================================
# MODEL/NETWORK PROPERTIES - Used in create_rdf_ttl.pl
# ========================================================================

mnx:gpr a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'A predicate to list GPRs that make the core of any model' ;
    rdfs:domain mnx:MNET ;
    rdfs:range mnx:GPR .

mnx:reac a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'contains the following catalyzers (mnx:CATA)' ;
    rdfs:domain mnx:GPR ;
    rdfs:range mnx:REAC .

mnx:cata a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'contains the following catalyzers (enzymatic complex(s) and flux constraints)' ;
    rdfs:domain mnx:GPR ;
    rdfs:range mnx:CATA .

mnx:pept a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'implies the list of genes or proteins (no logical constraint specified here)' ;
    rdfs:domain  mnx:CATA ;
    rdfs:range mnx:PEPT .

mnx:cplx a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'requires the full list of genes or proteins to be functional' ;
    rdfs:domain mnx:CATA ;
    rdfs:range mnx:CPLX ;
    owl:seeAlso sbo:0000173 .

mnx:subu a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'A predicate to enumerate sub-units (mnx:PEPT) that make of an enzyme or transporter (mnx:CPLX)' ;
    rdfs:domain mnx:CPLX ;
    rdfs:range mnx:PEPT .

mnx:taxid a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'indicates an NCBI Taxid' ;
    rdfs:range mnx:MNET .

mnx:pmid a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'Cites a PubMed identifier' ;
    rdfs:range mnx:MNET .

mnx:lineage a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'Organism lineage' ;
    rdfs:domain mnx:MNET ;
    rdfs:range xsd:string .

mnx:organism a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'Organism name' ;
    rdfs:domain mnx:MNET ;
    rdfs:range xsd:string .

mnx:canGrow a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'is the model able to simulate growth' ;
    rdfs:domain mnx:MNET ;
    rdfs:range xsd:string .

mnx:reacCount a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'Number of reactions' ;
    rdfs:domain mnx:MNET ;
    rdfs:range xsd:integer .

mnx:specCount a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'Number of compartmentalized chemical species' ;
    rdfs:domain mnx:MNET ;
    rdfs:range xsd:integer .

mnx:chemCount a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'Number of chemicals' ;
    rdfs:domain mnx:MNET ;
    rdfs:range xsd:integer .

mnx:compCount a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'Number of compartments' ;
    rdfs:domain mnx:MNET ;
    rdfs:range xsd:integer .

mnx:peptCount a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'Number of genes/peptides' ;
    rdfs:domain mnx:MNET ;
    rdfs:range xsd:integer .

mnx:default_LB a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'Default lower bound for flux constraints' ;
    rdfs:domain mnx:MNET .

mnx:default_UB a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'Default upper bound for flux constraints' ;
    rdfs:domain mnx:MNET .

mnx:lb a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'Lower bound for flux constraint' ;
    rdfs:domain mnx:CATA .

mnx:ub a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'Upper bound for flux constraint' ;
    rdfs:domain mnx:CATA .

mnx:dir a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'Direction of reaction' ;
    rdfs:domain mnx:CATA .

# ========================================================================
# PEPTIDE/GENE PROPERTIES - Used in create_rdf_ttl.pl
# ========================================================================

mnx:peptXref a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'A predicate to list all public IRIs that correspond to a gene or a protein' ;
    rdfs:domain mnx:PEPT ;
    rdfs:range rdfs:Resource.

mnx:geneName a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'A predicate to list all gene name that correspond to a gene or a protein' ;
    rdfs:domain mnx:PEPT ;
    rdfs:range rdfs:Resource.

mnx:peptSource a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'Source of peptide/gene information' ;
    rdfs:domain mnx:PEPT ;
    rdfs:range rdfs:Resource.

mnx:peptRefer a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:comment 'Reference for peptide/gene' ;
    rdfs:domain mnx:PEPT ;
    rdfs:range rdfs:Resource.

# ========================================================================
# SOURCE DATA PROPERTIES - Used in StandardizeStruct.pm
# ========================================================================

mnx:srcCharge a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
	rdfs:label 'has imported charge' ;
	rdfs:domain mnx:ChemXRef        ; 
	rdfs:range  xsd:integer          .

mnx:srcFormula a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
	rdfs:label 'has imported formula' ;
	rdfs:domain mnx:ChemXRef         ; 
    rdfs:range  xsd:string            .

mnx:srcMOL a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
	rdfs:label 'has imported MOL entry' ;
	rdfs:domain mnx:ChemXRef           ; 
    rdfs:range  xsd:string              .

mnx:srcSMILES a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
	rdfs:label 'has imported SMILES' ;
    rdfs:domain mnx:ChemXRef         ; 
    rdfs:range  xsd:string           .

mnx:srcInChI a rdfs:Property; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
	rdfs:label 'has imported InChI' ;
    rdfs:domain mnx:ChemXRef       ; 
    rdfs:range  xsd:string          .

mnx:srcInChIkey a rdfs:Property; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
	rdfs:label 'has imported InChIkey' ;
    rdfs:domain mnx:ChemXRef          ; 
    rdfs:range  xsd:string             .

mnx:srcMolWeight a rdfs:Property; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
	rdfs:label 'has imported molecular weight' ;
	rdfs:domain mnx:ChemXRef                  ; 
    rdfs:range  xsd:double                     .
	
mnx:srcName a rdfs:Property; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
	rdfs:label 'has imported name(s)' ;
    rdfs:domain mnx:ChemXRef         ; 
    rdfs:range  xsd:string            .

# ========================================================================
# ERROR/WARNING PROPERTIES - Used in StandardizeStruct.pm
# ========================================================================

mnx:logComment a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'specific comment produced while processing molecular structures' ;
    rdfs:domain mnx:ChemXRef  ;
    rdfs:range  xsd:string    ;
    owl:equivalentProperty rdfs:comment .

mnx:errorLog a rdfs:Property; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:subPropertyOf mnx:logComment ;
    rdfs:label 'error detected while process molecular structures, that affects the produced data' ;
    rdfs:domain mnx:ChemXRef  ;
    rdfs:range  xsd:string    .

mnx:warnLog a rdfs:Property; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:subPropertyOf mnx:logComment ;
    rdfs:label 'warning produced while process molecular structures, that does not affect the produced data' ;
    rdfs:domain mnx:ChemXRef  ;
    rdfs:range  xsd:string    .

mnx:errorStructSkipped a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:subPropertyOf mnx:errorLog;
    rdfs:label 'chem struct processing was skipped (manual curation)' ;
    rdfs:domain mnx:ChemXRef  ;
    rdfs:range  xsd:string    .

mnx:errorSrc a rdfs:Property; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
	rdfs:label 'error detected while importing the raw source from source' ;
	rdfs:domain mnx:ChemXRef  ;
    rdfs:range  xsd:string    .

mnx:errorSrcCharge a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
	rdfs:subPropertyOf mnx:errorSrc ; 
	rdfs:label 'error detected while importing source charge' ;
    rdfs:domain mnx:ChemXRef  ;
    rdfs:range  xsd:integer   . # maybe [ owl:unionOf ( xsd:integer xsd:double )];

mnx:errorSrcInChI a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:subPropertyOf mnx:errorSrc ;
    rdfs:label 'error detected while importing source InChI' ;
	rdfs:domain mnx:ChemXRef  ;
    rdfs:range  xsd:string    .

mnx:errorSrcInChIKey a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:subPropertyOf mnx:errorSrc ;
    rdfs:label 'error detected while importing source InChIKey' ;
	rdfs:domain mnx:ChemXRef  ;
    rdfs:range  xsd:string    .

mnx:errorSrcMolWeight a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:subPropertyOf mnx:errorSrc ;
    rdfs:label 'error detected while importing source Mol Weight' .

mnx:errorSrcMolFormula a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:subPropertyOf mnx:errorSrc ;
    rdfs:label 'error detected while parsing source Mol Formula' .

mnx:errorSrcMOL a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:subPropertyOf mnx:errorSrc ;
    rdfs:label 'error detected while importing source MOL' .

mnx:warnSrc a rdfs:Property; # NOT USED (WIP)
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'warning produced while importing source data' ;
    rdfs:domain mnx:ChemXRef  ;
    rdfs:range  xsd:string    .

mnx:warnSrcInChI a rdfs:Property ; # NOT USED (WIP)
    rdfs:isDefinedBy mnx: ;
    rdfs:subPropertyOf mnx:warnSrc ;
    rdfs:label 'warning produced while importing source InChIKey' ;
    rdfs:domain mnx:ChemXRef  ;
    rdfs:range  xsd:string    .

mnx:warnSrcSMILES a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:subPropertyOf mnx:warnSrc ;
    rdfs:label 'warning produced while importing source SMILES' .

mnx:errorLog a rdfs:Property; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'error detected while process molecular structures' ;
    rdfs:domain mnx:ChemXRef  ;
    rdfs:range  xsd:string    .

mnx:errorStdSkip a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'error during standardization, entry skipped' ;
    rdfs:domain mnx:ChemXRef  ;
    rdfs:range  xsd:string    .

mnx:errorLogReorderAtoms a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:subPropertyOf mnx:errorLog ;
    rdfs:label 'error while reordering atoms' .

# ========================================================================
# STRUCTURE REPLACEMENT PROPERTIES - Used in StandardizeStruct.pm
# ========================================================================

mnx:structIsReplacedBy a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'structure is replaced by' ;
    rdfs:comment """This indicates that the structure of the subject chemical 
entity is replaced by the structure of the object chemical entity. This patch
is manually curated to correct errors or to fill missing structures in MetaNetX.""";
    rdfs:domain mnx:ChemXRef ;
    rdfs:range  mnx:ChemXRef .

mnx:warnStructIsReplacedBy a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'comment on structure replacement' ;
    rdfs:comment 'This provides additional information on the structure replacement' ;
    rdfs:subPropertyOf mnx:warnLog ;
    rdfs:domain mnx:ChemXRef ;
    rdfs:range  xsd:string .

mnx:structOrigin a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'origin of structure data' ;
    rdfs:domain mnx:ChemXRef ;
    rdfs:range  xsd:string .

mnx:structureSource a rdfs:Property ; # NOT USED (WIP)
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has structure from source type' ;
    rdfs:comment 'Structural information is recomputed from a single source in the MetaNetX pipeline. The selected source is indicated by this predicate. It can take values "patch", "MOL", "SMILES", "InChI", "none" in the order of source preferences, i.e. the first available source was selected.';
    rdfs:domain mnx:ChemXRef ;
    rdfs:range  xsd:string    .

mnx:structureDerivedFrom a rdfs:Property ; # NOT USED (WIP)
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has structure derived from' ;
	rdf:comment 'Structural information was obtained from the object entry' ; 
	rdfs:domain mnx:ChemXRef ;
    rdfs:range  mnx:ChemXRef .

# ========================================================================
# STANDARDIZED PROPERTIES - Used in StandardizeStruct.pm
# ========================================================================

mnx:stdFormula a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has formula' ;
    rdfs:domain mnx:ChemXRef               ; 
    rdfs:range  xsd:string                  .

mnx:stdMolWeight a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has molecular weight' ;
    rdfs:domain mnx:ChemXRef          ; 
    rdfs:range  xsd:double            .

mnx:stdMonoIsotopicMass a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has monoisotopic mass' ;
    rdfs:domain mnx:ChemXRef          ; 
    rdfs:range  xsd:double            .

mnx:stdCharge a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has global charge'  ;
    rdfs:domain mnx:ChemXRef        ; 
    rdfs:range  xsd:integer         .

mnx:stdSMILES a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has SMILES'  ;
    rdfs:domain mnx:ChemXRef  ; 
    rdfs:range  xsd:string    .

mnx:stdInChI a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has standard InChI' ;
    rdfs:domain mnx:ChemXRef        ; 
    rdfs:range  xsd:string          .	

mnx:stdInChIKey a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has standard InChI key' ;
    rdfs:domain mnx:ChemXRef            ; 
    rdfs:range  xsd:string              .

mnx:stdMOL a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has standard MOL' ;
    rdfs:domain mnx:ChemXRef      ; 
    rdfs:range  xsd:string        .

# ========================================================================
# MNX COMPUTED PROPERTIES - Used in StandardizeStruct.pm
# ========================================================================

mnx:mnxInChIStd a rdfs:Property ; # NOT USED (WIP)
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has standard InChI' ;
    rdfs:domain mnx:ChemXRef       ; 
    rdfs:range  xsd:string          .	

mnx:mnxInChIKeyStd a rdfs:Property ; # NOT USED (WIP)
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has standard InChI key' ;
    rdfs:domain mnx:ChemXRef                      ; 
    rdfs:range  xsd:string                         .

mnx:mnxInChINonStd a rdfs:Property ; # NOT USED (WIP)
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has non-standard InChI' ;
    rdfs:domain mnx:ChemXRef                  ; 
    rdfs:range  xsd:string                     .

mnx:mnxInChIkKeyNonStd a rdfs:Property ; # NOT USED (WIP)
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has non-standard InChI key' ;
    rdfs:domain mnx:ChemXRef               ; 
    rdfs:range  xsd:string                  .

mnx:mnxSMILES a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has SMILES' ;
    rdfs:domain mnx:ChemXRef               ; 
    rdfs:range  xsd:string                  .

mnx:mnxFormula a rdfs:Property ; # NOT USED (WIP)
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has formula' ;
    rdfs:domain mnx:ChemXRef               ; 
    rdfs:range  xsd:string                  .

mnx:mnxMolWeight a rdfs:Property ; # NOT USED (WIP)
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has molecular weight' ;
    rdfs:domain mnx:ChemXRef         ; 
    rdfs:range  xsd:double            .

mnx:mnxGlobalCharge a rdfs:Property ; # NOT USED (WIP)
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has global charge' ;
    rdfs:domain mnx:ChemXRef      ; 
    rdfs:range  xsd:integer        .

mnx:mnxInChI a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has MNX InChI' ;
    rdfs:domain mnx:ChemXRef   ; 
    rdfs:range  xsd:string      .

mnx:mnxInChIKey a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has MNX InChI key' ;
    rdfs:domain mnx:ChemXRef       ; 
    rdfs:range  xsd:string          .

mnx:mnxMOL a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has MNX MOL' ;
    rdfs:domain mnx:ChemXRef ; 
    rdfs:range  xsd:string    .

mnx:mnxBondStereoString a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has bond stereo string' ;
    rdfs:domain mnx:ChemXRef            ; 
    rdfs:range  xsd:string               .

mnx:mnxChiralStereoString a rdfs:Property ; # USED in StandardizeStruct.pm
    rdfs:isDefinedBy mnx: ;
    rdfs:label 'has chiral stereo string' ;
    rdfs:domain mnx:ChemXRef              ; 
    rdfs:range  xsd:string                 .

# ========================================================================
# MNXChemRecord PROPERTIES - NOT USED (WIP)
# ========================================================================

# mnx:mnxInChINoP a rdfs:Property ; # NOT USED (WIP)
#     rdfs:isDefinedBy mnx: ;
#     rdfs:label 'has non-standard/no-p-layer InChI ' ;
#     rdfs:domain mnx:MNXChemRecord                  ; 
#     rdfs:range  xsd:string                          .

# mnx:mnxInChIKeyNoP a rdfs:Property ; # NOT USED (WIP)
#     rdfs:isDefinedBy mnx: ;
#     rdfs:label 'has MNX non-standard/no-p-layer InChI key' ;
#     rdfs:domain mnx:MNXChemRecord                         ; 
#     rdfs:range  xsd:string                                 .

# mnx:mnxStruct2D a rdfs:Property ; # NOT USED (WIP)
#     rdfs:isDefinedBy mnx: ;
#     rdfs:label 'has 2D structure'  ;
#     rdfs:domain mnx:MNXChemRecord ; 
#     rdfs:range  xsd:string         .

# mnx:mnxBondStereo a rdfs:Property ; # NOT USED (WIP)
#     rdfs:isDefinedBy mnx: ;
#     rdfs:label 'has bond stereo string' ;
#     rdfs:domain mnx:MNXChemRecord      ; 
#     rdfs:range  xsd:string              .
     
# mnx:mnxChiralStereo a rdfs:Property ; # NOT USED (WIP)
#     rdfs:isDefinedBy mnx: ;
#     rdfs:label 'has chiral stereo string' ;
#     rdfs:domain mnx:MNXChemRecord        ; 
#     rdfs:range  xsd:string                .

# mnx:mnxStructProperty a rdfs:Property  ; # NOT USED (WIP)
#     rdfs:isDefinedBy mnx: ;
#     rdfs:label 'has structural property' ;
# 	rdfs:comment '''Structural properties that are implied by the InChI are stored as a list of string.
# The following values are supported:
# 	* partial stereo  - the stereochemisty of double bonds and chiral atoms is partly unknown
# 	* complete stereo - the stereochemisty of double bonds and chiral atoms is completely known
# 	* free radical    - 
# 	* polymer         -
# 	* composite       - 
# 	'''   ;
#     rdfs:domain mnx:MNXChemRecord          ; 
#     rdfs:range  xsd:string                  .

# ========================================================================
# ELEMENTAL FORMULA PROPERTIES - NOT USED (WIP)
# ========================================================================

mnx:elemFormula a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
	rdfs:label 'has elemental composition' ;
	rdfs:comment 'Atomic composition of a pure compounds is made of several instances of mnx:ElemFormula' ;
	rdfs:domain mnx:ChemXRef    ;
	rdfs:range  mnx:ElemFormula .

mnx:atomElem a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
	rdfs:label "has atomic symbol" ;
	rdfs:comment 'Any atomic symbol or "STAR" is acceptable.';
	rdfs:domain mnx:ElemFormula ;
	rdfs:range  xsd:string      .

mnx:atomCount a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
	rdfs:label "has atom count" ;
	rdfs:comment "A positive number" ;
	rdfs:domain mnx:ElemFormula ;
    rdfs:range  xsd:double      .

# ========================================================================
# SKOS-RELATED PROPERTIES - NOT USED (WIP)
# ========================================================================

# mnx:prefLabel a rdf:Property ;
#     rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
# 	rdfs:subPropertyOf skos:prefLabel ;
# 	rdfs:label 'has preferred label'              ;
# 	rdfs:domain mnx:ChemXRef, mnx:MNXChemRecord ;
# 	rdfs:range  xsd:string                        .

# mnx:member a rdf:Property ;
#     rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
# 	rdfs:subPropertyOf skos:member        ;
# 	rdfs:comment 'This property permits to group multiple instances of mnx:ChemXRef as a multiple mnx:MNXChemRecord instance. To achieve it the structure is recomputed. Protonation state is ignored.' ;
# 	rdfs:label         'is a member of'   ;
#     rdfs:domain        mnx:ChemXRef      ; 
# 	rdfs:range         mnx:MNXChemRecord .

# ========================================================================
# CHEMICAL CLASSIFICATION - NOT USED (WIP)
# ========================================================================

mnx:isClassifiedUnder a rdf:Property ;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
	rdfs:label "is classified under" ;
	rdfs:comment "The chemical entity is classified under one, or several molecular categories." ;
	rdfs:range mnx:chemXref     ;
	rdfs:domain mnx:MolCategory .

mnx:MolSymbol a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
	rdfs:subClassof mnx:MolCategory ;
    rdfs:label "A chemical symbol with no molecular structure, or an invalidated structure." ;
	rdfs:comment """A chemical entity, with no explicit description of its molecular structure, 
or with a structure that has been invalidated during MetaNetX MNXref computation.""" ;
	skos:inScheme mnx:MolOntology .

mnx:MolSymbolDefined a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
	rdfs:subClassOf mnx:MolSymbol ;
	rdfs:label "A chemical symbol with implicit molecular structures" ;
	rdfs:comment "A chemical symbol which correspond to one or several chemical entities with defined molecular structures, but which explicit values are unknown in practice." ;
	skos:example chebi:132494 ;
	skos:note """chebi:132494 has definition "Any polyunsaturated fatty acid containing 16 carbons and 2 double bonds". A structure with an R group is given, but the description "16 carbons and 2 double bonds" pertains to the R group. Hence the given structure is almost uninformative.""" . 

mnx:MolSymbolUndefined a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
    rdfs:subClassOf mnx:MolSymbol ;
	rdfs:label "A chemical symbol with no molecular structure, charge and formula. These can be completely unknown and possibly variable. ";
    skos:inScheme mnx:MolOntology ;
    skos:example mnx:BIOMASS ;
	skos:note "Biomass elementary composition is variable.".

mnx:MolStrucure a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
	rdfs:subClassof mnx:MolCategory ;
	rdfs:label "Chemical entity with a chemical structure" ;
	rdfs:comment "A molecular entity, with a complete or partial structure, from which total charge and elementary formula can be computed.";
	skos:inScheme mnx:MolOntology ;
   	owl:equivalentClass chebi:24431.  # chemical entity FIXME: not sure

mnx:RGroup_excluded a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # USED in StandardizeStruct.pm
	rdfs:subClassOf mnx:RGroup ;
	rdfs:label "R group excluded" ;
	rdfs:comment "R groups are excluded from molecular weight and monoisotopic mass." ;
	owl:disjointWith mnx:RGroup_included , mnx:RGroup_unknown ;
	skos:example chebi:140474.

mnx:RGroup_included a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # USED in StandardizeStruct.pm
    rdfs:subClassOf mnx:RGroup ;
    rdfs:label "R group included" ;
    rdfs:comment "R group are included in molecular weight, monoisotopic mass and formula." ;
    owl:disjointWith mnx:RGroup_excluded , mnx:RGroup_unknown .

mnx:RGroup_unknown a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # USED in StandardizeStruct.pm
	rdfs:subClassOf mnx:RGroup ;
    rdfs:label "R group UNKNOWN" ;
    rdfs:comment "It is not known if R group are included in molecular weight and monoisotopic mass." ;
    owl:disjointWith mnx:RGroup_excluded , mnx:RGroup_included .

mnx:Incomplete a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # USED in StandardizeStruct.pm
    rdfs:subClassOf mnx:ChemXRef ;
	rdfs:label "incomplete" ;
    rdfs:comment "A molecular structure which include a part that is not known or specified" . 

mnx:Residue a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # USED in StandardizeStruct.pm
    rdfs:subClassOf mnx:Incomplete ;
    rdfs:label "residue" ;
    rdfs:comment "At least one star atom is present, and it is not included in molecular weight and monoisotopic mass calculation." ;
    owl:disjointWith mnx:Generic ;
	skos:example chebi:32441 .

mnx:Generic a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # USED in StandardizeStruct.pm
    rdfs:subClassOf mnx:Incomplete ;
    rdfs:label "generic" ;
    rdfs:comment """
A molecular entity which structure contains one or several R groups. 
Molecular weight and monoisotopic mass may or may not be available.
Distinction between mnx:Residue and mnx:Generic is sometimes difficult to delineate given available data.
In doubt mnx:Generic is assigned.
""" ;
    # owl:equivalentClass chebi:24433 ;
	skos:example chebi:140474 .

mnx:Polymer a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
	rdfs:subClassOf mnx:ChemXRef ;
	rdfs:label "polymer" ;
	rdfs:comment "A molecular entity with SGroup (poylmeric) notations. This definition is very broad." ;
	skos:inScheme mnx:Ontology ;
	owl:equivalentClass chebi:60027 . # polymer 

mnx:FreeRadical a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
	rdfs:subClassOf mnx:ChemXRef ;
	rdfs:label "free radical" ;
	rdfs:comment "A free radical is a molecular entity possessing one or several unpaired electron." ;
	owl:equivalentClass chebi:26519 .

mnx:IncompleteStereo a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
	rdfs:subClassOf mnx:ChemXRef ;
	rdfs:label "molecular entity with incompletly defined stereochemistry" ;
	rdfs:comment "A molecular entity containing some stereogenic atoms or double bonds, which stereochoistry is not fully defined. This concept is absent from the ChEBI ontology version 241." ;
	owl:disjointWith mnx:FullyDefinedStereo, mnx:Symbol .

mnx:FullyDefinedStereo a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
	rdfs:subClassOf mnx:ChemXRef ;
    rdfs:label "molecular entity with completly defined stereochemistry" ;
	rdfs:label "A molecula entity with fully defined stereogenic atoms and bonds, or none of them. This concept is absent from the ChEBI ontology version 241." ;
	owl:disjointWith mnx:IncompleteStereo, mnx:Symbol .

mnx:Salt a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
	rdfs:subClassOf mnx:ChemXRef ;
	rdfs:label "salt" ;
	rdfs:comment "A salt is an assembly of cations and anion in fixed proportion, usually with a zero overall charge. Salt and complex form a continum, but a practical distinction can hopefully be established in the context of metabolic network.";
	skos:inScheme mnx:MolOntology ;
	skos:closeMatch chebi:24866 ;  # salt 
	skos:example chebi:26710 .     # sodium chloride

mnx:BioComplex a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
	rdfs:subClassOf mnx:ChemXRef ;
	rdfs:label "A complex of biological origin" ;
	rdfs:comment "A complex is a compound that features a bond between an atom of an organic molecule and a metal. Complex can convey a non-zero charge. Salt and complex form a continum, but a practical distinction can hopefully be established in the context of metabolic network. Complex implying abiotic metals are likely to be classified as salt." ;
	skos:inScheme mnx:MolOntology ;
    skos:closeMatch chebi:33240 ;  # coordination entity
	skos:example chebi:28911 .     # cob(III)alamin

mnx:MolUnknown a rdfs:Class ;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
    rdfs:subClassOf mnx:ChemXRef ;
	rdfs:label "unknown molecule" ;
	rdfs:comment "A placeholder class for molecules with no information at all. It should be never appear in a perfect world, but the world is not perfect." . 

# ========================================================================
# SPECIAL SYMBOLS AND CONSTANTS
# ========================================================================

mnx:BIOMASS a mnx:CHEM ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:label 'mnx:BIOMASS' ;
    rdfs:comment 'A symbol to represent biomass' .

mnx:PROTON a mnx:CHEM ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:label 'mnx:PROTON' ;
    rdfs:comment 'A symbol to represent the proton (H+) that is used to balance chemical equations' .

mnx:PMF a mnx:CHEM ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:label 'mnx:PMF' ;
    rdfs:comment 'A symbol to represent the proton motive force (PMF). PMF is often confounded with (balance) proton. MetaNetX attempts to distinguish them systematically' .

mnx:WATER a mnx:CHEM ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:label 'mnx:WATER' ;
    rdfs:comment 'A symbol to represent water' .

mnx:HYDROXYDE a mnx:CHEM ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:label 'mnx:HYDROXYDE' ;
    rdfs:comment 'A symbol to represent hydroxide (OH-). In principle, it can be substituted for mnx:PROTON or mnx:PMF on the other side of a chemical equation, hence it should not appear in MetaNetX models' .

mnx:BOUNDARY a mnx:COMP ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:label 'mnx:BOUNDARY' ;
    rdfs:comment 'A symbol to represent a model boundary and that appears in so-called external reactions' .

mnx:EMPTY a rdfs:Class;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
    rdfs:label 'mnx:EMPTY ' ;
    rdfs:comment 'A symbol for reaction which both sides are empty, and that should not appear in a model. Typically, acid-base reactions become empty as the reconciliation merges different protonation states of a given metabolite.' .

mnx:MNXR01 a rdfs:Class;
    rdfs:isDefinedBy mnx: ; # NOT USED (WIP)
    rdfs:label 'mnx:MNXR01' ;
    rdfs:comment 'An artificial reaction that exchange proton for PMF (a very trumpian deal)' .

mnx:SPONTANEOUS a mnx:PEPT ;
    rdfs:isDefinedBy mnx: ; # USED in create_rdf_ttl.pl
    rdfs:label 'mnx:SPONTANEOUS' ;
    rdfs:comment 'A symbol to tag reactions that occur spontaneously' .

mnx:LB a rdfs:Resource ; # USED in create_rdf_ttl.pl
    rdfs:label 'mnx:LB' ;
    rdfs:comment 'Symbol for default lower bound' .

mnx:UB a rdfs:Resource ; # USED in create_rdf_ttl.pl
    rdfs:label 'mnx:UB' ;
    rdfs:comment 'Symbol for default upper bound' .

# ========================================================================
# AUTHOR INFORMATION
# ========================================================================

<https://orcid.org/0000-0001-9292-9463> a foaf:Person , prov:Person ;
    rdfs:label      "Marco Pagni"                  ;
    sdo:name        "Marco Pagni"                  ;
    sdo:email       <mailto:marco.pagni@sib.swiss> ;
    sdo:affiliation <https://www.sib.swiss>        .

<https://orcid.org/0000-0003-3947-488X> a foaf:Person , prov:Person ;
    rdfs:label      "Sébastien Moretti"                  ;
    sdo:name        "Sébastien Moretti"                  ;
    sdo:email       <mailto:Sebastien.Moretti@sib.swiss> ;
    sdo:affiliation <https://www.sib.swiss>              .

