1:- module(owl_types,
    2          [
    3           ]).    4
    5:- use_module(library(typedef)).    6
    7% ====================
    8% RDF TYPES
    9% ====================
   10
   11:- type iri_ref ---> curie ; atomic_iri.
   12
   13:- type atomic_iri == atom.
   14:- type curie ---> iri_prefix : iri_local_part.
   15:- type iri_prefix == atom.
   16:- type iri_local_part == atom.
   17
   18:- type blank_node == atom.
   19:- type rdf_resource ---> iri_ref ; blank_node.
   20:- type rdf_resource_or_literal ---> rdf_resource ; rdf_literal.
   21:- type rdf_literal ---> rdf_plain_literal ; rdf_lang_literal ; rdf_typed_literal.
   22:- type rdf_plain_literal == string.
   23:- type rdf_lang_literal ---> '@'(string,atom).   % todo - consider enum
   24:- type rdf_typed_literal ---> '^^'(string,xsd_type).
   25:- type xsd_type ---> iri_ref.
   26
   27:- type rdf_triple ---> rdf(rdf_resource, iri_ref, rdf_resource_or_literal).
   28:- type rdf_quad ---> rdf(rdf_resource, iri_ref, rdf_resource_or_literal, rdf_resource).
   29:- type rdf_fact ---> rdf_triple ; rdf_quad.
   30
   31% ====================
   32% OWL TYPES
   33% ====================
   34
   35:- type owl_class_expression ---> owl_restriction ; owl_class.
   36:- type owl_class ---> iri_ref.
   37:- type owl_restriction ---> owl_some_values_from ; owl_all_values_from.
   38:- type owl_some_values_from ---> some(owl_property_expression, owl_class_expression).
   39:- type owl_all_values_from ---> some(owl_property_expression, owl_class_expression).
   40
   41:- type owl_property_expression ---> owl_restriction ; owl_property.
   42:- type