GENWiki

Premier IT Outsourcing and Support Services within the UK

User Tools

Site Tools


archive:computers:qf921124
                   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

/home/gen.uk/domains/wiki.gen.uk/public_html/data/pages/archive/computers/qf921124.txt · Last modified: 2002/06/22 22:31 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki