In programming, you need to define your classes. You need to partition your domain into objects that have properties and then methods that work with those properties. Expert systems are no different. At its most basic, an expert system is made up of facts (like class instantiations in Pascal) and rules (like the methods of a class). Just as in programming, before you can allocate a fact instantiation, you need to define its class (called a fact template). A fact template defines the relation name for a group of facts plus zero or more slots that encapsulate properties about the class.
So, for example, let's assume you want to write an expert system that will make mortgage assessments for prospective clients. It shall first assess whether any loan at all should be made, and then how much and at what rate the loan should be offered.
What are the types of objects we need to reason about?
Clearly, we need some type of customer object. We can limit the properties of the customer object to what relates to loans. A name or ID is needed, financial information, and perhaps some personal information as it relates to risk such as age and occupation (after all, your customer needs to live to pay off the loan). However, it is clear there is lots of information we don't need that may be available: phone numbers, birth place, etc.
What other objects do we need? A loan object seems to be natural to hold loan amount, rates, etc. Other types of objects that you may want are a financial institution object if you wanted to generalize the expert system to multiple lenders which may have different financial health and risk acceptibility parameters or a loan types object to describe the different types of loans available such as FHA, ARM, etc.
After you have catalogued the types of your objects, you need to start entering them into the expert system as fact templates. For example, the customer class above may become the following fact template:
(deftemplate customer "Describes a prospective customer"
(slot age (type INTEGER) (default 25) )
(slot ID (type ATOM STRING INTEGER) )
(slot salary (type INTEGER FLOAT) (default 30000) )
(multislot occupation )
(slot credit-history (type ATOM) (default Good) )
You would go through all the other classes of objects defining their fact templates and their properties. Each property or slot would have an identifier, possible type and possible default value.
After you have finished defining the data types of your domain, you need to define the rules that infer new information about the data.