s1kd-repcheck
Description
khzae.net
khzae.net
All
Add --xml-catalog parser option.
Add -D (--dump-xsl), -t (--type) and -X (--xsl) options.
General
The s1kd-repcheck tool validates references to CIRCommon Information Repository items within S1000D CSDB objects. Any CIR references which cannot be resolved to a specification within a CIR data module will cause the tool to report an error.
Usage
s1kd-repcheck [options] [<objects>...]
Options
-A, --all-refs
Validate indirect tool/supply/part CIR references using the element <identNumber>. Normally, only the direct reference elements <toolRef>, <supplyRef> and <partRef> are validated.
-a, --all
In addition to CIR data modules specified with -R or explicitly linked in CIR references, allow CIR references to be resolved against any CIR data modules that were specified as objects to check.
-D, --dump-xsl
Dump the built-in XSLT used to extract CIR references.
-d, --dir <dir>
The directory to start searching for CIR data modules in. By default, the current directory is used.
-F, --valid-filenames
Print the filenames of valid objects.
-f, --filenames
Print the filenames of invalid objects.
-h, -?, --help
Show help/usage message.
-L, --list-refs
List CIR references found in objects instead of validating them.
-l, --list
Treat input as a list of CSDB objects to check.
-N, --omit-issue
Assume that the issue/inwork numbers are omitted from object filenames (they were created with the -N option).
-o, --output-valid
Output valid CSDB objects to stdout.
-p, --progress
Display a progress bar.
-q, --quiet
Quiet mode. Error messages will not be printed.
-R, --cir <CIR>
A CIR to resolve references in CSDB objects against. Multiple CIRs can be specified by using this option multiple times.
If "*" is given for <CIR>, the tool will search for CIR data modules automatically.
-r, --recursive
Search for CIR data modules recursively.
-T, --summary
Print a summary of the check after it completes, including statistics on the number of objects that passed/failed the check.
-t, --type <type>
Validate or list only CIR references of the specified type. The built-in types are:
acp (Access point)app (Applicability annotation)caut (Caution)cbr (Circuit breaker)cin (Control/Indicator)ent (Enterprise)fin (Functional item)partsupplytoolwarn (Warning)zone
-v, --verbose
Verbose output. Specify multiple times to increase the verbosity.
-X, --xsl <file>
Use custom XSLT to extract CIR references.
-x, --xml
Print an XML report of the check.
-^, --remove-deleted
Validate with elements that have a change type of "delete" removed. CIR data modules with an issue type of "deleted" will also be ignored in the automatic search when this option is specified.
--version
Show version information.
<object>...
Object(s) to check CIR references in.
In addition, the following options allow configuration of the XML parser:
--dtdloadLoad the external DTD.--hugeRemove any internal arbitrary parser limits.--netAllow network access to load external DTD and entities.--noentResolve entities.--parser-errorsEmit errors from parser.--parser-warningsEmit warnings from parser.--xincludeDo XInclude processing.--xml-catalog <file>Use an XML catalog when resolving entities. Multiple catalogs may be loaded by specifying this option multiple times.
Custom XSLT (-X)
What elements are extracted as CIR references for validating, and how they are validated, can be configured through a custom XSLT script specified with the -X (--xsl) option.
The custom XSLT script should add the following attributes to elements which will be validated as CIR references:
typeA name for the type of CIR reference.nameA descriptive name for the CIR reference that can be used in reports.testAn XPath expression used to match the corresponding CIR identification element.
The namespace for these attributes must be: urn:s1kd-tools:s1kd-repcheck
Example XSLT template to extract functional item references:
<xsl:template match="functionalItemRef">
<xsl:variable name="fin" select="@functionalItemNumber"/>
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:attribute name="s1kd-repcheck:type">fin</xsl:attribute>
<xsl:attribute name="s1kd-repcheck:name">
<xsl:text>Functional item </xsl:text>
<xsl:value-of select="$fin"/>
</xsl:attribute>
<xsl:attribute name="s1kd-repcheck:test">
<xsl:text>//functionalItemIdent[@functionalItemNumber='</xsl:text>
<xsl:value-of select="$fin"/>
<xsl:text>']</xsl:text>
</xsl:attribute>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
A custom script also allows validating non-standard types of "CIR" references.
For example, if a project wants to validate acronyms used in data modules against a central repository of acronyms, this could be done like so:
<xsl:template match="acronym">
<xsl:variable name="term" select="acronymTerm"/>
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:attribute name="s1kd-repcheck:type">acr</xsl:attribute>
<xsl:attribute name="s1kd-repcheck:name">
<xsl:text>Acronym </xsl:text>
<xsl:value-of select="$term"/>
</xsl:attribute>
<xsl:attribute name="s1kd-repcheck:test">
<xsl:text>//acronym[acronymTerm = '</xsl:text>
<xsl:value-of select="$term"/>
<xsl:text>']</xsl:text>
</xsl:attribute>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
As there is no standard "acronym" CIR type, the object containing the repository would need to be specified explicitly with -R.
The built-in XSLT for extracting CIR references can be dumped as a starting point for a custom script by specifying the -D (--dump-xsl) option.
Exit status
0
The check completed successfully, and all CIR references were resolved.
1
The check completed successfully, but some CIR references could not be resolved.
2
The number of CSDB objects specified exceeded the available memory.
Example
Part repository:
<partRepository>
<partSpec>
<partIdent manufacturerCodeValue="12345" partNumberValue="ABC"/>
<itemIdentData>
<descrForPart>ABC part</descrForPart>
</itemIdentData>
</partSpec>
</partRepository>
Part references in a procedure:
<spareDescrGroup>
<spareDescr>
<partRef manufacturerCodeValue="12345" partNumberValue="ABC"/>
<reqQuantity>1</reqQuantity>
</spareDescr>
<spareDescr>
<partRef manufacturerCodeValue="12345" partNumberValue="DEF"/>
<reqQuantity>1</reqQuantity>
</spareDescr>
</spareDescrGroup>
Command and results:
$ s1kd-repcheck -R <CIR> ... <DM>
s1kd-repcheck: ERROR: <DM> (<line>): Part 12345/DEF not found.