212 lines
7.9 KiB
Plaintext
212 lines
7.9 KiB
Plaintext
QFACTS (Version 921124)
|
|
|
|
The central goal of Qfacts is to define a standard for
|
|
representing, analyzing and retrieving information, facts, and
|
|
knowledge as quickly, easily, efficiently, and tersely as
|
|
possible, using simple tools.
|
|
|
|
Any basic propositions that can be stored in a database,
|
|
spreadsheet, or knowledgebase can be stored as one-line
|
|
statements in plain text Qfacts files.
|
|
|
|
A Qfacts fact/record consists of an object or head followed by
|
|
any number of descriptive property/value pairs, all on one line:
|
|
|
|
obj <prop1> val1 <prop2> val2 <prop3> val3 ...
|
|
|
|
France <capital> Paris <GDP> $724.1b <year> 1986
|
|
|
|
Qfacts statements are written in SGML (Standard Generalized
|
|
Markup Language) style, but do not strictly follow SGML rules and
|
|
conventions. Qfacts properties are roughly equivalent to SGML
|
|
tags.
|
|
|
|
Qfacts is an effort to define a scheme for representing
|
|
well-structured information and knowledge that is maximally
|
|
simple and intelligible for non-programmers. The kinds of
|
|
knowledge structures that should be represented in Qfacts should
|
|
usually be no longer than 1000 characters, and will as a rule be
|
|
between 50 and 200 characters. More complicated and lengthy
|
|
knowledge structures will burst the bounds of Qfacts' line
|
|
limits. But a surprising number of factual propositions about the
|
|
world can be comfortably represented within the conventions of
|
|
Qfacts.
|
|
|
|
A Qfacts file consists of a list of facts (or records) in Qfacts
|
|
format. A Qfacts file is headed by the tag
|
|
|
|
<o>#qfacts
|
|
|
|
which signals the beginning of an object of record type "qfacts."
|
|
(This convention is part of another tagging scheme called
|
|
Knotes--for Knowledge Notes--which is not necessary to discuss
|
|
here.) The beginning of a set of Qfacts records is defined by the
|
|
tag
|
|
|
|
<records>
|
|
|
|
The end of a Qfacts file is defined in SGML style by the tag
|
|
|
|
</o>
|
|
|
|
or by the end of the file, whichever comes first.
|
|
|
|
Qfacts files are designed to be easily searched by boolean grep
|
|
programs like Maxfind or KWS, merged with other plain text Qfacts
|
|
files, and analyzed by knowledgebase software which understands
|
|
the Qfacts format. A typical way to use Qfacts files is to store
|
|
tens, or hundreds, or thousands of them under a single directory,
|
|
and to retrieve records with a favorite grep program accessed
|
|
through a well-tuned batch file.
|
|
|
|
Qfacts statements can be easily composed on the fly with a simple
|
|
text editor, and are fully self-documented and portable.
|
|
|
|
Multiple values for any property can be stored as a list enclosed
|
|
in parentheses and by separating each item in the value list by a
|
|
semicolon:
|
|
|
|
France <major city> (Paris; Marseille; Lyon; Toulouse; Nice)
|
|
|
|
Values themselves can be treated as objects or heads by storing
|
|
their property/value pairs in parentheses:
|
|
|
|
France <capital> Paris (<population> 2,188,918 <year> 1982)
|
|
|
|
Parentheses can be nested at any level of depth.
|
|
|
|
Generally, however, the best style is to store only one
|
|
property/value pair in each record.
|
|
|
|
Some sample Qfacts statements:
|
|
|
|
Electronic Data Systems <sales> $4,744.6m <y> 1988 <s> Universal Almanac 1990
|
|
Exxon <Fortune 500 rank> 3 <y> 1988 <s> Universal Almanac 1990
|
|
France <capital> Paris
|
|
Huntington, Samuel <c> pro-Clinton ad signer <y> 1992 <s> New York Times 8/17/1992
|
|
Los Angeles, Calif <population> 2,969,528 <y> 1980
|
|
Massachusetts <governor> Weld, William (<political party> Republican) <y> 1992
|
|
Mean Streets <c> movie <director> Scorcese, Martin <y> 1973
|
|
Mosley, Walter <book by> A Red Death (New York: Pocket Books) <y> 1992
|
|
Perot, Ross <U.S. presidential election: percent of popular vote> 19 <d> November 4, 1992
|
|
Turner, Ted <address> CNN, One CNN Center, Atlanta, GA 30348 <y> 1992 <s> Boston Globe 11/16/1992 p22
|
|
Will, George <c> syndicated columnist
|
|
Vanity Fair <publisher> The Conde Naste Publications Inc. <y> 1992
|
|
|
|
There are a number of reserved property tags and other keywords
|
|
in Qfacts:
|
|
|
|
<category> = a category to which an object belongs
|
|
<c> = abbreviation for <category>
|
|
<date> = date that property/value pair(s) was true for object
|
|
<d> = abbreviation for date
|
|
<keyword> = keyword describing an object and statement
|
|
<k> = abbreviation for <keyword>
|
|
<note> = miscellaneous note
|
|
<n> = abbreviation for <note>
|
|
<quote> = quote about an object
|
|
<quote+> = positive quote about an object
|
|
<quote-> = negative quote about an object
|
|
<q> = abbreviation for <quote>
|
|
<q+> = abbreviation for <quote+>
|
|
<q-> = abbreviation for <quote->
|
|
<source> = the source of a qfact
|
|
<s> = abbreviation for <source>
|
|
<time> = time that property/value pair(s) was true for object
|
|
<t> = abbreviation for <time>
|
|
<user> = user who composed qfact
|
|
<u> = abbreviation for <user>
|
|
<w> = write date: date qfact was composed
|
|
<year> = year that property/value pair(s) was true for object
|
|
<y> = abbreviation for <year>
|
|
!rule: = a rule directive
|
|
!abb: = an abbreviation definition
|
|
|
|
There are two other special types of Qfacts statement.
|
|
|
|
Rules and other commands for manipulating, analyzing, and
|
|
generating inferences from Qfacts statements are expressed as
|
|
special directives preceded by an exclamation point:
|
|
|
|
!rule: if x <area code for> y then y <area code> x
|
|
|
|
The variables "x" and "y" always point to an object and value
|
|
respectively.
|
|
|
|
For the statement
|
|
|
|
617 <area code for> Boston
|
|
|
|
Qfacts on command would automatically generate the statement:
|
|
|
|
Boston <area code> 617
|
|
|
|
Rule directives must appear on single lines, and can be stored in
|
|
the same file with other Qfacts statements.
|
|
|
|
Abbreviation directives are stored in a similar way:
|
|
|
|
!abb: lang = language
|
|
!abb: hfac = House Foreign Affairs Committee
|
|
|
|
A Qfacts statement with an object/head enclosed by a leading
|
|
pound sign and following colon is a pointer to a record type:
|
|
|
|
#movie: <title> Amadeus <director> Forman, Milos <y> 1984
|
|
#book: <author> Vidal, Gore <title> Live from Golgatha <city> New York <publisher> Random House <year> 1992
|
|
|
|
One could write the rule:
|
|
|
|
!rule: in #movie if <title> y then y <c> movie
|
|
|
|
In other words, Amadeus belongs to the category "movie."
|
|
|
|
The left and right angle brackets which delimit Qfacts tags can
|
|
be forced into their conventional meaning by preceding them with
|
|
a tilde:
|
|
|
|
~< ~>
|
|
|
|
A Qfacts record without any property tags is perfectly legal, and
|
|
is considered to be a miscellaneous unstructured note.
|
|
|
|
The best style for storing source information is minimal but
|
|
sufficient to track down the source:
|
|
|
|
<source> New York Times 11/24/1992 p3 //a newspaper source
|
|
<source> Steele Common Lisp 1990 p251 //a book source
|
|
|
|
With today's powerful and omnipresent databases, for most folks
|
|
expanding these brief source pointers to their full cites is a
|
|
trivial matter. The goal behind Qfacts is to provide a mechanism
|
|
for representing knowledge as easily, quickly and tersely (but
|
|
intelligibly) as possible.
|
|
|
|
A sample use of Qfacts files: unzip them to C:\QFDATA and search
|
|
them with QF.BAT:
|
|
|
|
@echo off
|
|
kws c:\qfdata\*.* %1 %2 %3 %4 > c:\tmp\tmp.qf
|
|
list c:\tmp\tmp.qf /w
|
|
|
|
This batch file assumes that QF.BAT, KWS and LIST are in your
|
|
path.
|
|
|
|
In the latest version of KWS the above batch statement will
|
|
assume a boolean "and" between arguments.
|
|
|
|
This scheme for doing simple knowledge representation in plain
|
|
ASCII files is entirely arbitrary. Suggestions are welcome for
|
|
improving these conventions. If enough people can agree on a
|
|
standard for basic knowledge representation, useful software
|
|
tools should appear in due time for processing plain
|
|
knowledgebase files.
|
|
|
|
Wayne McGuire
|
|
Compuserve: 71330,2074
|
|
Genie: w.mcguire
|
|
Internet: wmcguire@world.std.com
|
|
Internet: 71330.2074@compuserve.com
|
|
Internet: wayne.mcguire@channel1.com
|
|
Channel One (BBS): 617-354-8873
|