-
-
Notifications
You must be signed in to change notification settings - Fork 102
Open
Description
Description
The goal is to write a go program that can parse requirement documents that conforms to the OMG standard ReqIF 1.2
The xsd is defined here (https://www.omg.org/spec/ReqIF/20110401/reqif.xsd)
The xml is
<?xml version="1.0" encoding="UTF-8"?>
<REQ-IF xmlns="http://www.omg.org/spec/ReqIF/20110401/reqif.xsd"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<THE-HEADER>
<REQ-IF-HEADER
IDENTIFIER="_8da68f26-585c-4193-b6ca-a07cedff2a5c">
<CREATION-TIME>2017-04-25T15:44:26.000+02:00</CREATION-TIME>
<REPOSITORY-ID>524d2a940b0233d5</REPOSITORY-ID>
<REQ-IF-TOOL-ID>IBM Rational DOORS</REQ-IF-TOOL-ID>
<REQ-IF-VERSION>1.0</REQ-IF-VERSION>
<SOURCE-TOOL-ID>IBM Rational DOORS</SOURCE-TOOL-ID>
<TITLE>IBM Rational DOORS, 25 April 2017</TITLE>
</REQ-IF-HEADER>
</THE-HEADER>
<CORE-CONTENT>
<REQ-IF-CONTENT>
<DATATYPES>
<DATATYPE-DEFINITION-XHTML
IDENTIFIER="_i6FNMMkgEee8KsfWrp9EJQ"
LAST-CHANGE="2017-11-14T15:44:26.000+02:00"
LONG-NAME="String"/>
<DATATYPE-DEFINITION-ENUMERATION
IDENTIFIER="_ahyOEMk3Eee5A_N9aQFa1w"
LAST-CHANGE="2017-11-14T15:44:26.000+02:00"
LONG-NAME="IE Object Type">
<SPECIFIED-VALUES>
<ENUM-VALUE
IDENTIFIER="_gXZ9oMk3Eee5A_N9aQFa1w"
LAST-CHANGE="2017-11-14T15:44:26.000+02:00"
LONG-NAME="Requirement">
<PROPERTIES>
<EMBEDDED-VALUE
KEY="0"
OTHER-CONTENT="Navy"/>
</PROPERTIES>
</ENUM-VALUE>
<ENUM-VALUE
IDENTIFIER="_hGeDEMk3Eee5A_N9aQFa1w"
LAST-CHANGE="2017-11-14T15:44:26.000+02:00"
LONG-NAME="Function">
<PROPERTIES>
<EMBEDDED-VALUE
KEY="1"
OTHER-CONTENT="Purple"/>
</PROPERTIES>
</ENUM-VALUE>
<ENUM-VALUE
IDENTIFIER="_hZP1IMk3Eee5A_N9aQFa1w"
LAST-CHANGE="2017-11-14T15:44:26.000+02:00"
LONG-NAME="Capability">
<PROPERTIES>
<EMBEDDED-VALUE
KEY="2"
OTHER-CONTENT="Sea_Green"/>
</PROPERTIES>
</ENUM-VALUE>
</SPECIFIED-VALUES>
</DATATYPE-DEFINITION-ENUMERATION>
</DATATYPES>
<SPEC-TYPES>
<SPEC-OBJECT-TYPE
IDENTIFIER="_LaeSsMkhEee8KsfWrp9EJQ"
LAST-CHANGE="2017-11-14T15:44:26.000+02:00"
LONG-NAME="Requirement Type">
<SPEC-ATTRIBUTES>
<ATTRIBUTE-DEFINITION-XHTML
IDENTIFIER="_cf7-0MkhEee8KsfWrp9EJQ"
LAST-CHANGE="2017-11-14T15:44:26.000+02:00"
LONG-NAME="ReqIF.Text"
IS-EDITABLE="true">
<TYPE>
<DATATYPE-DEFINITION-XHTML-REF>_i6FNMMkgEee8KsfWrp9EJQ</DATATYPE-DEFINITION-XHTML-REF>
</TYPE>
</ATTRIBUTE-DEFINITION-XHTML>
<ATTRIBUTE-DEFINITION-XHTML
IDENTIFIER="_25YvEMkyEee5A_N9aQFa1w"
LAST-CHANGE="2017-11-14T15:44:26.000+02:00"
LONG-NAME="IE PUID"
IS-EDITABLE="true">
<TYPE>
<DATATYPE-DEFINITION-XHTML-REF>_i6FNMMkgEee8KsfWrp9EJQ</DATATYPE-DEFINITION-XHTML-REF>
</TYPE>
</ATTRIBUTE-DEFINITION-XHTML>
<ATTRIBUTE-DEFINITION-ENUMERATION
IDENTIFIER="_0VDX0Mk3Eee5A_N9aQFa1w"
LAST-CHANGE="2017-11-14T15:44:26.000+02:00"
LONG-NAME="IE Object Type"
IS-EDITABLE="true"
MULTI-VALUED="false">
<TYPE>
<DATATYPE-DEFINITION-ENUMERATION-REF>_ahyOEMk3Eee5A_N9aQFa1w</DATATYPE-DEFINITION-ENUMERATION-REF>
</TYPE>
</ATTRIBUTE-DEFINITION-ENUMERATION>
</SPEC-ATTRIBUTES>
</SPEC-OBJECT-TYPE>
<SPECIFICATION-TYPE
IDENTIFIER="_NAXScMkhEee8KsfWrp9EJQ"
LAST-CHANGE="2017-11-14T15:44:26.000+02:00"
LONG-NAME="Module Type">
<SPEC-ATTRIBUTES>
<ATTRIBUTE-DEFINITION-XHTML
IDENTIFIER="_jLB90MkhEee8KsfWrp9EJQ"
LAST-CHANGE="2017-11-14T15:44:26.000+02:00"
LONG-NAME="ReqIF.Name"
IS-EDITABLE="true">
<TYPE>
<DATATYPE-DEFINITION-XHTML-REF>_i6FNMMkgEee8KsfWrp9EJQ</DATATYPE-DEFINITION-XHTML-REF>
</TYPE>
</ATTRIBUTE-DEFINITION-XHTML>
</SPEC-ATTRIBUTES>
</SPECIFICATION-TYPE>
</SPEC-TYPES>
<SPEC-OBJECTS>
<SPEC-OBJECT
IDENTIFIER="_xen_QMkhEee8KsfWrp9EJQ"
LAST-CHANGE="2017-11-14T15:44:26.000+02:00"
LONG-NAME="Requirement-1">
<VALUES>
<ATTRIBUTE-VALUE-XHTML>
<DEFINITION>
<ATTRIBUTE-DEFINITION-XHTML-REF>_25YvEMkyEee5A_N9aQFa1w</ATTRIBUTE-DEFINITION-XHTML-REF>
</DEFINITION>
<THE-VALUE>
<xhtml:div>PUID-1</xhtml:div>
</THE-VALUE>
</ATTRIBUTE-VALUE-XHTML>
<ATTRIBUTE-VALUE-XHTML>
<DEFINITION>
<ATTRIBUTE-DEFINITION-XHTML-REF>_cf7-0MkhEee8KsfWrp9EJQ</ATTRIBUTE-DEFINITION-XHTML-REF>
</DEFINITION>
<THE-VALUE>
<xhtml:div>Requirement-1</xhtml:div>
</THE-VALUE>
</ATTRIBUTE-VALUE-XHTML>
<ATTRIBUTE-VALUE-ENUMERATION>
<VALUES>
<ENUM-VALUE-REF>_gXZ9oMk3Eee5A_N9aQFa1w</ENUM-VALUE-REF>
</VALUES>
<DEFINITION>
<ATTRIBUTE-DEFINITION-ENUMERATION-REF>_0VDX0Mk3Eee5A_N9aQFa1w</ATTRIBUTE-DEFINITION-ENUMERATION-REF>
</DEFINITION>
</ATTRIBUTE-VALUE-ENUMERATION>
</VALUES>
<TYPE>
<SPEC-OBJECT-TYPE-REF>_LaeSsMkhEee8KsfWrp9EJQ</SPEC-OBJECT-TYPE-REF>
</TYPE>
</SPEC-OBJECT>
</SPEC-OBJECTS>
<SPEC-RELATIONS/>
<SPECIFICATIONS>
<SPECIFICATION
IDENTIFIER="_dESzoMkiEee8KsfWrp9EJQ"
LAST-CHANGE="2017-11-14T15:44:26.000+02:00"
LONG-NAME="MODULE-1">
<VALUES/>
<TYPE>
<SPECIFICATION-TYPE-REF>_NAXScMkhEee8KsfWrp9EJQ</SPECIFICATION-TYPE-REF>
</TYPE>
<CHILDREN>
<SPEC-HIERARCHY
IDENTIFIER="_Ob6YgMkjEee8KsfWrp9EJQ"
LAST-CHANGE="2017-11-14T15:44:26.000+02:00"
LONG-NAME="Requirement-1"
IS-EDITABLE="true">
<OBJECT>
<SPEC-OBJECT-REF>_xen_QMkhEee8KsfWrp9EJQ</SPEC-OBJECT-REF>
</OBJECT>
</SPEC-HIERARCHY>
</CHILDREN>
</SPECIFICATION>
</SPECIFICATIONS>
<SPEC-RELATION-GROUPS/>
</REQ-IF-CONTENT>
</CORE-CONTENT>
<TOOL-EXTENSIONS/>
</REQ-IF>Steps to reproduce the issue:
- xgen the xsd
- patch the HEADER
For unknown reasons, the REQIF is empty. One have to patch it.
before the patch
type REQIF *REQIFafter the patch
type REQIF struct {
XMLName xml.Name `xml:"REQ-IF"`
HEADER *THEHEADER `xml:"THE-HEADER"`
CORECONTENT *CORECONTENT `xml:"CORE-CONTENT"`
}- Parse the sample file
the problematic part of the input sample file is below
<SPEC-OBJECT
IDENTIFIER="_xen_QMkhEee8KsfWrp9EJQ"
LAST-CHANGE="2017-11-14T15:44:26.000+02:00"
LONG-NAME="Requirement-1">
<VALUES>
<ATTRIBUTE-VALUE-XHTML>
<DEFINITION>
<ATTRIBUTE-DEFINITION-XHTML-REF>_25YvEMkyEee5A_N9aQFa1w</ATTRIBUTE-DEFINITION-XHTML-REF>
</DEFINITION>Field VALUES in SPECOBJECT is not properly parsed
type SPECOBJECT struct {
XMLName xml.Name `xml:"SPEC-OBJECT"`
DESCAttr string `xml:"DESC,attr,omitempty"`
IDENTIFIERAttr string `xml:"IDENTIFIER,attr"`
LASTCHANGEAttr string `xml:"LAST-CHANGE,attr"`
LONGNAMEAttr string `xml:"LONG-NAME,attr,omitempty"`
ALTERNATIVEID *ALTERNATIVEID `xml:"ALTERNATIVE-ID"`
VALUES *VALUES `xml:"VALUES"`
type VALUES struct {
Name string
ENUMVALUEREF []string `xml:"ENUM-VALUE-REF"`
}type VALUES should have fields for the ATTRIBUTE-VALUE-XHTML elements.
PS : I do not know what the VALUES fields should be like to have a good parser.
Output of go version:
go version
go version go1.22.1 darwin/amd64
xgen version or commit ID:
xgen -version
xgen version: 0.1.0
Metadata
Metadata
Assignees
Labels
No labels