{-# LANGUAGE OverloadedStrings #-}

--------------------------------------------------------------------------------
--  See end of this file for licence information.
--------------------------------------------------------------------------------
-- |
--  Module      :  Swish.RDF.Vocabulary.FOAF
--  Copyright   :  (c) 2011 Douglas Burke
--  License     :  GPL V2
--
--  Maintainer  :  Douglas Burke
--  Stability   :  experimental
--  Portability :  OverloadedStrings
--
--  This module defines some commonly used vocabulary terms from the FOAF
--  vocabulary (<http://xmlns.com/foaf/spec/>).
--
--  Note that unlike some of the existing vocabularies in Swish, the FOAF
--  one matches the case and spelling of the RDF terms; so we
--  use 'foafbased_near'
--  rather than @foafBasedNear@. This is partly because some terms would
--  end up with the same Haskell label if a conversion to camel-case wer
--  used.
--
--------------------------------------------------------------------------------

module Swish.RDF.Vocabulary.FOAF
    (
      -- | The version used for this module is 
      -- \"FOAF Vocabulary Specification 0.98 Namespace Document 9 August 2010 - /Marco Polo Edition/\",
      -- <http://xmlns.com/foaf/spec/20100809.html>.
      namespaceFOAF

      -- * Classes
      , foafAgent
      , foafDocument
      , foafGroup
      , foafImage
      , foafLabelProperty
      , foafOnlineAccount
      , foafOnlineChatAccount
      , foafOnlineEcommerceAccount
      , foafOnlineGamingAccount
      , foafOrganization
      , foafPerson
      , foafPersonalProfileDocument
      , foafProject

      -- * Properties
      , foafaccount
      , foafaccountName
      , foafaccountServiceHomepage
      , foafage
      , foafaimChatID
      , foafbased_near
      , foafbirthday
      , foafcurrentProject
      , foafdepiction
      , foafdepicts
      , foafdnaChecksum
      , foaffamilyName
      , foaffamily_name
      , foaffirstName
      , foaffocus
      , foaffundedBy
      , foafgeekcode
      , foafgender
      , foafgivenName
      , foafgivenname
      , foafholdsAccount
      , foafhomepage
      , foaficqChatID
      , foafimg
      , foafinterest
      , foafisPrimaryTopicOf
      , foafjabberID
      , foafknows
      , foaflastName
      , foaflogo
      , foafmade
      , foafmaker
      , foafmbox
      , foafmbox_sha1sum
      , foafmember
      , foafmembershipClass
      , foafmsnChatID
      , foafmyersBriggs
      , foafname
      , foafnick
      , foafopenid
      , foafpage
      , foafpastProject
      , foafphone
      , foafplan
      , foafprimaryTopic
      , foafpublications
      , foafschoolHomepage
      , foafsha1
      , foafskypeID
      , foafstatus
      , foafsurname
      , foaftheme
      , foafthumbnail
      , foaftipjar
      , foaftitle
      , foaftopic
      , foaftopic_interest
      , foafweblog
      , foafworkInfoHomepage
      , foafworkplaceHomepage
      , foafyahooChatID
    )
where

import Swish.Namespace (Namespace, makeNamespace, ScopedName, makeNSScopedName)
import Swish.QName (LName)

import Data.Maybe (fromMaybe)
import Network.URI (URI, parseURI)

------------------------------------------------------------
--  Namespace
------------------------------------------------------------

foafURI :: URI
foafURI = fromMaybe (error "Internal error processing FOAF URI") $ parseURI "http://xmlns.com/foaf/0.1/"

-- | Maps @foaf@ to <http://xmlns.com/foaf/0.1/>.
namespaceFOAF :: Namespace
namespaceFOAF = makeNamespace (Just "foaf") foafURI

------------------------------------------------------------
--  Terms
------------------------------------------------------------

toF :: LName -> ScopedName
toF  = makeNSScopedName namespaceFOAF

-- Classes

-- | @foaf:Agent@ from <http://xmlns.com/foaf/spec/#term_Agent>.
foafAgent :: ScopedName
foafAgent = toF "Agent"

-- | @foaf:Document@ from <http://xmlns.com/foaf/spec/#term_Document>.
foafDocument :: ScopedName
foafDocument = toF "Document"

-- | @foaf:Group@ from <http://xmlns.com/foaf/spec/#term_Group>.
foafGroup :: ScopedName
foafGroup = toF "Group"

-- | @foaf:Image@ from <http://xmlns.com/foaf/spec/#term_Image>.
foafImage :: ScopedName
foafImage = toF "Image"

-- | @foaf:LabelProperty@ from <http://xmlns.com/foaf/spec/#term_LabelProperty>.
foafLabelProperty :: ScopedName
foafLabelProperty = toF "LabelProperty"

-- | @foaf:OnlineAccount@ from <http://xmlns.com/foaf/spec/#term_OnlineAccount>.
foafOnlineAccount :: ScopedName
foafOnlineAccount = toF "OnlineAccount"

-- | @foaf:OnlineChatAccount@ from <http://xmlns.com/foaf/spec/#term_OnlineChatAccount>.
foafOnlineChatAccount :: ScopedName
foafOnlineChatAccount = toF "OnlineChatAccount"

-- | @foaf:OnlineEcommerceAccount@ from <http://xmlns.com/foaf/spec/#term_OnlineEcommerceAccount>.
foafOnlineEcommerceAccount :: ScopedName
foafOnlineEcommerceAccount = toF "OnlineEcommerceAccount"

-- | @foaf:OnlineGamingAccount@ from <http://xmlns.com/foaf/spec/#term_OnlineGamingAccount>.
foafOnlineGamingAccount :: ScopedName
foafOnlineGamingAccount = toF "OnlineGamingAccount"

-- | @foaf:Organization@ from <http://xmlns.com/foaf/spec/#term_Organization>.
foafOrganization :: ScopedName
foafOrganization = toF "Organization"

-- | @foaf:Person@ from <http://xmlns.com/foaf/spec/#term_Person>.
foafPerson :: ScopedName
foafPerson = toF "Person"

-- | @foaf:PersonalProfileDocument@ from <http://xmlns.com/foaf/spec/#term_PersonalProfileDocument>.
foafPersonalProfileDocument :: ScopedName
foafPersonalProfileDocument = toF "PersonalProfileDocument"

-- | @foaf:Project@ from <http://xmlns.com/foaf/spec/#term_Project>.
foafProject :: ScopedName
foafProject = toF "Project"

-- Properties

-- | @foaf:account@ from <http://xmlns.com/foaf/spec/#term_account>. 
foafaccount :: ScopedName
foafaccount = toF "account"

-- | @foaf:accountName@ from <http://xmlns.com/foaf/spec/#term_accountName>. 
foafaccountName :: ScopedName
foafaccountName = toF "accountName"

-- | @foaf:accountServiceHomepage@ from <http://xmlns.com/foaf/spec/#term_accountServiceHomepage>. 
foafaccountServiceHomepage :: ScopedName
foafaccountServiceHomepage = toF "accountServiceHomepage"

-- | @foaf:age@ from <http://xmlns.com/foaf/spec/#term_age>. 
foafage :: ScopedName
foafage = toF "age"

-- | @foaf:aimChatID@ from <http://xmlns.com/foaf/spec/#term_aimChatID>. 
foafaimChatID :: ScopedName
foafaimChatID = toF "aimChatID"

-- | @foaf:based_near@ from <http://xmlns.com/foaf/spec/#term_based_near>. 
foafbased_near :: ScopedName
foafbased_near = toF "based_near"

-- | @foaf:birthday@ from <http://xmlns.com/foaf/spec/#term_birthday>. 
foafbirthday :: ScopedName
foafbirthday = toF "birthday"

-- | @foaf:currentProject@ from <http://xmlns.com/foaf/spec/#term_currentProject>. 
foafcurrentProject :: ScopedName
foafcurrentProject = toF "currentProject"

-- | @foaf:depiction@ from <http://xmlns.com/foaf/spec/#term_depiction>. 
foafdepiction :: ScopedName
foafdepiction = toF "depiction"

-- | @foaf:depicts@ from <http://xmlns.com/foaf/spec/#term_depicts>. 
foafdepicts :: ScopedName
foafdepicts = toF "depicts"

-- | @foaf:dnaChecksum@ from <http://xmlns.com/foaf/spec/#term_dnaChecksum>. 
foafdnaChecksum :: ScopedName
foafdnaChecksum = toF "dnaChecksum"

-- | @foaf:familyName@ from <http://xmlns.com/foaf/spec/#term_familyName>. 
foaffamilyName :: ScopedName
foaffamilyName = toF "familyName"

-- | @foaf:family_name@ from <http://xmlns.com/foaf/spec/#term_family_name>. 
foaffamily_name :: ScopedName
foaffamily_name = toF "family_name"

-- | @foaf:firstName@ from <http://xmlns.com/foaf/spec/#term_firstName>. 
foaffirstName :: ScopedName
foaffirstName = toF "firstName"

-- | @foaf:focus@ from <http://xmlns.com/foaf/spec/#term_focus>. 
foaffocus :: ScopedName
foaffocus = toF "focus"

-- | @foaf:fundedBy@ from <http://xmlns.com/foaf/spec/#term_fundedBy>. 
foaffundedBy :: ScopedName
foaffundedBy = toF "fundedBy"

-- | @foaf:geekcode@ from <http://xmlns.com/foaf/spec/#term_geekcode>. 
foafgeekcode :: ScopedName
foafgeekcode = toF "geekcode"

-- | @foaf:gender@ from <http://xmlns.com/foaf/spec/#term_gender>. 
foafgender :: ScopedName
foafgender = toF "gender"

-- | @foaf:givenName@ from <http://xmlns.com/foaf/spec/#term_givenName>. 
foafgivenName :: ScopedName
foafgivenName = toF "givenName"

-- | @foaf:givenname@ from <http://xmlns.com/foaf/spec/#term_givenname>. 
foafgivenname :: ScopedName
foafgivenname = toF "givenname"

-- | @foaf:holdsAccount@ from <http://xmlns.com/foaf/spec/#term_holdsAccount>. 
foafholdsAccount :: ScopedName
foafholdsAccount = toF "holdsAccount"

-- | @foaf:homepage@ from <http://xmlns.com/foaf/spec/#term_homepage>. 
foafhomepage :: ScopedName
foafhomepage = toF "homepage"

-- | @foaf:icqChatID@ from <http://xmlns.com/foaf/spec/#term_icqChatID>. 
foaficqChatID :: ScopedName
foaficqChatID = toF "icqChatID"

-- | @foaf:img@ from <http://xmlns.com/foaf/spec/#term_img>. 
foafimg :: ScopedName
foafimg = toF "img"

-- | @foaf:interest@ from <http://xmlns.com/foaf/spec/#term_interest>. 
foafinterest :: ScopedName
foafinterest = toF "interest"

-- | @foaf:isPrimaryTopicOf@ from <http://xmlns.com/foaf/spec/#term_isPrimaryTopicOf>. 
foafisPrimaryTopicOf :: ScopedName
foafisPrimaryTopicOf = toF "isPrimaryTopicOf"

-- | @foaf:jabberID@ from <http://xmlns.com/foaf/spec/#term_jabberID>. 
foafjabberID :: ScopedName
foafjabberID = toF "jabberID"

-- | @foaf:knows@ from <http://xmlns.com/foaf/spec/#term_knows>. 
foafknows :: ScopedName
foafknows = toF "knows"

-- | @foaf:lastName@ from <http://xmlns.com/foaf/spec/#term_lastName>. 
foaflastName :: ScopedName
foaflastName = toF "lastName"

-- | @foaf:logo@ from <http://xmlns.com/foaf/spec/#term_logo>. 
foaflogo :: ScopedName
foaflogo = toF "logo"

-- | @foaf:made@ from <http://xmlns.com/foaf/spec/#term_made>. 
foafmade :: ScopedName
foafmade = toF "made"

-- | @foaf:maker@ from <http://xmlns.com/foaf/spec/#term_maker>. 
foafmaker :: ScopedName
foafmaker = toF "maker"

-- | @foaf:mbox@ from <http://xmlns.com/foaf/spec/#term_mbox>. 
foafmbox :: ScopedName
foafmbox = toF "mbox"

-- | @foaf:mbox_sha1sum@ from <http://xmlns.com/foaf/spec/#term_mbox_sha1sum>. 
foafmbox_sha1sum :: ScopedName
foafmbox_sha1sum = toF "mbox_sha1sum"

-- | @foaf:member@ from <http://xmlns.com/foaf/spec/#term_member>. 
foafmember :: ScopedName
foafmember = toF "member"

-- | @foaf:membershipClass@ from <http://xmlns.com/foaf/spec/#term_membershipClass>. 
foafmembershipClass :: ScopedName
foafmembershipClass = toF "membershipClass"

-- | @foaf:msnChatID@ from <http://xmlns.com/foaf/spec/#term_msnChatID>.  
foafmsnChatID :: ScopedName
foafmsnChatID = toF "msnChatID"

-- | @foaf:myersBriggs@ from <http://xmlns.com/foaf/spec/#term_myersBriggs>. 
foafmyersBriggs :: ScopedName
foafmyersBriggs = toF "myersBriggs"

-- | @foaf:name@ from <http://xmlns.com/foaf/spec/#term_name>. 
foafname :: ScopedName
foafname = toF "name"

-- | @foaf:nick@ from <http://xmlns.com/foaf/spec/#term_nick>. 
foafnick :: ScopedName
foafnick = toF "nick"

-- | @foaf:openid@ from <http://xmlns.com/foaf/spec/#term_openid>. 
foafopenid :: ScopedName
foafopenid = toF "openid"

-- | @foaf:page@ from <http://xmlns.com/foaf/spec/#term_page>. 
foafpage :: ScopedName
foafpage = toF "page"

-- | @foaf:pastProject@ from <http://xmlns.com/foaf/spec/#term_pastProject>. 
foafpastProject :: ScopedName
foafpastProject = toF "pastProject"

-- | @foaf:phone@ from <http://xmlns.com/foaf/spec/#term_phone>. 
foafphone :: ScopedName
foafphone = toF "phone"

-- | @foaf:plan@ from <http://xmlns.com/foaf/spec/#term_plan>. 
foafplan :: ScopedName
foafplan = toF "plan"

-- | @foaf:primaryTopic@ from <http://xmlns.com/foaf/spec/#term_primaryTopic>.  
foafprimaryTopic :: ScopedName
foafprimaryTopic = toF "primaryTopic"

-- | @foaf:publications@ from <http://xmlns.com/foaf/spec/#term_publications>. 
foafpublications :: ScopedName
foafpublications = toF "publications"

-- | @foaf:schoolHomepage@ from <http://xmlns.com/foaf/spec/#term_schoolHomepage>. 
foafschoolHomepage :: ScopedName
foafschoolHomepage = toF "schoolHomepage"

-- | @foaf:sha1@ from <http://xmlns.com/foaf/spec/#term_sha1>. 
foafsha1 :: ScopedName
foafsha1 = toF "sha1"

-- | @foaf:skypeID@ from <http://xmlns.com/foaf/spec/#term_skypeID>. 
foafskypeID :: ScopedName
foafskypeID = toF "skypeID"

-- | @foaf:status@ from <http://xmlns.com/foaf/spec/#term_status>. 
foafstatus :: ScopedName
foafstatus = toF "status"

-- | @foaf:surname@ from <http://xmlns.com/foaf/spec/#term_surname>. 
foafsurname :: ScopedName
foafsurname = toF "surname"

-- | @foaf:theme@ from <http://xmlns.com/foaf/spec/#term_theme>. 
foaftheme :: ScopedName
foaftheme = toF "theme"

-- | @foaf:thumbnail@ from <http://xmlns.com/foaf/spec/#term_thumbnail>. 
foafthumbnail :: ScopedName
foafthumbnail = toF "thumbnail"

-- | @foaf:tipjar@ from <http://xmlns.com/foaf/spec/#term_tipjar>.  
foaftipjar :: ScopedName
foaftipjar = toF "tipjar"

-- | @foaf:title@ from <http://xmlns.com/foaf/spec/#term_title>. 
foaftitle :: ScopedName
foaftitle = toF "title"

-- | @foaf:topic@ from <http://xmlns.com/foaf/spec/#term_topic>. 
foaftopic :: ScopedName
foaftopic = toF "topic"

-- | @foaf:topic_interest@ from <http://xmlns.com/foaf/spec/#term_topic_interest>. 
foaftopic_interest :: ScopedName
foaftopic_interest = toF "topic_interest"

-- | @foaf:weblog@ from <http://xmlns.com/foaf/spec/#term_weblog>. 
foafweblog :: ScopedName
foafweblog = toF "weblog"

-- | @foaf:workInfoHomepage@ from <http://xmlns.com/foaf/spec/#term_workInfoHomepage>. 
foafworkInfoHomepage :: ScopedName
foafworkInfoHomepage = toF "workInfoHomepage"

-- | @foaf:workplaceHomepage@ from <http://xmlns.com/foaf/spec/#term_workplaceHomepage>. 
foafworkplaceHomepage :: ScopedName
foafworkplaceHomepage = toF "workplaceHomepage"

-- | @foaf:yahooChatID@ from <http://xmlns.com/foaf/spec/#term_yahooChatID>. 
foafyahooChatID :: ScopedName
foafyahooChatID = toF "yahooChatID"

--------------------------------------------------------------------------------
--
--  Copyright (c) 2011 Douglas Burke
--  All rights reserved.
--
--  This file is part of Swish.
--
--  Swish is free software; you can redistribute it and/or modify
--  it under the terms of the GNU General Public License as published by
--  the Free Software Foundation; either version 2 of the License, or
--  (at your option) any later version.
--
--  Swish is distributed in the hope that it will be useful,
--  but WITHOUT ANY WARRANTY; without even the implied warranty of
--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--  GNU General Public License for more details.
--
--  You should have received a copy of the GNU General Public License
--  along with Swish; if not, write to:
--    The Free Software Foundation, Inc.,
--    59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
--
--------------------------------------------------------------------------------