<?xml version="1.0"?>
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:protege="http://protege.stanford.edu/plugins/owl/protege#"
    xmlns:xsp="http://www.owl-ontologies.com/2005/08/07/xsp.owl#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:data="http://sswapmeet.sswap.info/data/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns:swrl="http://www.w3.org/2003/11/swrl#"
    xmlns:swrlb="http://www.w3.org/2003/11/swrlb#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xml:base="http://sswapmeet.sswap.info/data/data.owl">
  <owl:Ontology rdf:about="">
    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Ontology for marking data formats and associating them with validators, parsers, serializers, and visualizers.</rdfs:comment>
    <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Data Ontology</rdfs:label>
  </owl:Ontology>
  <owl:Class rdf:about="http://www.w3.org/2002/07/owl#Thing"/>
  <owl:Class rdf:about="http://sswapmeet.sswap.info/data/Parser">
    <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Parser</rdfs:label>
    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Super class for resources that can parse data; for example, given the relations:

MyDataFormat rdfs:subClassOf data:DataFormat
myData rdf:type MyDataFormat
myData data:hasParser myParser

Sending the URI of myData to myParser should parse the data.  For example, given the format FASTA (http://en.wikipedia.org/wiki/FASTA_format), a parser may create objects with rdfs:comment set to the FASTA comment line (lines starting with '&gt;') and tag the sequence as a Sequence Ontology type.  Another parser may attempt to extract the species name and gene information from the '&gt;' header, so it may parse these items into semantically tagged taxon and gene properties. Thus a single data URI may be associated with different parsers for different purposes.

There is no requirement that parsers return semantically tagged RDF/XML.  Indeed, in many cases it is useful if a parser does not return RDF/XML, but returns data itself (e.g., as text value, image file, etc.).  For HTTP responses, MIME types may be useful. Parsers are free to define their mode of invocation and behavior.</rdfs:comment>
    <rdfs:subClassOf>
      <owl:Class rdf:about="http://sswapmeet.sswap.info/data/Data"/>
    </rdfs:subClassOf>
  </owl:Class>
  <owl:Class rdf:about="http://sswapmeet.sswap.info/data/Data">
    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Root Data class.</rdfs:comment>
    <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Data</rdfs:label>
  </owl:Class>
  <owl:Class rdf:about="http://sswapmeet.sswap.info/data/Accessor">
    <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Accessor</rdfs:label>
    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Super class for resources that are helper or gateway resources to accessing data. In this simplest case, this is just indirection to another URI where the data resides; in other cases, it may entail user authentican and authorization. For example, given the relations:

MyDataFormat rdfs:subClassOf data:DataFormat
myData rdf:type MyDataFormat
myData data:hasAccessor myAccessor

Sending the URI of myData to myAccessor should act as a gateway to the data.  Alternatively, "myData" could be a blank node and indirection to the data would be via the value of data:hasAccessor.

There are no standards on how accessors allow access to the data. The simplest case is indirection where a HTTP GET on the accessor's value returns the data.  Another simple case is where the accessor is the data URI, and there is no data:hasAccessor property, or the property points back to its own subject. Accessors are free to define their mode of invocation and behavior.</rdfs:comment>
    <rdfs:subClassOf rdf:resource="http://sswapmeet.sswap.info/data/Data"/>
  </owl:Class>
  <owl:Class rdf:about="http://sswapmeet.sswap.info/data/Validator">
    <rdfs:subClassOf rdf:resource="http://sswapmeet.sswap.info/data/Data"/>
    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Super class for resources that can validate data; for example, given the relations:

MyDataFormat rdfs:subClassOf data:DataFormat
myData rdf:type MyDataFormat
myData data:hasValidator myValidator

Sending the URI of myData to myValidator should check the data for compliance against the type MyDataFormat.

There are no standards on how validators signal valid or invalid data. 
Validators are free to define their mode of invocation and behavior.</rdfs:comment>
    <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Validator</rdfs:label>
  </owl:Class>
  <owl:Class rdf:about="http://sswapmeet.sswap.info/data/DataFormat">
    <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Data Format</rdfs:label>
    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Super class of the data itself in a particular format. It is used to tag resources as belonging to a specified data format as well as presenting a mechanism for linking validators, parsers, serializers, and visualizers to the resource.

Specific formats are built by subclassing these classes; e.g.:

    seq:FASTA rdfs:subClassOf data:DataFormat.

For data that is large in volume, or inherently binary, a useful pattern is to not serialize the data in OWL, but to type its URL with a subClass of data:DataFormat and then associate it with helper resources such as parsers, validators, and so forth.

For example, the URI of a text file could belong to both classes seq:Sequence and seq:FASTA, tagging the type of data and its format  respectively (e.g., a DNA sequence in FASTA format, where seq:FASTA is a rdfs:subClassOf data:DataFormat).  The resource may also have the predicates data:hasParser and data:hasValidator each pointing to a parser and validator for the FASTA sequence.  Possibly these two URIs are the same. The actual sequence data would be at the resource itself.

Alternatively, the sequence data could be serialized as the value of the datatype property data:literalData or custom user-defined subproperty.

The owl:minCardinality constraints of zero (0) annotationally tie this class to optional predicates, without making a logical requirement that such predicates be instantiated.</rdfs:comment>
    <rdfs:subClassOf rdf:resource="http://sswapmeet.sswap.info/data/Data"/>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:allValuesFrom rdf:resource="http://sswapmeet.sswap.info/data/Accessor"/>
        <owl:onProperty>
          <owl:ObjectProperty rdf:about="http://sswapmeet.sswap.info/data/hasAccessor"/>
        </owl:onProperty>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty>
          <owl:ObjectProperty rdf:about="http://sswapmeet.sswap.info/data/hasValidator"/>
        </owl:onProperty>
        <owl:allValuesFrom rdf:resource="http://sswapmeet.sswap.info/data/Validator"/>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty>
          <owl:ObjectProperty rdf:about="http://sswapmeet.sswap.info/data/hasParser"/>
        </owl:onProperty>
        <owl:allValuesFrom rdf:resource="http://sswapmeet.sswap.info/data/Parser"/>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty>
          <owl:DatatypeProperty rdf:about="http://sswapmeet.sswap.info/data/literalData"/>
        </owl:onProperty>
        <owl:minCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger"
        >0</owl:minCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:allValuesFrom>
          <owl:Class rdf:about="http://sswapmeet.sswap.info/data/Serializer"/>
        </owl:allValuesFrom>
        <owl:onProperty>
          <owl:ObjectProperty rdf:about="http://sswapmeet.sswap.info/data/hasSerializer"/>
        </owl:onProperty>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  <owl:Class rdf:about="http://sswapmeet.sswap.info/data/Serializer">
    <rdfs:subClassOf rdf:resource="http://sswapmeet.sswap.info/data/Data"/>
    <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Serializer</rdfs:label>
    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Super class for resources that can serialize data; for example, given the relations:

MyDataFormat rdfs:subClassOf data:DataFormat
myData rdf:type MyDataFormat
myData data:hasSerializer mySerializer

Sending the URI of myData to mySerializer should serialize (write out) the data.

There is no requirement that serializers are restricted to OWL RDF/XML.  Serializers are free to define their mode of invocation and behavior.</rdfs:comment>
  </owl:Class>
  <owl:ObjectProperty rdf:about="http://sswapmeet.sswap.info/data/hasOutputProcessor">
    <rdfs:domain rdf:resource="http://sswapmeet.sswap.info/data/DataFormat"/>
    <rdfs:subPropertyOf>
      <owl:ObjectProperty rdf:about="http://sswapmeet.sswap.info/data/objectProperty"/>
    </rdfs:subPropertyOf>
    <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >has Output Processor</rdfs:label>
    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >A predicate for associating an output writer with a data object. The data:hasOutputProcessor predicate is an objectProperty (instead of a datatypeProperty with range xsd:anyURI) so that the object of the predicate can be semantically tagged within the graph itself.</rdfs:comment>
    <rdfs:range>
      <owl:Class>
        <owl:unionOf rdf:parseType="Collection">
          <owl:Class rdf:about="http://sswapmeet.sswap.info/data/Serializer"/>
          <owl:Class rdf:about="http://sswapmeet.sswap.info/data/Validator"/>
        </owl:unionOf>
      </owl:Class>
    </rdfs:range>
  </owl:ObjectProperty>
  <owl:ObjectProperty rdf:about="http://sswapmeet.sswap.info/data/hasData">
    <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >has Data</rdfs:label>
    <rdfs:subPropertyOf>
      <owl:ObjectProperty rdf:about="http://sswapmeet.sswap.info/data/objectProperty"/>
    </rdfs:subPropertyOf>
    <rdfs:range rdf:resource="http://sswapmeet.sswap.info/data/DataFormat"/>
    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >A pointer to the data from an external object.

The rdfs:range of data:hasData is data:DataFormat, which is the rdfs:domain of data:hasAccessor, data:hasParser, data:hasSerializer, data:hasValidator, and data:hasVisualizer; thus allowing the association of data with a format and processing tools.

To identify serialized data as a property value, see data:literalData.</rdfs:comment>
  </owl:ObjectProperty>
  <owl:ObjectProperty rdf:about="http://sswapmeet.sswap.info/data/hasSerializer">
    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >A predicate for associating a serializer with a data object; for example, a link to an XML serializer.  Serialization is the process "writing out" the data in a format independent of machine architectures.</rdfs:comment>
    <rdfs:subPropertyOf rdf:resource="http://sswapmeet.sswap.info/data/hasOutputProcessor"/>
    <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >has Serializer</rdfs:label>
    <rdfs:range rdf:resource="http://sswapmeet.sswap.info/data/Serializer"/>
  </owl:ObjectProperty>
  <owl:ObjectProperty rdf:about="http://sswapmeet.sswap.info/data/hasParser">
    <rdfs:range rdf:resource="http://sswapmeet.sswap.info/data/Parser"/>
    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >A predicate for associating a parser with a data object; for example, a link to a FASTA parser. A parser "reads in" data and constructs it into a model or data structure.</rdfs:comment>
    <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >has Parser</rdfs:label>
    <rdfs:subPropertyOf>
      <owl:ObjectProperty rdf:about="http://sswapmeet.sswap.info/data/hasInputProcessor"/>
    </rdfs:subPropertyOf>
  </owl:ObjectProperty>
  <owl:ObjectProperty rdf:about="http://sswapmeet.sswap.info/data/hasValidator">
    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >A predicate for associating a validator with a data object; for example, a link to a FASTA validator.  A validator checks the validity or compliance of the data or its format to some standard. The data:hasValidator predicate is a subPropertyOf both data:hasInputProcessor and data:hasOutputProcessor.</rdfs:comment>
    <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >has Validator</rdfs:label>
    <rdfs:subPropertyOf rdf:resource="http://sswapmeet.sswap.info/data/hasOutputProcessor"/>
    <rdfs:subPropertyOf>
      <owl:ObjectProperty rdf:about="http://sswapmeet.sswap.info/data/hasInputProcessor"/>
    </rdfs:subPropertyOf>
    <rdfs:range rdf:resource="http://sswapmeet.sswap.info/data/Validator"/>
  </owl:ObjectProperty>
  <owl:ObjectProperty rdf:about="http://sswapmeet.sswap.info/data/objectProperty">
    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Root property for all data: object properties</rdfs:comment>
    <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >object Property</rdfs:label>
  </owl:ObjectProperty>
  <owl:ObjectProperty rdf:about="http://sswapmeet.sswap.info/data/hasAccessor">
    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >A predicate for associating an accessor with a data object; for example, a link to user authentican and authorization.   One model is where the subject of data:hasAccessor--a node of rdf:type data:DataFormat--is a blank node, and access to the data is via the object (the value) of the data:hasAccessor property.  In this manner data:hasAccessor can be used to model data indirection.</rdfs:comment>
    <rdfs:range rdf:resource="http://sswapmeet.sswap.info/data/Accessor"/>
    <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >has Accessor</rdfs:label>
    <rdfs:subPropertyOf>
      <owl:ObjectProperty rdf:about="http://sswapmeet.sswap.info/data/hasInputProcessor"/>
    </rdfs:subPropertyOf>
  </owl:ObjectProperty>
  <owl:ObjectProperty rdf:about="http://sswapmeet.sswap.info/data/hasInputProcessor">
    <rdfs:range>
      <owl:Class>
        <owl:unionOf rdf:parseType="Collection">
          <owl:Class rdf:about="http://sswapmeet.sswap.info/data/Accessor"/>
          <owl:Class rdf:about="http://sswapmeet.sswap.info/data/Parser"/>
          <owl:Class rdf:about="http://sswapmeet.sswap.info/data/Validator"/>
        </owl:unionOf>
      </owl:Class>
    </rdfs:range>
    <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >has Input Processor</rdfs:label>
    <rdfs:domain rdf:resource="http://sswapmeet.sswap.info/data/DataFormat"/>
    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >A predicate for associating an input reader with a data object.  The hasInputProcessor predicate is an objectProperty (instead of a datatypeProperty with range xsd:anyURI) so that the object of the predicate (e.g., a Parser) can be semantically tagged within the graph itself.</rdfs:comment>
    <rdfs:subPropertyOf rdf:resource="http://sswapmeet.sswap.info/data/objectProperty"/>
  </owl:ObjectProperty>
  <owl:DatatypeProperty rdf:about="http://sswapmeet.sswap.info/data/literalData">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
    <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >literal Data</rdfs:label>
    <rdfs:domain rdf:resource="http://sswapmeet.sswap.info/data/DataFormat"/>
    <rdfs:subPropertyOf>
      <owl:DatatypeProperty rdf:about="http://sswapmeet.sswap.info/data/datatypeProperty"/>
    </rdfs:subPropertyOf>
    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Super property to identify serialized data.

For example, the pseudo statements:

MyDataFormat rdfs:subClassOf data:DataFormat
mySequence rdf:subPropertyOf data:literalData
myData rdf:type MyDataFormat
myData mySequence "ACTGCAGTGGATCG"
myData data:hasParser myParser

allows programmatic association of the parser at myParser to with the serialized data (the value of mySequence) required for parsing.

Note that the property is an owl:FunctionalProperty; i.e., for any given subject with this property, it can only have one instance with a value (or all instances have a semantically equivalent datatype value).  By inference, this must also apply to all subproperties.  This property is functional in the same manner that its subject can have at most one URI (for non-literal data).  It also ensures that there is no ambiguity as to composition of literal data (in the case of multiple property values) and how helper resources (parsers, serializers, etc.) should act on multiple, un-ordered instances of literal data.</rdfs:comment>
  </owl:DatatypeProperty>
  <owl:DatatypeProperty rdf:about="http://sswapmeet.sswap.info/data/datatypeProperty">
    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Root property for all data: datatype properties</rdfs:comment>
    <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >datatype Property</rdfs:label>
  </owl:DatatypeProperty>
  <owl:AnnotationProperty rdf:about="http://www.w3.org/2000/01/rdf-schema#label"/>
  <owl:AnnotationProperty rdf:about="http://www.w3.org/2000/01/rdf-schema#comment"/>
</rdf:RDF>

<!-- Created with Protege (with OWL Plugin 3.4.4, Build 579)  http://protege.stanford.edu -->

