# Requirements Interchange Format

RIF/ReqIF (Requirements Interchange Format) is an XML file format that can be used to exchange requirements, along with its associated metadata, between software tools from different vendors. The requirements exchange format also defines a workflow for transmitting the status of requirements between partners. Although developed in the automotive industry, ReqIF is suitable for lossless exchange of requirements in any industry.

## History

In 2004, HIS (Herstellerinitiative Software) a consortium of German automotive manufacturers, defined a generic requirements interchange format called RIF.
The format was handed over in 2008 to ProSTEP iViP e.V. for further maintenance. A project group responsible for international standardization further developed the format and handed over a revised version to Object Management Group (OMG) as "Request for Comment" in 2010.
As the acronym RIF had an ambiguous meaning within the OMG, the new name ReqIF was introduced to separate it from the W3C's Rule Interchange Format.
In April 2011, the version 1.0.1 of ReqIF was adopted by OMG as a formal specification (OMG Document Number: formal/2011-04-02).
In October 2013, version 1.1 was published (OMG Document Number: formal/2013-10-01). Changes are restricted to the text of the standard, the XML schema and underlying model have not changed. Therefore, 1.1 and 1.0.1 .reqif files are equivalent.
In July 2016, version 1.2 was published (OMG Document Number: formal/2016-07-01). As with the previous versions, changes are restricted to the text of the standard, the XML schema and underlying model have not changed. Therefore, 1.2, 1.1 and 1.0.1 .reqif files are equivalent.

## Features

ReqIF is an exchange file format for exchanging requirements, attributes, additional files (e.g. images) across a chain of manufacturers, suppliers, sub-suppliers and the like. A GUID ensures unique identification of content across the process chain.

## Application

Requirements are typically elicited during the early phase of product development. This is the primary application of ReqIF, as development across organizations is happening more and more often. ReqIF allows for sharing of requirements between partners, even if different tools are used. In contrast to formats like Word, Excel or PDF, ReqIF allows for a loss-free exchange.
ReqIF was pioneered by automotive manufacturers, who started to demand the use of ReqIF in particular for the development of embedded controllers.
ReqIF is also used as the underlying data model for tool implementations. This is particularly true for the ReqIF Reference implementation (Eclipse RMF), which is being used by an implementer forum, that aims to ensure interoperability of various ReqIF implementations. ReqIF Server is another tool that natively uses ReqIF.

## Operation

RIF/ReqIF is a standardized meta-model, defined by an XML schema. Such files must conform to the schema and contain the description of the model (the datatypes), as well as the data. A successful data exchange between various tools only succeeds, if all parties agree on a common data model. The previously mentioned implementor forum is working on such a common model and also organizes tests with tools of the participating manufacturers, to ensure future interoperability.

## Structure of ReqIF files

An OMG ReqIF file consists of XML with the root element REQ-IF, containing information regarding the file itself as well as the contained datatypes and requirements.
The containers for requirements in ReqIF are called specification objects (SpecObject), which have user-defined attributes. Each attribute has a data type, which is one of Boolean, Integer, Real, String, Enumeration (with user-defined values) and XHTML, which is also for formatted text and embedded objects, including images. Some datatypes can be constrained further, e.g. the range of numerical values.
Relationships between objects are represented as SpecRelations, which can also have attributes.
At last, hierarchical trees create a structured view on SpecObjects, called Specifications. Multiple references on the same SpecObject are permitted.
The structure of ReqIF is described in detail in the specification. There is also a free one-page reference of the data model available