Formal Public Identifier

From Infogalactic: the planetary knowledge core
Jump to: navigation, search

A Formal Public Identifier (FPI) is a short piece of specially formatted text that may be used to uniquely identify a product, specification or document. One of their most common uses is as part of document type definitions, but they are also used in the vCard and iCalendar formats to identify the software product that has generated data.

More recently, URIs and UUIDs are usually used to uniquely identify objects. FPIs have become a legacy system.

Syntax

An example identifier "-//W3C//DTD HTML 4.01//EN" can be broken down into two parts: the owner identifier which indicates the issuer of the FPI, and the text identifier which indicates the particular document or object the FPI identifies.[1] In the example, the owner identifier is "-//W3C" and the text identifier is "DTD HTML 4.01//EN". The two parts are separated by a double slash.

Owner identifiers that are prefixed with "-//" indicate unregistered owners. (The W3C is notable for not having registered its FPI name.) Registered identifiers are prefixed with "+//" and a small number of identifiers assigned by ISO do not require a prefix at all.

Registered domain names may be used as owner identifiers.[2] For example, the owner of example.net could issue FPIs using the owner identifier "+//IDN example.net".

Text identifiers can be broken down into the class, description and language. In this case the class is "DTD", indicating that the FPI represents a document type definition; the description is "HTML 4.01"; and the language is "EN" which suggests that the document type definition is written in English (though documents conforming to the DTD do not need to be in English). The class is separated from the description using a space character; the description is separated from the language using a double slash. The text identifier may optionally contain a version indicator after the language, also separated by a double slash.

Use in XML and SGML

The FPI is undoubtedly the least well-understood part of the document type declaration, an integral component of valid HTML, XML and SGML documents.[3] The Formal Public Identifier's effect upon its host document is unusual in that it can depend not only upon its own syntactical correctness and the behaviour of the program parsing it, but also upon the ISO-registration status of the organisation responsible for schema referenced by the FPI.[4]

Example

A document type declaration (for HTML 4.01 strict[5]) containing an FPI:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

The FPI in the document type declaration above reads -//W3C//DTD HTML 4.01//EN[4]

Relationship to URIs

Increasingly, specifications use URIs rather than FPIs to handle the task of unique identification. For example, XML namespace names are URIs.

A URN namespace has been defined to allow any FPI to be rewritten as a URI,[2] replacing double slashes with colons. The earlier example may be written as the following URI:

urn:publicid:-:W3C:DTD+HTML+4.01:EN

References

  1. http://xml.coverpages.org/tauber-fpi.html
  2. 2.0 2.1 http://www.ietf.org/rfc/rfc3151.txt
  3. Definition: FPI (Formal Public Identifier) [Web and XML Glossary]
  4. 4.0 4.1 !Doctype
  5. HTML 4.01 Specification