packages feed

hydra-0.15.0: src/main/haskell/Hydra/Owl/Syntax.hs

-- Note: this is an automatically generated file. Do not edit.

-- | An OWL 2 syntax model. See https://www.w3.org/TR/owl2-syntax

module Hydra.Owl.Syntax where

import qualified Hydra.Core as Core
import qualified Hydra.Rdf.Syntax as Syntax
import qualified Hydra.Xml.Schema as Schema
import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
import qualified Data.Scientific as Sci

data Ontology =
  Ontology {
    ontologyDirectImports :: [Ontology],
    ontologyAnnotations :: [Annotation],
    ontologyAxioms :: [Axiom]}
  deriving (Eq, Ord, Read, Show)

_Ontology = Core.Name "hydra.owl.syntax.Ontology"

_Ontology_directImports = Core.Name "directImports"

_Ontology_annotations = Core.Name "annotations"

_Ontology_axioms = Core.Name "axioms"

data Declaration =
  Declaration {
    declarationAnnotations :: [Annotation],
    declarationEntity :: Entity}
  deriving (Eq, Ord, Read, Show)

_Declaration = Core.Name "hydra.owl.syntax.Declaration"

_Declaration_annotations = Core.Name "annotations"

_Declaration_entity = Core.Name "entity"

data Entity =
  EntityAnnotationProperty AnnotationProperty |
  EntityClass Class |
  EntityDataProperty DataProperty |
  EntityDatatype Datatype |
  EntityNamedIndividual NamedIndividual |
  EntityObjectProperty ObjectProperty
  deriving (Eq, Ord, Read, Show)

_Entity = Core.Name "hydra.owl.syntax.Entity"

_Entity_annotationProperty = Core.Name "annotationProperty"

_Entity_class = Core.Name "class"

_Entity_dataProperty = Core.Name "dataProperty"

_Entity_datatype = Core.Name "datatype"

_Entity_namedIndividual = Core.Name "namedIndividual"

_Entity_objectProperty = Core.Name "objectProperty"

data AnnotationSubject =
  AnnotationSubjectIri Syntax.Iri |
  AnnotationSubjectAnonymousIndividual AnonymousIndividual
  deriving (Eq, Ord, Read, Show)

_AnnotationSubject = Core.Name "hydra.owl.syntax.AnnotationSubject"

_AnnotationSubject_iri = Core.Name "iri"

_AnnotationSubject_anonymousIndividual = Core.Name "anonymousIndividual"

data AnnotationValue =
  AnnotationValueAnonymousIndividual AnonymousIndividual |
  AnnotationValueIri Syntax.Iri |
  AnnotationValueLiteral Syntax.Literal
  deriving (Eq, Ord, Read, Show)

_AnnotationValue = Core.Name "hydra.owl.syntax.AnnotationValue"

_AnnotationValue_anonymousIndividual = Core.Name "anonymousIndividual"

_AnnotationValue_iri = Core.Name "iri"

_AnnotationValue_literal = Core.Name "literal"

data Annotation =
  Annotation {
    annotationAnnotations :: [Annotation],
    annotationProperty :: AnnotationProperty,
    annotationValue :: AnnotationValue}
  deriving (Eq, Ord, Read, Show)

_Annotation = Core.Name "hydra.owl.syntax.Annotation"

_Annotation_annotations = Core.Name "annotations"

_Annotation_property = Core.Name "property"

_Annotation_value = Core.Name "value"

data AnnotationAxiom =
  AnnotationAxiomAnnotationAssertion AnnotationAssertion |
  AnnotationAxiomAnnotationPropertyDomain AnnotationPropertyDomain |
  AnnotationAxiomAnnotationPropertyRange AnnotationPropertyRange |
  AnnotationAxiomSubAnnotationPropertyOf SubAnnotationPropertyOf
  deriving (Eq, Ord, Read, Show)

_AnnotationAxiom = Core.Name "hydra.owl.syntax.AnnotationAxiom"

_AnnotationAxiom_annotationAssertion = Core.Name "annotationAssertion"

_AnnotationAxiom_annotationPropertyDomain = Core.Name "annotationPropertyDomain"

_AnnotationAxiom_annotationPropertyRange = Core.Name "annotationPropertyRange"

_AnnotationAxiom_subAnnotationPropertyOf = Core.Name "subAnnotationPropertyOf"

data AnnotationAssertion =
  AnnotationAssertion {
    annotationAssertionAnnotations :: [Annotation],
    annotationAssertionProperty :: AnnotationProperty,
    annotationAssertionSubject :: AnnotationSubject,
    annotationAssertionValue :: AnnotationValue}
  deriving (Eq, Ord, Read, Show)

_AnnotationAssertion = Core.Name "hydra.owl.syntax.AnnotationAssertion"

_AnnotationAssertion_annotations = Core.Name "annotations"

_AnnotationAssertion_property = Core.Name "property"

_AnnotationAssertion_subject = Core.Name "subject"

_AnnotationAssertion_value = Core.Name "value"

data SubAnnotationPropertyOf =
  SubAnnotationPropertyOf {
    subAnnotationPropertyOfAnnotations :: [Annotation],
    subAnnotationPropertyOfSubProperty :: AnnotationProperty,
    subAnnotationPropertyOfSuperProperty :: AnnotationProperty}
  deriving (Eq, Ord, Read, Show)

_SubAnnotationPropertyOf = Core.Name "hydra.owl.syntax.SubAnnotationPropertyOf"

_SubAnnotationPropertyOf_annotations = Core.Name "annotations"

_SubAnnotationPropertyOf_subProperty = Core.Name "subProperty"

_SubAnnotationPropertyOf_superProperty = Core.Name "superProperty"

data AnnotationPropertyDomain =
  AnnotationPropertyDomain {
    annotationPropertyDomainAnnotations :: [Annotation],
    annotationPropertyDomainProperty :: AnnotationProperty,
    annotationPropertyDomainIri :: Syntax.Iri}
  deriving (Eq, Ord, Read, Show)

_AnnotationPropertyDomain = Core.Name "hydra.owl.syntax.AnnotationPropertyDomain"

_AnnotationPropertyDomain_annotations = Core.Name "annotations"

_AnnotationPropertyDomain_property = Core.Name "property"

