You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@daffodil.apache.org by gi...@apache.org on 2021/03/10 15:46:21 UTC

[daffodil-site] branch asf-site updated: Publishing from 1f53c29cada5580a94718985c846a9acb9436685

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/daffodil-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new e68ce02  Publishing from 1f53c29cada5580a94718985c846a9acb9436685
e68ce02 is described below

commit e68ce02fd6af7211c57f6f356d0a06f901716e6e
Author: John Interrante <in...@research.ge.com>
AuthorDate: Wed Mar 10 15:46:03 2021 +0000

    Publishing from 1f53c29cada5580a94718985c846a9acb9436685
---
 content/dev/aboutAsciiDoc/index.html               |   4 +-
 .../infoset-inputter-streaming-unparser/index.html |  10 +-
 content/dev/design-notes/runtime2-todos/index.html | 446 +++++++++++++++++++++
 content/images/cyclic.svg                          |  36 +-
 .../diag-0d30d58bcdf5ebb25188b6c2fe72c721.png      | Bin 17724 -> 19434 bytes
 .../diag-1313a13d91a6f8c668ade63f72bbb61d.png      | Bin 11087 -> 15651 bytes
 .../diag-19f9d885d07ef92b8922b13dfaa30484.png      | Bin 3014 -> 3387 bytes
 .../diag-3d37e77421be37fa6d2e4c726a248b00.png      | Bin 25795 -> 28016 bytes
 .../diag-45bcd5e9c7484340ba070e865b4dd7ed.png      | Bin 14429 -> 21539 bytes
 .../diag-51b412adf272104af315f2f6958aeb2d.png      | Bin 2957 -> 4088 bytes
 .../diag-67c737a775095ab65bc0eea2b6f973e4.png      | Bin 9815 -> 8961 bytes
 .../diag-68be4940298d7ecfe80166b53c409621.png      | Bin 24966 -> 29906 bytes
 .../diag-8ac9b322bf3e2e1e7b0df17f6f64d0a6.png      | Bin 11322 -> 13813 bytes
 .../diag-9161b5895c4f12c5eff371d944811204.png      | Bin 25832 -> 25838 bytes
 .../diag-a233f3edc65e7c991774d9233c23f186.png      | Bin 17942 -> 20296 bytes
 .../diag-b16e40e43b31e200e8ad5c32ea7f9f07.png      | Bin 54003 -> 60260 bytes
 .../diag-ceaa915a0d1af6f23f03271a51d3452c.png      | Bin 49108 -> 57859 bytes
 .../diag-db5a8f8925d2b52e29e82cfb0d52f076.png      | Bin 101985 -> 110501 bytes
 .../diag-e8cdc9d803fb5e074386a0e096177241.png      | Bin 11400 -> 18029 bytes
 content/images/diagram-classes.png                 | Bin 8756 -> 9859 bytes
 content/images/unshared-shared.png                 | Bin 14566 -> 16471 bytes
 21 files changed, 471 insertions(+), 25 deletions(-)

diff --git a/content/dev/aboutAsciiDoc/index.html b/content/dev/aboutAsciiDoc/index.html
index 99a6cfb..48d41c1 100644
--- a/content/dev/aboutAsciiDoc/index.html
+++ b/content/dev/aboutAsciiDoc/index.html
@@ -316,7 +316,7 @@ in their textual form in the asciidoc:</p>
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="/images/diag-67c737a775095ab65bc0eea2b6f973e4.png" alt="diag 67c737a775095ab65bc0eea2b6f973e4" width="395" height="201">
+<img src="/images/diag-67c737a775095ab65bc0eea2b6f973e4.png" alt="diag 67c737a775095ab65bc0eea2b6f973e4" width="394" height="201">
 </div>
 </div>
 </div>
@@ -426,7 +426,7 @@ It is not clear how this compares for ease-of-use with PlantUML diagrams.
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="/images/diag-9161b5895c4f12c5eff371d944811204.png" alt="diag 9161b5895c4f12c5eff371d944811204" width="1017" height="236">
+<img src="/images/diag-9161b5895c4f12c5eff371d944811204.png" alt="diag 9161b5895c4f12c5eff371d944811204" width="1013" height="236">
 </div>
 </div>
 </div>
