# Package PIRL.PVL

The PIRL Parameter Value Language package provides for the input, output and manipulation of parameters and their data values.

See: Description

Interface Summary
Interface | Description
--- | ---
Selector | A Selector is used with a Parameter or Value wherever selective comparison of Parameters and/or Values is needed.

Class Summary
Class | Description
--- | ---
Lister | A Lister writes PVL syxtax.
Parameter | A Parameter is a general-purpose named entity containing an arbitrary value.
Parser | The Parser extends the String_Buffer_Reader to interpret the characters as a sequence of Parameter Value Language (PVL) syntax statements.
PVL_to_DB | PVL_to_DB maps a source of parameter values to database table field values.
Selection | A Selection implements a Selector for use with a Parameter or Value wherever selective comparison of Parameters and/or Values is needed.
Value | A Value is a general-purpose value entity containing arbitrary data.

Exception Summary
Exception | Description
--- | ---
Invalid_Map_Syntax | The Exeception that is thrown if a PVL_to_DB map parameter contains invalid syntax.
PVL_Exception | A PVL_Exception is thrown by classes in the PVL package.

## Package PIRL.PVL Description

The PIRL Parameter Value Language package provides for the input, output and manipulation of parameters and their data values. Perhaps one of the most common concepts in scientific research is the named parameter that refers to a value of some type:

> Name = Value

The Name is a single textual token that provides the referential handle to the value. The choice of parameter names for values is completely arbitrary, though it may be guided by various usage conventions. Thus there is no guarantee that a parameter of any given name will refer to a value of any particular type. While this provides for complete freedom in the use of parameter names, it also allows for considerable confusion.

The Value may be quite simple - for example, a single decimal integer - or very complex - for example the complete characterization of an instrument - yet the type of value must be specifically defined to avoid any ambiguity in its use. Thus the value definition mechanism must be broadly encompassing to allow for the needed freedom in the use of values, while providing an interpretation that allows for no misinterpretation.

A Parameter Value Language (PVL) provides a text syntax for associating a named parameter with a specifically defined type of value. While there are various forms of parameter value language to choose from, the needs of the Planetary Image Research Lab (PIRL) to handle files distributed by the Planetary Data System (PDS) led directly to the PVL specified for use in PDS products.

The image files (and others) distributed on PDS CDs contain an initial label section that provides descriptive information about the image, including parameters necessary for the correct processing of the binary data in the file. The syntax of the PVL used by PDS products has been specified by the Consultative Committee for Space Data Systems in the Blue Book "Parameter Value Language Specification (CCSDS0006,8)", June 2000 [CCSDS 641.0-B-2] and Green Book "Parameter Value Language - A Tutorial", May 1992 [CCSDS 641.0-G-1] documents. PVL has been accepted by the International Standards Organization (ISO), as a Draft Standard (ISO/CD 14961:1997). The Object Definition Language (ODL) used to describe the metadata in Earth Observing System (EOS) image files is also an implementation of PDS PVL, though it is embedded in the HDF-EOS extension to the NCSA HDF format.

The actual form of the PDS PVL, however, has evolved somewhat since it was first used in early products, such as imagery from the Voyager and Viking missions. This resulted in inconsistencies that made it difficult to write software which could handle all PDS products. The PIRL PVL package uses controlled tolerance during PVL statement parsing that is able to successfully read any PVL, including all PDS products. It also provides controlled strictness when generating PVL statements, making it suitable for creating new products that employ PVL. A full complement of Parameter and Value object creation, modification, and searching methods are provided.