_AnnotationPropertyDomain_iri = Core.Name "iri"

data AnnotationPropertyRange =
  AnnotationPropertyRange {
    annotationPropertyRangeAnnotations :: [Annotation],
    annotationPropertyRangeProperty :: AnnotationProperty,
    annotationPropertyRangeIri :: Syntax.Iri}
  deriving (Eq, Ord, Read, Show)

_AnnotationPropertyRange = Core.Name "hydra.owl.syntax.AnnotationPropertyRange"

_AnnotationPropertyRange_annotations = Core.Name "annotations"

_AnnotationPropertyRange_property = Core.Name "property"

_AnnotationPropertyRange_iri = Core.Name "iri"

-- | See https://www.w3.org/TR/owl2-syntax/#Classes
newtype Class =
  Class {
    unClass :: ()}
  deriving (Eq, Ord, Read, Show)

_Class = Core.Name "hydra.owl.syntax.Class"

-- | See https://www.w3.org/TR/owl2-syntax/#Datatypes
data Datatype =
  -- | Note: XML Schema datatypes are treated as a special case in this model (not in the OWL 2 specification itself) because they are particularly common
  DatatypeXmlSchema Schema.Datatype |
  DatatypeOther Syntax.Iri
  deriving (Eq, Ord, Read, Show)

_Datatype = Core.Name "hydra.owl.syntax.Datatype"

_Datatype_xmlSchema = Core.Name "xmlSchema"

_Datatype_other = Core.Name "other"

-- | See https://www.w3.org/TR/owl2-syntax/#Object_Properties
newtype ObjectProperty =
  ObjectProperty {
    unObjectProperty :: ()}
  deriving (Eq, Ord, Read, Show)

_ObjectProperty = Core.Name "hydra.owl.syntax.ObjectProperty"

newtype DataProperty =
  DataProperty {
    unDataProperty :: ()}
  deriving (Eq, Ord, Read, Show)

_DataProperty = Core.Name "hydra.owl.syntax.DataProperty"

newtype AnnotationProperty =
  AnnotationProperty {
    unAnnotationProperty :: ()}
  deriving (Eq, Ord, Read, Show)

_AnnotationProperty = Core.Name "hydra.owl.syntax.AnnotationProperty"

data Individual =
  IndividualNamed NamedIndividual |
  IndividualAnonymous AnonymousIndividual
  deriving (Eq, Ord, Read, Show)

_Individual = Core.Name "hydra.owl.syntax.Individual"

_Individual_named = Core.Name "named"

_Individual_anonymous = Core.Name "anonymous"

newtype NamedIndividual =
  NamedIndividual {
    unNamedIndividual :: ()}
  deriving (Eq, Ord, Read, Show)

_NamedIndividual = Core.Name "hydra.owl.syntax.NamedIndividual"

newtype AnonymousIndividual =
  AnonymousIndividual {
    unAnonymousIndividual :: ()}
  deriving (Eq, Ord, Read, Show)

_AnonymousIndividual = Core.Name "hydra.owl.syntax.AnonymousIndividual"

data ObjectPropertyExpression =
  ObjectPropertyExpressionObject ObjectProperty |
  ObjectPropertyExpressionInverseObject InverseObjectProperty
  deriving (Eq, Ord, Read, Show)

_ObjectPropertyExpression = Core.Name "hydra.owl.syntax.ObjectPropertyExpression"

_ObjectPropertyExpression_object = Core.Name "object"

_ObjectPropertyExpression_inverseObject = Core.Name "inverseObject"

newtype InverseObjectProperty =
  InverseObjectProperty {
    unInverseObjectProperty :: ObjectProperty}
  deriving (Eq, Ord, Read, Show)

_InverseObjectProperty = Core.Name "hydra.owl.syntax.InverseObjectProperty"

newtype DataPropertyExpression =
  DataPropertyExpression {
    unDataPropertyExpression :: DataProperty}
  deriving (Eq, Ord, Read, Show)

_DataPropertyExpression = Core.Name "hydra.owl.syntax.DataPropertyExpression"

-- | See https://www.w3.org/TR/owl2-syntax/#Data_Ranges
data DataRange =
  DataRangeDataComplementOf DataComplementOf |
  DataRangeDataIntersectionOf DataIntersectionOf |
  DataRangeDataOneOf DataOneOf |
  DataRangeDataUnionOf DataUnionOf |
  DataRangeDatatype Datatype |
  DataRangeDatatypeRestriction DatatypeRestriction
  deriving (Eq, Ord, Read, Show)

_DataRange = Core.Name "hydra.owl.syntax.DataRange"

_DataRange_dataComplementOf = Core.Name "dataComplementOf"

_DataRange_dataIntersectionOf = Core.Name "dataIntersectionOf"

_DataRange_dataOneOf = Core.Name "dataOneOf"

_DataRange_dataUnionOf = Core.Name "dataUnionOf"

_DataRange_datatype = Core.Name "datatype"

_DataRange_datatypeRestriction = Core.Name "datatypeRestriction"

-- | See https://www.w3.org/TR/owl2-syntax/#Intersection_of_Data_Ranges
newtype DataIntersectionOf =
  DataIntersectionOf {
    unDataIntersectionOf :: [DataRange]}
  deriving (Eq, Ord, Read, Show)

_DataIntersectionOf = Core.Name "hydra.owl.syntax.DataIntersectionOf"

-- | See https://www.w3.org/TR/owl2-syntax/#Union_of_Data_Ranges
newtype DataUnionOf =
  DataUnionOf {
    unDataUnionOf :: [DataRange]}
  deriving (Eq, Ord, Read, Show)

_DataUnionOf = Core.Name "hydra.owl.syntax.DataUnionOf"

-- | See https://www.w3.org/TR/owl2-syntax/#Complement_of_Data_Ranges
newtype DataComplementOf =
  DataComplementOf {
    unDataComplementOf :: DataRange}
  deriving (Eq, Ord, Read, Show)

_DataComplementOf = Core.Name "hydra.owl.syntax.DataComplementOf"

-- | See https://www.w3.org/TR/owl2-syntax/#Enumeration_of_Literals
newtype DataOneOf =
  DataOneOf {
    unDataOneOf :: [Syntax.Literal]}
  deriving (Eq, Ord, Read, Show)

