Classes and Properties required to implement OWLLists

  <!-- OWLList -->
  <owl:Class rdf:about="#OWLList">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty>
          <owl:ObjectProperty rdf:about="#isFollowedBy"/>
        </owl:onProperty>
        <owl:allValuesFrom rdf:resource="#OWLList"/>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
  </owl:Class>

  <!-- isFollowedBy -->
  <owl:ObjectProperty rdf:about="#isFollowedBy">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#TransitiveProperty"/>
    <rdfs:subPropertyOf>
      <owl:ObjectProperty rdf:ID="hasListProperty"/>
    </rdfs:subPropertyOf>
    <rdfs:range rdf:resource="#OWLList"/>
  </owl:ObjectProperty>

  <!-- hasContents -->
  <owl:ObjectProperty rdf:about="#hasContents">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
    <rdfs:subPropertyOf>
      <owl:ObjectProperty rdf:about="#hasListProperty"/>
    </rdfs:subPropertyOf>
  </owl:ObjectProperty>

  <!--hasListProperty -->
  <owl:ObjectProperty rdf:about="#hasListProperty">
    <rdfs:domain rdf:resource="#OWLList"/>
  </owl:ObjectProperty>

  <!-- hasNext -->
  <owl:FunctionalProperty rdf:about="#hasNext">
    <rdfs:subPropertyOf rdf:resource="#isFollowedBy"/>
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
  </owl:FunctionalProperty>

  <!-- EmptyList -->
  <owl:Class rdf:about="#EmptyList">
    <owl:equivalentClass>
      <owl:Class>
        <owl:intersectionOf rdf:parseType="Collection">
          <owl:Class rdf:about="#OWLList"/>
          <owl:Restriction>
            <owl:onProperty>
              <owl:ObjectProperty rdf:about="#hasContents"/>
            </owl:onProperty>
            <owl:maxCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
            >0</owl:maxCardinality>
          </owl:Restriction>
        </owl:intersectionOf>
      </owl:Class>
    </owl:equivalentClass>
    <owl:equivalentClass>
      <owl:Class>
        <owl:intersectionOf rdf:parseType="Collection">
          <owl:Class rdf:about="#OWLList"/>
          <owl:Class>
            <owl:complementOf>
              <owl:Restriction>
                <owl:onProperty>
                  <owl:ObjectProperty rdf:about="#isFollowedBy"/>
                </owl:onProperty>
                <owl:someValuesFrom rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
              </owl:Restriction>
            </owl:complementOf>
          </owl:Class>
        </owl:intersectionOf>
      </owl:Class>
    </owl:equivalentClass>
  </owl:Class>