# OhReallyAddressbook.schema
#
# This LDAP schema holds all the elements I'd like to see in a
# corporate addressbook.
# Some elements are renamed copies of elements in the Mozilla
# addressbook schema; I don't want to depend on that schema, because
# it is still in alpha state.

# Copyright (c) 2006 Rob la Lau <rob@OhReally.nl>.
#
# This document is free software; you can redistribute it and/or
# modify it under the terms of version 2 of the GNU General Public
# License as published by the Free Software Foundation.
#
# This document 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.
#
# The full text of the GNU General Public License can be found at
# http://www.opensource.org/licenses/gpl-license.php.

######################################################################

# Depends upon:
# - core.schema
# - cosine.schema

# Documentation used:
# - http://www.oreillynet.com/pub/a/sysadmin/2006/07/27/demystifying-ldap.html
# - http://www.openldap.org/doc/admin22/schema.html#Extending%20Schema
# - http://www.rfc-editor.org/rfc/rfc2252.txt
# - http://www.rfc-editor.org/rfc/rfc2798.txt
# - http://www.alvestrand.no/objectid/1.3.6.1.4.1.1466.115.121.1.html
# - http://www.mozilla.org/projects/thunderbird/specs/ldap.html
# - http://docs.sun.com/source/816-6700-10/schema.html
# - http://docs.sun.com/source/816-6699-10/schemaov.html
# - http://docs.sun.com/source/816-6698-10/schema.html#Extending%20the%20Directory%20Schema

# Changelog:
#
# 20061105:
# - initial version

######################################################################
#
# IANA has assigned the following Private Enterprise
# Number (PEN) to OhReally:
#
#                      27224
#
######################################################################

# object identifiers (see also http://nerdstock.org/oid)
objectIdentifier	OhReallyOID				1.3.6.1.4.1.27224
objectIdentifier	OhReallyLDAP			OhReallyOID:2
objectIdentifier	OhReallyAbook			OhReallyLDAP:1
objectIdentifier	OhReallyABAttrTypeSup	OhReallyAbook:1
objectIdentifier	OhReallyABObjClassSup	OhReallyAbook:2
objectIdentifier	OhReallyABAttrType		OhReallyAbook:3
objectIdentifier	OhReallyABObjClass		OhReallyAbook:4

# The fields I want in an addressbook:
# - last name						# surname (sn)
# - first name(s)					# givenName (gn)
# - initials						# initials
# - nickname						> OhReallyABNickname
# - organization					# organizationName (o)
# - department						# organizationalUnitName (ou)
# - function title					# title
# - manager							# manager
# - work direct phone				# telephoneNumber
# - work phone						> OhReallyABWorkTelephoneNumber
# - work mobile						# mobileTelephoneNumber (mobile)
# - work fax						# facsimileTelephoneNumber (fax)
# - work email						# rfc822Mailbox (mail)
# - work prefer HTML mail			> OhReallyABWorkUseHtmlMail
# - work PGP public key				> OhReallyABWorkPGPPubkey
# - work preferred written language	> OhReallyABWorkPreferredWrittenLanguage
# - work preferred spoken language	> OhReallyABWorkPreferredSpokenLanguage
# - work preferred character set	> OhReallyABWorkPreferredCharset
# - work url						# labeledURI
# - mail address					# streetAddress (street)
# - mail postal code				# postalCode
# - mail locality					# localityName (l)
# - mail state						# stateOrProvinceName (st)
# - mail country					# countryName (c)
# - visiting address				> OhReallyABVisitStreet
# - visiting postal code			> OhReallyABVisitPostalCode
# - visiting locality				> OhReallyABVisitLocality
# - visiting state					> OhReallyABVisitState
# - visiting country				> OhReallyABVisitCountry
# - home address					> OhReallyABHomeStreet
# - home postal code				> OhReallyABHomePostalCode
# - home locality					> OhReallyABHomeLocality
# - home state						> OhReallyABHomeState
# - home country					> OhReallyABHomeCountry
# - home phone						> OhReallyABHomePhone
# - home mobile						> OhReallyABHomeMobile
# - home fax						> OhReallyABHomeFax
# - home email						> OhReallyABHomeEmail
# - home prefer HTML mail			> OhReallyABHomeUseHtmlMail
# - home PGP public key				> OhReallyABHomePGPPubkey
# - home preferred written language	> OhReallyABHomePreferredWrittenLanguage
# - home preferred spoken language	> OhReallyABHomePreferredSpokenLanguage
# - home preferred character set	> OhReallyABHomePreferredCharset
# - home url						> OhReallyABHomeUrl
# - date of birth					> OhReallyABBirthDate
# - sex								> OhReallyABSex
# - notes							> OhReallyABNotes
# - photo							> OhReallyABFace
# - see also						# seeAlso
# - IM IDs ?						> ?