_DataOneOf = Core.Name "hydra.owl.syntax.DataOneOf"

-- | See https://www.w3.org/TR/owl2-syntax/#Datatype_Restrictions
data DatatypeRestriction =
  DatatypeRestriction {
    datatypeRestrictionDatatype :: Datatype,
    datatypeRestrictionConstraints :: [DatatypeRestriction_Constraint]}
  deriving (Eq, Ord, Read, Show)

_DatatypeRestriction = Core.Name "hydra.owl.syntax.DatatypeRestriction"

_DatatypeRestriction_datatype = Core.Name "datatype"

_DatatypeRestriction_constraints = Core.Name "constraints"

data DatatypeRestriction_Constraint =
  DatatypeRestriction_Constraint {
    datatypeRestriction_ConstraintConstrainingFacet :: DatatypeRestriction_ConstrainingFacet,
    datatypeRestriction_ConstraintRestrictionValue :: Syntax.Literal}
  deriving (Eq, Ord, Read, Show)

_DatatypeRestriction_Constraint = Core.Name "hydra.owl.syntax.DatatypeRestriction_Constraint"

_DatatypeRestriction_Constraint_constrainingFacet = Core.Name "constrainingFacet"

_DatatypeRestriction_Constraint_restrictionValue = Core.Name "restrictionValue"

data DatatypeRestriction_ConstrainingFacet =
  -- | Note: XML Schema constraining facets are treated as a special case in this model (not in the OWL 2 specification itself) because they are particularly common
  DatatypeRestriction_ConstrainingFacetXmlSchema Schema.ConstrainingFacet |
  DatatypeRestriction_ConstrainingFacetOther Syntax.Iri
  deriving (Eq, Ord, Read, Show)

_DatatypeRestriction_ConstrainingFacet = Core.Name "hydra.owl.syntax.DatatypeRestriction_ConstrainingFacet"

_DatatypeRestriction_ConstrainingFacet_xmlSchema = Core.Name "xmlSchema"

_DatatypeRestriction_ConstrainingFacet_other = Core.Name "other"

data ClassExpression =
  ClassExpressionClass Class |
  ClassExpressionDataSomeValuesFrom DataSomeValuesFrom |
  ClassExpressionDataAllValuesFrom DataAllValuesFrom |
  ClassExpressionDataHasValue DataHasValue |
  ClassExpressionDataMinCardinality DataMinCardinality |
  ClassExpressionDataMaxCardinality DataMaxCardinality |
  ClassExpressionDataExactCardinality DataExactCardinality |
  ClassExpressionObjectAllValuesFrom ObjectAllValuesFrom |
  ClassExpressionObjectExactCardinality ObjectExactCardinality |
  ClassExpressionObjectHasSelf ObjectHasSelf |
  ClassExpressionObjectHasValue ObjectHasValue |
  ClassExpressionObjectIntersectionOf ObjectIntersectionOf |
  ClassExpressionObjectMaxCardinality ObjectMaxCardinality |
  ClassExpressionObjectMinCardinality ObjectMinCardinality |
  ClassExpressionObjectOneOf ObjectOneOf |
  ClassExpressionObjectSomeValuesFrom ObjectSomeValuesFrom |
  ClassExpressionObjectUnionOf ObjectUnionOf
  deriving (Eq, Ord, Read, Show)

_ClassExpression = Core.Name "hydra.owl.syntax.ClassExpression"

_ClassExpression_class = Core.Name "class"

_ClassExpression_dataSomeValuesFrom = Core.Name "dataSomeValuesFrom"

_ClassExpression_dataAllValuesFrom = Core.Name "dataAllValuesFrom"

_ClassExpression_dataHasValue = Core.Name "dataHasValue"

_ClassExpression_dataMinCardinality = Core.Name "dataMinCardinality"

_ClassExpression_dataMaxCardinality = Core.Name "dataMaxCardinality"

_ClassExpression_dataExactCardinality = Core.Name "dataExactCardinality"

_ClassExpression_objectAllValuesFrom = Core.Name "objectAllValuesFrom"

_ClassExpression_objectExactCardinality = Core.Name "objectExactCardinality"

_ClassExpression_objectHasSelf = Core.Name "objectHasSelf"

_ClassExpression_objectHasValue = Core.Name "objectHasValue"

_ClassExpression_objectIntersectionOf = Core.Name "objectIntersectionOf"

_ClassExpression_objectMaxCardinality = Core.Name "objectMaxCardinality"

_ClassExpression_objectMinCardinality = Core.Name "objectMinCardinality"

_ClassExpression_objectOneOf = Core.Name "objectOneOf"

_ClassExpression_objectSomeValuesFrom = Core.Name "objectSomeValuesFrom"

_ClassExpression_objectUnionOf = Core.Name "objectUnionOf"

newtype ObjectIntersectionOf =
  ObjectIntersectionOf {
    unObjectIntersectionOf :: [ClassExpression]}
  deriving (Eq, Ord, Read, Show)

_ObjectIntersectionOf = Core.Name "hydra.owl.syntax.ObjectIntersectionOf"

newtype ObjectUnionOf =
  ObjectUnionOf {
    unObjectUnionOf :: [ClassExpression]}
  deriving (Eq, Ord, Read, Show)

_ObjectUnionOf = Core.Name "hydra.owl.syntax.ObjectUnionOf"

newtype ObjectComplementOf =
  ObjectComplementOf {
    unObjectComplementOf :: ClassExpression}
  deriving (Eq, Ord, Read, Show)

_ObjectComplementOf = Core.Name "hydra.owl.syntax.ObjectComplementOf"

newtype ObjectOneOf =
  ObjectOneOf {
    unObjectOneOf :: [Individual]}
  deriving (Eq, Ord, Read, Show)

_ObjectOneOf = Core.Name "hydra.owl.syntax.ObjectOneOf"

data ObjectSomeValuesFrom =
  ObjectSomeValuesFrom {
    objectSomeValuesFromProperty :: ObjectPropertyExpression,
    objectSomeValuesFromClass :: ClassExpression}
  deriving (Eq, Ord, Read, Show)

_ObjectSomeValuesFrom = Core.Name "hydra.owl.syntax.ObjectSomeValuesFrom"

_ObjectSomeValuesFrom_property = Core.Name "property"

