PREFIX faldo: <http://biohackathon.org/resource/faldo#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

faldo:BothStrandsPosition a rdfs:Class ;
  rdfs:label "Both strands position" ;
  rdfs:comment "The 'both strands position' indicates a region that is best described as being on 'both' strands of a double-stranded sequence, rather than one or the other." ;
  rdfs:subClassOf faldo:StrandedPosition .

faldo:reference a rdf:Property ;
  rdfs:label "reference" ;
  rdfs:comment "The reference is the resource that the position value is anchored to.  For example, a contig or chromosome in a genome assembly." ;
  rdfs:range <https://w3id.org/linkml/Any> .

faldo:StrandedPosition a rdfs:Class ;
  rdfs:label "Stranded position" ;
  rdfs:comment "Part of the coordinate system denoting on which strand the feature can be found. If you do not yet know which stand the feature is on, you should tag the position with just this class. If you know more you should use one of the subclasses. This means a region described with a '.' in GFF3. A GFF3 unstranded position does not have this type in FALDO -- those are just a 'position'." ;
  rdfs:subClassOf faldo:Position .

faldo:Region a rdfs:Class ;
  rdfs:label "Region" ;
  rdfs:comment "A region describes a length of sequence with a start position and end position that represents a feature on a sequence, e.g. a gene." .

faldo:end a rdf:Property ;
  rdfs:label "end" ;
  rdfs:comment "The inclusive end of the position." ;
  rdfs:range faldo:Position .

faldo:begin a rdf:Property ;
  rdfs:label "begin" ;
  rdfs:comment "The inclusive beginning of a position. Also known as start." ;
  rdfs:range faldo:Position .

faldo:C-TerminalPosition a rdfs:Class ;
  rdfs:label "C-Terminal position" ;
  rdfs:comment "The C-terminus is the end of an amino acid chain (protein or polypeptide), terminated by a free carboxyl group (-COOH)." ;
  rdfs:seeAlso <http://en.wikipedia.org/wiki/C-terminus> ;
  rdfs:subClassOf faldo:ExactPosition .

faldo:position a rdf:Property ;
  rdfs:label "position" ;
  rdfs:comment "Denoted in 1-based closed coordinates, i.e. the position on the first amino acid or nucleotide of a sequence has the value 1. For nucleotide sequences we count from the 5'end of the sequence, while for Aminoacid sequences we start counting from the N-Terminus." ;
  rdfs:domain faldo:ExactPosition ;
  rdfs:range xsd:integer .

faldo:ListOfRegions a rdfs:Class ;
  rdfs:label "List of regions" ;
  rdfs:comment "As an ordered list of regions (but the list might not be complete)." ;
  rdfs:seeAlso <http://www.insdc.org/files/feature_table.html> ;
  rdfs:subClassOf faldo:CollectionOfRegions , rdf:Seq .

rdf:Seq a rdfs:Class .

rdf:Bag a rdfs:Class .

faldo:ExactPosition a rdfs:Class ;
  rdfs:label "Exact position" ;
  rdfs:comment "A position that is exactly known." ;
  rdfs:subClassOf faldo:Position .

faldo:FuzzyPosition a rdfs:Class ;
  rdfs:label "Fuzzy position" ;
  rdfs:comment "A position that lacks exact data." ;
  rdfs:subClassOf faldo:Position .

faldo:InBetweenPosition a rdfs:Class ;
  rdfs:label "In between positions" ;
  rdfs:comment "This indicates that a feature is between two other positions that are both known exactly and that are next to each other. An example is a restriction enzyme cutting site. The cut is after one position and before the other position (hence, in between)." ;
  rdfs:subClassOf faldo:Position .

faldo:before a rdf:Property ;
  rdfs:label "before" ;
  rdfs:comment "This predicate is used to indicate that the feature is found before the exact position. Use to indicate, for example, a cleavage site. The cleavage happens between two amino acids before one and after the other." ;
  rdfs:domain faldo:InBetweenPosition ;
  rdfs:range faldo:ExactPosition .