diff --git a/content/dev/design-notes/infoset-inputter-streaming-unparser/index.html b/content/dev/design-notes/infoset-inputter-streaming-unparser/index.html
index 2c2b017..2c9b441 100644
--- a/content/dev/design-notes/infoset-inputter-streaming-unparser/index.html
+++ b/content/dev/design-notes/infoset-inputter-streaming-unparser/index.html
@@ -194,7 +194,7 @@ corresponding element appearing in a choice branch.</p>
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="/images/diag-b16e40e43b31e200e8ad5c32ea7f9f07.png" alt="diag b16e40e43b31e200e8ad5c32ea7f9f07" width="963" height="880">
+<img src="/images/diag-b16e40e43b31e200e8ad5c32ea7f9f07.png" alt="diag b16e40e43b31e200e8ad5c32ea7f9f07" width="1016" height="673">
 </div>
 </div>
 <div class="paragraph">
@@ -226,7 +226,7 @@ through the PartialNextElementResolvers obtained from the stack of TRDs.</p>
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="/images/diag-3d37e77421be37fa6d2e4c726a248b00.png" alt="diag 3d37e77421be37fa6d2e4c726a248b00" width="762" height="350">
+<img src="/images/diag-3d37e77421be37fa6d2e4c726a248b00.png" alt="diag 3d37e77421be37fa6d2e4c726a248b00" width="786" height="312">
 </div>
 </div>
 <div class="paragraph">
@@ -366,7 +366,7 @@ and for the chains of default property providers, from which scoped properties a
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="/images/diag-ceaa915a0d1af6f23f03271a51d3452c.png" alt="diag ceaa915a0d1af6f23f03271a51d3452c" width="1296" height="547">
+<img src="/images/diag-ceaa915a0d1af6f23f03271a51d3452c.png" alt="diag ceaa915a0d1af6f23f03271a51d3452c" width="1312" height="557">
 </div>
 </div>
 <div class="paragraph">
@@ -379,7 +379,7 @@ Here&#8217;s the same diagram, but focusing in on just the core abstract classes
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="/images/diag-68be4940298d7ecfe80166b53c409621.png" alt="diag 68be4940298d7ecfe80166b53c409621" width="507" height="383">
+<img src="/images/diag-68be4940298d7ecfe80166b53c409621.png" alt="diag 68be4940298d7ecfe80166b53c409621" width="523" height="385">
 </div>
 </div>
 <div class="paragraph">
@@ -453,7 +453,7 @@ runtime backends are unlikely to implement.</p>
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="/images/diag-db5a8f8925d2b52e29e82cfb0d52f076.png" alt="diag db5a8f8925d2b52e29e82cfb0d52f076" width="1760" height="1193">
+<img src="/images/diag-db5a8f8925d2b52e29e82cfb0d52f076.png" alt="diag db5a8f8925d2b52e29e82cfb0d52f076" width="1829" height="855">
 </div>
 </div>
 <div class="admonitionblock caution">