_ObjectSomeValuesFrom_class = Core.Name "class"

data ObjectAllValuesFrom =
  ObjectAllValuesFrom {
    objectAllValuesFromProperty :: ObjectPropertyExpression,
    objectAllValuesFromClass :: ClassExpression}
  deriving (Eq, Ord, Read, Show)

_ObjectAllValuesFrom = Core.Name "hydra.owl.syntax.ObjectAllValuesFrom"

_ObjectAllValuesFrom_property = Core.Name "property"

_ObjectAllValuesFrom_class = Core.Name "class"

data ObjectHasValue =
  ObjectHasValue {
    objectHasValueProperty :: ObjectPropertyExpression,
    objectHasValueIndividual :: Individual}
  deriving (Eq, Ord, Read, Show)

_ObjectHasValue = Core.Name "hydra.owl.syntax.ObjectHasValue"

_ObjectHasValue_property = Core.Name "property"

_ObjectHasValue_individual = Core.Name "individual"

newtype ObjectHasSelf =
  ObjectHasSelf {
    unObjectHasSelf :: ObjectPropertyExpression}
  deriving (Eq, Ord, Read, Show)

_ObjectHasSelf = Core.Name "hydra.owl.syntax.ObjectHasSelf"

-- | See https://www.w3.org/TR/owl2-syntax/#Minimum_Cardinality
data ObjectMinCardinality =
  ObjectMinCardinality {
    objectMinCardinalityBound :: Integer,
    objectMinCardinalityProperty :: ObjectPropertyExpression,
    objectMinCardinalityClass :: [ClassExpression]}
  deriving (Eq, Ord, Read, Show)

_ObjectMinCardinality = Core.Name "hydra.owl.syntax.ObjectMinCardinality"

_ObjectMinCardinality_bound = Core.Name "bound"

_ObjectMinCardinality_property = Core.Name "property"

_ObjectMinCardinality_class = Core.Name "class"

-- | See https://www.w3.org/TR/owl2-syntax/#Maximum_Cardinality
data ObjectMaxCardinality =
  ObjectMaxCardinality {
    objectMaxCardinalityBound :: Integer,
    objectMaxCardinalityProperty :: ObjectPropertyExpression,
    objectMaxCardinalityClass :: [ClassExpression]}
  deriving (Eq, Ord, Read, Show)

_ObjectMaxCardinality = Core.Name "hydra.owl.syntax.ObjectMaxCardinality"

_ObjectMaxCardinality_bound = Core.Name "bound"

_ObjectMaxCardinality_property = Core.Name "property"

_ObjectMaxCardinality_class = Core.Name "class"

-- | See https://www.w3.org/TR/owl2-syntax/#Exact_Cardinality
data ObjectExactCardinality =
  ObjectExactCardinality {
    objectExactCardinalityBound :: Integer,
    objectExactCardinalityProperty :: ObjectPropertyExpression,
    objectExactCardinalityClass :: [ClassExpression]}
  deriving (Eq, Ord, Read, Show)

_ObjectExactCardinality = Core.Name "hydra.owl.syntax.ObjectExactCardinality"

_ObjectExactCardinality_bound = Core.Name "bound"

_ObjectExactCardinality_property = Core.Name "property"

_ObjectExactCardinality_class = Core.Name "class"

data DataSomeValuesFrom =
  DataSomeValuesFrom {
    dataSomeValuesFromProperty :: [DataPropertyExpression],
    dataSomeValuesFromRange :: DataRange}
  deriving (Eq, Ord, Read, Show)

_DataSomeValuesFrom = Core.Name "hydra.owl.syntax.DataSomeValuesFrom"

_DataSomeValuesFrom_property = Core.Name "property"

_DataSomeValuesFrom_range = Core.Name "range"

data DataAllValuesFrom =
  DataAllValuesFrom {
    dataAllValuesFromProperty :: [DataPropertyExpression],
    dataAllValuesFromRange :: DataRange}
  deriving (Eq, Ord, Read, Show)

_DataAllValuesFrom = Core.Name "hydra.owl.syntax.DataAllValuesFrom"

_DataAllValuesFrom_property = Core.Name "property"

_DataAllValuesFrom_range = Core.Name "range"

data DataHasValue =
  DataHasValue {
    dataHasValueProperty :: DataPropertyExpression,
    dataHasValueValue :: Syntax.Literal}
  deriving (Eq, Ord, Read, Show)

_DataHasValue = Core.Name "hydra.owl.syntax.DataHasValue"

_DataHasValue_property = Core.Name "property"

_DataHasValue_value = Core.Name "value"

data DataMinCardinality =
  DataMinCardinality {
    dataMinCardinalityBound :: Integer,
    dataMinCardinalityProperty :: DataPropertyExpression,
    dataMinCardinalityRange :: [DataRange]}
  deriving (Eq, Ord, Read, Show)

_DataMinCardinality = Core.Name "hydra.owl.syntax.DataMinCardinality"

_DataMinCardinality_bound = Core.Name "bound"

_DataMinCardinality_property = Core.Name "property"

_DataMinCardinality_range = Core.Name "range"

data DataMaxCardinality =
  DataMaxCardinality {
    dataMaxCardinalityBound :: Integer,
    dataMaxCardinalityProperty :: DataPropertyExpression,
    dataMaxCardinalityRange :: [DataRange]}
  deriving (Eq, Ord, Read, Show)

_DataMaxCardinality = Core.Name "hydra.owl.syntax.DataMaxCardinality"

_DataMaxCardinality_bound = Core.Name "bound"

_DataMaxCardinality_property = Core.Name "property"

_DataMaxCardinality_range = Core.Name "range"

data DataExactCardinality =
  DataExactCardinality {
    dataExactCardinalityBound :: Integer,
    dataExactCardinalityProperty :: DataPropertyExpression,
    dataExactCardinalityRange :: [DataRange]}
  deriving (Eq, Ord, Read, Show)

_DataExactCardinality = Core.Name "hydra.owl.syntax.DataExactCardinality"

_DataExactCardinality_bound = Core.Name "bound"

_DataExactCardinality_property = Core.Name "property"

_DataExactCardinality_range = Core.Name "range"

-- | See https://www.w3.org/TR/owl2-syntax/#Axioms
data Axiom =
  AxiomAnnotationAxiom AnnotationAxiom |
  AxiomAssertion Assertion |
  AxiomClassAxiom ClassAxiom |
  AxiomDataPropertyAxiom DataPropertyAxiom |
  AxiomDatatypeDefinition DatatypeDefinition |
  AxiomDeclaration Declaration |
  AxiomHasKey HasKey |
  AxiomObjectPropertyAxiom ObjectPropertyAxiom
  deriving (Eq, Ord, Read, Show)

_Axiom = Core.Name "hydra.owl.syntax.Axiom"

_Axiom_annotationAxiom = Core.Name "annotationAxiom"

_Axiom_assertion = Core.Name "assertion"

_Axiom_classAxiom = Core.Name "classAxiom"

_Axiom_dataPropertyAxiom = Core.Name "dataPropertyAxiom"

_Axiom_datatypeDefinition = Core.Name "datatypeDefinition"

_Axiom_declaration = Core.Name "declaration"

_Axiom_hasKey = Core.Name "hasKey"

_Axiom_objectPropertyAxiom = Core.Name "objectPropertyAxiom"

data ClassAxiom =
  ClassAxiomDisjointClasses DisjointClasses |
  ClassAxiomDisjointUnion DisjointUnion |
  ClassAxiomEquivalentClasses EquivalentClasses |
  ClassAxiomSubClassOf SubClassOf
  deriving (Eq, Ord, Read, Show)

_ClassAxiom = Core.Name "hydra.owl.syntax.ClassAxiom"

_ClassAxiom_disjointClasses = Core.Name "disjointClasses"

_ClassAxiom_disjointUnion = Core.Name "disjointUnion"

_ClassAxiom_equivalentClasses = Core.Name "equivalentClasses"

_ClassAxiom_subClassOf = Core.Name "subClassOf"

data SubClassOf =
  SubClassOf {
    subClassOfAnnotations :: [Annotation],
    subClassOfSubClass :: ClassExpression,
    subClassOfSuperClass :: ClassExpression}
  deriving (Eq, Ord, Read, Show)

_SubClassOf = Core.Name "hydra.owl.syntax.SubClassOf"

_SubClassOf_annotations = Core.Name "annotations"

_SubClassOf_subClass = Core.Name "subClass"

_SubClassOf_superClass = Core.Name "superClass"

data EquivalentClasses =
  EquivalentClasses {
    equivalentClassesAnnotations :: [Annotation],
    equivalentClassesClasses :: [ClassExpression]}
  deriving (Eq, Ord, Read, Show)

_EquivalentClasses = Core.Name "hydra.owl.syntax.EquivalentClasses"

_EquivalentClasses_annotations = Core.Name "annotations"

_EquivalentClasses_classes = Core.Name "classes"

data DisjointClasses =
  DisjointClasses {
    disjointClassesAnnotations :: [Annotation],
    disjointClassesClasses :: [ClassExpression]}
  deriving (Eq, Ord, Read, Show)

_DisjointClasses = Core.Name "hydra.owl.syntax.DisjointClasses"

_DisjointClasses_annotations = Core.Name "annotations"

_DisjointClasses_classes = Core.Name "classes"

-- | See https://www.w3.org/TR/owl2-syntax/#Disjoint_Union_of_Class_Expressions
data DisjointUnion =
  DisjointUnion {
    disjointUnionAnnotations :: [Annotation],
    disjointUnionClass :: Class,
    disjointUnionClasses :: [ClassExpression]}
  deriving (Eq, Ord, Read, Show)

_DisjointUnion = Core.Name "hydra.owl.syntax.DisjointUnion"

_DisjointUnion_annotations = Core.Name "annotations"

_DisjointUnion_class = Core.Name "class"

_DisjointUnion_classes = Core.Name "classes"

data ObjectPropertyAxiom =
  ObjectPropertyAxiomAsymmetricObjectProperty AsymmetricObjectProperty |
  ObjectPropertyAxiomDisjointObjectProperties DisjointObjectProperties |
  ObjectPropertyAxiomEquivalentObjectProperties EquivalentObjectProperties |
  ObjectPropertyAxiomFunctionalObjectProperty FunctionalObjectProperty |
  ObjectPropertyAxiomInverseFunctionalObjectProperty InverseFunctionalObjectProperty |
  ObjectPropertyAxiomInverseObjectProperties InverseObjectProperties |
  ObjectPropertyAxiomIrreflexiveObjectProperty IrreflexiveObjectProperty |
  ObjectPropertyAxiomObjectPropertyDomain ObjectPropertyDomain |
  ObjectPropertyAxiomObjectPropertyRange ObjectPropertyRange |
  ObjectPropertyAxiomReflexiveObjectProperty ReflexiveObjectProperty |
  ObjectPropertyAxiomSubObjectPropertyOf SubObjectPropertyOf |
  ObjectPropertyAxiomSymmetricObjectProperty SymmetricObjectProperty |
  ObjectPropertyAxiomTransitiveObjectProperty TransitiveObjectProperty
  deriving (Eq, Ord, Read, Show)

_ObjectPropertyAxiom = Core.Name "hydra.owl.syntax.ObjectPropertyAxiom"

_ObjectPropertyAxiom_asymmetricObjectProperty = Core.Name "asymmetricObjectProperty"

_ObjectPropertyAxiom_disjointObjectProperties = Core.Name "disjointObjectProperties"

_ObjectPropertyAxiom_equivalentObjectProperties = Core.Name "equivalentObjectProperties"

_ObjectPropertyAxiom_functionalObjectProperty = Core.Name "functionalObjectProperty"

_ObjectPropertyAxiom_inverseFunctionalObjectProperty = Core.Name "inverseFunctionalObjectProperty"

_ObjectPropertyAxiom_inverseObjectProperties = Core.Name "inverseObjectProperties"

_ObjectPropertyAxiom_irreflexiveObjectProperty = Core.Name "irreflexiveObjectProperty"

_ObjectPropertyAxiom_objectPropertyDomain = Core.Name "objectPropertyDomain"

_ObjectPropertyAxiom_objectPropertyRange = Core.Name "objectPropertyRange"

_ObjectPropertyAxiom_reflexiveObjectProperty = Core.Name "reflexiveObjectProperty"

