ReqIF-SpecIF Mapping
Transforming SpecIF to ReqIF is bidirectional. Files can be exported and imported in a round-trip without losing any data (if the partner’s tool is also capable of round-trips).
Note that there are SpecIF-Attributes which don’t have a ReqIF equivalent yet, such as “revisions”, “replaces” and “alternativeIds”. A way to utilize those attributes is creating an additional ATTRIBUTE-DEFINITION in ReqIF.
Datatypes
Strings
SpecIF | ReqIF |
---|---|
id | IDENTIFIER |
changedAt | LAST-CHANGE |
title | LONG-NAME |
description | DESC |
type: xs:string | DATATYPE-DEFINITION-STRING |
maxLength | MAX-LENGTH |
Boolean
SpecIF | ReqIF |
---|---|
id | IDENTIFIER |
title | LONG-NAME |
description | DESC |
type: xs:boolean | DATATYPE-DEFINITION-BOOLEAN |
changedAt | LAST-CHANGE |
Byte
SpecIF | ReqIF |
---|---|
id | IDENTIFIER |
title | LONG-NAME |
description | DESC |
type: xs:integer | DATATYPE-DEFINITION-INTEGER |
minInclusive | MIN |
maxInclusive | MAX |
changedAt | LAST-CHANGE |
Integer
SpecIF | ReqIF |
---|---|
id | IDENTIFIER |
title | LONG-NAME |
description | DESC |
type: xs:integer | DATATYPE-DEFINITION-INTEGER |
minInclusive | MIN |
maxInclusive | MAX |
changedAt | LAST-CHANGE |
Real
SpecIF | ReqIF |
---|---|
id | IDENTIFIER |
title | LONG-NAME |
description | DESC |
changedAt | LAST-CHANGE |
type: xs:double | DATATYPE-DEFINITION-REAL |
maxInclusive | MAX |
minInclusive | MIN |
fractionDigits | ACCURACY |
Date
SpecIF | ReqIF |
---|---|
id | IDENTIFIER |
title | LONG-NAME |
description | DESC |
changedAt | LAST-CHANGE |
type: xs:dateTime | DATATYPE-DEFINITION-DATE |
XHTML
SpecIF | ReqIF |
---|---|
id | IDENTIFIER |
title | LONG-NAME |
description | DESC |
changedAt | LAST-CHANGE |
type: xs:string; format: “xhtml” | DATATYPE-DEFINITION-XHTML |
Enumeration
SpecIF | ReqIF |
---|---|
id | IDENTIFIER |
title | LONG-NAME |
description | DESC |
type: xs:enumeration | DATATYPE-DEFINITION-ENUMERATION |
values[] | ENUM-VALUE |
changedAt | LAST-CHANGE |
Example for values in SpecIF:
"enumeration":
[
{
"id": "V-Status-0",
"value": [
{
"text": "SpecIF:LifecycleStatusDeprecated"
}
]
},
...
]
Example in ReqIF:
<ENUM-VALUE IDENTIFIER="V-Status-0" LONG-NAME="SpecIF:LifecycleStatusDeprecated" LAST-CHANGE="2016-05-26T08:59:00+02:00">
<PROPERTIES>
<EMBEDDED-VALUE KEY="0" OTHER-CONTENT=""/>
</PROPERTIES>
</ENUM-VALUE>
Redundant data in this example like LAST-CHANGE is deduplicated by SpecIF.
SpecIF schema attributes
SpecIF has propertyClasses that can be used by all resourceClasses and statementClasses, while in ReqIF they have to be defined anew for each OBJECT-TYPE and RELATION-TYPE.
SpecIF has no equivalent for SPECIFICATION-TYPES, instead a normal resource is used as root.
ResourceClasses
SpecIF | ReqIF |
---|---|
id | IDENTIFIER |
title | LONG-NAME |
description | DESC |
propertyClasses[] | SPEC-ATTRIBUTES |
changedAt | LAST-CHANGE |
resourceClass example:
in SpecIF:
"resourceClasses":
[
{
"id": "RC-Folder",
"title": "SpecIF:Heading",
"description": [
{
"text": "Folders with title and text for chapters or descriptive paragraphs."
}
],
"revision": "1.1",
"replaces": [],
"icon": "H",
"isHeading": true,
"instantiation": [
"auto",
"user"
],
"propertyClasses": [
{
"id": "PC-Name",
"revision": "1.1"
},
{
"id": "PC-Description",
"revision": "1.1"
},
{
"id": "PC-Type",
"revision": "1.1"
}
],
"changedAt": "2016-05-26T08:59:00+02:00"
}
]
in ReqIF:
<SPEC-OBJECT-TYPE IDENTIFIER="RC-Folder" LONG-NAME="SpecIF:Heading" DESC="Folders with title and text for chapters or descriptive paragraphs." LAST-CHANGE="2016-05-26T08:59:00+02:00">
<SPEC-ATTRIBUTES>
<ATTRIBUTE-DEFINITION-STRING IDENTIFIER="RC-2138659171" LONG-NAME="ReqIF.Name" LAST-CHANGE="2016-05-26T08:59:00+02:00">
<TYPE>
<DATATYPE-DEFINITION-STRING-REF>DT-ShortString</DATATYPE-DEFINITION-STRING-REF>
</TYPE>
</ATTRIBUTE-DEFINITION-STRING>
<ATTRIBUTE-DEFINITION-XHTML IDENTIFIER="RC-2138842117" LONG-NAME="ReqIF.Text" LAST-CHANGE="2016-05-26T08:59:00+02:00">
<TYPE>
<DATATYPE-DEFINITION-XHTML-REF>DT-FormattedText</DATATYPE-DEFINITION-XHTML-REF>
</TYPE>
</ATTRIBUTE-DEFINITION-XHTML>
</SPEC-ATTRIBUTES>
</SPEC-OBJECT-TYPE
Redundant data is like LAST-CHANGE is deduplicated
StatementClasses
SpecIF | ReqIF |
---|---|
id | IDENTIFIER |
title | LONG-NAME |
description | DESC |
propertyClasses[] | SPEC-ATTRIBUTES |
changedAt | LAST-CHANGE |
statementClass example:
in SpecIF:
"statementClasses":
[
{
"id": "SC-shows",
"title": "SpecIF:shows",
"description": [
{
"text": "Statement: Plan resp. diagram shows model element."
}
],
"revision": "1.1",
"replaces": [],
"instantiation": [
"auto"
],
"subjectClasses": [
{
"id": "RC-Diagram",
"revision": "1.1"
}
],
"objectClasses": [
{
"id": "RC-Actor",
"revision": "1.1"
},
{
"id": "RC-State",
"revision": "1.1"
},
{
"id": "RC-Event",
"revision": "1.1"
}
],
"changedAt": "2016-05-26T08:59:00+02:00"
}
]
in ReqIF:
<SPEC-RELATION-TYPE IDENTIFIER="SC-shows" LONG-NAME="SpecIF:shows" DESC="Statement: Plan resp. diagram shows model element." LAST-CHANGE="2016-05-26T08:59:00+02:00">
</SPEC-RELATION-TYPE>
Resources
SpecIF | ReqIF |
---|---|
id | IDENTIFIER |
title | LONG-NAME |
class | SPEC-OBJECT-TYPE-REF |
description | DESC |
properties[] | VALUES |
changedAt | LAST-CHANGE |
resources example:
in SpecIF:
"resources":
[
{
"id": "Req-5ba3512b0000bca",
"class":
{
"id": "RC-Requirement"
},
"properties": [
{
"class":
{
"id": "PC-Name"
},
"values":
[
"Minimum button size"
]
},
{
"class":
{
"id": "PC-Description"
},
"values":
[
"\n <xhtml:div xmlns:xhtml=\"http://www.w3.org/1999/xhtml\">\n <xhtml:p>\n The\n <xhtml:i>button size</xhtml:i>\n MUST not be less than 20mm in diameter.\n </xhtml:p>\n <xhtml:p>\n <xhtml:object data=\"images/button-diameter.png\" type=\"image/png\">Diameter in different Forms</xhtml:object>\n </xhtml:p>\n </xhtml:div>\n "
]
}
],
"changedAt": "2017-06-19T20:13:08+02:00"
}
]
in ReqIF:
<SPEC-OBJECT IDENTIFIER="Req-5ba3512b0000bca" LONG-NAME="Minimum button size" DESC="" LAST-CHANGE="2017-06-19T20:13:08+02:00">
<TYPE>
<SPEC-OBJECT-TYPE-REF>RC-Requirement</SPEC-OBJECT-TYPE-REF>
</TYPE>
<VALUES>
<ATTRIBUTE-VALUE-STRING THE-VALUE="Minimum button size">
<DEFINITION>
<ATTRIBUTE-DEFINITION-STRING-REF>PC-Name</ATTRIBUTE-DEFINITION-STRING-REF>
</DEFINITION>
</ATTRIBUTE-VALUE-STRING>
<ATTRIBUTE-VALUE-XHTML>
<DEFINITION>
<ATTRIBUTE-DEFINITION-XHTML-REF>PC-Description</ATTRIBUTE-DEFINITION-XHTML-REF>
</DEFINITION>
<THE-VALUE>
<xhtml:div>
<xhtml:p>The
<xhtml:i>button size</xhtml:i>
MUST not be less than 20mm in diameter.
</xhtml:p>
<xhtml:p>
<xhtml:object data="images/button-diameter.png" type="image/png">Diameter in different Forms</xhtml:object>
</xhtml:p>
</xhtml:div>
</THE-VALUE>
</ATTRIBUTE-VALUE-XHTML>
</VALUES>
</SPEC-OBJECT>
Statements
SpecIF | ReqIF |
---|---|
id | IDENTIFIER |
title | LONG-NAME |
class | SPEC-RELATION-TYPE-REF |
description | DESC |
subject | SPEC-OBJECT-REF |
object | SPEC-OBJECT-REF |
changedAt | LAST-CHANGE |
in SpecIF:
"statements":
[
{
"id": "RVis-Pln-5a4755dd0000bca801375293a62c90a8-MEl-5bd6bd890000bca8013739588a3f43d6",
"class":
{
"id": "SC-shows"
},
"changedAt": "2017-06-19T20:13:33+02:00",
"subject":
{
"id": "Pln-5a4755dd0000bca801375293a62c90a8"
},
"object":
{
"id": "MEl-5bd6bd890000bca8013739588a3f43d6"
}
}
]
in ReqIF:
<SPEC-RELATION IDENTIFIER="RVis-Pln-5a4755dd0000bca801375293a62c90a8-MEl-5bd6bd890000bca8013739588a3f43d6" LONG-NAME="" DESC="" LAST-CHANGE="2017-06-19T20:13:33+02:00">
<TYPE>
<SPEC-RELATION-TYPE-REF>SC-shows</SPEC-RELATION-TYPE-REF>
</TYPE>
<VALUES>
<ATTRIBUTE-VALUE-STRING THE-VALUE="SpecIF:shows">
<DEFINITION>
<ATTRIBUTE-DEFINITION-STRING-REF>RC--669466474</ATTRIBUTE-DEFINITION-STRING-REF>
</DEFINITION>
</ATTRIBUTE-VALUE-STRING>
</VALUES>
<SOURCE>
<SPEC-OBJECT-REF>Pln-5a4755dd0000bca801375293a62c90a8</SPEC-OBJECT-REF>
</SOURCE>
<TARGET>
<SPEC-OBJECT-REF>MEl-5bd6bd890000bca8013739588a3f43d6</SPEC-OBJECT-REF>
</TARGET>
</SPEC-RELATION>
Hierarchies
SpecIF | ReqIF |
---|---|
id | IDENTIFIER |
resource | SPEC-OBJECT-REF |
changedAt | LAST-CHANGE |
nodes[] | CHILDREN |
Examples:
in SpecIF:
"hierarchies": [
{
"id": "SH-Fld-5a5f54090000bca801375b04a668f1a7",
"resource": "Fld-5a5f54090000bca801375b04a668f1a7",
"changedAt": "2017-06-19T20:14:47+02:00",
"nodes": [
{
"id": "SH-Pln-27420ffc0000c3a8013ab527ca1b71f5",
"resource":
{
"id": "Pln-27420ffc0000c3a8013ab527ca1b71f5"
},
"changedAt": "2017-06-19T20:14:47+02:00"
},
{
"id": "SH-Pln-5a4755dd0000bca801375293a62c90a8",
"resource":
{
"id": "Pln-5a4755dd0000bca801375293a62c90a8"
},
"changedAt": "2017-06-19T20:14:47+02:00"
},
{
"id": "SH-Pln-5a6cdea50000bca80137d6b2d6e8a3a0",
"resource":
{
"id": "Pln-5a6cdea50000bca80137d6b2d6e8a3a0"
},
"changedAt": "2017-06-19T20:14:47+02:00"
},
{
"id": "SH-Pln-5a7f99af0000bca8013754f2ef12d3e5",
"resource":
{
"Pln-5a7f99af0000bca8013754f2ef12d3e5"
},
"changedAt": "2017-06-19T20:14:47+02:00"
}
]
}
in ReqIF:
<SPEC-HIERARCHY IDENTIFIER="SH-Fld-5a5f54090000bca801375b04a668f1a7" LONG-NAME="" LAST-CHANGE="2017-06-19T20:14:47+02:00">
<OBJECT>
<SPEC-OBJECT-REF>Fld-5a5f54090000bca801375b04a668f1a7</SPEC-OBJECT-REF>
</OBJECT>
<CHILDREN>
<SPEC-HIERARCHY IDENTIFIER="SH-Pln-27420ffc0000c3a8013ab527ca1b71f5" LONG-NAME="" LAST-CHANGE="2017-06-19T20:14:47+02:00">
<OBJECT>
<SPEC-OBJECT-REF>Pln-27420ffc0000c3a8013ab527ca1b71f5</SPEC-OBJECT-REF>
</OBJECT>
</SPEC-HIERARCHY>
<SPEC-HIERARCHY IDENTIFIER="SH-Pln-5a4755dd0000bca801375293a62c90a8" LONG-NAME="" LAST-CHANGE="2017-06-19T20:14:47+02:00">
<OBJECT>
<SPEC-OBJECT-REF>Pln-5a4755dd0000bca801375293a62c90a8</SPEC-OBJECT-REF>
</OBJECT>
</SPEC-HIERARCHY>
<SPEC-HIERARCHY IDENTIFIER="SH-Pln-5a6cdea50000bca80137d6b2d6e8a3a0" LONG-NAME="" LAST-CHANGE="2017-06-19T20:14:47+02:00">
<OBJECT>
<SPEC-OBJECT-REF>Pln-5a6cdea50000bca80137d6b2d6e8a3a0</SPEC-OBJECT-REF>
</OBJECT>
</SPEC-HIERARCHY>
<SPEC-HIERARCHY IDENTIFIER="SH-Pln-5a7f99af0000bca8013754f2ef12d3e5" LONG-NAME="" LAST-CHANGE="2017-06-19T20:14:47+02:00">
<OBJECT>
<SPEC-OBJECT-REF>Pln-5a7f99af0000bca8013754f2ef12d3e5</SPEC-OBJECT-REF>
</OBJECT>
</SPEC-HIERARCHY>
</CHILDREN>
</SPEC-HIERARCHY>