This document, which has been prepared for the technical subcommittee of PICS (Platform for Internet Content Selection), defines:
Future documents will specify the syntax and semantics of content labels and protocol(s) for distributing labels.
In reading this document it is important to bear in mind that the goal of the PICS effort is to enable a marketplace in which many different products will be developed, tested, and compared. In particular, the following considerations have had significant impact on this document:
A rating service is an individual, group, organization, or company that provides content labels for information on the Internet. The labels it provides are based on a rating system (see below). Each rating service must supply a machine-readable description of the its rating service, intended to simplify the job of specifying content selection criteria. This description uses a newly created MIME type, application/pics. User interface software that constructs filters based on PICS rating services can first load the machine-readable description of the service. This description allows the software to tailor its interface to reflect the details of particular rating service, rather than providing a "one design fits all rating services" interface.
A rating service is identified by a URL, included in the machine-readable description of the service, and used to mark the labels it produces. This URL identifies a human-readable description of the service. The human-readable description is not further specified in this document, but it is recommended that:
A rating system specifies the dimensions used for labeling, the scale of allowable values on each dimension, and a description of the criteria used in assigning values. (A single rating system may be used by more than one rating service by arrangement between the owner of the system and the owners of the services.) A rating system is identified by a URL. This URL can be accessed to obtain a human-readable description of the rating system. The human-readable description is not further specified in this document, but it is recommended that:
A content label (or rating) contains information about a document. The information can be supplied with the document or separately. A document may have many ratings, supplied by many different entities. The ratings may be carried in the document, in the HTTP header stream, via a separate on-line rating server, or on a portable medium (CD-ROM or floppy disk). Note specifically that there is no requirement that a rating be obtained via HTTP.
A content label (or rating) has three parts:
The detailed syntax of content labels and protocols for distributing them will appear in a future document.
A rating service is defined by a document of type application/pics. The detailed syntax and semantics are presented in the next two sections. Here is an example of such a document, intended only to illustrate the full set of features of a machine description:
((PICS-version 1.0) (rating-system "http://www.gcf.org/ratings") (rating-service "http://www.gcf.org/v1.0/") (icon "icons/gcf.gif") (name "The Good Clean Fun Rating System") (description "Everything you ever wanted to know about soap, cleaners, and related products. For demonstration purposes only.") (category (transmit-as "suds") (name "Soapsuds Index") (min 0.0) (max 1.0)) (category (transmit-as "density") (name "suds density") (label (name "none") (value 0) (icon "icons/none.gif")) (label (name "lots") (value 1) (icon "icons/lots.gif"))) (category (transmit-as "subject") (name "document subject") (multivalue true) (label (name "soap") (value 0)) (label (name "water") (value 1)) (label (name "soapdish") (value 2)) (label-only)) (category (transmit-as "color") (name "picture color") (integer) (category (transmit-as "hue") (label (name "blue") (value 0)) (label (name "red") (value 1)) (label (name "green") (value 2))) (category (transmit-as "intensity") (min 0) (max 255))))
Notes:
ratingservicedescription :: '(' version ratingsystem ratingservice [icondef] [name] [description] ['(' 'default' [min] [max] [multi] [integer] [labelled] ')'] categorylist ')' version :: '(' 'PICS-version' '1.0' ')' ratingsystem :: '(' 'ratingsystem' quotedURL ')' ratingservice :: '(' 'ratingservice' quotedURL ')' quotedURL :: ' " ' URL ' " ' URL is as defined in RFC-1738 for URLs. In addition, PICS defines the following new form for referencing Internet Relay Chat (IRC) rooms: URL :: ... | 'irc://' host '/' alphanum (where host is the usual Internet hostname) icondef :: '(' 'icon' quotedURL ')' name :: '(' 'name' quotedstring ')' description :: '(' 'description' quotedstring ')' quotedstring :: ' " ' UTF-7 ' " ' UTF-7 :: Characters encoded using UTF-7, with direct coding of US-ASCII set O except for the double-quote (decimal 34) which must be encoded to allow for its use as the string delimiter character. See note above. categorylist :: [1*n] '(' 'category' '(' 'transmit-as' quotedshortname ')' [icondef] [name] [description] [min] [max] [multi] [integer] [labelled] [enumlist] [categorylist] '}' quotedshortname :: ' " ' [1*n]extendedalphanum ' " ' extendedalphanum :: 'A' | ... | 'Z' | 'a' | ... | 'z' | '+' | '-' min :: '(' 'min' minnum ')' max :: '(' 'max' maxnum ')' minnum :: number | '-INF' maxnum :: number | '+INF' number :: [sign]unsignedint['.' [unsignedint]] sign :: '+' | '-' unsignedint :: [1*n][0-9] multi :: '(' 'multivalue' [boolean] ')' boolean :: 'true' | 'false' integer :: '(' 'integer' [boolean] ')' labelled :: '(' 'label-only' [boolean ] ')' enumlist :: [1*n]enum enum :: '(' 'label' name [description] '(' 'value' number ')' [icondef] ')'
For reference, the following attributes are currently defined by the above BNF:
The quotedURL in the ratingsystem refers to the human-readable description of the rating system used by this rating service. All URLs in the description, except for the icon in the ratingservicedescription, are dereferenced relative to this URL. The rating service's icon is handled specially so that the service can maintain its own (possibly copyrighted) identity even if it chooses to share a rating system with other rating services.
The machine-readable description also describes the categories used in the rating system. There may be one or more categories for a given rating system. A single document may have a rating on any or all of these categories. Categories can be nested within one another.
A category has a "transmission name" which is used in the actual label for a document. Transmission names should be as short as reasonable. They must be unique within a given rating system (i.e. two categories in the same rating system must not have the same transmission name.) Unlike the name and description strings, transmission names are language-independent. That is, if a rating system is offered in several languages, the transmission names must be the same in all of them. Categories may be nested within one another (as in the case of color in the example rating system). In this case, the transmission name is created in the usual way by starting with the outermost category transmission name, adding a "/" and proceding inward in the nesting. Thus, the example rating system has three categories, and their transmission names are color, color/hue, and color/intensity. In addition to the transmission name, which is required, a category may optionally have an icon and a human-readable description.
Values in PICS labels may be integers or fractions with no greater range or precision than that provided by IEEE single-precision floating point numbers. The machine description for each category can specify restrictions on the range of permissible values for certain named attributes. Values may be restricted to have minimum (min attribute, defaults to -INF) or maximum (max attribute, defaults to +INF) values. Values can be restricted to integers by giving the attribute integer the value true (the default value is false if the attribute is omitted, but true if it is present with no value specified). Values may be given names by using the label attribute, and may be restricted to having only these named values by setting the attribute label-only to the value true (the default value is false if the attribute is omitted, but true if it is present with no value specified). When a value is given a name, it may optionally have attached an icon and a human-readable description. Finally, a given category may allow more than a single rating for a given document (consider the dimension "sizes available"); this is indicated by setting the attribute multivalue to true (default is false if the attribute is omitted, but true if it is present with no value specified).
For rating systems that contain large numbers of categories or deeply nested categories, it is convenient to allow for inheritance of some attribute values. In particular, the attributes of a category min, max, multivalue, integer, and label-only are inherited by a category from its parent. These attributes can be given default values for the entire rating service by using the default attributes. This corresponds to value inheritance in object-oriented systems or lexical scoping in programming languages.
Note: While it would be nice to restrict the numeric values of ratings to integers, the following examples motivate our decision to permit fractional values.
Returning to the sample rating service, we see:
(To be completed, corrected, and formatted later)
Roy Fielding's RFC on relative URLs
IEEE Floating Point Format
RFC-1738 (URLs)
RFC-822
RFC-1642 (UTF-7 encoding)
ASCII
One of the simplest possible rating systems uses a single category, "Minimum recommended age." We present the machine description for a fictional service that uses this rating system.
((PICS-version 1.0) (rating-system "http://www.gcf.org/our-system/") (rating-service "http://www.gcf.org/our-service/v1.0/") (name "The Good Clean Fun Rating Service") (description "We estimate the maturity required to view materials on the Internet.") (category (name "Minimum Age") (transmit-as "age") (integer true)))
As a specific example of a deployed rating service, encoded using the PICS machine-readable description format, we present the service supplied by the Recreational Software Advisory Council (RSAC). They use their own (copyrighted) rating system, which we include with their permission. The rating system contains three categories: Violence, Nudity/Sex, and Language. Each category is rated on a scale from 0 to 4, with a specific description for each value. Intermediate values are not permitted. The URLs presented here are fictitious, but represent reasonable choices should RSAC choose to deploy their system on-line.
((PICS-version 1.0) (rating-system "http://www.rsac.org/Ratings/Description/") (rating-service "http://www.rsac.org/v1.0") (icon "icons/rsac.gif") (name "The RSAC Ratings Service") (description "The Recreational Software Advisory Council rating service. Based on the work of Dr. Donald F. Roberts of Stanford University, who has studied the effects of media on children for nearly 20 years.") (default (label-only true))(category (transmit-as "v") (name "Violence") (icon "icons/violence.gif") (label (name "Conflict") (description "Harmless conflict; some damage to objects") (value 0) (icon "icons/zero.gif")) (label (name "Fighting") (description "Creatures injured or killed; damage to objects; fighting") (value 1) (icon "icons/one.gif")) (label (name "Killing") (description "Humans injured or killed with small amount of blood") (value 2) (icon "icons/two.gif")) (label (name "Blood and Gore") (description "Humans injured or killed; blood and gore") (value 3) (icon "icons/three.gif")) (label (name "Wanton Violence") (description "Wanton and gratuitous violence; torture; rape") (value 4) (icon "icons/four.gif")))
(category (transmit-as "s") (name "Nudity/Sex") (icon "icons/sex.gif") (label (name "None") (description "No nudity or revealing attire / Romance; no sex") (value 0) (icon "icons/zero.gif")) (label (name "Revealing Attire") (description "Revealing attire / Passionate kissing") (value 1) (icon "icons/one.gif")) (label (name "Partial Nudity") (description "Partial nudity / Clothed sexual touching") (value 2) (icon "icons/two.gif")) (label (name "Frontal Nudity") (description "Non-sexual frontal nudity / Non-explicit sexual activity") (value 3) (icon "icons/three.gif")) (label (name "Explicit") (description "Provocative frontal nudity / Explicit sexual activity; sex crimes") (value 4) (icon "icons/four.gif")))
(category (transmit-as "l") (description "Language") (icon "icons/language.gif") (label (name "Slang") (description "Inoffensive slang; no profanity") (value 0) (icon "icons/zero.gif")) (label (name "Mild Expletives") (description "Mild expletives") (value 1) (icon "icons/one.gif")) (label (name "Expletives") (description "Expletives; non-sexual anatomical references") (value 2) (icon "icons/two.gif")) (label (name "Obscene Gestures") (description "Strong, vulgar language; obscene gestures") (value 3) (icon "icons/three.gif")) (label (name "Explicit") (description "Crude or explicit sexual references") (value 4) (icon "icons/four.gif"))))
SafeSurf, a parents' organization, has established a rating system that is in use at a large and growing number of sites on the Internet. They have provided a machine-readable version of their system to PICS as a demonstration of a more complex rating system that includes sub-categories as well as a document classification system. The following specification includes a full description of the rating part of the SafeSurf system, with only a small stub to represent the classifications.
((PICS-version 1.0) (rating-system "http://www.safesurf.com/ratings/description/") (rating-service "http://www.safesurf.com/v1.0/") (icon "icons/ss~~.gif") (name "SafeSurf Parents' Organization") (description "The SafeSurf SS~~ Rating Standard. Designed by and for parents to empower each family to make informed decisions concerning accessibility of online content. Copyright 1995. All Rights Reserved.") (category (transmit-as "Adult") (name "Adult Themes with Caution Levels") (category (name "Age Range") (transmit-as "0") (label (value 1) (name "All Ages")) (label (value 2) (name "Older Children")) (label (value 3) (name "Teens")) (label (value 4) (name "Older Teens")) (label (value 5) (name "Adult Supervision Recommended")) (label (value 6) (name "Adults")) (label (value 7) (name "Limited to Adults")) (label (value 8) (name "Adults Only")) (label (value 9) (name "Explicitly for Adults"))) (category (name "Profanity") (transmit-as "1") (label (value 1) (name "Subtle Innuendo") (description "Subtly Implied through the use of Slang")) (label (value 2) (name "Explicit Innuendo") (description "Explicitly implied through the use of Slang")) (label (value 3) (name "Technical Reference") (description "Dictionary, encyclopedic, news, technical references")) (label (value 4) (name "Non-Graphic-Artistic") (description "Limited non-sexual expletives used in a artistic fashion")) (label (value 5) (name "Graphic-Artistic") (description "Non-sexual expletives used in a artistic fashion")) (label (value 6) (name "Graphic") (description "Limited use of expletives and obscene gestures")) (label (value 7) (name "Detailed Graphic") (description "Casual use of expletives and obscene gestures")) (label (value 8) (name "Explicit Vulgarity") (description "Heavy use of vulgar language and obscene gestures")) (label (value 9) (name "Explicit and Crude") (description "Saturated with crude sexual references and gestures"))) (category (name "Heterosexual Themes") (transmit-as "2") (label (value 1) (name "Subtle Innuendo")) (label (value 2) (name "Explicit Innuendo")) (label (value 3) (name "Technical Reference")) (label (value 4) (name "Non-Graphic-Artistic")) (label (value 5) (name "Graphic-Artistic")) (label (value 6) (name "Graphic")) (label (value 7) (name "Detailed Graphic")) (label (value 8) (name "Explicit Vulgarity")) (label (value 9) (name "Explicit and Crude"))) (category (name "Homosexual Themes") (transmit-as "3") (label (name "Subtle Innuendo") (value 1)) (label (value 2) (name "Explicit Innuendo")) (label (value 3) (name "Technical Reference") (description "Dictionary, encyclopedic, news, medical references")) (label (value 4) (name "Non-Graphic-Artistic")) (label (value 5) (name "Graphic-Artistic")) (label (value 6) (name "Graphic")) (label (value 7) (name "Detailed Graphic")) (label (value 8) (name "Inviting Adult Participation")) (label (value 9) (name "Explicitly Inviting Adult Participation"))) (category (name "Nudity") (transmit-as "4") (label (value 1) (name "Subtle Innuendo")) (label (value 2) (name "Explicit Innuendo")) (label (value 3) (name "Technical Reference")) (label (value 4) (name "Non-Graphic-Artistic")) (label (value 5) (name "Graphic-Artistic")) (label (value 6) (name "Graphic")) (label (value 7) (name "Detailed Graphic")) (label (value 8) (name "Explicit Vulgarity")) (label (value 9) (name "Explicit and Crude"))) (category (name "Violence") (transmit-as "5") (label (value 1) (name "Subtle Innuendo")) (label (value 2) (name "Explicit Innuendo")) (label (value 3) (name "Technical Reference")) (label (value 4) (name "Non-Graphic-Artistic")) (label (value 5) (name "Graphic-Artistic")) (label (value 6) (name "Graphic")) (label (value 7) (name "Detailed Graphic")) (label (value 8) (name "Inviting Participation in Graphic Interactive Format")) (label (value 9) (name "Encouraging Personal Participation, Weapon Making"))) (category (name "Sex Violence and Profanity") (transmit-as "6") (label (value 1) (name "Subtle Innuendo")) (label (value 2) (name "Explicit Innuendo")) (label (value 3) (name "Technical Reference")) (label (value 4) (name "Non-Graphic-Artistic")) (label (value 5) (name "Graphic-Artistic")) (label (value 6) (name "Graphic")) (label (value 7) (name "Detailed Graphic")) (label (value 8) (name "Explicit Vulgarity")) (label (value 9) (name "Explicit and Crude"))) (category (name "Bigotry") (transmit-as "7") (label (value 1) (name "Subtle Innuendo")) (label (value 2) (name "Explicit Innuendo")) (label (value 3) (name "Technical Reference")) (label (value 4) (name "Non-Graphic-Literary")) (label (value 5) (name "Graphic-Literary")) (label (value 6) (name "Graphic Discussions")) (label (value 7) (name "Endorsing Hatred")) (label (value 8) (name "Endorsing Violent or Hateful Action")) (label (value 9) (name "Advocating Violent or Hateful Action"))) (category (name "Glorifying Drug Use") (transmit-as "8") (label (value 1) (name "Subtle Innuendo")) (label (value 2) (name "Explicit Innuendo")) (label (value 3) (name "Technical Reference")) (label (value 4) (name "Non-Graphic-Artistic")) (label (value 5) (name "Graphic-Artistic")) (label (value 6) (name "Graphic")) (label (value 7) (name "Detailed Graphic")) (label (value 8) (name "Simulated Interactive Participation")) (label (value 9) (name "Soliciting Personal Participation"))) (category (name "Other Adult Themes") (transmit-as "9") (label (value 1) (name "Subtle Innuendo")) (label (value 2) (name "Explicit Innuendo")) (label (value 3) (name "Technical Reference")) (label (value 4) (name "Non-Graphic-Artistic")) (label (value 5) (name "Graphic-Artistic")) (label (value 6) (name "Graphic")) (label (value 7) (name "Detailed Graphic")) (label (value 8) (name "Explicit Vulgarity")) (label (value 9) (name "Explicit and Crude"))) (category (name "Gambling") (transmit-as "A") (label (value 1) (name "Subtle Innuendo")) (label (value 2) (name "Explicit Innuendo")) (label (value 3) (name "Technical Discussion")) (label (value 4) (name "Non-Graphic-Artistic, Advertising")) (label (value 5) (name "Graphic-Artistic, Advertising")) (label (value 6) (name "Simulated Gambling")) (label (value 7) (name "Real Life Gambling without Stakes")) (label (value 8) (name "Encouraging Interactive Real Life Participation with Stakes")) (label (value 9) (name "Providing Means with Stakes")))) (category (name "Classification with Percentage") (transmit-as "Class") (min 1) (max 100) (integer true) (category (transmit-as "00") (name "General Information"))))