_ObjectPropertyAxiom_subObjectPropertyOf = Core.Name "subObjectPropertyOf"

_ObjectPropertyAxiom_symmetricObjectProperty = Core.Name "symmetricObjectProperty"

_ObjectPropertyAxiom_transitiveObjectProperty = Core.Name "transitiveObjectProperty"

data SubObjectPropertyOf =
  SubObjectPropertyOf {
    subObjectPropertyOfAnnotations :: [Annotation],
    subObjectPropertyOfSubProperty :: [ObjectPropertyExpression],
    subObjectPropertyOfSuperProperty :: ObjectPropertyExpression}
  deriving (Eq, Ord, Read, Show)

_SubObjectPropertyOf = Core.Name "hydra.owl.syntax.SubObjectPropertyOf"

_SubObjectPropertyOf_annotations = Core.Name "annotations"

_SubObjectPropertyOf_subProperty = Core.Name "subProperty"

_SubObjectPropertyOf_superProperty = Core.Name "superProperty"

data EquivalentObjectProperties =
  EquivalentObjectProperties {
    equivalentObjectPropertiesAnnotations :: [Annotation],
    equivalentObjectPropertiesProperties :: [ObjectPropertyExpression]}
  deriving (Eq, Ord, Read, Show)

_EquivalentObjectProperties = Core.Name "hydra.owl.syntax.EquivalentObjectProperties"

_EquivalentObjectProperties_annotations = Core.Name "annotations"

_EquivalentObjectProperties_properties = Core.Name "properties"

data DisjointObjectProperties =
  DisjointObjectProperties {
    disjointObjectPropertiesAnnotations :: [Annotation],
    disjointObjectPropertiesProperties :: [ObjectPropertyExpression]}
  deriving (Eq, Ord, Read, Show)

_DisjointObjectProperties = Core.Name "hydra.owl.syntax.DisjointObjectProperties"

_DisjointObjectProperties_annotations = Core.Name "annotations"

_DisjointObjectProperties_properties = Core.Name "properties"

-- | See https://www.w3.org/TR/owl2-syntax/#Object_Property_Domain
data ObjectPropertyDomain =
  ObjectPropertyDomain {
    objectPropertyDomainAnnotations :: [Annotation],
    objectPropertyDomainProperty :: ObjectPropertyExpression,
    objectPropertyDomainDomain :: ClassExpression}
  deriving (Eq, Ord, Read, Show)

_ObjectPropertyDomain = Core.Name "hydra.owl.syntax.ObjectPropertyDomain"

_ObjectPropertyDomain_annotations = Core.Name "annotations"

_ObjectPropertyDomain_property = Core.Name "property"

_ObjectPropertyDomain_domain = Core.Name "domain"

-- | See https://www.w3.org/TR/owl2-syntax/#Object_Property_Range
data ObjectPropertyRange =
  ObjectPropertyRange {
    objectPropertyRangeAnnotations :: [Annotation],
    objectPropertyRangeProperty :: ObjectPropertyExpression,
    objectPropertyRangeRange :: ClassExpression}
  deriving (Eq, Ord, Read, Show)

_ObjectPropertyRange = Core.Name "hydra.owl.syntax.ObjectPropertyRange"

_ObjectPropertyRange_annotations = Core.Name "annotations"

_ObjectPropertyRange_property = Core.Name "property"

_ObjectPropertyRange_range = Core.Name "range"

data InverseObjectProperties =
  InverseObjectProperties {
    inverseObjectPropertiesAnnotations :: [Annotation],
    inverseObjectPropertiesProperty1 :: ObjectPropertyExpression,
    inverseObjectPropertiesProperty2 :: ObjectPropertyExpression}
  deriving (Eq, Ord, Read, Show)

_InverseObjectProperties = Core.Name "hydra.owl.syntax.InverseObjectProperties"

_InverseObjectProperties_annotations = Core.Name "annotations"

_InverseObjectProperties_property1 = Core.Name "property1"

_InverseObjectProperties_property2 = Core.Name "property2"

data FunctionalObjectProperty =
  FunctionalObjectProperty {
    functionalObjectPropertyAnnotations :: [Annotation],
    functionalObjectPropertyProperty :: ObjectPropertyExpression}
  deriving (Eq, Ord, Read, Show)

_FunctionalObjectProperty = Core.Name "hydra.owl.syntax.FunctionalObjectProperty"

_FunctionalObjectProperty_annotations = Core.Name "annotations"

_FunctionalObjectProperty_property = Core.Name "property"

data InverseFunctionalObjectProperty =
  InverseFunctionalObjectProperty {
    inverseFunctionalObjectPropertyAnnotations :: [Annotation],
    inverseFunctionalObjectPropertyProperty :: ObjectPropertyExpression}
  deriving (Eq, Ord, Read, Show)

_InverseFunctionalObjectProperty = Core.Name "hydra.owl.syntax.InverseFunctionalObjectProperty"

_InverseFunctionalObjectProperty_annotations = Core.Name "annotations"

_InverseFunctionalObjectProperty_property = Core.Name "property"

data ReflexiveObjectProperty =
  ReflexiveObjectProperty {
    reflexiveObjectPropertyAnnotations :: [Annotation],
    reflexiveObjectPropertyProperty :: ObjectPropertyExpression}
  deriving (Eq, Ord, Read, Show)

_ReflexiveObjectProperty = Core.Name "hydra.owl.syntax.ReflexiveObjectProperty"

_ReflexiveObjectProperty_annotations = Core.Name "annotations"

_ReflexiveObjectProperty_property = Core.Name "property"

data IrreflexiveObjectProperty =
  IrreflexiveObjectProperty {
    irreflexiveObjectPropertyAnnotations :: [Annotation],
    irreflexiveObjectPropertyProperty :: ObjectPropertyExpression}
  deriving (Eq, Ord, Read, Show)

_IrreflexiveObjectProperty = Core.Name "hydra.owl.syntax.IrreflexiveObjectProperty"

_IrreflexiveObjectProperty_annotations = Core.Name "annotations"

_IrreflexiveObjectProperty_property = Core.Name "property"

data SymmetricObjectProperty =
  SymmetricObjectProperty {
    symmetricObjectPropertyAnnotations :: [Annotation],
    symmetricObjectPropertyProperty :: ObjectPropertyExpression}
  deriving (Eq, Ord, Read, Show)

