From b73fa6a4e95a50aa70d8b25809132f7eccb59f24 Mon Sep 17 00:00:00 2001 From: Wendell Piez Date: Wed, 8 Jul 2020 17:47:18 -0400 Subject: [PATCH] #39, #53, usnistgov/OSCAL#633. JSON->supermodel conversion. Metapath mapping corrections. Nearly working round-trip test conversion. --- .../xslt-M4/compose/unfold-model-map.xsl | 2 +- .../converter-gen/produce-json-converter.xsl | 17 +- .../converter-gen/produce-xml-converter.xsl | 74 +++--- .../xslt-M4/metapath/metapath-jsonize.xsl | 34 ++- .../metapath/metapath-jsonizing-result.html | 247 +++++++++++++++--- .../xslt-M4/metapath/metapath-jsonizing.xspec | 79 +++++- .../xslt-M4/metapath/parse-metapath.xsl | 15 +- .../xslt-M4/testing/models_metaschema.xml | 6 +- .../testing/test-xml-json-roundtrip.xpl | 202 ++++++++++++++ .../xslt-M4/validate/metaschema-check.sch | 1 + 10 files changed, 579 insertions(+), 98 deletions(-) create mode 100644 toolchains/xslt-M4/testing/test-xml-json-roundtrip.xpl diff --git a/toolchains/xslt-M4/compose/unfold-model-map.xsl b/toolchains/xslt-M4/compose/unfold-model-map.xsl index 8828f1456..84df5fd0b 100644 --- a/toolchains/xslt-M4/compose/unfold-model-map.xsl +++ b/toolchains/xslt-M4/compose/unfold-model-map.xsl @@ -17,7 +17,7 @@ - + diff --git a/toolchains/xslt-M4/converter-gen/produce-json-converter.xsl b/toolchains/xslt-M4/converter-gen/produce-json-converter.xsl index 329a0abd3..299804929 100644 --- a/toolchains/xslt-M4/converter-gen/produce-json-converter.xsl +++ b/toolchains/xslt-M4/converter-gen/produce-json-converter.xsl @@ -56,7 +56,12 @@ - (: { $matching-xml} :) { m:jsonize-path($matching-xml) } + + { m:jsonize-path($matching-xml) } @@ -71,7 +76,7 @@ - + - + + + Cf XML match=" + + " + + \ No newline at end of file diff --git a/toolchains/xslt-M4/converter-gen/produce-xml-converter.xsl b/toolchains/xslt-M4/converter-gen/produce-xml-converter.xsl index 24df75e35..8a43dbd35 100644 --- a/toolchains/xslt-M4/converter-gen/produce-xml-converter.xsl +++ b/toolchains/xslt-M4/converter-gen/produce-xml-converter.xsl @@ -57,24 +57,25 @@ - - - + + + - + - + - { $source-namespace } + @@ -84,8 +85,20 @@ METASCHEMA conversion stylesheet supports XML -> METASCHEMA/SUPERMODEL conversion + + + + + + + { $source-namespace } + + + + - + + - - - + - + - + @@ -117,6 +128,7 @@ + - + - - - - - - { $source-namespace } - - - - - - + + - + - - - / - - - + + + + + + /@ + + + + + @@ -284,5 +291,8 @@ + + + \ No newline at end of file diff --git a/toolchains/xslt-M4/metapath/metapath-jsonize.xsl b/toolchains/xslt-M4/metapath/metapath-jsonize.xsl index 522dd5036..d1cdb6802 100644 --- a/toolchains/xslt-M4/metapath/metapath-jsonize.xsl +++ b/toolchains/xslt-M4/metapath/metapath-jsonize.xsl @@ -9,6 +9,7 @@ exclude-result-prefixes="#all" expand-text="true"> + @@ -60,13 +61,15 @@ - field-by-key/@id - field-dynamic-value-key/@id + wrapped-assemblies + EVERYTHING/@id|field-named-value/@id + + @@ -97,12 +100,12 @@ - + - - + + + @@ -118,9 +121,14 @@ {$px}:array[@key='{../@key}']/{$px}:map + + + {$px}:array[@key='{@key}'] + + - {$px}:assembly[@key='{../@key}']/{$px}:map + {$px}:array[@key='{../@key}']/{$px}:map {$px}:map[@key='{../@key}'] @@ -220,11 +228,11 @@ [not(@key=({ string-join($not-value-flags ! ( '''' || . || ''''), ',' ) }))] - {$px}:{$value-type}{ $not-value-filter[matches(.,'\S')]} + {$px}:{$value-type}{ $not-value-filter[matches(.,'\S')]}/@key - + OoopsFellThroughOn { name() } {$px}:*[@key='{../@key}'] @@ -267,7 +275,7 @@ number - + @@ -288,11 +296,11 @@ - + - + diff --git a/toolchains/xslt-M4/metapath/metapath-jsonizing-result.html b/toolchains/xslt-M4/metapath/metapath-jsonizing-result.html index 4e61188be..a25cf070b 100644 --- a/toolchains/xslt-M4/metapath/metapath-jsonizing-result.html +++ b/toolchains/xslt-M4/metapath/metapath-jsonizing-result.html @@ -1,7 +1,7 @@ - Test Report for C:/Users/wap1/Documents/usnistgov/metaschema/toolchains/xslt-M4/metapath/metapath-jsonize.xsl (passed: 12 / pending: 0 / failed: 0 / total: 12) + Test Report for C:/Users/wap1/Documents/usnistgov/metaschema/toolchains/xslt-M4/metapath/metapath-jsonize.xsl (passed: 14 / pending: 0 / failed: 2 / total: 16)