content: {- |
     Module     : SPARQLDataTypes 
     Author     : Manuel Ohlendorf  
  
     Maintainer : Manuel Ohlendorf
     Stability  : experimental
     Portability: portable
     Version    :
  
  The core SPARQL query language data types. Every data type has two constructors: 
  
  One for the parser result and the other for the normalised version of this data type.
  -}
  module SPARQLDataTypes
      (Query (..)
      ,GraphPattern (..)
      ,PatternElement (..)
      ,TriplePattern (..)
      )
  where
  
  import RDFDataTypes
  
  -- | Represents a SPARQL query
  data Query = Query [Var] GraphPattern       -- ^ the parse result: a list of variables from the SELECT-Clause 
                                              --  and the graph pattern from the WHERE-clause.
              | QueryN [Var] [TriplePattern]  -- ^ the normalised query: a list of variables and a list of triple patterns 
              | Empty                         -- ^ the empty query: only returned when parser fails
              deriving (Show,Ord,Eq)
  
  {- two versions of triple patterns. the first one is the unnomalized version with predicate-object and object list abbreviations. the second is normalized. only this can be processed by the query evaluator -}
  -- | Represents a triple pattern
  data TriplePattern = TriplePat Subject [(Predicate, [Object])] -- ^ triple pattern, 
                                                                 -- containing predicate-object and object list abbreviations
                      | TriplePatN Subject Predicate Object      -- ^ normalised triple pattern with simple triples
                      deriving (Show,Ord,Eq)
  
  -- | The graph pattern, only used by the SPARQL parser.
  data GraphPattern = GraphPattern [PatternElement]
                      deriving (Show,Ord,Eq)
  
  -- | The pattern element 
  data PatternElement = PET TriplePattern     -- ^ represents a query with a single triple pattern
                      | PEG [PatternElement]  -- ^ represents a query with a list of triple patterns
                      deriving (Show,Ord,Eq)
  
  
  
  
  
  
  
  
  