_SymmetricObjectProperty = Core.Name "hydra.owl.syntax.SymmetricObjectProperty"

_SymmetricObjectProperty_annotations = Core.Name "annotations"

_SymmetricObjectProperty_property = Core.Name "property"

data AsymmetricObjectProperty =
  AsymmetricObjectProperty {
    asymmetricObjectPropertyAnnotations :: [Annotation],
    asymmetricObjectPropertyProperty :: ObjectPropertyExpression}
  deriving (Eq, Ord, Read, Show)

_AsymmetricObjectProperty = Core.Name "hydra.owl.syntax.AsymmetricObjectProperty"

_AsymmetricObjectProperty_annotations = Core.Name "annotations"

_AsymmetricObjectProperty_property = Core.Name "property"

data TransitiveObjectProperty =
  TransitiveObjectProperty {
    transitiveObjectPropertyAnnotations :: [Annotation],
    transitiveObjectPropertyProperty :: ObjectPropertyExpression}
  deriving (Eq, Ord, Read, Show)

_TransitiveObjectProperty = Core.Name "hydra.owl.syntax.TransitiveObjectProperty"

_TransitiveObjectProperty_annotations = Core.Name "annotations"

_TransitiveObjectProperty_property = Core.Name "property"

data DataPropertyAxiom =
  DataPropertyAxiomDataPropertyAxiom DataPropertyAxiom |
  DataPropertyAxiomDataPropertyRange DataPropertyRange |
  DataPropertyAxiomDisjointDataProperties DisjointDataProperties |
  DataPropertyAxiomEquivalentDataProperties EquivalentDataProperties |
  DataPropertyAxiomFunctionalDataProperty FunctionalDataProperty |
  DataPropertyAxiomSubDataPropertyOf SubDataPropertyOf
  deriving (Eq, Ord, Read, Show)

_DataPropertyAxiom = Core.Name "hydra.owl.syntax.DataPropertyAxiom"

_DataPropertyAxiom_dataPropertyAxiom = Core.Name "dataPropertyAxiom"

_DataPropertyAxiom_dataPropertyRange = Core.Name "dataPropertyRange"

_DataPropertyAxiom_disjointDataProperties = Core.Name "disjointDataProperties"

_DataPropertyAxiom_equivalentDataProperties = Core.Name "equivalentDataProperties"

_DataPropertyAxiom_functionalDataProperty = Core.Name "functionalDataProperty"

_DataPropertyAxiom_subDataPropertyOf = Core.Name "subDataPropertyOf"

data SubDataPropertyOf =
  SubDataPropertyOf {
    subDataPropertyOfAnnotations :: [Annotation],
    subDataPropertyOfSubProperty :: DataPropertyExpression,
    subDataPropertyOfSuperProperty :: DataPropertyExpression}
  deriving (Eq, Ord, Read, Show)

_SubDataPropertyOf = Core.Name "hydra.owl.syntax.SubDataPropertyOf"

_SubDataPropertyOf_annotations = Core.Name "annotations"

_SubDataPropertyOf_subProperty = Core.Name "subProperty"

_SubDataPropertyOf_superProperty = Core.Name "superProperty"

data EquivalentDataProperties =
  EquivalentDataProperties {
    equivalentDataPropertiesAnnotations :: [Annotation],
    equivalentDataPropertiesProperties :: [DataPropertyExpression]}
  deriving (Eq, Ord, Read, Show)

_EquivalentDataProperties = Core.Name "hydra.owl.syntax.EquivalentDataProperties"

_EquivalentDataProperties_annotations = Core.Name "annotations"

_EquivalentDataProperties_properties = Core.Name "properties"

data DisjointDataProperties =
  DisjointDataProperties {
    disjointDataPropertiesAnnotations :: [Annotation],
    disjointDataPropertiesProperties :: [DataPropertyExpression]}
  deriving (Eq, Ord, Read, Show)

_DisjointDataProperties = Core.Name "hydra.owl.syntax.DisjointDataProperties"

_DisjointDataProperties_annotations = Core.Name "annotations"

_DisjointDataProperties_properties = Core.Name "properties"

data DataPropertyDomain =
  DataPropertyDomain {
    dataPropertyDomainAnnotations :: [Annotation],
    dataPropertyDomainProperty :: DataPropertyExpression,
    dataPropertyDomainDomain :: ClassExpression}
  deriving (Eq, Ord, Read, Show)

_DataPropertyDomain = Core.Name "hydra.owl.syntax.DataPropertyDomain"

_DataPropertyDomain_annotations = Core.Name "annotations"

_DataPropertyDomain_property = Core.Name "property"

_DataPropertyDomain_domain = Core.Name "domain"

data DataPropertyRange =
  DataPropertyRange {
    dataPropertyRangeAnnotations :: [Annotation],
    dataPropertyRangeProperty :: DataPropertyExpression,
    dataPropertyRangeRange :: ClassExpression}
  deriving (Eq, Ord, Read, Show)

_DataPropertyRange = Core.Name "hydra.owl.syntax.DataPropertyRange"

_DataPropertyRange_annotations = Core.Name "annotations"

_DataPropertyRange_property = Core.Name "property"

_DataPropertyRange_range = Core.Name "range"

data FunctionalDataProperty =
  FunctionalDataProperty {
    functionalDataPropertyAnnotations :: [Annotation],
    functionalDataPropertyProperty :: DataPropertyExpression}
  deriving (Eq, Ord, Read, Show)

_FunctionalDataProperty = Core.Name "hydra.owl.syntax.FunctionalDataProperty"

_FunctionalDataProperty_annotations = Core.Name "annotations"

_FunctionalDataProperty_property = Core.Name "property"

data DatatypeDefinition =
  DatatypeDefinition {
    datatypeDefinitionAnnotations :: [Annotation],
    datatypeDefinitionDatatype :: Datatype,
    datatypeDefinitionRange :: DataRange}
  deriving (Eq, Ord, Read, Show)

_DatatypeDefinition = Core.Name "hydra.owl.syntax.DatatypeDefinition"

_DatatypeDefinition_annotations = Core.Name "annotations"

_DatatypeDefinition_datatype = Core.Name "datatype"

_DatatypeDefinition_range = Core.Name "range"