faldo:after a rdf:Property ;
  rdfs:label "after" ;
  rdfs:comment "This predicate is used when you want to describe a non-inclusive range. Only used in the InBetweenPosition to say it is after a nucleotide, but before the next one." ;
  rdfs:domain faldo:InBetweenPosition ;
  rdfs:range faldo:ExactPosition .

faldo:ReverseStrandPosition a rdfs:Class ;
  rdfs:label "Negative/reverse strand position" ;
  rdfs:comment "The position is on the reverse (complement, 3' to 5') strand of the sequence. Shown as '-' in GTF and GFF3." ;
  rdfs:subClassOf faldo:StrandedPosition .

faldo:BagOfRegions a rdfs:Class ;
  rdfs:label "Bag of regions" ;
  rdfs:comment "Used to describe a location that consists of a number of Regions but where the order is not known. e.g. the oddly named order() keyword in a INSDC file." ;
  rdfs:seeAlso <http://www.insdc.org/files/feature_table.html> ;
  rdfs:subClassOf faldo:CollectionOfRegions , rdf:Bag .

faldo:CollectionOfRegions a rdfs:Class ;
  rdfs:label "Collection of regions" ;
  rdfs:comment "Sometimes a location of a feature is defined by a collection of regions e.g. join() and order() in INSDC records. One should always try to model the semantics more accurately than this, these are fallback options to encode legacy data." .

faldo:N-TerminalPosition a rdfs:Class ;
  rdfs:comment "The position of the starting amino-acid a protein or polypeptide terminated by an amino acid with a free amine group (-NH2). The convention for writing peptide sequences is to put the N-terminus on the left and write the sequence from N- to C-terminus. Instances of this class are often used when the reference sequence is not complete " ;
  rdfs:seeAlso <http://en.wikipedia.org/wiki/N-terminus> ;
  rdfs:subClassOf faldo:ExactPosition .

faldo:Position a rdfs:Class ;
  rdfs:label "Position" ;
  rdfs:comment "Superclass for the general concept of a position on a sequence. The sequence is designated with the reference predicate." .

faldo:InRangePosition a rdfs:Class ;
  rdfs:label "Indeterminate position within a range" ;
  rdfs:comment "Use when you have an idea of the range in which you can find the position, but you cannot be sure about the exact position." ;
  rdfs:subClassOf faldo:FuzzyPosition .

faldo:ForwardStrandPosition a rdfs:Class ;
  rdfs:label "Forward/positive strand position" ;
  rdfs:comment "The position is on the forward (positive, 5' to 3') strand. Shown as a '+' in GFF3 and GTF." ;
  rdfs:subClassOf faldo:StrandedPosition .

<https://w3id.org/linkml/Any> a rdfs:Class ;
  rdfs:comment "An unconstrained type or object" .

faldo:OneOfPosition a rdfs:Class ;
  rdfs:label "One of positions" ;
  rdfs:comment "The position is known to be one of the more detailed positions listed by the location predicate." ;
  rdfs:subClassOf faldo:FuzzyPosition .

faldo:beginOf a rdf:Property ;
  rdfs:label "beginOf" ;
  rdfs:comment "This is the inverse of the begin:property. It is included to make it easier to write a number of OWL axioms. You should rarely use this in your raw data." ;
  rdfs:range <https://w3id.org/linkml/Any> .

faldo:endOf a rdf:Property ;
  rdfs:label "endOf" ;
  rdfs:comment "This is the inverse of the begin:end. It is included to make it easier to write a number of OWL axioms. You should rarely use this in your raw data." ;
  rdfs:range <https://w3id.org/linkml/Any> .

faldo:location a rdf:Property ;
  rdfs:label "location" ;
  rdfs:comment "This is the link between the concept whose location you are annotating and its range or position. For example, when annotating the region that describes an exon, the exon would be the subject and the region would be the object of the triple or: 'active site' 'location' [is] 'position 3'." ;
  rdfs:range xsd:string .

faldo:possiblePosition a rdf:Property ;
  rdfs:label "possiblePosition" ;
  rdfs:comment "One of the possible positions listed for a OneOfPosition element." ;
  rdfs:range <https://w3id.org/linkml/Any> .