#####
# Superior types

# boolean
attributetype ( OhReallyABAttrTypeSup:1
	NAME 'OhReallyABUseHtmlMail'
	DESC 'Prefers to receive HTML formatted email (superior type)'
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
	SINGLE-VALUE )

attributetype ( OhReallyABAttrTypeSup:2
	NAME 'OhReallyABPGPPubkey'
	DESC 'ASCII representation of PGP public key (superior type)'
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

# copied from inetorgperson.schema
attributetype ( OhReallyABAttrTypeSup:3
	NAME 'OhReallyABPreferredLanguage'
	DESC 'RFC2798: preferred written or spoken language (superior type)'
	EQUALITY caseIgnoreMatch
	SUBSTR caseIgnoreSubstringsMatch
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
	SINGLE-VALUE )

# max. 40 characters (http://www.iana.org/assignments/character-sets)
attributetype ( OhReallyABAttrTypeSup:4
	NAME 'OhReallyABPreferredCharset'
	DESC 'Preferred character set (superior type)'
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{40} )

#####

######################################################################

# core.schema
#attributetype ( 2.5.4.4 NAME ( 'sn' 'surname' )
#	DESC 'RFC2256: last (family) name(s) for which the entity is known by'
#	SUP name )

# core.schema
#attributetype ( 2.5.4.42 NAME ( 'givenName' 'gn' )
#	DESC 'RFC2256: first name(s) for which the entity is known by'
#	SUP name )

# core.schema
#attributetype ( 2.5.4.43 NAME 'initials'
#	DESC 'RFC2256: initials of some or all of names, but not the surname(s).'
#	SUP name )

attributetype ( OhReallyABAttrType:1
	NAME 'OhReallyABNickname'
	DESC 'A name this object is also known by'
	SUP name )

# core.schema
#attributetype ( 2.5.4.10 NAME ( 'o' 'organizationName' )
#	DESC 'RFC2256: organization this object belongs to'
#	SUP name )

# core.schema
#attributetype ( 2.5.4.11 NAME ( 'ou' 'organizationalUnitName' )
#	DESC 'RFC2256: organizational unit this object belongs to'
#	SUP name )

# core.schema
#attributetype ( 2.5.4.12 NAME 'title'
#	DESC 'RFC2256: title associated with the entity'
#	SUP name )

# cosine.schema
#attributetype ( 0.9.2342.19200300.100.1.10 NAME 'manager'
#	DESC 'RFC1274: DN of manager'
#	EQUALITY distinguishedNameMatch
#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 )

# core.schema
#attributetype ( 2.5.4.20 NAME 'telephoneNumber'
#	DESC 'RFC2256: Telephone Number'
#	EQUALITY telephoneNumberMatch
#	SUBSTR telephoneNumberSubstringsMatch
#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.50{32} )

attributetype ( OhReallyABAttrType:2
	NAME 'OhReallyABWorkTelephoneNumber'
	DESC 'General work telephone number'
	SUP telephoneNumber )

# cosine.schema
#attributetype ( 0.9.2342.19200300.100.1.41
#	NAME ( 'mobile' 'mobileTelephoneNumber' )
#	DESC 'RFC1274: mobile telephone number'
#	EQUALITY telephoneNumberMatch
#	SUBSTR telephoneNumberSubstringsMatch
#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 )

# core.schema
#attributetype ( 2.5.4.23 NAME ( 'facsimileTelephoneNumber' 'fax' )
#	DESC 'RFC2256: Facsimile (Fax) Telephone Number'
#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.22 )

# core.schema
#attributetype ( 0.9.2342.19200300.100.1.3
#	NAME ( 'mail' 'rfc822Mailbox' )
#	DESC 'RFC1274: RFC822 Mailbox'
#	EQUALITY caseIgnoreIA5Match
#	SUBSTR caseIgnoreIA5SubstringsMatch
#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )

attributetype ( OhReallyABAttrType:3
	NAME 'OhReallyABWorkUseHtmlMail'
	DESC 'Prefers to receive HTML formatted mail at work'
	SUP OhReallyABUseHtmlMail )

attributetype ( OhReallyABAttrType:4
	NAME 'OhReallyABWorkPGPPubkey'
	DESC 'ASCII representation of PGP public key at work'
	SUP OhReallyABPGPPubkey )

attributetype ( OhReallyABAttrType:5
	NAME 'OhReallyABWorkPreferredWrittenlanguage'
	DESC 'Preferred written language at work'
	SUP OhReallyABPreferredLanguage )

attributetype ( OhReallyABAttrType:6
	NAME 'OhReallyABWorkPreferredSpokenlanguage'
	DESC 'Preferred spoken language at work'
	SUP OhReallyABPreferredLanguage )

attributetype ( OhReallyABAttrType:7
	NAME 'OhReallyABWorkPreferredCharset'
	DESC 'Preferred character set at work'
	SUP OhReallyABPreferredCharset )

# system schema
#attributetype ( 1.3.6.1.4.1.250.1.57 NAME 'labeledURI'
#	DESC 'RFC2079: Uniform Resource Identifier with optional label'
#	EQUALITY caseExactMatch
#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

# core.schema
#attributetype ( 2.5.4.9 NAME ( 'street' 'streetAddress' )
#	DESC 'RFC2256: street address of this object'
#	EQUALITY caseIgnoreMatch
#	SUBSTR caseIgnoreSubstringsMatch
#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} )

# core.schema
#attributetype ( 2.5.4.17 NAME 'postalCode'
#	DESC 'RFC2256: postal code'
#	EQUALITY caseIgnoreMatch
#	SUBSTR caseIgnoreSubstringsMatch
#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{40} )

# core.schema
#attributetype ( 2.5.4.7 NAME ( 'l' 'localityName' )
#	DESC 'RFC2256: locality which this object resides in'
#	SUP name )

# core.schema
#attributetype ( 2.5.4.8 NAME ( 'st' 'stateOrProvinceName' )
#	DESC 'RFC2256: state or province which this object resides in'
#	SUP name )

# core.schema
#attributetype ( 2.5.4.6 NAME ( 'c' 'countryName' )
#	DESC 'RFC2256: ISO-3166 country 2-letter code'
#	SUP name SINGLE-VALUE )

attributetype ( OhReallyABAttrType:8
	NAME 'OhReallyABVisitStreet'
	DESC 'Street of visiting address'
	SUP street )

attributetype ( OhReallyABAttrType:9
	NAME 'OhReallyABVisitPostalCode'
	DESC 'Postal code of visiting address'
	SUP postalCode )

attributetype ( OhReallyABAttrType:10
	NAME 'OhReallyABVisitLocality'
	DESC 'Locality of visiting address'
	SUP l )

attributetype ( OhReallyABAttrType:11
	NAME 'OhReallyABVisitState'
	DESC 'State or province of visiting address'
	SUP st )

attributetype ( OhReallyABAttrType:12
	NAME 'OhReallyABVisitCountry'
	DESC 'ISO-3166 country code of visiting address'
	SUP c )

attributetype ( OhReallyABAttrType:13
	NAME 'OhReallyABHomeStreet'
	DESC 'Street of home address'
	SUP street )

attributetype ( OhReallyABAttrType:14
	NAME 'OhReallyABHomePostalCode'
	DESC 'Postal code of home address'
	SUP postalCode )

attributetype ( OhReallyABAttrType:15
	NAME 'OhReallyABHomeLocality'
	DESC 'Locality of home address'
	SUP l )

attributetype ( OhReallyABAttrType:16
	NAME 'OhReallyABHomeState'
	DESC 'State or province of home address'
	SUP st )

attributetype ( OhReallyABAttrType:17
	NAME 'OhReallyABHomeCountry'
	DESC 'Country of home address'
	SUP c )

attributetype ( OhReallyABAttrType:18
	NAME 'OhReallyABHomePhone'
	DESC 'Private phone number'
	SUP telephoneNumber )

attributetype ( OhReallyABAttrType:19
	NAME 'OhReallyABHomeMobile'
	DESC 'Private mobile phone number'
	SUP telephoneNumber )

attributetype ( OhReallyABAttrType:20
	NAME 'OhReallyABHomeFax'
	DESC 'Private fax number'
	SUP fax )

attributetype ( OhReallyABAttrType:21
	NAME 'OhReallyABHomeEmail'
	DESC 'Private email address'
	SUP mail )

attributetype ( OhReallyABAttrType:22
	NAME 'OhReallyABHomeUseHtmlMail'
	DESC 'Prefers to receive HTML formatted mail at home'
	SUP OhReallyABUseHtmlMail )

attributetype ( OhReallyABAttrType:23
	NAME 'OhReallyABHomePGPPubkey'
	DESC 'ASCII representation of PGP public key at home'
	SUP OhReallyABPGPPubkey )

attributetype ( OhReallyABAttrType:24
	NAME 'OhReallyABHomePreferredWrittenLanguage'
	DESC 'Preferred written language at home'
	SUP OhReallyABPreferredLanguage )

attributetype ( OhReallyABAttrType:25
	NAME 'OhReallyABHomePreferredSpokenLanguage'
	DESC 'Preferred spoken language at home'
	SUP OhReallyABPreferredLanguage )

attributetype ( OhReallyABAttrType:26
	NAME 'OhReallyABHomePreferredCharset'
	DESC 'Preferred character set at home'
	SUP OhReallyABPreferredCharset )

attributetype ( OhReallyABAttrType:27
	NAME 'OhReallyABHomeUrl'
	DESC 'Private website'
	SUP labeledURI )

attributetype ( OhReallyABAttrType:28
	NAME 'OhReallyABBirthDate'
	DESC 'Date of birth'
	SUP name )

# value should be 'm' or 'f', the interpretation should be up to the client
attributetype ( OhReallyABAttrType:29
	NAME 'OhReallyABSex'
	DESC 'Sex'
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1} )