diff --git a/content/dev/design-notes/runtime2-todos/index.html b/content/dev/design-notes/runtime2-todos/index.html
new file mode 100644
index 0000000..0c58aeb
--- /dev/null
+++ b/content/dev/design-notes/runtime2-todos/index.html
@@ -0,0 +1,446 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <title>Apache Daffodil | </title>
+    
+    <meta name="author" content="">
+
+    <!-- Enable responsive viewport -->
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+    <!-- HTML5 shim, for IE6-8 support of HTML elements -->
+    <!--[if lt IE 9]>
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+
+    <link href="/assets/themes/apache/bootstrap/css/bootstrap.css" rel="stylesheet">
+    <link href="/assets/themes/apache/css/style.css?body=1" rel="stylesheet" type="text/css">
+    <link href="/assets/themes/apache/css/syntax.css" rel="stylesheet"  type="text/css" media="screen" />
+
+  </head>
+
+  <body>
+
+        <div class="navbar navbar-inverse" role="navigation">
+      <div class="container">
+        <div class="navbar-header"><a class="navbar-brand" href="/"><img src="/assets/themes/apache/img/apache-daffodil-logo.png" alt="Apache Daffodil"/></a></div>
+        <nav role="navigation">
+          <ul class="nav navbar-nav navbar-right">
+            <li><a href="/releases">Releases</a></li>
+            <li id="documentation">
+              <a href="#" data-toggle="dropdown" class="dropdown-toggle">Docs<b class="caret"></b></a>
+              <ul class="dropdown-menu dropdown-left">
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/examples/">Examples</a></li>
+                <li><a href="/docs/latest/javadoc/">Java API</a></li>
+                <li><a href="/docs/latest/scaladoc/">Scala API</a></li>
+                <li><a href="/docs/dfdl/">DFDL Specification</a></li>
+                <li><a href="/unsupported/">Unsupported Features</a></li>
+                <li><a href="/faq/">Frequently Asked Questions</a></li>
+              </ul>
+            </li>
+            <li id="community">
+              <a href="#" data-toggle="dropdown" class="dropdown-toggle">Community<b class="caret"></b></a>
+              <ul class="dropdown-menu dropdown-left">
+                <li><a href="/community">Get Involved</a></li>
+                <li><a href="/people">People</a></li>
+              </ul>
+            </li>
+            <li id="development">
+              <a href="#" data-toggle="dropdown" class="dropdown-toggle">Development<b class="caret"></b></a>
+              <ul class="dropdown-menu dropdown-left">
+                <li><a class="external" href="https://cwiki.apache.org/confluence/display/DAFFODIL/">Wiki</a></li>
+                <li><a class="external" href="https://github.com/search?q=repo%3Aapache%2Fdaffodil+repo%3Aapache%2Fdaffodil-site&type=Repositories">GitHub</a></li>
+                <li><a class="external" href="https://issues.apache.org/jira/projects/DAFFODIL/">JIRA</a></li>
+              </ul>
+            </li>
+            <li id="apache">
+              <a href="#" data-toggle="dropdown" class="dropdown-toggle">Apache<b class="caret"></b></a>
+              <ul class="dropdown-menu">
+                <li><a class="external" href="https://www.apache.org/">Foundation</a></li>
+                <li><a class="external" href="https://www.apache.org/licenses/">License</a></li>
+                <li><a class="external" href="https://www.apache.org/events/current-event">Events</a></li>
+                <li><a class="external" href="https://www.apache.org/security">Security</a></li>
+                <li><a class="external" href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+                <li><a class="external" href="https://www.apache.org/foundation/thanks.html">Thanks</a></li>
+              </ul>
+            </li>
+          </ul>
+        </nav>
+      </div>
+    </div>
+
+
+<div class="title">
+  <div class="container">
+    <h2></h2>
+  </div>
+</div>
+
+
+
+    <div class="container">
+      <div class="row">
+  <div class="col-md-12">
+    <div class="sect1">
+<h2 id="runtime2-todos">Runtime2 ToDos</h2>
+<div class="sectionbody">
+<div class="sect2">
+<h3 id="overview">Overview</h3>
+<div class="paragraph">
+<p>We have built an initial DFDL-to-C backend
+and code generator for Apache Daffodil.
+Currently the C code generator can support
+binary boolean, integer, and real numbers,
+arrays of simple and complex elements,
+choice groups using dispatch/branch keys,
+validation of "fixed" attributes,
+and padding of explicit length complex elements with fill bytes.
+We plan to continue building out the C code generator
+until it supports a minimal subset of the DFDL 1.0 specification
+for embedded devices.</p>
+</div>
+<div class="paragraph">
+<p>We are using this document
+to keep track of some changes
+requested by reviewers
+so we don&#8217;t forget to make these changes.
+If someone wants to help
+(which would be appreciated),
+please let the <a href="mailto:dev@daffodil.apache.org">dev</a> list know
+in order to avoid duplication.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="error-struct-instead-of-error-message">Error struct instead of error message</h3>
+<div class="paragraph">
+<p>To make internationalized error messages
+easier to construct when an error happens,
+we should return an error struct with some fields
+nstead of an entire error message string.
+It is easier to interpolate values into messages
+in the same function which also prints the messages.
+We still would check for errors
+by doing a null pointer check,
+although we might consider moving that check
+from parser/unparser functions to their callers
+to skip over all remaining function calls:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-c" data-lang="c">    unparse_be_float(instance-&gt;be_float[0], ustate);
+    if (ustate-&gt;error) return;
+    unparse_be_float(instance-&gt;be_float[1], ustate);
+    if (ustate-&gt;error) return;
+    ...</code></pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="validation-errors">Validation errors</h3>
+<div class="paragraph">
+<p>We should handle three types of errors differently:
+runtime schema definition errors,
+parser/unparser errors,
+and validation errors.
+Schema definition errors should abort parsing immediately.
+Parser errors may need to allow backtracking in future.
+Validation errors should be gathered up
+without stopping parsing or unparsing.
+We should be able to successfully parse data
+that is "well formed"
+even though it has invalid values,
+report the invalid values,
+and allow users to analyze the data.
+We probably should gather up validation errors
+in a separate PState/UState member field
+pointing to a validation struct with some fields.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="dsom-fixed-getter">DSOM "fixed" getter</h3>
+<div class="paragraph">
+<p>We need to add DSOM support for the "fixed" attribute
+so runtimes don&#8217;t have to know about the underlying XML.
+DSOM abstracts the underying XML stuff away
+so we can update the DSOM
+if we ever change the XML stuff
+and all runtimes get schema info the same way.</p>
+</div>
+<div class="paragraph">
+<p>To give runtimes access to the "fixed" attribute,
+we want to add new members to the DSOM
+to extract the "fixed" value from the schema.
+We would do it very similar to the "default" attribute
+with code like this in ElementDeclMixin.scala:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-scala" data-lang="scala">  final lazy val fixedAttr = xml.attribute("fixed")
+
+  final def hasFixedValue: Boolean = fixedAttr.isDefined
+
+  final lazy val fixedValueAsString = {
+     ...
+  }</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>We also would convert the string value
+to a value with the correct primitive type
+with code like this in ElementBase.scala:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-scala" data-lang="scala">  final lazy val fixedValue = {
+     ...
+  }</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Note: If we change runtime1 to validate "fixed" values,
+then we can close <a href="https://issues.apache.org/jira/browse/DAFFODIL-117">DAFFODIL-117</a>.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="dry-for-duplicate-code">DRY for duplicate code</h3>
+<div class="paragraph">
+<p>Refactor duplicate code in
+BinaryBooleanCodeGenerator.scala,
+BinaryFloatCodeGenerator.scala,
+and BinaryIntegerKnownLengthCodeGenerator.scala
+into common code in one place.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="count-of-parserstatementsunparserstatements">Count of parserStatements/unparserStatements</h3>
+<div class="paragraph">
+<p>In CodeGeneratorState.scala,
+current code checks count of only parserStatements.
+Code should check count of both
+parserStatements and unparserStatements:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-scala" data-lang="scala">  val hasParserStatements = structs.top.parserStatements.nonEmpty
+  val hasUnparserStatements = structs.top.unparserStatements.nonEmpty
+  if (hasParserStatements) { ... } else { ... }
+  if (hasUnparserStatements) { ... } else { ... }</code></pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="update-to-tdml-runner">Update to TDML Runner</h3>
+<div class="paragraph">
+<p>We want to update the TDML Runner
+to make it easier to run TDML tests
+with both runtime1 and runtime2.
+We want to eliminate the need
+to configure a <code>daf:tdmlImplementation</code> tunable
+in the TDML test using 12 lines of code.
+The TDML Runner should configure itself
+to run both/either runtime1 and/or runtime2
+just from seeing a root attribute
+saying <code>defaultImplementations="daffodil runtime2"</code>
+or a parser/unparseTestCase attribute saying <code>implementations="runtime2"</code>.
+Maybe we also want to add an implementation attribute
+to tdml:errors/warnings elements
+saying which implementation they are for too.
+If we do that,
+we should tell the TDML Runner
+runtime2 tests are not cross tests
+so it will check their errors/warnings.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="c-structfield-name-collisions">C struct/field name collisions</h3>
+<div class="paragraph">
+<p>To avoid possible name collisions,
+we should prepend struct names and field names with namespace prefixes
+if their infoset elements have non-null namespace prefixes.
+Alternatively, we may need to use enclosing elements' names
+as prefixes to avoid name collisions without namespaces.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="anonymousmultiple-choice-groups">Anonymous/multiple choice groups</h3>
+<div class="paragraph">
+<p>We already handle elements having xs:choice complex types.
+In addition, we should support anonymous/multiple choice groups.
+We may need to refine the choice runtime structure
+in order to allow multiple choice groups
+to be inlined into parent elements.
+Here is an example schema
+and corresponding C code to demonstrate:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-xml" data-lang="xml">  &lt;xs:complexType name="NestedUnionType"&gt;
+    &lt;xs:sequence&gt;
+      &lt;xs:element name="first_tag" type="idl:int32"/&gt;
+      &lt;xs:choice dfdl:choiceDispatchKey="{xs:string(./first_tag)}"&gt;
+        &lt;xs:element name="foo" type="idl:FooType" dfdl:choiceBranchKey="1 2"/&gt;
+        &lt;xs:element name="bar" type="idl:BarType" dfdl:choiceBranchKey="3 4"/&gt;
+      &lt;/xs:choice&gt;
+      &lt;xs:element name="second_tag" type="idl:int32"/&gt;
+      &lt;xs:choice dfdl:choiceDispatchKey="{xs:string(./second_tag)}"&gt;
+        &lt;xs:element name="fie" type="idl:FieType" dfdl:choiceBranchKey="1"/&gt;
+        &lt;xs:element name="fum" type="idl:FumType" dfdl:choiceBranchKey="2"/&gt;
+      &lt;/xs:choice&gt;
+    &lt;/xs:sequence&gt;
+  &lt;/xs:complexType&gt;</code></pre>
+</div>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-c" data-lang="c">typedef struct NestedUnion
+{
+    InfosetBase _base;
+    int32_t     first_tag;
+    size_t      _choice_1; // choice of which union field to use
+    union
+    {
+        foo foo;
+        bar bar;
+    };
+    int32_t     second_tag;
+    size_t      _choice_2; // choice of which union field to use
+    union
+    {
+        fie fie;
+        fum fum;
+    };
+} NestedUnion;</code></pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="choice-dispatch-key-expressions">Choice dispatch key expressions</h3>
+<div class="paragraph">
+<p>We currently support only a very restricted
+and simple subset of choice dispatch key expressions.
+We would like to refactor the DPath expression compiler
+and make it generate C code
+in order to support arbitrary choice dispatch key expressions.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="no-match-between-choice-dispatch-key-and-choice-branch-keys">No match between choice dispatch key and choice branch keys</h3>
+<div class="paragraph">
+<p>Right now c-daffodil is more strict than scala-daffodil
+when unparsing infoset XML files with no matches (or mismatches)
+between choice dispatch keys and branch keys.
+Perhaps c-daffodil should load such an XML file
+without a no match processing error
+and unparse the infoset to a binary data file
+without a no match processing error.
+We would have to code and call a choice branch resolver in C
+which peeks at the next XML element,
+figures out which branch
+does that element indicate exists
+inside the choice group,
+and initializes the choice and element runtime data
+(_choice and childNode&#8594;erd member fields) accordingly.
+We probably would replace the initChoice() call in walkInfosetNode()
+with a call to that choice branch resolver
+and we might not need to call initChoice() in unparseSelf().
+When I called initChoice() in all these parse, walk, and unparse places,
+I was pondering removing the _choice member field
+and calling initChoice() as a function
+to tell us which element to visit next,
+but we probably should have a mutable choice runtime data structure
+that applications can override if they want to.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="floating-point-numbers">Floating point numbers</h3>
+<div class="paragraph">
+<p>Right now runtime2 prints floating point numbers
+in XML infosets slightly differently than runtime1 does.
+This means we may need to use different XML infosets
+in TDML tests depending on the runtime implementation.
+In order to use the same XML infoset in TDML tests,
+we should make the TDML Runner
+compare floating point numbers numerically, not textually,
+as discussed in <a href="https://issues.apache.org/jira/browse/DAFFODIL-2402">DAFFODIL-2402</a>.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="arrays">Arrays</h3>
+<div class="paragraph">
+<p>Instead of expanding arrays inline within childrenERDs,
+we may want to store a single entry
+for an array in childrenERDs
+giving the array&#8217;s offset and size of all its elements.
+We would have to write code
+for special case treatment of array member fields
+versus scalar member fields
+but we could save space/memory in childrenERDs
+for use cases with very large arrays.
+An array element&#8217;s ERD should have minOccurs and maxOccurs
+where minOccurs is unsigned
+and maxOccurs is signed with -1 meaning "unbounded".
+The actual number of children in an array instance
+would have to be stored with the array instance
+in the C struct or the ERD.
+An array node has to be a different kind of infoset node
+with a place for this number of actual children to be stored.
+Probably all ERDs should just get minOccurs and maxOccurs
+and a scalar is just one with 1, 1 as those values,
+an optional element is 0, 1,
+and an array is all other legal combinations
+like N, -1 and N, and M with N&#8656;M.
+A restriction that minOccurs is 0, 1,
+or equal to maxOccurs (which is not -1)
+is acceptable.
+A restriction that maxOccurs is 1, -1,
+or equal to minOccurs
+is also fine
+(means variable-length arrays always have unbounded number of elements).</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="daffodil-modulesubdirectory-names">Daffodil module/subdirectory names</h3>
+<div class="paragraph">
+<p>When Daffodil is ready to move from a 3.x to a 4.x release,
+rename the modules to have shorter and easier to understand names
+as discussed in <a href="https://issues.apache.org/jira/browse/DAFFODIL-2406">DAFFODIL-2406</a>.</p>
+</div>
+</div>
+</div>
+</div>
+  </div>
+</div>
+
+
+      <footer>
+        <footer class="site-footer">
+    <div class="wrapper">
+        <div class="footer-col-wrapper" style="font-size: .85em;">
+            <hr>
+            <div>
+                <div style="text-align: center;">
+                    Copyright &copy; 2021 <a href="https://www.apache.org">The Apache Software Foundation</a>.
+                    Licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version
+                    2.0</a>.
+                    <br>
+                    Apache, Apache Daffodil, Daffodil, and the Apache Daffodil logo
+                    are trademarks of The Apache Software Foundation.
+                </div>
+            </div>
+        </div>
+    </div>
+</footer>
+
+      </footer>
+    </div>
+
+    <script src="/assets/themes/apache/jquery/jquery-2.1.1.min.js"></script>
+
+    <script src="/assets/themes/apache/bootstrap/js/bootstrap.min.js"></script>
+
+
+  </body>
+</html>
+
diff --git a/content/images/cyclic.svg b/content/images/cyclic.svg
index a248fbe..34bf01f 100644
--- a/content/images/cyclic.svg
+++ b/content/images/cyclic.svg
@@ -1,61 +1,61 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+<!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: g Pages: 1 -->
 <svg width="89pt" height="260pt"
  viewBox="0.00 0.00 89.00 260.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 256)">
 <title>g</title>
-<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-256 85,-256 85,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-256 85,-256 85,4 -4,4"/>
 <!-- a -->
 <g id="node1" class="node">
 <title>a</title>
-<ellipse fill="none" stroke="#000000" cx="54" cy="-234" rx="27" ry="18"/>
-<text text-anchor="middle" x="54" y="-230.3" font-family="Times,serif" font-size="14.00" fill="#000000">a</text>
+<ellipse fill="none" stroke="black" cx="54" cy="-234" rx="27" ry="18"/>
+<text text-anchor="middle" x="54" y="-230.3" font-family="Times,serif" font-size="14.00">a</text>
 </g>
 <!-- b -->
 <g id="node2" class="node">
 <title>b</title>
-<ellipse fill="none" stroke="#000000" cx="27" cy="-162" rx="27" ry="18"/>
-<text text-anchor="middle" x="27" y="-158.3" font-family="Times,serif" font-size="14.00" fill="#000000">b</text>
+<ellipse fill="none" stroke="black" cx="27" cy="-162" rx="27" ry="18"/>
+<text text-anchor="middle" x="27" y="-158.3" font-family="Times,serif" font-size="14.00">b</text>
 </g>
 <!-- a&#45;&gt;b -->
 <g id="edge1" class="edge">
 <title>a&#45;&gt;b</title>
-<path fill="none" stroke="#000000" d="M47.3258,-216.2022C44.2524,-208.0064 40.5384,-198.1024 37.1305,-189.0145"/>
-<polygon fill="#000000" stroke="#000000" points="40.3858,-187.7274 33.5974,-179.593 33.8315,-190.1853 40.3858,-187.7274"/>
+<path fill="none" stroke="black" d="M47.6,-216.41C44.49,-208.34 40.67,-198.43 37.17,-189.35"/>
+<polygon fill="black" stroke="black" points="40.4,-188.03 33.54,-179.96 33.87,-190.55 40.4,-188.03"/>
 </g>
 <!-- c -->
 <g id="node3" class="node">
 <title>c</title>
-<ellipse fill="none" stroke="#000000" cx="27" cy="-90" rx="27" ry="18"/>
-<text text-anchor="middle" x="27" y="-86.3" font-family="Times,serif" font-size="14.00" fill="#000000">c</text>
+<ellipse fill="none" stroke="black" cx="27" cy="-90" rx="27" ry="18"/>
+<text text-anchor="middle" x="27" y="-86.3" font-family="Times,serif" font-size="14.00">c</text>
 </g>
 <!-- b&#45;&gt;c -->
 <g id="edge2" class="edge">
 <title>b&#45;&gt;c</title>
-<path fill="none" stroke="#000000" d="M27,-143.8314C27,-136.131 27,-126.9743 27,-118.4166"/>
-<polygon fill="#000000" stroke="#000000" points="30.5001,-118.4132 27,-108.4133 23.5001,-118.4133 30.5001,-118.4132"/>
+<path fill="none" stroke="black" d="M27,-143.7C27,-135.98 27,-126.71 27,-118.11"/>
+<polygon fill="black" stroke="black" points="30.5,-118.1 27,-108.1 23.5,-118.1 30.5,-118.1"/>
 </g>
 <!-- d -->
 <g id="node4" class="node">
 <title>d</title>
-<ellipse fill="none" stroke="#000000" cx="54" cy="-18" rx="27" ry="18"/>
-<text text-anchor="middle" x="54" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">d</text>
+<ellipse fill="none" stroke="black" cx="54" cy="-18" rx="27" ry="18"/>
+<text text-anchor="middle" x="54" y="-14.3" font-family="Times,serif" font-size="14.00">d</text>
 </g>
 <!-- c&#45;&gt;d -->
 <g id="edge3" class="edge">
 <title>c&#45;&gt;d</title>
-<path fill="none" stroke="#000000" d="M33.6742,-72.2022C36.7476,-64.0064 40.4616,-54.1024 43.8695,-45.0145"/>
-<polygon fill="#000000" stroke="#000000" points="47.1685,-46.1853 47.4026,-35.593 40.6142,-43.7274 47.1685,-46.1853"/>
+<path fill="none" stroke="black" d="M33.4,-72.41C36.51,-64.34 40.33,-54.43 43.83,-45.35"/>
+<polygon fill="black" stroke="black" points="47.13,-46.55 47.46,-35.96 40.6,-44.03 47.13,-46.55"/>
 </g>
 <!-- d&#45;&gt;a -->
 <g id="edge4" class="edge">
 <title>d&#45;&gt;a</title>
-<path fill="none" stroke="#000000" d="M57.7474,-35.9069C59.7466,-46.3759 61.9966,-59.8759 63,-72 66.9591,-119.8364 66.9591,-132.1636 63,-180 62.2945,-188.5247 60.9727,-197.7297 59.5551,-206.083"/>
-<polygon fill="#000000" stroke="#000000" points="56.0803,-205.6302 57.7474,-216.0931 62.9689,-206.8742 56.0803,-205.6302"/>
+<path fill="none" stroke="black" d="M57.65,-36.09C59.68,-46.43 61.98,-59.91 63,-72 67.03,-119.83 67.03,-132.17 63,-180 62.28,-188.5 60.93,-197.69 59.49,-205.99"/>
+<polygon fill="black" stroke="black" points="56.03,-205.44 57.65,-215.91 62.91,-206.71 56.03,-205.44"/>
 </g>
 </g>
 </svg>
diff --git a/content/images/diag-0d30d58bcdf5ebb25188b6c2fe72c721.png b/content/images/diag-0d30d58bcdf5ebb25188b6c2fe72c721.png
index 4d4f397..f60c276 100644
Binary files a/content/images/diag-0d30d58bcdf5ebb25188b6c2fe72c721.png and b/content/images/diag-0d30d58bcdf5ebb25188b6c2fe72c721.png differ
diff --git a/content/images/diag-1313a13d91a6f8c668ade63f72bbb61d.png b/content/images/diag-1313a13d91a6f8c668ade63f72bbb61d.png
index 3b67c60..6f563f4 100644
Binary files a/content/images/diag-1313a13d91a6f8c668ade63f72bbb61d.png and b/content/images/diag-1313a13d91a6f8c668ade63f72bbb61d.png differ
diff --git a/content/images/diag-19f9d885d07ef92b8922b13dfaa30484.png b/content/images/diag-19f9d885d07ef92b8922b13dfaa30484.png
index cf400dc..ddcccae 100644
Binary files a/content/images/diag-19f9d885d07ef92b8922b13dfaa30484.png and b/content/images/diag-19f9d885d07ef92b8922b13dfaa30484.png differ
diff --git a/content/images/diag-3d37e77421be37fa6d2e4c726a248b00.png b/content/images/diag-3d37e77421be37fa6d2e4c726a248b00.png
index fe5d0ca..e3fc46f 100644
Binary files a/content/images/diag-3d37e77421be37fa6d2e4c726a248b00.png and b/content/images/diag-3d37e77421be37fa6d2e4c726a248b00.png differ
diff --git a/content/images/diag-45bcd5e9c7484340ba070e865b4dd7ed.png b/content/images/diag-45bcd5e9c7484340ba070e865b4dd7ed.png
index b81d82a..0cb2a53 100644
Binary files a/content/images/diag-45bcd5e9c7484340ba070e865b4dd7ed.png and b/content/images/diag-45bcd5e9c7484340ba070e865b4dd7ed.png differ
diff --git a/content/images/diag-51b412adf272104af315f2f6958aeb2d.png b/content/images/diag-51b412adf272104af315f2f6958aeb2d.png
index a056430..771bb76 100644
Binary files a/content/images/diag-51b412adf272104af315f2f6958aeb2d.png and b/content/images/diag-51b412adf272104af315f2f6958aeb2d.png differ
diff --git a/content/images/diag-67c737a775095ab65bc0eea2b6f973e4.png b/content/images/diag-67c737a775095ab65bc0eea2b6f973e4.png
index 5474ddb..cc1c507 100644
Binary files a/content/images/diag-67c737a775095ab65bc0eea2b6f973e4.png and b/content/images/diag-67c737a775095ab65bc0eea2b6f973e4.png differ
diff --git a/content/images/diag-68be4940298d7ecfe80166b53c409621.png b/content/images/diag-68be4940298d7ecfe80166b53c409621.png
index d5bb190..1ee87be 100644
Binary files a/content/images/diag-68be4940298d7ecfe80166b53c409621.png and b/content/images/diag-68be4940298d7ecfe80166b53c409621.png differ
diff --git a/content/images/diag-8ac9b322bf3e2e1e7b0df17f6f64d0a6.png b/content/images/diag-8ac9b322bf3e2e1e7b0df17f6f64d0a6.png
index 3bb5616..857275b 100644
Binary files a/content/images/diag-8ac9b322bf3e2e1e7b0df17f6f64d0a6.png and b/content/images/diag-8ac9b322bf3e2e1e7b0df17f6f64d0a6.png differ
diff --git a/content/images/diag-9161b5895c4f12c5eff371d944811204.png b/content/images/diag-9161b5895c4f12c5eff371d944811204.png
index f12db7b..392c7da 100644
Binary files a/content/images/diag-9161b5895c4f12c5eff371d944811204.png and b/content/images/diag-9161b5895c4f12c5eff371d944811204.png differ
diff --git a/content/images/diag-a233f3edc65e7c991774d9233c23f186.png b/content/images/diag-a233f3edc65e7c991774d9233c23f186.png
index 50650ab..ab56b5a 100644
Binary files a/content/images/diag-a233f3edc65e7c991774d9233c23f186.png and b/content/images/diag-a233f3edc65e7c991774d9233c23f186.png differ
diff --git a/content/images/diag-b16e40e43b31e200e8ad5c32ea7f9f07.png b/content/images/diag-b16e40e43b31e200e8ad5c32ea7f9f07.png
index e91898b..161ab41 100644
Binary files a/content/images/diag-b16e40e43b31e200e8ad5c32ea7f9f07.png and b/content/images/diag-b16e40e43b31e200e8ad5c32ea7f9f07.png differ
diff --git a/content/images/diag-ceaa915a0d1af6f23f03271a51d3452c.png b/content/images/diag-ceaa915a0d1af6f23f03271a51d3452c.png
index f275fdb..1d2d4dd 100644
Binary files a/content/images/diag-ceaa915a0d1af6f23f03271a51d3452c.png and b/content/images/diag-ceaa915a0d1af6f23f03271a51d3452c.png differ
diff --git a/content/images/diag-db5a8f8925d2b52e29e82cfb0d52f076.png b/content/images/diag-db5a8f8925d2b52e29e82cfb0d52f076.png
index 12ecd9e..b648987 100644
Binary files a/content/images/diag-db5a8f8925d2b52e29e82cfb0d52f076.png and b/content/images/diag-db5a8f8925d2b52e29e82cfb0d52f076.png differ
diff --git a/content/images/diag-e8cdc9d803fb5e074386a0e096177241.png b/content/images/diag-e8cdc9d803fb5e074386a0e096177241.png
index ae88dbf..e205e2a 100644
Binary files a/content/images/diag-e8cdc9d803fb5e074386a0e096177241.png and b/content/images/diag-e8cdc9d803fb5e074386a0e096177241.png differ
diff --git a/content/images/diagram-classes.png b/content/images/diagram-classes.png
index c8a4300..010e377 100644
Binary files a/content/images/diagram-classes.png and b/content/images/diagram-classes.png differ
diff --git a/content/images/unshared-shared.png b/content/images/unshared-shared.png
index 5122478..d6dc2e0 100644
Binary files a/content/images/unshared-shared.png and b/content/images/unshared-shared.png differ