-- | See https://www.w3.org/TR/owl2-syntax/#Keys
data HasKey =
  HasKey {
    hasKeyAnnotations :: [Annotation],
    hasKeyClass :: ClassExpression,
    hasKeyObjectProperties :: [ObjectPropertyExpression],
    hasKeyDataProperties :: [DataPropertyExpression]}
  deriving (Eq, Ord, Read, Show)

_HasKey = Core.Name "hydra.owl.syntax.HasKey"

_HasKey_annotations = Core.Name "annotations"

_HasKey_class = Core.Name "class"

_HasKey_objectProperties = Core.Name "objectProperties"

_HasKey_dataProperties = Core.Name "dataProperties"

data Assertion =
  AssertionClassAssertion ClassAssertion |
  AssertionDataPropertyAssertion DataPropertyAssertion |
  AssertionDifferentIndividuals DifferentIndividuals |
  AssertionObjectPropertyAssertion ObjectPropertyAssertion |
  AssertionNegativeDataPropertyAssertion NegativeDataPropertyAssertion |
  AssertionNegativeObjectPropertyAssertion NegativeObjectPropertyAssertion |
  AssertionSameIndividual SameIndividual
  deriving (Eq, Ord, Read, Show)

_Assertion = Core.Name "hydra.owl.syntax.Assertion"

_Assertion_classAssertion = Core.Name "classAssertion"

_Assertion_dataPropertyAssertion = Core.Name "dataPropertyAssertion"

_Assertion_differentIndividuals = Core.Name "differentIndividuals"

_Assertion_objectPropertyAssertion = Core.Name "objectPropertyAssertion"

_Assertion_negativeDataPropertyAssertion = Core.Name "negativeDataPropertyAssertion"

_Assertion_negativeObjectPropertyAssertion = Core.Name "negativeObjectPropertyAssertion"

_Assertion_sameIndividual = Core.Name "sameIndividual"

data SameIndividual =
  SameIndividual {
    sameIndividualAnnotations :: [Annotation],
    sameIndividualIndividuals :: [Individual]}
  deriving (Eq, Ord, Read, Show)

_SameIndividual = Core.Name "hydra.owl.syntax.SameIndividual"

_SameIndividual_annotations = Core.Name "annotations"

_SameIndividual_individuals = Core.Name "individuals"

data DifferentIndividuals =
  DifferentIndividuals {
    differentIndividualsAnnotations :: [Annotation],
    differentIndividualsIndividuals :: [Individual]}
  deriving (Eq, Ord, Read, Show)

_DifferentIndividuals = Core.Name "hydra.owl.syntax.DifferentIndividuals"

_DifferentIndividuals_annotations = Core.Name "annotations"

_DifferentIndividuals_individuals = Core.Name "individuals"

data ClassAssertion =
  ClassAssertion {
    classAssertionAnnotations :: [Annotation],
    classAssertionClass :: ClassExpression,
    classAssertionIndividual :: Individual}
  deriving (Eq, Ord, Read, Show)

_ClassAssertion = Core.Name "hydra.owl.syntax.ClassAssertion"

_ClassAssertion_annotations = Core.Name "annotations"

_ClassAssertion_class = Core.Name "class"

_ClassAssertion_individual = Core.Name "individual"

data ObjectPropertyAssertion =
  ObjectPropertyAssertion {
    objectPropertyAssertionAnnotations :: [Annotation],
    objectPropertyAssertionProperty :: ObjectPropertyExpression,
    objectPropertyAssertionSource :: Individual,
    objectPropertyAssertionTarget :: Individual}
  deriving (Eq, Ord, Read, Show)

_ObjectPropertyAssertion = Core.Name "hydra.owl.syntax.ObjectPropertyAssertion"

_ObjectPropertyAssertion_annotations = Core.Name "annotations"

_ObjectPropertyAssertion_property = Core.Name "property"

_ObjectPropertyAssertion_source = Core.Name "source"

_ObjectPropertyAssertion_target = Core.Name "target"

data NegativeObjectPropertyAssertion =
  NegativeObjectPropertyAssertion {
    negativeObjectPropertyAssertionAnnotations :: [Annotation],
    negativeObjectPropertyAssertionProperty :: ObjectPropertyExpression,
    negativeObjectPropertyAssertionSource :: Individual,
    negativeObjectPropertyAssertionTarget :: Individual}
  deriving (Eq, Ord, Read, Show)

_NegativeObjectPropertyAssertion = Core.Name "hydra.owl.syntax.NegativeObjectPropertyAssertion"

_NegativeObjectPropertyAssertion_annotations = Core.Name "annotations"

_NegativeObjectPropertyAssertion_property = Core.Name "property"

_NegativeObjectPropertyAssertion_source = Core.Name "source"

_NegativeObjectPropertyAssertion_target = Core.Name "target"

data DataPropertyAssertion =
  DataPropertyAssertion {
    dataPropertyAssertionAnnotations :: [Annotation],
    dataPropertyAssertionProperty :: DataPropertyExpression,
    dataPropertyAssertionSource :: Individual,
    dataPropertyAssertionTarget :: Individual}
  deriving (Eq, Ord, Read, Show)

_DataPropertyAssertion = Core.Name "hydra.owl.syntax.DataPropertyAssertion"

_DataPropertyAssertion_annotations = Core.Name "annotations"

_DataPropertyAssertion_property = Core.Name "property"

_DataPropertyAssertion_source = Core.Name "source"

_DataPropertyAssertion_target = Core.Name "target"

data NegativeDataPropertyAssertion =
  NegativeDataPropertyAssertion {
    negativeDataPropertyAssertionAnnotations :: [Annotation],
    negativeDataPropertyAssertionProperty :: DataPropertyExpression,
    negativeDataPropertyAssertionSource :: Individual,
    negativeDataPropertyAssertionTarget :: Individual}
  deriving (Eq, Ord, Read, Show)

_NegativeDataPropertyAssertion = Core.Name "hydra.owl.syntax.NegativeDataPropertyAssertion"

_NegativeDataPropertyAssertion_annotations = Core.Name "annotations"

_NegativeDataPropertyAssertion_property = Core.Name "property"

_NegativeDataPropertyAssertion_source = Core.Name "source"

_NegativeDataPropertyAssertion_target = Core.Name "target"