attributetype ( OhReallyABAttrType:30
	NAME 'OhReallyABNotes'
	DESC 'Notes'
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

attributetype ( OhReallyABAttrType:31
	NAME 'OhReallyABFace'
	DESC 'An image displaying this object'
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
	SINGLE-VALUE )

# system schema
#attributetype ( 2.5.4.34 NAME 'seeAlso'
#	DESC 'RFC2256: DN of related object'
#	SUP distinguishedName )

######################################################################

objectclass ( OhReallyABObjClass:1
	NAME 'OhReallyAbookPerson'
	DESC 'Addressbook record'
	SUP top
	AUXILIARY
	MUST ( cn )
	MAY ( c $
		fax $
		gn $
		initials $
		l $
		labeledURI $
		mail $
		manager $
		mobile $
		OhReallyABBirthDate $
		OhReallyABFace $
		OhReallyABHomeCountry $
		OhReallyABHomeEmail $
		OhReallyABHomeFax $
		OhReallyABHomeLocality $
		OhReallyABHomeMobile $
		OhReallyABHomePGPPubkey $
		OhReallyABHomePhone $
		OhReallyABHomePostalCode $
		OhReallyABHomePreferredCharset $
		OhReallyABHomePreferredSpokenLanguage $
		OhReallyABHomePreferredWrittenLanguage $
		OhReallyABHomeState $
		OhReallyABHomeStreet $
		OhReallyABHomeUrl $
		OhReallyABHomeUseHtmlMail $
		OhReallyABNickname $
		OhReallyABNotes $
		OhReallyABSex $
		OhReallyABVisitCountry $
		OhReallyABVisitLocality $
		OhReallyABVisitPostalCode $
		OhReallyABVisitState $
		OhReallyABVisitStreet $
		OhReallyABWorkPGPPubkey $
		OhReallyABWorkPreferredCharset $
		OhReallyABWorkPreferredSpokenLanguage $
		OhReallyABWorkPreferredWrittenLanguage $
		OhReallyABWorkTelephoneNumber $
		OhReallyABWorkUseHtmlMail $
		o $
		ou $
		postalCode $
		seeAlso $
		sn $
		st $
		street $
		telephoneNumber $
		title ) )

######################################################################

# vim: ts=4
Responses are welcomed:
rob[at]nerdstock.org
Creative Commons License
http://creativecommons.org/licenses/by-nc-sa/3.0/nl/deed.en