diff --git a/DFDL/attribution/org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd b/DFDL/attribution/org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd
index 38d1935a336339db4214d5f94f581db0ec4e5308..176edbf506e2af15065be90ad3bf221d385cd788 100644
--- a/DFDL/attribution/org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd
+++ b/DFDL/attribution/org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd
@@ -19,101 +19,18 @@
 <xs:schema xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"
   xmlns:xs="http://www.w3.org/2001/XMLSchema">
 
+  <xs:include schemaLocation="DFDLGeneralFormatBase.dfdl.xsd" />
+
   <!-- Intended for inclusion into other schemas. Has no targetNamespace on purpose -->
   <xs:annotation>
     <xs:appinfo source="http://www.ogf.org/dfdl/">
 
-      <!--
-        This set of properties should never change. It can be added to
-        if properties are missing, but should not be changed.
-
-        Changes should be introduced by way of defining new formats in
-        terms of this one, which override definitions. See below in
-        the file for examples.
-       -->
-      <dfdl:defineFormat name="GeneralFormatOriginal">
-        <dfdl:format
-          alignment="1"
-          alignmentUnits="bytes"
-          binaryFloatRep="ieee"
-          binaryNumberCheckPolicy="lax"
-          binaryNumberRep="binary"
-          binaryCalendarEpoch="1970-01-01T00:00:00"
-          bitOrder="mostSignificantBitFirst"
-          byteOrder="bigEndian"
-          calendarCenturyStart="53"
-          calendarCheckPolicy="strict"
-          calendarDaysInFirstWeek="4"
-          calendarFirstDayOfWeek="Sunday"
-          calendarLanguage="en"
-          calendarObserveDST="yes"
-          calendarPatternKind="implicit"
-          calendarTimeZone=""
-          choiceLengthKind="implicit"
-          decimalSigned="yes"
-          documentFinalTerminatorCanBeMissing="no"
-          emptyValueDelimiterPolicy="both"
-          encodingErrorPolicy="replace"
-          encoding="US-ASCII"
-          escapeSchemeRef=""
-          fillByte="%#r20;"
-          floating="no"
-          ignoreCase="no"
-          initiatedContent="no"
-          initiator=""
-          leadingSkip="0"
-          lengthKind="implicit"
-          lengthUnits="bytes"
-          occursCountKind="implicit"
-          outputNewLine="%LF;"
-          representation="text"
-          separator=""
-          separatorPosition="infix"
-          separatorSuppressionPolicy="anyEmpty"
-          sequenceKind="ordered"
-          terminator=""
-          textBidi="no"
-          textBooleanPadCharacter="%SP;"
-          textCalendarJustification="left"
-          textCalendarPadCharacter="%SP;"
-          textNumberCheckPolicy="lax"
-          textNumberJustification="right"
-          textNumberPadCharacter="%SP;"
-          textNumberPattern="#,##0.###;-#,##0.###"
-          textNumberRep="standard"
-          textNumberRounding="explicit"
-          textNumberRoundingIncrement="0"
-          textNumberRoundingMode="roundHalfEven"
-          textOutputMinLength="0"
-          textPadKind="none"
-          textStandardBase="10"
-          textStandardDecimalSeparator="."
-          textStandardExponentRep="E"
-          textStandardGroupingSeparator=","
-          textStandardInfinityRep="Inf"
-          textStandardNaNRep="NaN"
-          textStandardZeroRep="0"
-          textStringJustification="left"
-          textStringPadCharacter="%SP;"
-          textTrimKind="none"
-          trailingSkip="0"
-          truncateSpecifiedLengthString="no"
-          utf16Width="fixed"
-        />
-      </dfdl:defineFormat>
-
       <dfdl:defineFormat name="GeneralFormat">
-        <dfdl:format ref="GeneralFormatOriginal" />
+        <dfdl:format ref="GeneralFormatBase"
+            emptyElementParsePolicy="treatAsEmpty"/>
       </dfdl:defineFormat>
-
-      <dfdl:defineFormat name="GeneralFormatPortable">
-        <dfdl:format ref="GeneralFormatOriginal"
-          calendarTimeZone="UTC"
-          encodingErrorPolicy="error"
-        />
-      </dfdl:defineFormat>
-
+        
     </xs:appinfo>
   </xs:annotation>
- 
+
 </xs:schema>
diff --git a/DFDL/attribution/org/apache/daffodil/xsd/DFDLGeneralFormatBase.dfdl.xsd b/DFDL/attribution/org/apache/daffodil/xsd/DFDLGeneralFormatBase.dfdl.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..f22159a361218c0fb2207b8a8e12bfb086881efb
--- /dev/null
+++ b/DFDL/attribution/org/apache/daffodil/xsd/DFDLGeneralFormatBase.dfdl.xsd
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<xs:schema xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"
+  xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <!-- Intended for inclusion into other schemas. Has no targetNamespace on purpose -->
+  <xs:annotation>
+    <xs:appinfo source="http://www.ogf.org/dfdl/">
+
+      <!--
+        This set of properties should never change. It can be added to 
+        if properties are missing, but should not be changed.
+        
+        Changes should be introduced by way of defining new formats in
+        terms of this one, which override definitions. See below in 
+        the file for examples. 
+       -->
+      <dfdl:defineFormat name="GeneralFormatBase">
+        <dfdl:format
+          alignment="1"
+          alignmentUnits="bytes"
+          binaryFloatRep="ieee"
+          binaryNumberCheckPolicy="lax"
+          binaryNumberRep="binary"
+          binaryCalendarEpoch="1970-01-01T00:00:00"
+          bitOrder="mostSignificantBitFirst"
+          byteOrder="bigEndian"
+          calendarCenturyStart="53"
+          calendarCheckPolicy="strict"
+          calendarDaysInFirstWeek="4"
+          calendarFirstDayOfWeek="Sunday"
+          calendarLanguage="en"
+          calendarObserveDST="yes"
+          calendarPatternKind="implicit"
+          calendarTimeZone=""
+          choiceLengthKind="implicit"
+          decimalSigned="yes"
+          documentFinalTerminatorCanBeMissing="no"
+          emptyValueDelimiterPolicy="both"
+          encodingErrorPolicy="replace"
+          encoding="US-ASCII"
+          escapeSchemeRef=""
+          fillByte="%#r20;"
+          floating="no"
+          ignoreCase="no"
+          initiatedContent="no"
+          initiator=""
+          leadingSkip="0"
+          lengthKind="implicit"
+          lengthUnits="bytes"
+          occursCountKind="implicit"
+          outputNewLine="%LF;"
+          representation="text"
+          separator=""
+          separatorPosition="infix"
+          separatorSuppressionPolicy="anyEmpty"
+          sequenceKind="ordered"
+          terminator=""
+          textBidi="no"
+          textBooleanPadCharacter="%SP;"
+          textCalendarJustification="left"
+          textCalendarPadCharacter="%SP;"
+          textNumberCheckPolicy="lax"
+          textNumberJustification="right"
+          textNumberPadCharacter="%SP;"
+          textNumberPattern="#,##0.###;-#,##0.###"
+          textNumberRep="standard"
+          textNumberRounding="explicit"
+          textNumberRoundingIncrement="0"
+          textNumberRoundingMode="roundHalfEven"
+          textOutputMinLength="0"
+          textPadKind="none"
+          textStandardBase="10"
+          textStandardDecimalSeparator="."
+          textStandardExponentRep="E"
+          textStandardGroupingSeparator=","
+          textStandardInfinityRep="Inf"
+          textStandardNaNRep="NaN"
+          textStandardZeroRep=""
+          textStringJustification="left"
+          textStringPadCharacter="%SP;"
+          textTrimKind="none"
+          trailingSkip="0"
+          truncateSpecifiedLengthString="no"
+          utf16Width="fixed"
+        />
+      </dfdl:defineFormat>
+      
+    </xs:appinfo>
+  </xs:annotation>
+
+</xs:schema>
diff --git a/DFDL/attribution/org/apache/daffodil/xsd/DFDLGeneralFormatPortable.dfdl.xsd b/DFDL/attribution/org/apache/daffodil/xsd/DFDLGeneralFormatPortable.dfdl.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..183304d91ce270e485784b529a3a9ce8f10daf31
--- /dev/null
+++ b/DFDL/attribution/org/apache/daffodil/xsd/DFDLGeneralFormatPortable.dfdl.xsd
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<xs:schema xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"
+  xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <xs:include schemaLocation="DFDLGeneralFormatBase.dfdl.xsd" />
+
+  <!-- Intended for inclusion into other schemas. Has no targetNamespace on purpose -->
+  <xs:annotation>
+    <xs:appinfo source="http://www.ogf.org/dfdl/">
+
+      <dfdl:defineFormat name="GeneralFormat">
+        <dfdl:format ref="GeneralFormatBase"
+          calendarTimeZone="UTC"
+          encodingErrorPolicy="error"
+        />   
+      </dfdl:defineFormat>
+
+    </xs:appinfo>
+  </xs:annotation>
+
+</xs:schema>
diff --git a/DFDL/attribution/org/apache/daffodil/xsd/DFDL_part1_simpletypes.xsd b/DFDL/attribution/org/apache/daffodil/xsd/DFDL_part1_simpletypes.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..8991c147a9e591e9433cb45fbdf6d1bc7d3f4541
--- /dev/null
+++ b/DFDL/attribution/org/apache/daffodil/xsd/DFDL_part1_simpletypes.xsd
@@ -0,0 +1,713 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<xsd:schema targetNamespace="http://www.ogf.org/dfdl/dfdl-1.0/"
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"
+            attributeFormDefault="unqualified" elementFormDefault="qualified">
+
+  <!-- ============================================================= -->
+  <!-- Base DFDL Data types -->
+  <!-- ============================================================= -->
+
+  <xsd:simpleType name="DFDLExpression">
+    <xsd:annotation>
+      <xsd:documentation>A subset of XPath 2.0 expressions for use in
+        properties</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:token">
+      <xsd:pattern value="(\{[^\{].*\})|(\{\})" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="EmptyString">
+    <xsd:annotation>
+      <xsd:documentation>Matches the empty string only. No toleration of
+        whitespace.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:string">
+      <xsd:whiteSpace value="preserve" />
+      <xsd:length value="0" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DFDLExpressionOrNothing">
+    <xsd:annotation>
+      <xsd:documentation>An expression, or nothing at all.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:union memberTypes="dfdl:EmptyString dfdl:DFDLExpression" />
+    <!--
+      2012-01-04 mbeckerle - If you change the order of this union,
+      it stops enforcing the empty string aspect.
+      Reverse the order and then just empty whitespace will validate.
+    -->
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DFDLExpressionOrPatternOrNothing">
+    <xsd:annotation>
+      <xsd:documentation>An expression, a regex, or nothing at all.
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:union
+      memberTypes="dfdl:EmptyString dfdl:DFDLExpression dfdl:DFDLRegularExpression" />
+    <!--
+      2012-01-04 mbeckerle - If you change the order of this union,
+      it stops enforcing the empty string aspect.
+      Reverse the order and then just empty whitespace will validate.
+    -->
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DFDLStringLiteral">
+    <xsd:restriction base="xsd:string">
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <!-- used alone, this type will allow empty string -->
+  <xsd:simpleType name="ListOfDFDLStringLiteral">
+    <xsd:list itemType="xsd:token"/>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="NonEmptyStringLiteral">
+    <xsd:annotation>
+      <xsd:documentation>Matches a non-empty string only. No toleration of
+        whitespace in the string.</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:string">
+      <xsd:pattern value="\S+"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="NonEmptyListOfDFDLStringLiteral">
+    <xsd:restriction base="dfdl:ListOfDFDLStringLiteral">
+      <xsd:minLength value="1"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="NonEmptyListOfDFDLStringLiteral_nilValue">
+    <xsd:restriction base="dfdl:ListOfDFDLStringLiteral">
+    <!-- used for dfdl:nilValue. We can give a much clearer diagnostic with a suggestion
+         on what the user should do instead, ie did they mean to use '%ES;'. So we don't
+         check this here. -->
+      <!-- <xsd:minLength value="1"/> --> 
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <!-- used alone, this type will allow empty string -->
+  <xsd:simpleType name="ListOfInteger">
+    <xsd:list itemType="xsd:integer"/>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="NonEmptyListOfInteger">
+    <xsd:restriction base="dfdl:ListOfInteger">
+       <xsd:minLength value="1"/> 
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="NonEmptyListofDFDLStringLiteralOrNonEmptyListOfInteger">
+    <xsd:union memberTypes="dfdl:NonEmptyListOfDFDLStringLiteral dfdl:NonEmptyListOfInteger" />
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DFDLNonNegativeInteger">
+    <xsd:restriction base="xsd:int">
+      <xsd:minInclusive value="0" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DFDLRegularExpression">
+    <xsd:restriction base="xsd:string">
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DFDLQName">
+    <xsd:union>
+      <xsd:simpleType>
+        <xsd:restriction base="xsd:QName" />
+      </xsd:simpleType>
+      <xsd:simpleType>
+        <xsd:restriction base="xsd:string">
+          <xsd:length value="0" />
+        </xsd:restriction>
+      </xsd:simpleType>
+    </xsd:union>
+  </xsd:simpleType>
+
+  <!-- ============================================================= -->
+  <!-- Restrictions of base DFDL Data types -->
+  <!-- ============================================================= -->
+
+  <!-- A positive integer or 'implicit' for schema specification -->
+  <xsd:simpleType name="AlignmentType">
+    <xsd:union>
+      <xsd:simpleType>
+        <xsd:restriction base="xsd:string">
+          <xsd:enumeration value="implicit" />
+        </xsd:restriction>
+      </xsd:simpleType>
+      <xsd:simpleType>
+        <xsd:restriction base="dfdl:DFDLNonNegativeInteger">
+          <xsd:minInclusive value="1" />
+        </xsd:restriction>
+      </xsd:simpleType>
+    </xsd:union>
+  </xsd:simpleType>
+
+  <!-- A positive integer or empty string -->
+  <xsd:simpleType name="BinaryBooleanTrueRepType">
+    <xsd:union>
+      <xsd:simpleType>
+        <xsd:restriction base="xsd:string">
+          <xsd:length value="0"/>
+        </xsd:restriction>
+      </xsd:simpleType>
+      <xsd:simpleType>
+        <xsd:restriction base="dfdl:DFDLNonNegativeInteger">
+          <xsd:minInclusive value="0" />
+        </xsd:restriction>
+      </xsd:simpleType>
+    </xsd:union>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="BinaryBooleanFalseRepType">
+    <xsd:restriction base="dfdl:DFDLNonNegativeInteger">
+      <xsd:minInclusive value="0" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <!-- ========================================================== -->
+  <!-- DFDL Enumerations -->
+  <!-- ========================================================= -->
+
+  <xsd:simpleType name="EncodingEnum">
+    <xsd:restriction base="xsd:token">
+      <!-- IANA charsets or CCIDSs -->
+      <xsd:pattern value=".{1,60}" /> <!-- at least one character -->
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="TextStringJustificationEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="left" />
+      <xsd:enumeration value="right" />
+      <xsd:enumeration value="center" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="TextNumberJustificationEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="left" />
+      <xsd:enumeration value="right" />
+      <xsd:enumeration value="center" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="TextNumberRoundingEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="pattern" />
+      <xsd:enumeration value="explicit" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+
+  <xsd:simpleType name="SignCodingValue">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="twosComplement" />
+      <xsd:enumeration value="onesComplement" />
+      <xsd:enumeration value="signMagnitude" />
+      <xsd:enumeration value="unsignedBinary" />
+      <xsd:enumeration value="unsignedDecimal" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="RepresentationEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="binary" />
+      <xsd:enumeration value="text" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="TextPadKindEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="none" />
+      <xsd:enumeration value="padChar" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="TextTrimKindEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="none" />
+      <xsd:enumeration value="padChar" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="EscapeKindEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="escapeCharacter" />
+      <xsd:enumeration value="escapeBlock" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="GenerateEscapeEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="always" />
+      <xsd:enumeration value="whenNeeded" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="TextBidiTextOrderingEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="implicit" />
+      <xsd:enumeration value="visual" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="TextBidiOrientationEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="LTR" />
+      <xsd:enumeration value="RTL" />
+      <xsd:enumeration value="contextual_LTR" />
+      <xsd:enumeration value="contextual_RTL" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="TextBidiNumeralShapesEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="nominal" />
+      <xsd:enumeration value="national" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="TextNumberRepEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="standard" />
+      <xsd:enumeration value="zoned" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="TextNumberCheckPolicyEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="strict" />
+      <xsd:enumeration value="lax" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="CalendarCheckPolicyEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="strict" />
+      <xsd:enumeration value="lax" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="TextNumberBaseEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="2" />
+      <xsd:enumeration value="8" />
+      <xsd:enumeration value="10" />
+      <xsd:enumeration value="16" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="TextNumberRoundingModeEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="roundCeiling" />
+      <xsd:enumeration value="roundFloor" />
+      <xsd:enumeration value="roundDown" />
+      <xsd:enumeration value="roundUp" />
+      <xsd:enumeration value="roundHalfEven" />
+      <xsd:enumeration value="roundHalfDown" />
+      <xsd:enumeration value="roundHalfUp" />
+      <xsd:enumeration value="roundUnnecessary" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="TextZonedSignStyleEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="asciiStandard" />
+      <xsd:enumeration value="asciiTranslatedEBCDIC" />
+      <xsd:enumeration value="asciiCARealiaModified" />
+      <xsd:enumeration value="asciiTandemModified" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="BinaryNumberRepEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="packed" />
+      <xsd:enumeration value="bcd" />
+      <xsd:enumeration value="binary" />
+      <xsd:enumeration value="ibm4690Packed"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="BinaryNumberCheckPolicyEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="strict" />
+      <xsd:enumeration value="lax" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="BinaryFloatRepEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="ieee" />
+      <xsd:enumeration value="ibm390Hex" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="TextBooleanJustificationEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="left" />
+      <xsd:enumeration value="right" />
+      <xsd:enumeration value="center" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="TextCalendarJustificationEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="left" />
+      <xsd:enumeration value="right" />
+      <xsd:enumeration value="center" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="CalendarPatternKindEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="explicit" />
+      <xsd:enumeration value="implicit" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <!-- A pattern is used instead of an enumeration for compactness -->
+  <xsd:simpleType name="CalendarTimeZoneType">
+    <xsd:union>
+      <xsd:simpleType>
+        <xsd:restriction base="xsd:string">
+          <xsd:pattern value="(UTC)([+\-]([01]\d|\d)((([:][0-5]\d){1,2})?))?" />
+        </xsd:restriction>
+      </xsd:simpleType>
+      <xsd:simpleType>
+        <xsd:restriction base="xsd:string">
+          <xsd:length value="0"/>
+        </xsd:restriction>
+      </xsd:simpleType>
+    </xsd:union>
+    
+  </xsd:simpleType>
+
+  <xsd:simpleType name="CalendarLanguageType">
+    <xsd:union>
+      <xsd:simpleType>
+        <xsd:restriction base="dfdl:DFDLStringLiteral">
+        <!-- A pattern is used instead of an enumeration for compactness -->
+          <xsd:pattern value="([A-Za-z]{1,8}([-_][A-Za-z0-9]{1,8})*)"/>
+        </xsd:restriction>
+      </xsd:simpleType>
+      <xsd:simpleType>
+        <xsd:restriction base="dfdl:DFDLExpression"/>
+      </xsd:simpleType>
+    </xsd:union>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="CalendarFirstDayOfWeekEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="Monday" />
+      <xsd:enumeration value="Tuesday" />
+      <xsd:enumeration value="Wednesday" />
+      <xsd:enumeration value="Thursday" />
+      <xsd:enumeration value="Friday" />
+      <xsd:enumeration value="Saturday" />
+      <xsd:enumeration value="Sunday" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="BinaryCalendarRepEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="packed" />
+      <xsd:enumeration value="bcd" />
+      <xsd:enumeration value="binarySeconds" />
+      <xsd:enumeration value="binaryMilliseconds" />
+      <xsd:enumeration value="ibm4690Packed"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="LengthKindEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="explicit" />
+      <xsd:enumeration value="delimited" />
+      <xsd:enumeration value="implicit" />
+      <xsd:enumeration value="prefixed" />
+      <xsd:enumeration value="endOfParent" />
+      <xsd:enumeration value="pattern" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="NilKindEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="literalValue" />
+      <xsd:enumeration value="logicalValue" />
+      <xsd:enumeration value="literalCharacter" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="NilValueDelimiterPolicyEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="none" />
+      <xsd:enumeration value="initiator" />
+      <xsd:enumeration value="terminator" />
+      <xsd:enumeration value="both" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="EmptyValueDelimiterPolicyEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="none" />
+      <xsd:enumeration value="initiator" />
+      <xsd:enumeration value="terminator" />
+      <xsd:enumeration value="both" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="SequenceKindEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="ordered" />
+      <xsd:enumeration value="unordered" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="LengthUnitsEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="bits" />
+      <xsd:enumeration value="bytes" />
+      <xsd:enumeration value="characters" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="AlignmentUnitsEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="bits" />
+      <xsd:enumeration value="bytes" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="GenerateQuotesEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="always" />
+      <xsd:enumeration value="whenNeeded" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="SeparatorPositionEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="infix" />
+      <xsd:enumeration value="prefix" />
+      <xsd:enumeration value="postfix" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="SeparatorPolicyEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="required" />
+      <xsd:enumeration value="suppressed" />
+      <xsd:enumeration value="suppressedAtEndStrict" />
+      <xsd:enumeration value="suppressedAtEndLax" />
+    </xsd:restriction>
+  </xsd:simpleType>
+  
+  <xsd:simpleType name="SeparatorSuppressionPolicyEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="never" />
+      <xsd:enumeration value="trailingEmpty" />
+      <xsd:enumeration value="trailingEmptyStrict" />
+      <xsd:enumeration value="anyEmpty" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="ChoiceLengthKindEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="implicit" />
+      <xsd:enumeration value="explicit" />
+    </xsd:restriction>
+
+  </xsd:simpleType>
+
+  <xsd:simpleType name="OccursCountKindEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="fixed" />
+      <xsd:enumeration value="expression" />
+      <xsd:enumeration value="parsed" />
+      <xsd:enumeration value="stopValue" />
+      <xsd:enumeration value="implicit" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="ByteOrderEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="littleEndian" />
+      <xsd:enumeration value="bigEndian" />
+    </xsd:restriction>
+  </xsd:simpleType>
+  
+  <xsd:simpleType name="BitOrderEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="mostSignificantBitFirst" />
+      <xsd:enumeration value="leastSignificantBitFirst" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="YesNoEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="yes" />
+      <xsd:enumeration value="no" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="UTF16WidthEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="fixed" />
+      <xsd:enumeration value="variable" />
+    </xsd:restriction>
+  </xsd:simpleType>
+  
+  <xsd:simpleType name="EncodingErrorPolicyEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="error" />
+      <xsd:enumeration value="replace" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="TestKindEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="expression" />
+      <xsd:enumeration value="pattern" />
+    </xsd:restriction>
+  </xsd:simpleType>
+  
+  <xsd:simpleType name="FailureTypeEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="processingError" />
+      <xsd:enumeration value="recoverableError" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <!-- A pattern is used instead of an enumeration for compactness -->
+  <xsd:simpleType name="BinaryPackedSignCodes">
+    <xsd:restriction base="dfdl:DFDLStringLiteral">
+      <!--
+        A space separated string giving the hex sign nibbles to use for a 
+        positive
+        value, a negative value, an unsigned value, and zero.
+        Valid values for positive nibble: A, C, E, F
+        Valid values for negative nibble: B, D
+        Valid values for unsigned nibble: F
+        Valid values for zero sign: A C E F 0
+        Example: C D F C (typical S/390 usage)
+        Example: C D F 0 (handle special case for zero)
+      -->
+      <xsd:pattern value="(A|C|E|F) (B|D) (F) (A|C|E|F|0)" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="CalendarDaysInFirstWeek">
+    <xsd:restriction base="dfdl:DFDLNonNegativeInteger">
+      <xsd:minInclusive value="1" />
+      <xsd:maxInclusive value="7" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="CalendarCenturyStart">
+    <xsd:restriction base="dfdl:DFDLNonNegativeInteger">
+      <xsd:minInclusive value="0" />
+      <xsd:maxInclusive value="99" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="EmptyElementParsePolicyEnum">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="treatAsEmpty" />
+      <xsd:enumeration value="treatAsAbsent" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <!-- ============================================================= -->
+  <!-- Simple types with DFDL Expression -->
+  <!-- ============================================================= -->
+
+  <xsd:simpleType name="ByteOrderEnum_Or_DFDLExpression">
+    <xsd:union>
+      <xsd:simpleType>
+        <xsd:restriction base="dfdl:DFDLExpression" />
+      </xsd:simpleType>
+      <xsd:simpleType>
+        <xsd:restriction base="dfdl:ByteOrderEnum" />
+      </xsd:simpleType>
+    </xsd:union>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="EncodingEnum_Or_DFDLExpression">
+    <xsd:union>
+      <xsd:simpleType>
+        <xsd:restriction base="dfdl:DFDLExpression" />
+      </xsd:simpleType>
+      <xsd:simpleType>
+        <xsd:restriction base="dfdl:EncodingEnum" />
+      </xsd:simpleType>
+    </xsd:union>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="BinaryFloatRepEnum_Or_DFDLExpression">
+    <xsd:union>
+      <xsd:simpleType>
+        <xsd:restriction base="dfdl:DFDLExpression" />
+      </xsd:simpleType>
+      <xsd:simpleType>
+        <xsd:restriction base="dfdl:BinaryFloatRepEnum" />
+      </xsd:simpleType>
+    </xsd:union>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DFDLStringLiteral_Or_DFDLExpression">
+    <xsd:union>
+      <xsd:simpleType>
+        <xsd:restriction base="dfdl:DFDLExpression" />
+      </xsd:simpleType>
+      <xsd:simpleType>
+        <xsd:restriction base="dfdl:DFDLStringLiteral" />
+      </xsd:simpleType>
+    </xsd:union>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="ListOfDFDLStringLiteral_Or_DFDLExpression">
+    <xsd:union>
+      <xsd:simpleType>
+        <xsd:restriction base="dfdl:DFDLExpression" />
+      </xsd:simpleType>
+      <xsd:simpleType>
+        <xsd:restriction base="dfdl:ListOfDFDLStringLiteral" />
+      </xsd:simpleType>
+    </xsd:union>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="DFDLNonNegativeInteger_Or_DFDLExpression">
+    <xsd:union>
+      <xsd:simpleType>
+        <xsd:restriction base="dfdl:DFDLExpression" />
+      </xsd:simpleType>
+      <xsd:simpleType>
+        <xsd:restriction base="dfdl:DFDLNonNegativeInteger" />
+      </xsd:simpleType>
+    </xsd:union>
+  </xsd:simpleType>
+
+</xsd:schema>
diff --git a/DFDL/attribution/org/apache/daffodil/xsd/DFDL_part2_attributes.xsd b/DFDL/attribution/org/apache/daffodil/xsd/DFDL_part2_attributes.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..644b54a25f8d6ce3ebd719baae6cac3cb0a6e2dd
--- /dev/null
+++ b/DFDL/attribution/org/apache/daffodil/xsd/DFDL_part2_attributes.xsd
@@ -0,0 +1,1047 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<xsd:schema targetNamespace="http://www.ogf.org/dfdl/dfdl-1.0/"
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+  xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"
+  xmlns:dfdlx="http://www.ogf.org/dfdl/dfdl-1.0/extensions"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:daf="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:ext"
+  attributeFormDefault="unqualified" elementFormDefault="qualified">
+
+  <xsd:include schemaLocation="DFDL_part1_simpletypes.xsd" />
+  
+  <!-- Add schemaLocation="dafext.xsd" to allow NetBeans XML validation to work -->
+  <xsd:import namespace="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:ext" schemaLocation="dafext.xsd"/>
+  <xsd:import namespace="http://www.ogf.org/dfdl/dfdl-1.0/extensions"/>
+
+  <!-- ==================================================================== -->
+  <!-- Basic Attributes and Attribute Groups representing DFDL properties -->
+  <!-- ==================================================================== -->
+
+  <xsd:attribute name="ref" type="xsd:QName" />
+
+  <!--
+    This attribute group is a way to allow any attribute that is NOT in the
+    dfdl namespace to be used in elements. This anyAttribute matches non-dfdl
+    namespace attributes because the targetNamespace in this file is the dfdl
+    namespace, and the "namespace" attribute is "##other". The
+    processContexts="lax" says that these non-dfdl namespace attributes will be
+    validated if a schema for them can be found, but otherwise validation for
+    them will be skipped. This can be used to allow for DFDL schema authors to
+    use custom namespace attributes/annotations in their DFDL schemas without
+    us needing to know about them.
+
+    This means that by default, dfdl namespace attributes will not be allowed
+    at all. However, if we add dfdl namespace definitions alongside this
+    attribute group, those dfdl namespace attributes WILL be allowed and
+    strictly validated using standard XML schema validation rules. This has the
+    effect of strictly validating dfdl namespace attributes, but being lax
+    about all other attributes.
+  -->
+  <xsd:attributeGroup name="anyOther">
+    <xsd:anyAttribute namespace="##other" processContents="lax" />
+  </xsd:attributeGroup>
+
+  <!--
+    This works the same way as the anyOther attributeGroup defined above,
+    except it applies to elements instead of attributes (xs:any vs
+    xs:anyAttribute). See the description above for how this group works to
+    enable strict validation of dfdl namespace elements and lax validation of
+    other elements. Note that in addition to specifying ##other (i.e. non-DFDL
+    namespace) as lax, we must also specify ##local (i.e. no-namespace) as lax.
+    Only specifying ##other does not match no-namespace elements.
+  -->
+  <xsd:group name="anyOther">
+    <xsd:choice>
+      <xsd:any namespace="##other" processContents="lax" />
+      <xsd:any namespace="##local" processContents="lax" />
+    </xsd:choice>
+  </xsd:group>
+
+  <xsd:attributeGroup name="BaseAG">
+    <xsd:attribute name="ref" type="xsd:QName" />
+    <xsd:anyAttribute namespace="http://www.ibm.com/xmlns/dfdl/testData" processContents="lax"/> 
+  </xsd:attributeGroup>
+
+  <!-- 11 Properties Common to Both Content and Framing -->
+  <xsd:attribute name="byteOrder"
+    type="dfdl:ByteOrderEnum_Or_DFDLExpression" />
+  
+  <!-- ADDED PER PUBLIC COMMENT ON Sept 2013 DRAFT -->
+  <xsd:attribute name="bitOrder" type="dfdl:BitOrderEnum"/>
+  
+  <xsd:attribute name="encoding"
+    type="dfdl:EncodingEnum_Or_DFDLExpression" />
+  <xsd:attribute name="utf16Width" type="dfdl:UTF16WidthEnum" />
+  <xsd:attribute name="ignoreCase" type="dfdl:YesNoEnum" />
+  <xsd:attribute name="choiceBranchKey" type="dfdl:ListOfDFDLStringLiteral" />
+  <xsd:attribute name="textBidi" type="dfdl:YesNoEnum"/>
+  
+  <!-- Added to DFDL -->
+  <xsd:attribute name="encodingErrorPolicy" type="dfdl:EncodingErrorPolicyEnum"/>
+
+  <xsd:attributeGroup name="CommonAG">
+    <xsd:attribute name="byteOrder"
+      type="dfdl:ByteOrderEnum_Or_DFDLExpression" />
+      
+    <xsd:attribute name="bitOrder" type="dfdl:BitOrderEnum"/>
+    <xsd:attribute ref="daf:parseUnparsePolicy"/> <!-- backwards compatibility -->
+    <xsd:attribute ref="dfdlx:parseUnparsePolicy"/>
+    <xsd:attribute name="emptyElementParsePolicy" type="dfdl:EmptyElementParsePolicyEnum"/>
+    <xsd:attribute ref="dfdlx:emptyElementParsePolicy"/> <!-- deprecated -->
+
+    <xsd:attribute name="encoding"
+      type="dfdl:EncodingEnum_Or_DFDLExpression" />
+    <xsd:attribute name="utf16Width" type="dfdl:UTF16WidthEnum" />
+    <xsd:attribute name="encodingErrorPolicy" type="dfdl:EncodingErrorPolicyEnum"/>
+    <xsd:attribute name="ignoreCase" type="dfdl:YesNoEnum" />
+    <xsd:attribute name="choiceBranchKey" type="dfdl:ListOfDFDLStringLiteral" />
+    <xsd:attribute ref="dfdlx:choiceBranchKeyRanges" />
+    <xsd:attribute name="textBidi" type="dfdl:YesNoEnum"/>
+  </xsd:attributeGroup>
+
+  <!-- 12.1 Aligned Data -->
+  <xsd:attribute name="alignment" type="dfdl:AlignmentType" />
+  <xsd:attribute name="alignmentUnits" type="dfdl:AlignmentUnitsEnum" />
+  <xsd:attribute name="fillByte" type="dfdl:DFDLStringLiteral" />
+  <xsd:attribute name="leadingSkip" type="dfdl:DFDLNonNegativeInteger" />
+  <xsd:attribute name="trailingSkip" type="dfdl:DFDLNonNegativeInteger" />
+
+  <xsd:attributeGroup name="AlignmentAG">
+    <xsd:attribute name="alignment" type="dfdl:AlignmentType" />
+    <xsd:attribute name="alignmentUnits" type="dfdl:AlignmentUnitsEnum" />
+    <xsd:attribute name="fillByte" type="dfdl:DFDLStringLiteral" />
+    <xsd:attribute name="leadingSkip" type="dfdl:DFDLNonNegativeInteger" />
+    <xsd:attribute name="trailingSkip" type="dfdl:DFDLNonNegativeInteger" />
+    <xsd:attribute ref="dfdlx:alignmentKind" />
+  </xsd:attributeGroup>
+
+  <!-- 12.2 Delimiters and Text Mark up -->
+  <xsd:attribute name="initiator"
+    type="dfdl:ListOfDFDLStringLiteral_Or_DFDLExpression" />
+  <xsd:attribute name="terminator"
+    type="dfdl:ListOfDFDLStringLiteral_Or_DFDLExpression" />
+  <xsd:attribute name="outputNewLine" type="dfdl:DFDLStringLiteral" />
+  <xsd:attribute name="emptyValueDelimiterPolicy" type="dfdl:EmptyValueDelimiterPolicyEnum" />
+
+  <xsd:attributeGroup name="MarkupAG">
+    <xsd:attribute name="initiator"
+      type="dfdl:ListOfDFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute name="terminator"
+      type="dfdl:ListOfDFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute name="outputNewLine" type="dfdl:DFDLStringLiteral" />
+  </xsd:attributeGroup>
+
+  <xsd:attributeGroup name="NonGroupMarkupAG">
+    <xsd:attribute name="emptyValueDelimiterPolicy"
+      type="dfdl:EmptyValueDelimiterPolicyEnum" />
+  </xsd:attributeGroup>
+
+  <!-- 12.3 Length Properties -->
+  <xsd:attribute name="lengthKind" type="dfdl:LengthKindEnum" />
+  <xsd:attribute name="length"
+    type="dfdl:DFDLNonNegativeInteger_Or_DFDLExpression" />
+  <xsd:attribute name="lengthPattern" type="dfdl:DFDLRegularExpression" />
+  <xsd:attribute name="lengthUnits" type="dfdl:LengthUnitsEnum" />
+  <xsd:attribute name="prefixIncludesPrefixLength" type="dfdl:YesNoEnum" />
+  <xsd:attribute name="prefixLengthType" type="xsd:QName" />
+
+  <xsd:attributeGroup name="LengthAG">
+    <xsd:attribute name="lengthKind" type="dfdl:LengthKindEnum" />
+    <xsd:attribute name="length"
+      type="dfdl:DFDLNonNegativeInteger_Or_DFDLExpression" />
+    <xsd:attribute name="lengthPattern" type="dfdl:DFDLRegularExpression" />
+    <xsd:attribute name="lengthUnits" type="dfdl:LengthUnitsEnum" />
+    <xsd:attribute name="prefixIncludesPrefixLength" type="dfdl:YesNoEnum" />
+    <xsd:attribute name="prefixLengthType" type="xsd:QName" />
+  </xsd:attributeGroup>
+
+  <!-- 13 Simple Types -->
+  <xsd:attribute name="representation" type="dfdl:RepresentationEnum" />
+
+  <xsd:attributeGroup name="RepresentationAG">
+    <xsd:attribute name="representation" type="dfdl:RepresentationEnum" />
+  </xsd:attributeGroup>
+
+  <!-- 14.4 Simple or complex local element or element reference -->
+  <xsd:attribute name="floating" type="dfdl:YesNoEnum" />
+
+  <xsd:attributeGroup name="FloatingAG">
+    <xsd:attribute name="floating" type="dfdl:YesNoEnum" />
+  </xsd:attributeGroup>
+
+  <!--13.2 Properties Common to All Simple Types with Text representation -->
+  <xsd:attribute name="textPadKind" type="dfdl:TextPadKindEnum" />
+  <xsd:attribute name="textTrimKind" type="dfdl:TextTrimKindEnum" />
+  <xsd:attribute name="textOutputMinLength" type="dfdl:DFDLNonNegativeInteger" />
+  <xsd:attribute name="escapeSchemeRef" type="xsd:QName" />
+
+  <xsd:attributeGroup name="SimpleTypesTextAG">
+    <xsd:attribute name="textPadKind" type="dfdl:TextPadKindEnum" />
+    <xsd:attribute name="textTrimKind" type="dfdl:TextTrimKindEnum" />
+    <xsd:attribute name="textOutputMinLength" type="dfdl:DFDLNonNegativeInteger" />
+    <xsd:attribute name="escapeSchemeRef" type="dfdl:DFDLQName" />
+  </xsd:attributeGroup>
+
+  <!-- 13.2.1 Escape Scheme -->
+  <!-- Note that these can never appear in short form -->
+  <xsd:attributeGroup name="EscapeSchemeAG">
+    <xsd:attribute name="escapeKind" type="dfdl:EscapeKindEnum" />
+    <xsd:attribute name="escapeCharacter"
+      type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute name="escapeBlockStart" type="dfdl:DFDLStringLiteral" />
+    <xsd:attribute name="escapeBlockEnd" type="dfdl:DFDLStringLiteral" />
+    <xsd:attribute name="escapeEscapeCharacter"
+      type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute name="extraEscapedCharacters" type="dfdl:ListOfDFDLStringLiteral" />
+    <xsd:attribute name="generateEscapeBlock" type="dfdl:GenerateEscapeEnum" />
+  </xsd:attributeGroup>
+
+  <!-- 13.3 Properties for Bidirectional support for all Simple Types with 
+    Text representation -->
+  <xsd:attribute name="textBidiTextOrdering" type="dfdl:TextBidiTextOrderingEnum" />
+  <xsd:attribute name="textBidiOrientation" type="dfdl:TextBidiOrientationEnum" />
+  <xsd:attribute name="textBidiSymmetric" type="dfdl:YesNoEnum" />
+  <xsd:attribute name="textBidiTextShaped" type="dfdl:YesNoEnum" />
+  <xsd:attribute name="textBidiNumeralShapes" type="dfdl:TextBidiNumeralShapesEnum" />
+
+  <xsd:attributeGroup name="TextBidiSchemeAG">
+    <xsd:attribute name="textBidiTextOrdering" type="dfdl:TextBidiTextOrderingEnum" />
+    <xsd:attribute name="textBidiOrientation" type="dfdl:TextBidiOrientationEnum" />
+    <xsd:attribute name="textBidiSymmetric" type="dfdl:YesNoEnum" />
+    <xsd:attribute name="textBidiTextShaped" type="dfdl:YesNoEnum" />
+    <xsd:attribute name="textBidiNumeralShapes" type="dfdl:TextBidiNumeralShapesEnum" />
+  </xsd:attributeGroup>
+
+  <!-- 13.4 Properties Specific to Strings with Text representation -->
+  <xsd:attribute name="textStringJustification" type="dfdl:TextStringJustificationEnum" />
+  <xsd:attribute name="textStringPadCharacter" type="dfdl:NonEmptyStringLiteral" />
+  <xsd:attribute name="truncateSpecifiedLengthString"
+    type="dfdl:YesNoEnum" />
+
+  <xsd:attributeGroup name="StringTextAG">
+    <xsd:attribute name="textStringJustification" type="dfdl:TextStringJustificationEnum" />
+    <xsd:attribute name="textStringPadCharacter" type="dfdl:NonEmptyStringLiteral" />
+    <xsd:attribute name="truncateSpecifiedLengthString"
+      type="dfdl:YesNoEnum" />
+  </xsd:attributeGroup>
+
+  <!-- Properties Specific to Number with Text or Binary representation -->
+  <xsd:attribute name="decimalSigned" type="dfdl:YesNoEnum" />
+
+  <xsd:attributeGroup name="NumberAG">
+    <xsd:attribute name="decimalSigned" type="dfdl:YesNoEnum" />
+  </xsd:attributeGroup>
+
+  <!-- Properties Specific to Number with Text representation -->
+  <xsd:attribute name="textNumberRep" type="dfdl:TextNumberRepEnum" />
+  <xsd:attribute name="textNumberJustification" type="dfdl:TextNumberJustificationEnum" />
+  <xsd:attribute name="textNumberPadCharacter" type="dfdl:DFDLStringLiteral" />
+  <xsd:attribute name="textStandardBase" type="dfdl:TextNumberBaseEnum" />
+
+  <xsd:attributeGroup name="NumberTextAG">
+    <xsd:attribute name="textNumberRep" type="dfdl:TextNumberRepEnum" />
+    <xsd:attribute name="textNumberJustification" type="dfdl:TextNumberJustificationEnum" />
+    <xsd:attribute name="textNumberPadCharacter" type="dfdl:DFDLStringLiteral" />
+    <xsd:attribute name="textStandardBase" type="dfdl:TextNumberBaseEnum" />
+  </xsd:attributeGroup>
+
+  <!-- Text number format attributes -->
+  <xsd:attribute name="textNumberPattern" type="dfdl:DFDLStringLiteral" />
+  <xsd:attribute name="textStandardGroupingSeparator"
+    type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />
+  <xsd:attribute name="textStandardDecimalSeparator"
+    type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />
+  <xsd:attribute name="textStandardExponentRep"
+    type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />  
+  <!-- deprecated form accepted by IBM DFDL as of 2018-10-30 -->
+  <xsd:attribute name="textStandardExponentCharacter"
+    type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />
+  <xsd:attribute name="textNumberCheckPolicy" type="dfdl:TextNumberCheckPolicyEnum" />
+  <xsd:attribute name="textStandardInfinityRep" type="dfdl:DFDLStringLiteral" />
+  <xsd:attribute name="textStandardNaNRep" type="dfdl:DFDLStringLiteral" />
+  <xsd:attribute name="textNumberRoundingMode" type="dfdl:TextNumberRoundingModeEnum" />
+  <xsd:attribute name="textNumberRounding" type="dfdl:TextNumberRoundingEnum" />
+  <xsd:attribute name="textNumberRoundingIncrement" type="xsd:double" />
+  <xsd:attribute name="textZonedSignStyle" type="dfdl:TextZonedSignStyleEnum" />
+  <xsd:attribute name="textStandardZeroRep" type="dfdl:ListOfDFDLStringLiteral" />
+
+  <xsd:attributeGroup name="TextNumberFormatAG">
+    <xsd:attribute name="textNumberPattern" type="dfdl:DFDLStringLiteral" />
+    <xsd:attribute name="textStandardGroupingSeparator"
+      type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute name="textStandardDecimalSeparator"
+      type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute name="textStandardExponentRep"
+      type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />
+    <!-- deprecated form accepted by IBM DFDL as of 2018-10-30 -->
+    <xsd:attribute name="textStandardExponentCharacter"
+      type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute name="textNumberCheckPolicy" type="dfdl:TextNumberCheckPolicyEnum" />
+    <xsd:attribute name="textStandardInfinityRep" type="dfdl:DFDLStringLiteral" />
+    <xsd:attribute name="textStandardNaNRep" type="dfdl:DFDLStringLiteral" />
+    <xsd:attribute name="textNumberRoundingMode" type="dfdl:TextNumberRoundingModeEnum" />
+    <xsd:attribute name="textNumberRounding" type="dfdl:TextNumberRoundingEnum" />
+    <xsd:attribute name="textNumberRoundingIncrement"
+      type="xsd:double" />
+    <xsd:attribute name="textZonedSignStyle" type="dfdl:TextZonedSignStyleEnum" />
+    <xsd:attribute name="textStandardZeroRep" type="dfdl:ListOfDFDLStringLiteral" />
+  </xsd:attributeGroup>
+
+  <!-- 13.6 Properties Specific to Number with Binary representation -->
+  <xsd:attribute name="binaryNumberRep" type="dfdl:BinaryNumberRepEnum" />
+  <xsd:attribute name="binaryDecimalVirtualPoint" type="xsd:int" />
+  <xsd:attribute name="binaryPackedSignCodes" type="dfdl:BinaryPackedSignCodes" />
+  <xsd:attribute name="binaryNumberCheckPolicy" type="dfdl:BinaryNumberCheckPolicyEnum" />
+
+  <xsd:attributeGroup name="NumberBinaryAG">
+    <xsd:attribute name="binaryNumberRep" type="dfdl:BinaryNumberRepEnum" />
+    <xsd:attribute name="binaryDecimalVirtualPoint" type="xsd:int" />
+    <xsd:attribute name="binaryPackedSignCodes" type="dfdl:BinaryPackedSignCodes" />
+    <xsd:attribute name="binaryNumberCheckPolicy" type="dfdl:BinaryNumberCheckPolicyEnum" />
+  </xsd:attributeGroup>
+
+  <!-- 13.7 Float/Double with Binary representation -->
+  <xsd:attribute name="binaryFloatRep"
+    type="dfdl:BinaryFloatRepEnum_Or_DFDLExpression" />
+
+  <xsd:attributeGroup name="FloatBinaryAG">
+    <xsd:attribute name="binaryFloatRep"
+      type="dfdl:BinaryFloatRepEnum_Or_DFDLExpression" />
+  </xsd:attributeGroup>
+
+  <!-- 13.8 Properties Specific to Boolean with Text representation -->
+  <xsd:attribute name="textBooleanTrueRep"
+    type="dfdl:ListOfDFDLStringLiteral_Or_DFDLExpression" />
+  <xsd:attribute name="textBooleanFalseRep"
+    type="dfdl:ListOfDFDLStringLiteral_Or_DFDLExpression" />
+  <xsd:attribute name="textBooleanJustification" type="dfdl:TextBooleanJustificationEnum" />
+  <xsd:attribute name="textBooleanPadCharacter" type="dfdl:DFDLStringLiteral" />
+
+  <xsd:attributeGroup name="BooleanTextAG">
+    <xsd:attribute name="textBooleanTrueRep"
+      type="dfdl:ListOfDFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute name="textBooleanFalseRep"
+      type="dfdl:ListOfDFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute name="textBooleanJustification"
+      type="dfdl:TextBooleanJustificationEnum" />
+    <xsd:attribute name="textBooleanPadCharacter" type="dfdl:DFDLStringLiteral" />
+  </xsd:attributeGroup>
+
+  <!-- 13.9 Properties Specific to Boolean with Binary representation -->
+  <xsd:attribute name="binaryBooleanTrueRep" type="dfdl:BinaryBooleanTrueRepType" />
+  <xsd:attribute name="binaryBooleanFalseRep" type="dfdl:BinaryBooleanFalseRepType" />
+
+  <xsd:attributeGroup name="BooleanBinaryAG">
+    <xsd:attribute name="binaryBooleanTrueRep" type="dfdl:BinaryBooleanTrueRepType" />
+    <xsd:attribute name="binaryBooleanFalseRep" type="dfdl:BinaryBooleanFalseRepType" />
+  </xsd:attributeGroup>
+
+  <!-- 13.10 Properties Specific to Calendar Format -->
+  <xsd:attribute name="calendarPattern" type="dfdl:DFDLStringLiteral" />
+  <xsd:attribute name="calendarPatternKind" type="dfdl:CalendarPatternKindEnum" />
+  <xsd:attribute name="calendarCheckPolicy" type="dfdl:CalendarCheckPolicyEnum" />
+  <xsd:attribute name="calendarTimeZone" type="dfdl:CalendarTimeZoneType" />
+  <xsd:attribute name="calendarObserveDST" type="dfdl:YesNoEnum" />
+  <xsd:attribute name="calendarFirstDayOfWeek" type="dfdl:CalendarFirstDayOfWeekEnum" />
+  <xsd:attribute name="calendarDaysInFirstWeek" type="dfdl:CalendarDaysInFirstWeek" />
+  <xsd:attribute name="calendarCenturyStart" type="dfdl:CalendarCenturyStart" />
+  <xsd:attribute name="calendarLanguage" type="dfdl:CalendarLanguageType" />
+
+  <xsd:attributeGroup name="CalendarFormatAG">
+    <xsd:attribute name="calendarPattern" type="dfdl:DFDLStringLiteral" />
+    <xsd:attribute name="calendarPatternKind" type="dfdl:CalendarPatternKindEnum" />
+    <xsd:attribute name="calendarCheckPolicy" type="dfdl:CalendarCheckPolicyEnum" />
+    <xsd:attribute name="calendarTimeZone" type="dfdl:CalendarTimeZoneType" />
+    <xsd:attribute name="calendarObserveDST" type="dfdl:YesNoEnum" />
+    <xsd:attribute name="calendarFirstDayOfWeek" type="dfdl:CalendarFirstDayOfWeekEnum" />
+    <xsd:attribute name="calendarDaysInFirstWeek" type="dfdl:CalendarDaysInFirstWeek" />
+    <xsd:attribute name="calendarCenturyStart" type="dfdl:CalendarCenturyStart" />
+    <xsd:attribute name="calendarLanguage" type="dfdl:CalendarLanguageType" />
+  </xsd:attributeGroup>
+
+  <!-- 13.11 Properties Specific to Calendar with Text Representation -->
+  <xsd:attribute name="textCalendarJustification" type="dfdl:TextCalendarJustificationEnum" />
+  <xsd:attribute name="textCalendarPadCharacter" type="dfdl:DFDLStringLiteral" />
+
+  <xsd:attributeGroup name="CalendarTextAG">
+    <xsd:attribute name="textCalendarJustification"
+      type="dfdl:TextCalendarJustificationEnum" />
+    <xsd:attribute name="textCalendarPadCharacter" type="dfdl:DFDLStringLiteral" />
+  </xsd:attributeGroup>
+
+  <!-- 13.12 Properties Specific to Calendar with Binary Representation -->
+  <xsd:attribute name="binaryCalendarRep" type="dfdl:BinaryCalendarRepEnum" />
+  <xsd:attribute name="binaryCalendarEpoch" type="xsd:string" />
+
+  <xsd:attributeGroup name="CalendarBinaryAG">
+    <xsd:attribute name="binaryCalendarRep" type="dfdl:BinaryCalendarRepEnum" />
+    <xsd:attribute name="binaryCalendarEpoch" type="xsd:string" />
+  </xsd:attributeGroup>
+
+  <!-- 13.13 Properties Specific to Opaque Types (hexBinary) -->
+  <xsd:attributeGroup name="OpaqueAG">
+  </xsd:attributeGroup>
+
+  <!-- 13.14 Properties for Nillable Elements -->
+  <xsd:attribute name="nilKind" type="dfdl:NilKindEnum" />
+  <xsd:attribute name="nilValue" type="dfdl:NonEmptyListOfDFDLStringLiteral_nilValue" />
+  <xsd:attribute name="nilValueDelimiterPolicy" type="dfdl:NilValueDelimiterPolicyEnum" />
+
+  <xsd:attributeGroup name="NillableAG">
+    <xsd:attribute name="nilKind" type="dfdl:NilKindEnum" />
+    <xsd:attribute name="nilValue" type="dfdl:NonEmptyListOfDFDLStringLiteral_nilValue" />
+    <xsd:attribute name="nilValueDelimiterPolicy" type="dfdl:NilValueDelimiterPolicyEnum" />
+  </xsd:attributeGroup>
+
+  <!-- 13.15 Properties for Default Value Control -->
+  <xsd:attribute name="useNilForDefault" type="dfdl:YesNoEnum" />
+
+  <xsd:attributeGroup name="DefaultValueControlAG">
+    <xsd:attribute name="useNilForDefault" type="dfdl:YesNoEnum" />
+  </xsd:attributeGroup>
+
+  <!-- 14 Sequence Groups -->
+  <xsd:attribute name="sequenceKind" type="dfdl:SequenceKindEnum" />
+  <xsd:attribute name="hiddenGroupRef" type="xsd:QName" />
+
+  <xsd:attributeGroup name="SequenceAG">
+    <xsd:attribute name="sequenceKind" type="dfdl:SequenceKindEnum" />
+    <xsd:attribute name="hiddenGroupRef" type="xsd:QName" />
+  </xsd:attributeGroup>
+
+  <!-- 14.2 Sequence Groups with Delimiters -->
+  <xsd:attribute name="separator"
+    type="dfdl:ListOfDFDLStringLiteral_Or_DFDLExpression" />
+  <xsd:attribute name="separatorPosition" type="dfdl:SeparatorPositionEnum" />
+  <xsd:attribute name="separatorPolicy" type="dfdl:SeparatorPolicyEnum" />
+  <xsd:attribute name="separatorSuppressionPolicy" type="dfdl:SeparatorSuppressionPolicyEnum" />  
+
+  <xsd:attributeGroup name="SeparatorAG">
+    <xsd:attribute name="separator"
+      type="dfdl:ListOfDFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute name="separatorPosition" type="dfdl:SeparatorPositionEnum" />
+    <xsd:attribute name="separatorPolicy" type="dfdl:SeparatorPolicyEnum" />
+    <xsd:attribute name="separatorSuppressionPolicy" type="dfdl:SeparatorSuppressionPolicyEnum" />  
+  </xsd:attributeGroup>
+
+  <xsd:attribute name="initiatedContent" type="dfdl:YesNoEnum" />
+  <xsd:attributeGroup name="GroupCommonAG">
+    <xsd:attribute name="initiatedContent" type="dfdl:YesNoEnum" />
+  </xsd:attributeGroup>
+
+  <!-- 15 Choices -->
+  <xsd:attribute name="choiceLengthKind" type="dfdl:ChoiceLengthKindEnum" />
+  <xsd:attribute name="choiceLength" type="dfdl:DFDLNonNegativeInteger" />
+  <xsd:attribute name="choiceDispatchKey" type="dfdl:DFDLExpression" />
+
+  <xsd:attributeGroup name="ChoiceAG">
+    <xsd:attribute name="choiceLengthKind" type="dfdl:ChoiceLengthKindEnum" />
+    <xsd:attribute name="choiceLength" type="dfdl:DFDLNonNegativeInteger" />
+    <xsd:attribute name="choiceDispatchKey" type="dfdl:DFDLExpression" />
+  </xsd:attributeGroup>
+
+  <!--16 Arrays and Optional Elements: Properties for Repeating and Variable-Occurrence 
+    Data Items -->
+  <xsd:attribute name="occursCountKind" type="dfdl:OccursCountKindEnum" />
+  <xsd:attribute name="occursCount" type="dfdl:DFDLExpression" />
+  <xsd:attribute name="occursStopValue" type="dfdl:ListOfDFDLStringLiteral" />
+
+  <xsd:attributeGroup name="OccursAG">
+    <xsd:attribute name="occursCountKind" type="dfdl:OccursCountKindEnum" />
+    <xsd:attribute name="occursCount" type="dfdl:DFDLExpression" />
+    <xsd:attribute name="occursStopValue" type="dfdl:ListOfDFDLStringLiteral" />
+  </xsd:attributeGroup>
+
+  <!-- 19 Calculated Value Properties. -->
+  <xsd:attribute name="inputValueCalc" type="dfdl:DFDLExpression" />
+  <xsd:attribute name="outputValueCalc" type="dfdl:DFDLExpression" />
+
+  <xsd:attributeGroup name="CalculatedValueAG">
+    <xsd:attribute name="inputValueCalc" type="dfdl:DFDLExpression" />
+    <xsd:attribute name="outputValueCalc" type="dfdl:DFDLExpression" />
+  </xsd:attributeGroup>
+
+  <!-- document only markup properties -->
+  <xsd:attribute name="documentFinalTerminatorCanBeMissing"
+    type="dfdl:YesNoEnum" />
+
+  <xsd:attributeGroup name="DocumentPropertiesAG">
+    <xsd:attribute name="documentFinalTerminatorCanBeMissing"
+      type="dfdl:YesNoEnum" />
+  </xsd:attributeGroup>
+
+
+  <!-- ========================================================== -->
+  <!-- Enumeration of simple name of all DFDL properties that can -->
+  <!-- appear in element form. -->
+  <!-- ========================================================== -->
+
+  <xsd:simpleType name="PropertyNameType">
+    <xsd:restriction base="xsd:string">
+
+      <!-- List of properties that are string types -->
+      <xsd:enumeration value="initiator" />
+      <xsd:enumeration value="terminator" />
+      <xsd:enumeration value="documentFinalTerminatorCanBeMissing" />
+      <xsd:enumeration value="outputNewLine" />
+      <xsd:enumeration value="length" />
+      <xsd:enumeration value="lengthPattern" />
+      <xsd:enumeration value="textStringPadCharacter" />
+      <xsd:enumeration value="textNumberPadCharacter" />
+      <xsd:enumeration value="textCalendarPadCharacter" />
+      <xsd:enumeration value="textBooleanPadCharacter" />
+      <xsd:enumeration value="escapeCharacter" />
+      <xsd:enumeration value="escapeBlockStart" />
+      <xsd:enumeration value="escapeBlockEnd" />
+      <xsd:enumeration value="escapeEscapeCharacter" />
+      <xsd:enumeration value="extraEscapedCharacters" />
+      <xsd:enumeration value="textNumberPattern" />
+      <xsd:enumeration value="textStandardGroupingSeparator" />
+      <xsd:enumeration value="textStandardDecimalSeparator" />
+      <xsd:enumeration value="textStandardExponentRep" />
+      <!-- deprecated form accepted by IBM DFDL as of 2018-10-30 -->
+      <xsd:enumeration value="textStandardExponentCharacter" />
+      <xsd:enumeration value="textStandardInfinityRep" />
+      <xsd:enumeration value="textStandardNaNRep" />
+      <xsd:enumeration value="textStandardZeroRep" />
+      <xsd:enumeration value="textBooleanTrueRep" />
+      <xsd:enumeration value="textBooleanFalseRep" />
+      <xsd:enumeration value="calendarPattern" />
+      <xsd:enumeration value="calendarLanguage" />
+      <xsd:enumeration value="binaryCalendarEpoch" />
+      <xsd:enumeration value="nilValue" />
+      <xsd:enumeration value="separator" />
+      <xsd:enumeration value="occursStopValue" />
+      <xsd:enumeration value="inputValueCalc" />
+      <xsd:enumeration value="outputValueCalc" />
+
+      <!-- Bidirectional Properties for all Simple Types with Text representation -->
+      <xsd:enumeration value="textBidi" />
+      <xsd:enumeration value="textBidiTextOrdering" />
+      <xsd:enumeration value="textBidiOrientation" />
+      <xsd:enumeration value="textBidiSymmetric" />
+      <xsd:enumeration value="textBidiTextShaped" />
+      <xsd:enumeration value="textBidiNumeralShapes" />
+
+      <!-- List of properties with non-string types -->
+      <xsd:enumeration value="byteOrder" />
+      <xsd:enumeration value="bitOrder"/>
+      <xsd:enumeration value="encoding" />
+      <xsd:enumeration value="encodingErrorPolicy"/>
+      <xsd:enumeration value="emptyElementParsePolicy"/>
+      <xsd:enumeration value="utf16Width" />
+      <xsd:enumeration value="ignoreCase" />
+
+      <xsd:enumeration value="alignment" />
+      <xsd:enumeration value="alignmentUnits" />
+      <xsd:enumeration value="fillByte" />
+      <xsd:enumeration value="leadingSkip" />
+      <xsd:enumeration value="trailingSkip" />
+
+      <xsd:enumeration value="lengthKind" />
+      <xsd:enumeration value="lengthUnits" />
+
+      <xsd:enumeration value="prefixIncludesPrefixLength" />
+      <xsd:enumeration value="prefixLengthType" />
+
+      <xsd:enumeration value="representation" />
+
+      <xsd:enumeration value="textPadKind" />
+      <xsd:enumeration value="textTrimKind" />
+      <xsd:enumeration value="textOutputMinLength" />
+
+      <xsd:enumeration value="escapeKind" />
+      <xsd:enumeration value="generateEscapeBlock" />
+
+      <xsd:enumeration value="textStringJustification" />
+      <xsd:enumeration value="textNumberRep" />
+      <xsd:enumeration value="textNumberJustification" />
+
+      <xsd:enumeration value="textNumberCheckPolicy" />
+      <xsd:enumeration value="textStandardBase" />
+      <xsd:enumeration value="textNumberRoundingMode" />
+      <xsd:enumeration value="textNumberRounding" />
+      <xsd:enumeration value="textNumberRoundingIncrement" />
+      <xsd:enumeration value="textZonedSignStyle" />
+
+      <xsd:enumeration value="binaryNumberRep" />
+      <xsd:enumeration value="binaryDecimalVirtualPoint" />
+      <xsd:enumeration value="binaryNumberCheckPolicy" />
+      <xsd:enumeration value="binaryPackedSignCodes" />
+      <xsd:enumeration value="binaryFloatRep" />
+
+      <xsd:enumeration value="textBooleanJustification" />
+
+      <xsd:enumeration value="binaryBooleanTrueRep" />
+      <xsd:enumeration value="binaryBooleanFalseRep" />
+
+      <xsd:enumeration value="textCalendarJustification" />
+
+      <xsd:enumeration value="calendarPatternKind" />
+      <xsd:enumeration value="calendarCheckPolicy" />
+      <xsd:enumeration value="calendarTimeZone" />
+      <xsd:enumeration value="calendarObserveDST" />
+      <xsd:enumeration value="calendarFirstDayOfWeek" />
+      <xsd:enumeration value="calendarDaysInFirstWeek" />
+      <xsd:enumeration value="calendarCenturyStart" />
+      <xsd:enumeration value="binaryCalendarRep" />
+
+      <xsd:enumeration value="nilKind" />
+      <xsd:enumeration value="nilValueDelimiterPolicy" />
+
+      <xsd:enumeration value="useNilForDefault" />
+      <xsd:enumeration value="emptyValueDelimiterPolicy" />
+
+      <xsd:enumeration value="sequenceKind" />
+      <xsd:enumeration value="hiddenGroupRef" />
+      
+      <xsd:enumeration value="initiatedContent" />
+
+      <xsd:enumeration value="separatorPosition" />
+      <xsd:enumeration value="separatorPolicy" />
+      <xsd:enumeration value="separatorSuppressionPolicy" />      
+
+      <xsd:enumeration value="choiceLengthKind" />
+      <xsd:enumeration value="choiceLength" />
+      <xsd:enumeration value="choiceDispatchKey" />
+      <xsd:enumeration value="choiceBranchKey" />
+
+      <xsd:enumeration value="occursCountKind" />
+      <xsd:enumeration value="occursCount" />
+
+      <xsd:enumeration value="floating" />
+      <xsd:enumeration value="truncateSpecifiedLengthString" />
+
+      <xsd:enumeration value="decimalSigned" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <!-- Qualified Form Attributes (for validating Short-form annotations) -->
+
+  <xsd:attributeGroup name="BaseAGQualified">
+    <xsd:attribute form="qualified" name="ref" type="xsd:QName" />
+  </xsd:attributeGroup>
+
+  <xsd:attributeGroup name="CommonAGQualified">
+    <xsd:attribute form="qualified" name="bitOrder"
+      type="dfdl:BitOrderEnum"/>
+    <xsd:attribute form="qualified" name="byteOrder"
+      type="dfdl:ByteOrderEnum_Or_DFDLExpression" />
+    <xsd:attribute form="qualified" name="encoding"
+      type="dfdl:EncodingEnum_Or_DFDLExpression" />
+    <xsd:attribute form="qualified" name="encodingErrorPolicy"
+      type="dfdl:EncodingErrorPolicyEnum" />
+    <xsd:attribute form="qualified" name="emptyElementParsePolicy"
+      type="dfdl:EmptyElementParsePolicyEnum" />
+    <xsd:attribute form="qualified" name="utf16Width"
+      type="dfdl:UTF16WidthEnum" />
+    <xsd:attribute form="qualified" name="ignoreCase"
+      type="dfdl:YesNoEnum" />
+    <xsd:attribute form="qualified" name="choiceBranchKey"
+      type="dfdl:ListOfDFDLStringLiteral" />
+    <xsd:attribute ref="dfdlx:choiceBranchKeyRanges" />
+  </xsd:attributeGroup>
+
+  <!-- 12.1 Aligned Data -->
+
+  <xsd:attributeGroup name="AlignmentAGQualified">
+    <xsd:attribute form="qualified" name="alignment"
+      type="dfdl:AlignmentType" />
+    <xsd:attribute form="qualified" name="alignmentUnits"
+      type="dfdl:AlignmentUnitsEnum" />
+    <xsd:attribute form="qualified" name="fillByte"
+      type="dfdl:DFDLStringLiteral" />
+    <xsd:attribute form="qualified" name="leadingSkip"
+      type="dfdl:DFDLNonNegativeInteger" />
+    <xsd:attribute form="qualified" name="trailingSkip"
+      type="dfdl:DFDLNonNegativeInteger" />
+  </xsd:attributeGroup>
+
+  <!-- 12.2 Delimiters and Text Mark up -->
+
+  <xsd:attributeGroup name="MarkupAGQualified">
+    <xsd:attribute form="qualified" name="initiator"
+      type="dfdl:ListOfDFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute form="qualified" name="terminator"
+      type="dfdl:ListOfDFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute form="qualified" name="outputNewLine"
+      type="dfdl:DFDLStringLiteral" />
+  </xsd:attributeGroup>
+
+  <xsd:attributeGroup name="NonGroupMarkupAGQualified">
+    <xsd:attribute form="qualified" name="emptyValueDelimiterPolicy"
+      type="dfdl:EmptyValueDelimiterPolicyEnum" />
+  </xsd:attributeGroup>
+
+  <!-- 12.3 Length Properties -->
+
+  <xsd:attributeGroup name="LengthAGQualified">
+    <xsd:attribute form="qualified" name="lengthKind"
+      type="dfdl:LengthKindEnum" />
+    <xsd:attribute form="qualified" name="length"
+      type="dfdl:DFDLNonNegativeInteger_Or_DFDLExpression" />
+    <xsd:attribute form="qualified" name="lengthPattern"
+      type="dfdl:DFDLRegularExpression" />
+    <xsd:attribute form="qualified" name="lengthUnits"
+      type="dfdl:LengthUnitsEnum" />
+    <xsd:attribute form="qualified" name="prefixIncludesPrefixLength"
+      type="dfdl:YesNoEnum" />
+    <xsd:attribute form="qualified" name="prefixLengthType"
+      type="xsd:QName" />
+  </xsd:attributeGroup>
+
+  <!-- 13 Simple Types -->
+
+  <xsd:attributeGroup name="RepresentationAGQualified">
+    <xsd:attribute form="qualified" name="representation"
+      type="dfdl:RepresentationEnum" />
+  </xsd:attributeGroup>
+
+  <!-- 14.4 Simple or complex local element or element reference -->
+
+  <xsd:attributeGroup name="FloatingAGQualified">
+    <xsd:attribute form="qualified" name="floating" type="dfdl:YesNoEnum" />
+  </xsd:attributeGroup>
+
+  <!--13.2 Properties Common to All Simple Types with Text representation -->
+
+  <xsd:attributeGroup name="SimpleTypesTextAGQualified">
+    <xsd:attribute form="qualified" name="textPadKind"
+      type="dfdl:TextPadKindEnum" />
+    <xsd:attribute form="qualified" name="textTrimKind"
+      type="dfdl:TextTrimKindEnum" />
+    <xsd:attribute form="qualified" name="textOutputMinLength"
+      type="dfdl:DFDLNonNegativeInteger" />
+    <xsd:attribute form="qualified" name="escapeSchemeRef"
+      type="dfdl:DFDLQName" />
+  </xsd:attributeGroup>
+
+  <!-- 13.2.1 Escape Scheme -->
+  <!-- Note that these can never appear in short form -->
+  <xsd:attributeGroup name="EscapeSchemeAGQualified">
+    <xsd:attribute form="qualified" name="escapeKind"
+      type="dfdl:EscapeKindEnum" />
+    <xsd:attribute form="qualified" name="escapeCharacter"
+      type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute form="qualified" name="escapeBlockStart"
+      type="dfdl:DFDLStringLiteral" />
+    <xsd:attribute form="qualified" name="escapeBlockEnd"
+      type="dfdl:DFDLStringLiteral" />
+    <xsd:attribute form="qualified" name="escapeEscapeCharacter"
+      type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute form="qualified" name="extraEscapedCharacters"
+      type="dfdl:ListOfDFDLStringLiteral" />
+    <xsd:attribute form="qualified" name="generateEscapeBlock"
+      type="dfdl:GenerateEscapeEnum" />
+  </xsd:attributeGroup>
+
+  <!-- 13.3 Properties for Bidirectional support for all Simple Types with 
+    Text representation -->
+
+  <xsd:attributeGroup name="TextBidiSchemeAGQualified">
+    <xsd:attribute form="qualified" name="textBidiTextOrdering"
+      type="dfdl:TextBidiTextOrderingEnum" />
+    <xsd:attribute form="qualified" name="textBidiOrientation"
+      type="dfdl:TextBidiOrientationEnum" />
+    <xsd:attribute form="qualified" name="textBidiSymmetric"
+      type="dfdl:YesNoEnum" />
+    <xsd:attribute form="qualified" name="textBidiTextShaped"
+      type="dfdl:YesNoEnum" />
+    <xsd:attribute form="qualified" name="textBidiNumeralShapes"
+      type="dfdl:TextBidiNumeralShapesEnum" />
+    <xsd:attribute form="qualified" name="textBidi"
+                   type="dfdl:YesNoEnum" />
+  </xsd:attributeGroup>
+
+  <!-- 13.4 Properties Specific to Strings with Text representation -->
+
+  <xsd:attributeGroup name="StringTextAGQualified">
+    <xsd:attribute form="qualified" name="textStringJustification"
+      type="dfdl:TextStringJustificationEnum" />
+    <xsd:attribute form="qualified" name="textStringPadCharacter"
+      type="dfdl:NonEmptyStringLiteral" />
+    <xsd:attribute form="qualified" name="truncateSpecifiedLengthString"
+      type="dfdl:YesNoEnum" />
+  </xsd:attributeGroup>
+
+  <!-- Properties Specific to Number with Text or Binary representation -->
+
+  <xsd:attributeGroup name="NumberAGQualified">
+    <xsd:attribute form="qualified" name="decimalSigned"
+      type="dfdl:YesNoEnum" />
+  </xsd:attributeGroup>
+
+  <!-- Properties Specific to Number with Text representation -->
+
+  <xsd:attributeGroup name="NumberTextAGQualified">
+    <xsd:attribute form="qualified" name="textNumberRep"
+      type="dfdl:TextNumberRepEnum" />
+    <xsd:attribute form="qualified" name="textNumberJustification"
+      type="dfdl:TextNumberJustificationEnum" />
+    <xsd:attribute form="qualified" name="textNumberPadCharacter"
+      type="dfdl:DFDLStringLiteral" />
+    <xsd:attribute form="qualified" name="textStandardBase"
+      type="dfdl:TextNumberBaseEnum" />
+  </xsd:attributeGroup>
+
+  <!-- Text number format attributes -->
+
+  <xsd:attributeGroup name="TextNumberFormatAGQualified">
+    <xsd:attribute form="qualified" name="textNumberPattern"
+      type="dfdl:DFDLStringLiteral" />
+    <xsd:attribute form="qualified" name="textStandardGroupingSeparator"
+      type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute form="qualified" name="textStandardDecimalSeparator"
+      type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute form="qualified" name="textStandardExponentRep"
+      type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />
+    <!-- deprecated form still accepted by IBM DFDL as of 2018-10-30 -->
+    <xsd:attribute form="qualified" name="textStandardExponentCharacter"
+      type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute form="qualified" name="textNumberCheckPolicy"
+      type="dfdl:TextNumberCheckPolicyEnum" />
+    <xsd:attribute form="qualified" name="textStandardInfinityRep"
+      type="dfdl:DFDLStringLiteral" />
+    <xsd:attribute form="qualified" name="textStandardNaNRep"
+      type="dfdl:DFDLStringLiteral" />
+    <xsd:attribute form="qualified" name="textNumberRoundingMode"
+      type="dfdl:TextNumberRoundingModeEnum" />
+    <xsd:attribute form="qualified" name="textNumberRounding"
+      type="dfdl:TextNumberRoundingEnum" />
+    <xsd:attribute form="qualified" name="textNumberRoundingIncrement"
+      type="xsd:double" />
+    <xsd:attribute form="qualified" name="textZonedSignStyle"
+      type="dfdl:TextZonedSignStyleEnum" />
+    <xsd:attribute form="qualified" name="textStandardZeroRep"
+      type="dfdl:ListOfDFDLStringLiteral" />
+  </xsd:attributeGroup>
+
+  <!-- 13.6 Properties Specific to Number with Binary representation -->
+
+  <xsd:attributeGroup name="NumberBinaryAGQualified">
+    <xsd:attribute form="qualified" name="binaryNumberRep"
+      type="dfdl:BinaryNumberRepEnum" />
+    <xsd:attribute form="qualified" name="binaryDecimalVirtualPoint"
+      type="xsd:int" />
+    <xsd:attribute form="qualified" name="binaryPackedSignCodes"
+      type="dfdl:BinaryPackedSignCodes" />
+    <xsd:attribute form="qualified" name="binaryNumberCheckPolicy"
+      type="dfdl:BinaryNumberCheckPolicyEnum" />
+  </xsd:attributeGroup>
+
+  <!-- 13.7 Float/Double with Binary representation -->
+
+  <xsd:attributeGroup name="FloatBinaryAGQualified">
+    <xsd:attribute form="qualified" name="binaryFloatRep"
+      type="dfdl:BinaryFloatRepEnum_Or_DFDLExpression" />
+  </xsd:attributeGroup>
+
+  <!-- 13.8 Properties Specific to Boolean with Text representation -->
+
+  <xsd:attributeGroup name="BooleanTextAGQualified">
+    <xsd:attribute form="qualified" name="textBooleanTrueRep"
+      type="dfdl:ListOfDFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute form="qualified" name="textBooleanFalseRep"
+      type="dfdl:ListOfDFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute form="qualified" name="textBooleanJustification"
+      type="dfdl:TextBooleanJustificationEnum" />
+    <xsd:attribute form="qualified" name="textBooleanPadCharacter"
+      type="dfdl:DFDLStringLiteral" />
+  </xsd:attributeGroup>
+
+  <!-- 13.9 Properties Specific to Boolean with Binary representation -->
+
+  <xsd:attributeGroup name="BooleanBinaryAGQualified">
+    <xsd:attribute form="qualified" name="binaryBooleanTrueRep"
+      type="dfdl:BinaryBooleanTrueRepType" />
+    <xsd:attribute form="qualified" name="binaryBooleanFalseRep"
+      type="dfdl:BinaryBooleanFalseRepType" />
+  </xsd:attributeGroup>
+
+  <!-- 13.10 Properties Specific to Calendar Format -->
+
+  <xsd:attributeGroup name="CalendarFormatAGQualified">
+    <xsd:attribute form="qualified" name="calendarPattern"
+      type="dfdl:DFDLStringLiteral" />
+    <xsd:attribute form="qualified" name="calendarPatternKind"
+      type="dfdl:CalendarPatternKindEnum" />
+    <xsd:attribute form="qualified" name="calendarCheckPolicy"
+      type="dfdl:CalendarCheckPolicyEnum" />
+    <xsd:attribute form="qualified" name="calendarTimeZone"
+      type="dfdl:CalendarTimeZoneType" />
+    <xsd:attribute form="qualified" name="calendarObserveDST"
+      type="dfdl:YesNoEnum" />
+    <xsd:attribute form="qualified" name="calendarFirstDayOfWeek"
+      type="dfdl:CalendarFirstDayOfWeekEnum" />
+    <xsd:attribute form="qualified" name="calendarDaysInFirstWeek"
+      type="dfdl:CalendarDaysInFirstWeek" />
+    <xsd:attribute form="qualified" name="calendarCenturyStart"
+      type="dfdl:CalendarCenturyStart" />
+    <xsd:attribute form="qualified" name="calendarLanguage"
+      type="dfdl:CalendarLanguageType" />
+  </xsd:attributeGroup>
+
+  <!-- 13.11 Properties Specific to Calendar with Text Representation -->
+
+  <xsd:attributeGroup name="CalendarTextAGQualified">
+    <xsd:attribute form="qualified" name="textCalendarJustification"
+      type="dfdl:TextCalendarJustificationEnum" />
+    <xsd:attribute form="qualified" name="textCalendarPadCharacter"
+      type="dfdl:DFDLStringLiteral" />
+  </xsd:attributeGroup>
+
+  <!-- 13.12 Properties Specific to Calendar with Binary Representation -->
+
+  <xsd:attributeGroup name="CalendarBinaryAGQualified">
+    <xsd:attribute form="qualified" name="binaryCalendarRep"
+      type="dfdl:BinaryCalendarRepEnum" />
+    <xsd:attribute form="qualified" name="binaryCalendarEpoch"
+      type="xsd:string" />
+  </xsd:attributeGroup>
+
+  <!-- 13.13 Properties Specific to Opaque Types (hexBinary) -->
+  <xsd:attributeGroup name="OpaqueAGQualified">
+  </xsd:attributeGroup>
+
+  <!-- 13.14 Properties for Nillable Elements -->
+
+  <xsd:attributeGroup name="NillableAGQualified">
+    <xsd:attribute form="qualified" name="nilKind"
+      type="dfdl:NilKindEnum" />
+    <xsd:attribute form="qualified" name="nilValue"
+      type="dfdl:NonEmptyListOfDFDLStringLiteral_nilValue" />
+    <xsd:attribute form="qualified" name="nilValueDelimiterPolicy"
+      type="dfdl:NilValueDelimiterPolicyEnum" />
+  </xsd:attributeGroup>
+
+  <!-- 13.15 Properties for Default Value Control -->
+
+  <xsd:attributeGroup name="DefaultValueControlAGQualified">
+    <xsd:attribute form="qualified" name="useNilForDefault"
+      type="dfdl:YesNoEnum" />
+  </xsd:attributeGroup>
+
+  <!-- 14 Sequence Groups -->
+
+  <xsd:attributeGroup name="SequenceAGQualified">
+    <xsd:attribute form="qualified" name="sequenceKind"
+      type="dfdl:SequenceKindEnum" />
+    <xsd:attribute form="qualified" name="hiddenGroupRef"
+      type="xsd:QName" />
+  </xsd:attributeGroup>
+
+  <!-- 14.2 Sequence Groups with Delimiters -->
+
+  <xsd:attributeGroup name="SeparatorAGQualified">
+    <xsd:attribute form="qualified" name="separator"
+      type="dfdl:ListOfDFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute form="qualified" name="separatorPosition"
+      type="dfdl:SeparatorPositionEnum" />
+    <xsd:attribute form="qualified" name="separatorPolicy"
+      type="dfdl:SeparatorPolicyEnum" />
+    <xsd:attribute form="qualified" name="separatorSuppressionPolicy"
+      type="dfdl:SeparatorSuppressionPolicyEnum" />      
+  </xsd:attributeGroup>
+
+  <xsd:attributeGroup name="GroupCommonAGQualified">
+    <xsd:attribute form="qualified" name="initiatedContent"
+      type="dfdl:YesNoEnum" />
+  </xsd:attributeGroup>
+
+  <!-- 15 Choices -->
+
+  <xsd:attributeGroup name="ChoiceAGQualified">
+    <xsd:attribute form="qualified" name="choiceLengthKind"
+      type="dfdl:ChoiceLengthKindEnum" />
+    <xsd:attribute form="qualified" name="choiceLength"
+      type="dfdl:DFDLNonNegativeInteger" />
+    <xsd:attribute form="qualified" name="choiceDispatchKey"
+      type="dfdl:DFDLExpression" />
+  </xsd:attributeGroup>
+
+  <!--16 Arrays and Optional Elements: Properties for Repeating and Variable-Occurrence 
+    Data Items -->
+
+  <xsd:attributeGroup name="OccursAGQualified">
+    <xsd:attribute form="qualified" name="occursCountKind"
+      type="dfdl:OccursCountKindEnum" />
+    <xsd:attribute form="qualified" name="occursCount"
+      type="dfdl:DFDLExpression" />
+    <xsd:attribute form="qualified" name="occursStopValue"
+      type="dfdl:ListOfDFDLStringLiteral" />
+  </xsd:attributeGroup>
+
+  <!-- 19 Calculated Value Properties. -->
+
+  <xsd:attributeGroup name="CalculatedValueAGQualified">
+    <xsd:attribute form="qualified" name="inputValueCalc"
+      type="dfdl:DFDLExpression" />
+    <xsd:attribute form="qualified" name="outputValueCalc"
+      type="dfdl:DFDLExpression" />
+  </xsd:attributeGroup>
+
+  <!-- document only markup properties -->
+
+  <xsd:attributeGroup name="DocumentPropertiesAGQualified">
+    <xsd:attribute form="qualified"
+      name="documentFinalTerminatorCanBeMissing" type="dfdl:YesNoEnum" />
+  </xsd:attributeGroup>
+
+  <xsd:attributeGroup name="ElementAGQualified">
+    <xsd:attributeGroup ref="dfdl:SimpleTypeAGQualified" />
+    <xsd:attributeGroup ref="dfdl:FloatingAGQualified" />
+    <xsd:attributeGroup ref="dfdl:NillableAGQualified" />
+    <xsd:attributeGroup ref="dfdl:DefaultValueControlAGQualified" />
+    <xsd:attributeGroup ref="dfdl:OccursAGQualified" />
+    <xsd:attributeGroup ref="dfdl:CalculatedValueAGQualified" />
+    <xsd:attributeGroup ref="dfdlx:RuntimePropertiesAGQualified" />
+  </xsd:attributeGroup>
+
+  <!-- dfdl:group takes the union of dfdl:sequence and dfdl:choice properties -->
+  <xsd:attributeGroup name="GroupAGQualified">
+    <xsd:attributeGroup ref="dfdl:GroupCommonAGQualified" />
+    <xsd:attributeGroup ref="dfdl:SequenceAGQualified" />
+    <xsd:attributeGroup ref="dfdlx:ExtLayeringAGQualified" />
+    <xsd:attributeGroup ref="dfdl:ChoiceAGQualified" />
+    <xsd:attributeGroup ref="dfdl:SeparatorAGQualified" />
+  </xsd:attributeGroup>
+
+  <xsd:attributeGroup name="SimpleTypeAGQualified">
+    <xsd:attributeGroup ref="dfdl:RepresentationAGQualified" />
+    <xsd:attributeGroup ref="dfdl:NonGroupMarkupAGQualified" />
+    <xsd:attributeGroup ref="dfdl:LengthAGQualified" />
+    <xsd:attributeGroup ref="dfdl:SimpleTypesTextAGQualified" />
+    <xsd:attributeGroup ref="dfdl:StringTextAGQualified" />
+    <xsd:attributeGroup ref="dfdl:NumberAGQualified" />
+    <xsd:attributeGroup ref="dfdl:NumberTextAGQualified" />
+    <xsd:attributeGroup ref="dfdl:TextNumberFormatAGQualified" />
+    <xsd:attributeGroup ref="dfdl:NumberBinaryAGQualified" />
+    <xsd:attributeGroup ref="dfdl:FloatBinaryAGQualified" />
+    <xsd:attributeGroup ref="dfdl:TextBidiSchemeAGQualified" />
+    <xsd:attributeGroup ref="dfdl:CalendarTextAGQualified" />
+    <xsd:attributeGroup ref="dfdl:CalendarBinaryAGQualified" />
+    <xsd:attributeGroup ref="dfdl:CalendarFormatAGQualified" />
+    <xsd:attributeGroup ref="dfdl:BooleanTextAGQualified" />
+    <xsd:attributeGroup ref="dfdl:BooleanBinaryAGQualified" />
+    <xsd:attributeGroup ref="dfdlx:SimpleTypeValueCalcAGQualified" />
+    <xsd:attributeGroup ref="dfdlx:ObjectKindAGQualified" />
+  </xsd:attributeGroup>
+  
+</xsd:schema>
diff --git a/DFDL/attribution/org/apache/daffodil/xsd/DFDL_part3_model.xsd b/DFDL/attribution/org/apache/daffodil/xsd/DFDL_part3_model.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..ad59d7595ba2a1660d5109454f7a57fba2356346
--- /dev/null
+++ b/DFDL/attribution/org/apache/daffodil/xsd/DFDL_part3_model.xsd
@@ -0,0 +1,370 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<xsd:schema targetNamespace="http://www.ogf.org/dfdl/dfdl-1.0/"
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+  xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"
+  xmlns:dfdlx="http://www.ogf.org/dfdl/dfdl-1.0/extensions"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:daf="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:ext"
+  xmlns:dafint="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:int"
+  attributeFormDefault="unqualified" elementFormDefault="qualified">
+
+  <xsd:include schemaLocation="DFDL_part2_attributes.xsd"/>
+  
+  <!-- Add schemaLocation="dafint.xsd" to allow NetBeans XML validation to work -->
+  <xsd:import namespace="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:int" schemaLocation="dafint.xsd"/>
+  <xsd:import namespace="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:ext"/>
+  <xsd:import namespace="http://www.ogf.org/dfdl/dfdl-1.0/extensions"/>
+
+
+  <!-- all the dfdl: elements that can appear inside an xs:appinfo element -->
+  <xsd:group name="DFDLAppInfoGroup">
+    <xsd:choice>
+      <xsd:element ref="dfdl:assert" />
+      <xsd:element ref="dfdl:choice" />
+      <xsd:element ref="dfdl:defineEscapeScheme" />
+      <xsd:element ref="dfdl:defineFormat" />
+      <xsd:element ref="dfdl:defineVariable" />
+      <xsd:element ref="dfdl:discriminator" />
+      <xsd:element ref="dfdl:element" />
+      <xsd:element ref="dfdl:enumeration" />
+      <xsd:element ref="dfdl:format" />
+      <xsd:element ref="dfdl:group" />
+      <xsd:element ref="dfdl:newVariableInstance" />
+      <xsd:element ref="dfdl:sequence" />
+      <xsd:element ref="dfdl:setVariable" />
+      <xsd:element ref="dfdl:simpleType" />
+    </xsd:choice>
+  </xsd:group>
+
+  <!-- ======================================================== -->
+  <!-- DFDL Format definition types -->
+  <!-- ======================================================== -->
+
+  <!-- 7.2 dfdl:defineFormat -->
+  <xsd:element name="defineFormat" type="dfdl:DFDLDefineFormat" />
+  <xsd:complexType name="DFDLDefineFormat">
+    <xsd:sequence>
+      <xsd:element maxOccurs="unbounded" minOccurs="0"
+        ref="dfdl:format" />
+    </xsd:sequence>
+    <xsd:attribute name="name" type="xsd:NCName" use='required'/>
+    <xsd:attributeGroup ref="dafint:daffodilAG"/>
+  </xsd:complexType>
+
+  <xsd:element name="format" type="dfdl:DFDLFormat" />
+  <xsd:complexType name="DFDLFormat">
+    <xsd:complexContent>
+      <xsd:extension base="dfdl:DFDLBaseType">
+        <xsd:sequence />
+        <xsd:attributeGroup ref="dfdl:FormatAG" />
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <!-- 7.5 dfdl:defineEscapeScheme -->
+  <xsd:element name="defineEscapeScheme" type="dfdl:DFDLDefineEscapeScheme" />
+
+  <xsd:complexType name="DFDLDefineEscapeScheme">
+    <xsd:sequence>
+      <xsd:element ref="dfdl:escapeScheme" />
+    </xsd:sequence>
+    <xsd:attribute name="name" type="xsd:NCName" use='required'/>
+    <xsd:attributeGroup ref="dafint:daffodilAG"/>
+  </xsd:complexType>
+
+  <xsd:element name="escapeScheme" type="dfdl:DFDLEscapeScheme" />
+
+  <xsd:complexType name="DFDLEscapeScheme">
+    <xsd:complexContent>
+      <xsd:extension base="dfdl:DFDLType">
+        <xsd:sequence />
+        <xsd:attributeGroup ref="dfdl:EscapeSchemeAG" />
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <!-- ================================================================= -->
+  <!-- Element form for properties -->
+  <!-- ================================================================= -->
+
+  <xsd:element name="property" type="dfdl:PropertyType" />
+
+  <xsd:complexType name="PropertyType">
+    <xsd:simpleContent>
+      <xsd:extension base="xsd:string">
+        <xsd:attribute name="name" use='required'>
+          <xsd:simpleType>
+            <xsd:union memberTypes="dfdl:PropertyNameType dfdlx:PropertyNameType" />
+          </xsd:simpleType>
+        </xsd:attribute>
+        <xsd:attributeGroup ref="dafint:daffodilAG"/>
+      </xsd:extension>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+  <!-- ================================================================= -->
+  <!-- Elements, types and attribute groups to specify DFDL Variables -->
+  <!-- ================================================================= -->
+
+  <xsd:complexType name="DFDLVariableType">
+    <xsd:simpleContent>
+      <xsd:extension base="dfdl:DFDLStringLiteral_Or_DFDLExpression">
+        <xsd:attributeGroup ref="dafint:daffodilAG"/>
+      </xsd:extension>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+  <xsd:attributeGroup name="DefineVariableAG">
+    <xsd:attribute name="name" type="xsd:NCName" use='required'/>
+    <xsd:attribute name="predefined" type="xsd:boolean" />
+    <xsd:attribute name="type" type="xsd:QName" />
+    <xsd:attribute name="external" type="xsd:boolean" />
+    <xsd:attribute name="defaultValue"
+      type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />
+    <xsd:attribute ref="dfdlx:direction" />
+  </xsd:attributeGroup>
+
+  <xsd:attributeGroup name="SetVariableAG">
+    <xsd:attribute name="ref" type="xsd:QName" use='required'/>
+    <xsd:attribute name="value"
+      type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />
+  </xsd:attributeGroup>
+
+  <xsd:attributeGroup name="NewVariableInstanceAG">
+    <xsd:attribute name="ref" type="xsd:QName" use='required'/>
+    <xsd:attribute name="defaultValue"
+      type="dfdl:DFDLStringLiteral_Or_DFDLExpression" />
+  </xsd:attributeGroup>
+
+  <xsd:element name="defineVariable">
+    <xsd:complexType>
+      <xsd:simpleContent>
+        <xsd:extension base="dfdl:DFDLVariableType">
+          <xsd:attributeGroup ref="dfdl:DefineVariableAG" />
+        </xsd:extension>
+      </xsd:simpleContent>
+    </xsd:complexType>
+  </xsd:element>
+
+  <xsd:element name="newVariableInstance">
+    <xsd:complexType>
+      <xsd:simpleContent>
+        <xsd:extension base="dfdl:DFDLVariableType">
+          <xsd:attributeGroup ref="dfdl:NewVariableInstanceAG" />
+        </xsd:extension>
+      </xsd:simpleContent>
+    </xsd:complexType>
+  </xsd:element>
+
+  <xsd:element name="setVariable">
+    <xsd:complexType>
+      <xsd:simpleContent>
+        <xsd:extension base="dfdl:DFDLVariableType">
+          <xsd:attributeGroup ref="dfdl:SetVariableAG" />
+        </xsd:extension>
+      </xsd:simpleContent>
+    </xsd:complexType>
+  </xsd:element>
+
+  <!-- ================================================================================ -->
+  <!-- Elements, types and attribute groups to specify DFDL Assert and Discriminator -->
+  <!-- ================================================================================ -->
+
+  <!-- The type that models element value as DFDL expression -->
+  <xsd:attributeGroup name="TestConditionAG">
+    <xsd:attribute name="test" type="dfdl:DFDLExpression" />
+    <xsd:attribute name="testKind" type="dfdl:TestKindEnum" />
+    <xsd:attribute name="testPattern" type="dfdl:DFDLRegularExpression" />
+    <xsd:attribute name="message" type="xsd:string" />
+    <xsd:attribute name="failureType" type="dfdl:FailureTypeEnum" />
+  </xsd:attributeGroup>
+
+  <xsd:complexType name="TestCondition">
+    <xsd:simpleContent>
+      <xsd:extension base="dfdl:DFDLExpressionOrPatternOrNothing"> <!-- changed to accept regex -->
+        <xsd:attributeGroup ref="dfdl:TestConditionAG" />
+        <xsd:attributeGroup ref="dafint:daffodilAG" />
+      </xsd:extension>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+  <xsd:element name="assert">
+    <xsd:complexType>
+      <xsd:simpleContent>
+        <xsd:extension base="dfdl:TestCondition">
+        </xsd:extension>
+      </xsd:simpleContent>
+    </xsd:complexType>
+  </xsd:element>
+
+  <xsd:element name="discriminator">
+    <xsd:complexType>
+      <xsd:simpleContent>
+        <xsd:extension base="dfdl:TestCondition">
+        </xsd:extension>
+      </xsd:simpleContent>
+    </xsd:complexType>
+  </xsd:element>
+
+  <!-- ============================================================ -->
+  <!-- Specialized annotations element definitions -->
+  <!-- ============================================================ -->
+
+  <xsd:element name="element" type="dfdl:DFDLElementType" />
+  <xsd:element name="sequence" type="dfdl:DFDLSequenceType" />
+  <xsd:element name="choice" type="dfdl:DFDLChoiceType" />
+  <xsd:element name="group" type="dfdl:DFDLGroupType" />
+  <xsd:element name="simpleType" type="dfdl:DFDLSimpleType" />
+  <xsd:element name="enumeration" type="dfdl:DFDLEnumerationType" />
+
+  <!-- ============================================================= -->
+  <!-- Specialized annotations types -->
+  <!-- ============================================================= -->
+
+  <xsd:complexType abstract="true" name="DFDLType">
+    <xsd:sequence>
+      <xsd:element maxOccurs="unbounded" minOccurs="0"
+        ref="dfdl:property" />
+      <xsd:element maxOccurs="unbounded" minOccurs="0"
+        ref="daf:property" />
+    </xsd:sequence>
+    <xsd:attributeGroup ref="dafint:daffodilAG"/> 
+  </xsd:complexType>
+
+  <xsd:complexType abstract="true" name="DFDLBaseType">
+    <xsd:complexContent>
+      <xsd:extension base="dfdl:DFDLType">
+        <xsd:sequence />
+        <xsd:attributeGroup ref="dfdl:BaseAG" />
+        <xsd:attributeGroup ref="dfdl:CommonAG" />
+        <xsd:attributeGroup ref="dfdl:AlignmentAG" />
+        <xsd:attributeGroup ref="dfdl:MarkupAG" />
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="DFDLElementType">
+    <xsd:complexContent>
+      <xsd:extension base="dfdl:DFDLBaseType">
+        <xsd:sequence />
+        <xsd:attributeGroup ref="dfdl:ElementAG" />
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="DFDLSequenceType">
+    <xsd:complexContent>
+      <xsd:extension base="dfdl:DFDLBaseType">
+        <xsd:sequence />
+        <xsd:attributeGroup ref="dfdl:GroupCommonAG" />
+        <xsd:attributeGroup ref="dfdl:SequenceAG" />
+        <xsd:attributeGroup ref="dfdlx:ExtLayeringAGQualified" />
+        <xsd:attributeGroup ref="dfdl:SeparatorAG" />
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="DFDLChoiceType">
+    <xsd:complexContent>
+      <xsd:extension base="dfdl:DFDLBaseType">
+        <xsd:sequence />
+        <xsd:attributeGroup ref="dfdl:GroupCommonAG" />
+        <xsd:attributeGroup ref="dfdl:ChoiceAG" />
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="DFDLSimpleType">
+    <xsd:complexContent>
+      <xsd:extension base="dfdl:DFDLBaseType">
+        <xsd:sequence />
+        <xsd:attributeGroup ref="dfdl:SimpleTypeAG" />
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="DFDLEnumerationType">
+    <xsd:attributeGroup ref="dfdlx:RepValuesAG" />
+  </xsd:complexType>
+
+  <xsd:complexType name="DFDLGroupType">
+    <xsd:complexContent>
+      <xsd:extension base="dfdl:DFDLBaseType">
+        <xsd:sequence />
+        <xsd:attributeGroup ref="dfdl:GroupAG" />
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <!-- ======================================================== -->
+  <!-- Specialized annotations attribute groups -->
+  <!-- ======================================================== -->
+
+  <xsd:attributeGroup name="FormatAG">
+    <xsd:attributeGroup ref="dfdl:ElementFormatSubsetAG" />
+    <xsd:attributeGroup ref="dfdl:GroupAG" />
+    <xsd:attributeGroup ref="dfdl:DocumentPropertiesAG" />
+  </xsd:attributeGroup>
+
+  <xsd:attributeGroup name="ElementFormatSubsetAG">
+    <xsd:attributeGroup ref="dfdl:SimpleTypeAG" />
+    <xsd:attributeGroup ref="dfdl:FloatingAG" />
+    <xsd:attributeGroup ref="dfdl:NillableAG" />
+    <xsd:attributeGroup ref="dfdl:DefaultValueControlAG" />
+    <xsd:attributeGroup ref="dfdl:OccursAG" />
+    <xsd:attributeGroup ref="dfdlx:RuntimePropertiesAG" />
+  </xsd:attributeGroup>
+  
+   <xsd:attributeGroup name="ElementAG">
+    <xsd:attributeGroup ref="dfdl:ElementFormatSubsetAG" />
+    <xsd:attributeGroup ref="dfdl:CalculatedValueAG" />
+  </xsd:attributeGroup>
+
+  <!-- dfdl:group takes the union of dfdl:sequence and dfdl:choice properties -->
+  <xsd:attributeGroup name="GroupAG">
+    <xsd:attributeGroup ref="dfdl:GroupCommonAG" />
+    <xsd:attributeGroup ref="dfdl:SequenceAG" />
+    <xsd:attributeGroup ref="dfdlx:ExtLayeringAGQualified" />
+    <xsd:attributeGroup ref="dfdl:ChoiceAG" />
+    <xsd:attributeGroup ref="dfdl:SeparatorAG" />
+  </xsd:attributeGroup>
+
+  <xsd:attributeGroup name="SimpleTypeAG">
+    <xsd:attributeGroup ref="dfdl:RepresentationAG" />
+    <xsd:attributeGroup ref="dfdl:NonGroupMarkupAG" />
+    <xsd:attributeGroup ref="dfdl:LengthAG" />
+    <xsd:attributeGroup ref="dfdl:SimpleTypesTextAG" />
+    <xsd:attributeGroup ref="dfdl:StringTextAG" />
+    <xsd:attributeGroup ref="dfdl:NumberAG" />
+    <xsd:attributeGroup ref="dfdl:NumberTextAG" />
+    <xsd:attributeGroup ref="dfdl:TextNumberFormatAG" />
+    <xsd:attributeGroup ref="dfdl:NumberBinaryAG" />
+    <xsd:attributeGroup ref="dfdl:FloatBinaryAG" />
+    <xsd:attributeGroup ref="dfdl:TextBidiSchemeAG" />
+    <xsd:attributeGroup ref="dfdl:CalendarTextAG" />
+    <xsd:attributeGroup ref="dfdl:CalendarBinaryAG" />
+    <xsd:attributeGroup ref="dfdl:CalendarFormatAG" />
+    <xsd:attributeGroup ref="dfdl:BooleanTextAG" />
+    <xsd:attributeGroup ref="dfdl:BooleanBinaryAG" />
+    <xsd:attributeGroup ref="dfdlx:SimpleTypeValueCalcAG" />
+    <xsd:attributeGroup ref="dfdlx:ObjectKindAG" />
+  </xsd:attributeGroup>
+
+</xsd:schema>
diff --git a/DFDL/attribution/org/apache/daffodil/xsd/README.md b/DFDL/attribution/org/apache/daffodil/xsd/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..c8483059431ec5fc89e44c2883784b88dc3eec69
--- /dev/null
+++ b/DFDL/attribution/org/apache/daffodil/xsd/README.md
@@ -0,0 +1,5 @@
+# XML Validation Resources
+
+* [Ant SchemaValidate Task](https://ant.apache.org/manual/Tasks/schemavalidate.html)
+
+* [Related Resources for XML Schema](https://www.w3.org/2001/XMLSchema)
\ No newline at end of file
diff --git a/DFDL/attribution/org/apache/daffodil/xsd/XMLSchema.dtd b/DFDL/attribution/org/apache/daffodil/xsd/XMLSchema.dtd
new file mode 100644
index 0000000000000000000000000000000000000000..7c01f845ea809a511944528b3fcde35d88512754
--- /dev/null
+++ b/DFDL/attribution/org/apache/daffodil/xsd/XMLSchema.dtd
@@ -0,0 +1,413 @@
+<!--
+  Copyright © 2018 World Wide Web Consortium, (Massachusetts
+  Institute of Technology, European Research Consortium for Informatics and
+  Mathematics, Keio University, Beihang). All Rights Reserved. This work is
+  distributed under the W3C® Software License [1] in the hope that it will be
+  useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+  [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+-->
+
+<!-- DTD for XML Schemas: Part 1: Structures
+     Public Identifier: "-//W3C//DTD XMLSCHEMA 200102//EN"
+     Official Location: http://www.w3.org/2001/XMLSchema.dtd -->
+<!-- $Id: XMLSchema.dtd,v 1.31 2001/10/24 15:50:16 ht Exp $ -->
+<!-- Note this DTD is NOT normative, or even definitive. -->           <!--d-->
+<!-- prose copy in the structures REC is the definitive version -->    <!--d-->
+<!-- (which shouldn't differ from this one except for this -->         <!--d-->
+<!-- comment and entity expansions, but just in case) -->              <!--d-->
+<!-- With the exception of cases with multiple namespace
+     prefixes for the XML Schema namespace, any XML document which is
+     not valid per this DTD given redefinitions in its internal subset of the
+     'p' and 's' parameter entities below appropriate to its namespace
+     declaration of the XML Schema namespace is almost certainly not
+     a valid schema. -->
+
+<!-- The simpleType element and its constituent parts
+     are defined in XML Schema: Part 2: Datatypes -->
+<!ENTITY % xs-datatypes PUBLIC 'datatypes' 'datatypes.dtd' >
+
+<!ENTITY % p 'xs:'> <!-- can be overriden in the internal subset of a
+                         schema document to establish a different
+                         namespace prefix -->
+<!ENTITY % s ':xs'> <!-- if %p is defined (e.g. as foo:) then you must
+                         also define %s as the suffix for the appropriate
+                         namespace declaration (e.g. :foo) -->
+<!ENTITY % nds 'xmlns%s;'>
+
+<!-- Define all the element names, with optional prefix -->
+<!ENTITY % schema "%p;schema">
+<!ENTITY % complexType "%p;complexType">
+<!ENTITY % complexContent "%p;complexContent">
+<!ENTITY % simpleContent "%p;simpleContent">
+<!ENTITY % extension "%p;extension">
+<!ENTITY % element "%p;element">
+<!ENTITY % unique "%p;unique">
+<!ENTITY % key "%p;key">
+<!ENTITY % keyref "%p;keyref">
+<!ENTITY % selector "%p;selector">
+<!ENTITY % field "%p;field">
+<!ENTITY % group "%p;group">
+<!ENTITY % all "%p;all">
+<!ENTITY % choice "%p;choice">
+<!ENTITY % sequence "%p;sequence">
+<!ENTITY % any "%p;any">
+<!ENTITY % anyAttribute "%p;anyAttribute">
+<!ENTITY % attribute "%p;attribute">
+<!ENTITY % attributeGroup "%p;attributeGroup">
+<!ENTITY % include "%p;include">
+<!ENTITY % import "%p;import">
+<!ENTITY % redefine "%p;redefine">
+<!ENTITY % notation "%p;notation">
+
+<!-- annotation elements -->
+<!ENTITY % annotation "%p;annotation">
+<!ENTITY % appinfo "%p;appinfo">
+<!ENTITY % documentation "%p;documentation">
+
+<!-- Customisation entities for the ATTLIST of each element type.
+     Define one of these if your schema takes advantage of the
+     anyAttribute='##other' in the schema for schemas -->
+
+<!ENTITY % schemaAttrs ''>
+<!ENTITY % complexTypeAttrs ''>
+<!ENTITY % complexContentAttrs ''>
+<!ENTITY % simpleContentAttrs ''>
+<!ENTITY % extensionAttrs ''>
+<!ENTITY % elementAttrs ''>
+<!ENTITY % groupAttrs ''>
+<!ENTITY % allAttrs ''>
+<!ENTITY % choiceAttrs ''>
+<!ENTITY % sequenceAttrs ''>
+<!ENTITY % anyAttrs ''>
+<!ENTITY % anyAttributeAttrs ''>
+<!ENTITY % attributeAttrs ''>
+<!ENTITY % attributeGroupAttrs ''>
+<!ENTITY % uniqueAttrs ''>
+<!ENTITY % keyAttrs ''>
+<!ENTITY % keyrefAttrs ''>
+<!ENTITY % selectorAttrs ''>
+<!ENTITY % fieldAttrs ''>
+<!ENTITY % includeAttrs ''>
+<!ENTITY % importAttrs ''>
+<!ENTITY % redefineAttrs ''>
+<!ENTITY % notationAttrs ''>
+<!ENTITY % annotationAttrs ''>
+<!ENTITY % appinfoAttrs ''>
+<!ENTITY % documentationAttrs ''>
+
+<!ENTITY % complexDerivationSet "CDATA">
+      <!-- #all or space-separated list drawn from derivationChoice -->
+<!ENTITY % blockSet "CDATA">
+      <!-- #all or space-separated list drawn from
+                      derivationChoice + 'substitution' -->
+
+<!ENTITY % mgs '%all; | %choice; | %sequence;'>
+<!ENTITY % cs '%choice; | %sequence;'>
+<!ENTITY % formValues '(qualified|unqualified)'>
+
+
+<!ENTITY % attrDecls    '((%attribute;| %attributeGroup;)*,(%anyAttribute;)?)'>
+
+<!ENTITY % particleAndAttrs '((%mgs; | %group;)?, %attrDecls;)'>
+
+<!-- This is used in part2 -->
+<!ENTITY % restriction1 '((%mgs; | %group;)?)'>
+
+%xs-datatypes;
+
+<!-- the duplication below is to produce an unambiguous content model
+     which allows annotation everywhere -->
+<!ELEMENT %schema; ((%include; | %import; | %redefine; | %annotation;)*,
+                    ((%simpleType; | %complexType;
+                      | %element; | %attribute;
+                      | %attributeGroup; | %group;
+                      | %notation; ),
+                     (%annotation;)*)* )>
+<!ATTLIST %schema;
+   targetNamespace      %URIref;               #IMPLIED
+   version              CDATA                  #IMPLIED
+   %nds;                %URIref;               #FIXED 'http://www.w3.org/2001/XMLSchema'
+   xmlns                CDATA                  #IMPLIED
+   finalDefault         %complexDerivationSet; ''
+   blockDefault         %blockSet;             ''
+   id                   ID                     #IMPLIED
+   elementFormDefault   %formValues;           'unqualified'
+   attributeFormDefault %formValues;           'unqualified'
+   xml:lang             CDATA                  #IMPLIED
+   %schemaAttrs;>
+<!-- Note the xmlns declaration is NOT in the Schema for Schemas,
+     because at the Infoset level where schemas operate,
+     xmlns(:prefix) is NOT an attribute! -->
+<!-- The declaration of xmlns is a convenience for schema authors -->
+ 
+<!-- The id attribute here and below is for use in external references
+     from non-schemas using simple fragment identifiers.
+     It is NOT used for schema-to-schema reference, internal or
+     external. -->
+
+<!-- a type is a named content type specification which allows attribute
+     declarations-->
+<!-- -->
+
+<!ELEMENT %complexType; ((%annotation;)?,
+                         (%simpleContent;|%complexContent;|
+                          %particleAndAttrs;))>
+
+<!ATTLIST %complexType;
+          name      %NCName;                        #IMPLIED
+          id        ID                              #IMPLIED
+          abstract  %boolean;                       #IMPLIED
+          final     %complexDerivationSet;          #IMPLIED
+          block     %complexDerivationSet;          #IMPLIED
+          mixed (true|false) 'false'
+          %complexTypeAttrs;>
+
+<!-- particleAndAttrs is shorthand for a root type -->
+<!-- mixed is disallowed if simpleContent, overriden if complexContent
+     has one too. -->
+
+<!-- If anyAttribute appears in one or more referenced attributeGroups
+     and/or explicitly, the intersection of the permissions is used -->
+
+<!ELEMENT %complexContent; ((%annotation;)?, (%restriction;|%extension;))>
+<!ATTLIST %complexContent;
+          mixed (true|false) #IMPLIED
+          id    ID           #IMPLIED
+          %complexContentAttrs;>
+
+<!-- restriction should use the branch defined above, not the simple
+     one from part2; extension should use the full model  -->
+
+<!ELEMENT %simpleContent; ((%annotation;)?, (%restriction;|%extension;))>
+<!ATTLIST %simpleContent;
+          id    ID           #IMPLIED
+          %simpleContentAttrs;>
+
+<!-- restriction should use the simple branch from part2, not the 
+     one defined above; extension should have no particle  -->
+
+<!ELEMENT %extension; ((%annotation;)?, (%particleAndAttrs;))>
+<!ATTLIST %extension;
+          base  %QName;      #REQUIRED
+          id    ID           #IMPLIED
+          %extensionAttrs;>
+
+<!-- an element is declared by either:
+ a name and a type (either nested or referenced via the type attribute)
+ or a ref to an existing element declaration -->
+
+<!ELEMENT %element; ((%annotation;)?, (%complexType;| %simpleType;)?,
+                     (%unique; | %key; | %keyref;)*)>
+<!-- simpleType or complexType only if no type|ref attribute -->
+<!-- ref not allowed at top level -->
+<!ATTLIST %element;
+            name               %NCName;               #IMPLIED
+            id                 ID                     #IMPLIED
+            ref                %QName;                #IMPLIED
+            type               %QName;                #IMPLIED
+            minOccurs          %nonNegativeInteger;   #IMPLIED
+            maxOccurs          CDATA                  #IMPLIED
+            nillable           %boolean;              #IMPLIED
+            substitutionGroup  %QName;                #IMPLIED
+            abstract           %boolean;              #IMPLIED
+            final              %complexDerivationSet; #IMPLIED
+            block              %blockSet;             #IMPLIED
+            default            CDATA                  #IMPLIED
+            fixed              CDATA                  #IMPLIED
+            form               %formValues;           #IMPLIED
+            %elementAttrs;>
+<!-- type and ref are mutually exclusive.
+     name and ref are mutually exclusive, one is required -->
+<!-- In the absence of type AND ref, type defaults to type of
+     substitutionGroup, if any, else the ur-type, i.e. unconstrained -->
+<!-- default and fixed are mutually exclusive -->
+
+<!ELEMENT %group; ((%annotation;)?,(%mgs;)?)>
+<!ATTLIST %group; 
+          name        %NCName;               #IMPLIED
+          ref         %QName;                #IMPLIED
+          minOccurs   %nonNegativeInteger;   #IMPLIED
+          maxOccurs   CDATA                  #IMPLIED
+          id          ID                     #IMPLIED
+          %groupAttrs;>
+
+<!ELEMENT %all; ((%annotation;)?, (%element;)*)>
+<!ATTLIST %all;
+          minOccurs   (1)                    #IMPLIED
+          maxOccurs   (1)                    #IMPLIED
+          id          ID                     #IMPLIED
+          %allAttrs;>
+
+<!ELEMENT %choice; ((%annotation;)?, (%element;| %group;| %cs; | %any;)*)>
+<!ATTLIST %choice;
+          minOccurs   %nonNegativeInteger;   #IMPLIED
+          maxOccurs   CDATA                  #IMPLIED
+          id          ID                     #IMPLIED
+          %choiceAttrs;>
+
+<!ELEMENT %sequence; ((%annotation;)?, (%element;| %group;| %cs; | %any;)*)>
+<!ATTLIST %sequence;
+          minOccurs   %nonNegativeInteger;   #IMPLIED
+          maxOccurs   CDATA                  #IMPLIED
+          id          ID                     #IMPLIED
+          %sequenceAttrs;>
+
+<!-- an anonymous grouping in a model, or
+     a top-level named group definition, or a reference to same -->
+
+<!-- Note that if order is 'all', group is not allowed inside.
+     If order is 'all' THIS group must be alone (or referenced alone) at
+     the top level of a content model -->
+<!-- If order is 'all', minOccurs==maxOccurs==1 on element/any inside -->
+<!-- Should allow minOccurs=0 inside order='all' . . . -->
+
+<!ELEMENT %any; (%annotation;)?>
+<!ATTLIST %any;
+            namespace       CDATA                  '##any'
+            processContents (skip|lax|strict)      'strict'
+            minOccurs       %nonNegativeInteger;   '1'
+            maxOccurs       CDATA                  '1'
+            id              ID                     #IMPLIED
+            %anyAttrs;>
+
+<!-- namespace is interpreted as follows:
+                  ##any      - - any non-conflicting WFXML at all
+
+                  ##other    - - any non-conflicting WFXML from namespace other
+                                  than targetNamespace
+
+                  ##local    - - any unqualified non-conflicting WFXML/attribute
+                  one or     - - any non-conflicting WFXML from
+                  more URI        the listed namespaces
+                  references
+
+                  ##targetNamespace ##local may appear in the above list,
+                    with the obvious meaning -->
+
+<!ELEMENT %anyAttribute; (%annotation;)?>
+<!ATTLIST %anyAttribute;
+            namespace       CDATA              '##any'
+            processContents (skip|lax|strict)  'strict'
+            id              ID                 #IMPLIED
+            %anyAttributeAttrs;>
+<!-- namespace is interpreted as for 'any' above -->
+
+<!-- simpleType only if no type|ref attribute -->
+<!-- ref not allowed at top level, name iff at top level -->
+<!ELEMENT %attribute; ((%annotation;)?, (%simpleType;)?)>
+<!ATTLIST %attribute;
+          name      %NCName;      #IMPLIED
+          id        ID            #IMPLIED
+          ref       %QName;       #IMPLIED
+          type      %QName;       #IMPLIED
+          use       (prohibited|optional|required) #IMPLIED
+          default   CDATA         #IMPLIED
+          fixed     CDATA         #IMPLIED
+          form      %formValues;  #IMPLIED
+          %attributeAttrs;>
+<!-- type and ref are mutually exclusive.
+     name and ref are mutually exclusive, one is required -->
+<!-- default for use is optional when nested, none otherwise -->
+<!-- default and fixed are mutually exclusive -->
+<!-- type attr and simpleType content are mutually exclusive -->
+
+<!-- an attributeGroup is a named collection of attribute decls, or a
+     reference thereto -->
+<!ELEMENT %attributeGroup; ((%annotation;)?,
+                       (%attribute; | %attributeGroup;)*,
+                       (%anyAttribute;)?) >
+<!ATTLIST %attributeGroup;
+                 name       %NCName;       #IMPLIED
+                 id         ID             #IMPLIED
+                 ref        %QName;        #IMPLIED
+                 %attributeGroupAttrs;>
+
+<!-- ref iff no content, no name.  ref iff not top level -->
+
+<!-- better reference mechanisms -->
+<!ELEMENT %unique; ((%annotation;)?, %selector;, (%field;)+)>
+<!ATTLIST %unique;
+          name     %NCName;       #REQUIRED
+	  id       ID             #IMPLIED
+	  %uniqueAttrs;>
+
+<!ELEMENT %key;    ((%annotation;)?, %selector;, (%field;)+)>
+<!ATTLIST %key;
+          name     %NCName;       #REQUIRED
+	  id       ID             #IMPLIED
+	  %keyAttrs;>
+
+<!ELEMENT %keyref; ((%annotation;)?, %selector;, (%field;)+)>
+<!ATTLIST %keyref;
+          name     %NCName;       #REQUIRED
+	  refer    %QName;        #REQUIRED
+	  id       ID             #IMPLIED
+	  %keyrefAttrs;>
+
+<!ELEMENT %selector; ((%annotation;)?)>
+<!ATTLIST %selector;
+          xpath %XPathExpr; #REQUIRED
+          id    ID          #IMPLIED
+          %selectorAttrs;>
+<!ELEMENT %field; ((%annotation;)?)>
+<!ATTLIST %field;
+          xpath %XPathExpr; #REQUIRED
+          id    ID          #IMPLIED
+          %fieldAttrs;>
+
+<!-- Schema combination mechanisms -->
+<!ELEMENT %include; (%annotation;)?>
+<!ATTLIST %include;
+          schemaLocation %URIref; #REQUIRED
+          id             ID       #IMPLIED
+          %includeAttrs;>
+
+<!ELEMENT %import; (%annotation;)?>
+<!ATTLIST %import;
+          namespace      %URIref; #IMPLIED
+          schemaLocation %URIref; #IMPLIED
+          id             ID       #IMPLIED
+          %importAttrs;>
+
+<!ELEMENT %redefine; (%annotation; | %simpleType; | %complexType; |
+                      %attributeGroup; | %group;)*>
+<!ATTLIST %redefine;
+          schemaLocation %URIref; #REQUIRED
+          id             ID       #IMPLIED
+          %redefineAttrs;>
+
+<!ELEMENT %notation; (%annotation;)?>
+<!ATTLIST %notation;
+	  name        %NCName;    #REQUIRED
+	  id          ID          #IMPLIED
+	  public      CDATA       #REQUIRED
+	  system      %URIref;    #IMPLIED
+	  %notationAttrs;>
+
+<!-- Annotation is either application information or documentation -->
+<!-- By having these here they are available for datatypes as well
+     as all the structures elements -->
+
+<!ELEMENT %annotation; (%appinfo; | %documentation;)*>
+<!ATTLIST %annotation; %annotationAttrs;>
+
+<!-- User must define annotation elements in internal subset for this
+     to work -->
+<!ELEMENT %appinfo; ANY>   <!-- too restrictive -->
+<!ATTLIST %appinfo;
+          source     %URIref;      #IMPLIED
+          id         ID         #IMPLIED
+          %appinfoAttrs;>
+<!ELEMENT %documentation; ANY>   <!-- too restrictive -->
+<!ATTLIST %documentation;
+          source     %URIref;   #IMPLIED
+          id         ID         #IMPLIED
+          xml:lang   CDATA      #IMPLIED
+          %documentationAttrs;>
+
+<!NOTATION XMLSchemaStructures PUBLIC
+           'structures' 'http://www.w3.org/2001/XMLSchema.xsd' >
+<!NOTATION XML PUBLIC
+           'REC-xml-1998-0210' 'http://www.w3.org/TR/1998/REC-xml-19980210' >
diff --git a/DFDL/attribution/org/apache/daffodil/xsd/XMLSchema.xsd b/DFDL/attribution/org/apache/daffodil/xsd/XMLSchema.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..ab00a7f0702a31e9b8bbd2e7cd6a865b6f6775a1
--- /dev/null
+++ b/DFDL/attribution/org/apache/daffodil/xsd/XMLSchema.xsd
@@ -0,0 +1,2655 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!--
+  Copyright © 2018 World Wide Web Consortium, (Massachusetts
+  Institute of Technology, European Research Consortium for Informatics and
+  Mathematics, Keio University, Beihang). All Rights Reserved. This work is
+  distributed under the W3C® Software License [1] in the hope that it will be
+  useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+  [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+-->
+
+<!-- XML Schema schema for XML Schemas: Part 1: Structures -->
+<!-- Note this schema is NOT the normative structures schema. -->
+<!-- The prose copy in the structures REC is the normative -->
+<!-- version (which shouldn't differ from this one except for -->
+<!-- this comment and entity expansions, but just in case -->
+<!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN" "XMLSchema.dtd" [
+
+<!-- provide ID type information even for parsers which only read the
+     internal subset -->
+<!ATTLIST xs:schema          id  ID  #IMPLIED>
+<!ATTLIST xs:complexType     id  ID  #IMPLIED>
+<!ATTLIST xs:complexContent  id  ID  #IMPLIED>
+<!ATTLIST xs:simpleContent   id  ID  #IMPLIED>
+<!ATTLIST xs:extension       id  ID  #IMPLIED>
+<!ATTLIST xs:element         id  ID  #IMPLIED>
+<!ATTLIST xs:group           id  ID  #IMPLIED> 
+<!ATTLIST xs:all             id  ID  #IMPLIED>
+<!ATTLIST xs:choice          id  ID  #IMPLIED>
+<!ATTLIST xs:sequence        id  ID  #IMPLIED>
+<!ATTLIST xs:any             id  ID  #IMPLIED>
+<!ATTLIST xs:anyAttribute    id  ID  #IMPLIED>
+<!ATTLIST xs:attribute       id  ID  #IMPLIED>
+<!ATTLIST xs:attributeGroup  id  ID  #IMPLIED>
+<!ATTLIST xs:unique          id  ID  #IMPLIED>
+<!ATTLIST xs:key             id  ID  #IMPLIED>
+<!ATTLIST xs:keyref          id  ID  #IMPLIED>
+<!ATTLIST xs:selector        id  ID  #IMPLIED>
+<!ATTLIST xs:field           id  ID  #IMPLIED>
+<!ATTLIST xs:include         id  ID  #IMPLIED>
+<!ATTLIST xs:import          id  ID  #IMPLIED>
+<!ATTLIST xs:redefine        id  ID  #IMPLIED>
+<!ATTLIST xs:notation        id  ID  #IMPLIED>
+<!--
+     keep this schema XML1.0 DTD valid
+  -->
+        <!ENTITY % schemaAttrs 'xmlns:hfp CDATA #IMPLIED'>
+
+        <!ELEMENT hfp:hasFacet EMPTY>
+        <!ATTLIST hfp:hasFacet
+                name NMTOKEN #REQUIRED>
+
+        <!ELEMENT hfp:hasProperty EMPTY>
+        <!ATTLIST hfp:hasProperty
+                name NMTOKEN #REQUIRED
+                value CDATA #REQUIRED>
+<!--
+        Make sure that processors that do not read the external
+        subset will know about the various IDs we declare
+  -->
+        <!ATTLIST xs:simpleType id ID #IMPLIED>
+        <!ATTLIST xs:maxExclusive id ID #IMPLIED>
+        <!ATTLIST xs:minExclusive id ID #IMPLIED>
+        <!ATTLIST xs:maxInclusive id ID #IMPLIED>
+        <!ATTLIST xs:minInclusive id ID #IMPLIED>
+        <!ATTLIST xs:totalDigits id ID #IMPLIED>
+        <!ATTLIST xs:fractionDigits id ID #IMPLIED>
+        <!ATTLIST xs:length id ID #IMPLIED>
+        <!ATTLIST xs:minLength id ID #IMPLIED>
+        <!ATTLIST xs:maxLength id ID #IMPLIED>
+        <!ATTLIST xs:enumeration id ID #IMPLIED>
+        <!ATTLIST xs:pattern id ID #IMPLIED>
+        <!ATTLIST xs:appinfo id ID #IMPLIED>
+        <!ATTLIST xs:documentation id ID #IMPLIED>
+        <!ATTLIST xs:list id ID #IMPLIED>
+        <!ATTLIST xs:union id ID #IMPLIED>
+        ]>
+<xsd:schema targetNamespace="http://www.w3.org/2001/XMLSchema"
+  blockDefault="#all" elementFormDefault="qualified" version="1.0"
+  xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+  xml:lang="EN" xmlns:hfp="http://www.w3.org/2001/XMLSchema-hasFacetAndProperty">
+  <xs:annotation>
+    <xs:documentation>
+      Part 1 version: Id: structures.xsd,v 1.2 2004/01/15 11:34:25 ht Exp
+      Part 2 version: Id: datatypes.xsd,v 1.3 2004/01/23 18:11:13 ht Exp
+    </xs:documentation>
+  </xs:annotation>
+
+  <xs:annotation>
+    <xs:documentation
+      source="http://www.w3.org/TR/2004/PER-xmlschema-1-20040318/structures.html">
+      The schema corresponding to this document is normative,
+      with respect to the syntactic constraints it expresses in the
+      XML Schema language. The documentation (within &lt;documentation>
+      elements)
+      below, is not normative, but rather highlights important aspects of
+      the W3C Recommendation of which this is a part
+    </xs:documentation>
+  </xs:annotation>
+
+  <xs:annotation>
+    <xs:documentation>
+      The simpleType element and all of its members are defined
+      towards the end
+      of this schema document
+    </xs:documentation>
+  </xs:annotation>
+
+  <xs:import namespace="http://www.w3.org/XML/1998/namespace"
+    schemaLocation="xml.xsd">
+    <xs:annotation>
+      <xs:documentation>
+        Get access to the xml: attribute groups for xml:lang
+        as declared on 'schema' and 'documentation' below
+      </xs:documentation>
+    </xs:annotation>
+  </xs:import>
+
+  <xs:complexType name="openAttrs">
+    <xs:annotation>
+      <xs:documentation>
+        This type is extended by almost all schema types
+        to allow attributes from other namespaces to be
+        added to user schemas.
+      </xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:restriction base="xs:anyType">
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="annotated">
+    <xs:annotation>
+      <xs:documentation>
+        This type is extended by all types which allow annotation
+        other than &lt;schema&gt; itself
+      </xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="xs:openAttrs">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+        </xs:sequence>
+        <xs:attribute name="id" type="xs:ID" />
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:group name="schemaTop">
+    <xs:annotation>
+      <xs:documentation>
+        This group is for the
+        elements which occur freely at the top level of schemas.
+        All of their types are based on the "annotated" type by extension.
+      </xs:documentation>
+    </xs:annotation>
+    <xs:choice>
+      <xs:group ref="xs:redefinable" />
+      <xs:element ref="xs:element" />
+      <xs:element ref="xs:attribute" />
+      <xs:element ref="xs:notation" />
+    </xs:choice>
+  </xs:group>
+
+  <xs:group name="redefinable">
+    <xs:annotation>
+      <xs:documentation>
+        This group is for the
+        elements which can self-redefine (see &lt;redefine> below).
+      </xs:documentation>
+    </xs:annotation>
+    <xs:choice>
+      <xs:element ref="xs:simpleType" />
+      <xs:element ref="xs:complexType" />
+      <xs:element ref="xs:group" />
+      <xs:element ref="xs:attributeGroup" />
+    </xs:choice>
+  </xs:group>
+
+  <xs:simpleType name="formChoice">
+    <xs:annotation>
+      <xs:documentation>
+        A utility type, not for public use
+      </xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:NMTOKEN">
+      <xs:enumeration value="qualified" />
+      <xs:enumeration value="unqualified" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="reducedDerivationControl">
+    <xs:annotation>
+      <xs:documentation>
+        A utility type, not for public use
+      </xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:derivationControl">
+      <xs:enumeration value="extension" />
+      <xs:enumeration value="restriction" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="derivationSet">
+    <xs:annotation>
+      <xs:documentation>
+        A utility type, not for public use
+      </xs:documentation>
+      <xs:documentation>
+        #all or (possibly empty) subset of {extension, restriction}
+      </xs:documentation>
+    </xs:annotation>
+    <xs:union>
+      <xs:simpleType>
+        <xs:restriction base="xs:token">
+          <xs:enumeration value="#all" />
+        </xs:restriction>
+      </xs:simpleType>
+      <xs:simpleType>
+        <xs:list itemType="xs:reducedDerivationControl" />
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+
+  <xs:simpleType name="typeDerivationControl">
+    <xs:annotation>
+      <xs:documentation>
+        A utility type, not for public use
+      </xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:derivationControl">
+      <xs:enumeration value="extension" />
+      <xs:enumeration value="restriction" />
+      <xs:enumeration value="list" />
+      <xs:enumeration value="union" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="fullDerivationSet">
+    <xs:annotation>
+      <xs:documentation>
+        A utility type, not for public use
+      </xs:documentation>
+      <xs:documentation>
+        #all or (possibly empty) subset of {extension, restriction, list, union}
+      </xs:documentation>
+    </xs:annotation>
+    <xs:union>
+      <xs:simpleType>
+        <xs:restriction base="xs:token">
+          <xs:enumeration value="#all" />
+        </xs:restriction>
+      </xs:simpleType>
+      <xs:simpleType>
+        <xs:list itemType="xs:typeDerivationControl" />
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+
+  <xs:element name="schema" id="schema">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-schema" />
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="xs:openAttrs">
+          <xs:sequence>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+              <xs:element ref="xs:include" />
+              <xs:element ref="xs:import" />
+              <xs:element ref="xs:redefine" />
+              <xs:element ref="xs:annotation" />
+            </xs:choice>
+            <xs:sequence minOccurs="0" maxOccurs="unbounded">
+              <xs:group ref="xs:schemaTop" />
+              <xs:element ref="xs:annotation" minOccurs="0"
+                maxOccurs="unbounded" />
+            </xs:sequence>
+          </xs:sequence>
+          <xs:attribute name="targetNamespace" type="xs:anyURI" />
+          <xs:attribute name="version" type="xs:token" />
+          <xs:attribute name="finalDefault" type="xs:fullDerivationSet"
+            use="optional" default="" />
+          <xs:attribute name="blockDefault" type="xs:blockSet"
+            use="optional" default="" />
+          <xs:attribute name="attributeFormDefault" type="xs:formChoice"
+            use="optional" default="unqualified" />
+          <xs:attribute name="elementFormDefault" type="xs:formChoice"
+            use="optional" default="unqualified" />
+          <xs:attribute name="id" type="xs:ID" />
+          <xs:attribute ref="xml:lang" />
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+
+    <xs:key name="element">
+      <xs:selector xpath="xs:element" />
+      <xs:field xpath="@name" />
+    </xs:key>
+
+    <xs:key name="attribute">
+      <xs:selector xpath="xs:attribute" />
+      <xs:field xpath="@name" />
+    </xs:key>
+
+    <xs:key name="type">
+      <xs:selector xpath="xs:complexType|xs:simpleType" />
+      <xs:field xpath="@name" />
+    </xs:key>
+
+    <xs:key name="group">
+      <xs:selector xpath="xs:group" />
+      <xs:field xpath="@name" />
+    </xs:key>
+
+    <xs:key name="attributeGroup">
+      <xs:selector xpath="xs:attributeGroup" />
+      <xs:field xpath="@name" />
+    </xs:key>
+
+    <xs:key name="notation">
+      <xs:selector xpath="xs:notation" />
+      <xs:field xpath="@name" />
+    </xs:key>
+
+    <xs:key name="identityConstraint">
+      <xs:selector xpath=".//xs:key|.//xs:unique|.//xs:keyref" />
+      <xs:field xpath="@name" />
+    </xs:key>
+
+  </xs:element>
+
+  <xs:simpleType name="allNNI">
+    <xs:annotation>
+      <xs:documentation>
+        for maxOccurs
+      </xs:documentation>
+    </xs:annotation>
+    <xs:union memberTypes="xs:nonNegativeInteger">
+      <xs:simpleType>
+        <xs:restriction base="xs:NMTOKEN">
+          <xs:enumeration value="unbounded" />
+        </xs:restriction>
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+
+  <xs:attributeGroup name="occurs">
+    <xs:annotation>
+      <xs:documentation>
+        for all particles
+      </xs:documentation>
+    </xs:annotation>
+    <xs:attribute name="minOccurs" type="xs:nonNegativeInteger"
+      use="optional" default="1" />
+    <xs:attribute name="maxOccurs" type="xs:allNNI" use="optional"
+      default="1" />
+  </xs:attributeGroup>
+
+  <xs:attributeGroup name="defRef">
+    <xs:annotation>
+      <xs:documentation>
+        for element, group and attributeGroup,
+        which both define and reference
+      </xs:documentation>
+    </xs:annotation>
+    <xs:attribute name="name" type="xs:NCName" />
+    <xs:attribute name="ref" type="xs:QName" />
+  </xs:attributeGroup>
+
+  <xs:group name="typeDefParticle">
+    <xs:annotation>
+      <xs:documentation>
+        'complexType' uses this
+      </xs:documentation>
+    </xs:annotation>
+    <xs:choice>
+      <xs:element name="group" type="xs:groupRef" />
+      <xs:element ref="xs:all" />
+      <xs:element ref="xs:choice" />
+      <xs:element ref="xs:sequence" />
+    </xs:choice>
+  </xs:group>
+
+
+
+  <xs:group name="nestedParticle">
+    <xs:choice>
+      <xs:element name="element" type="xs:localElement" />
+      <xs:element name="group" type="xs:groupRef" />
+      <xs:element ref="xs:choice" />
+      <xs:element ref="xs:sequence" />
+      <xs:element ref="xs:any" />
+    </xs:choice>
+  </xs:group>
+
+  <xs:group name="particle">
+    <xs:choice>
+      <xs:element name="element" type="xs:localElement" />
+      <xs:element name="group" type="xs:groupRef" />
+      <xs:element ref="xs:all" />
+      <xs:element ref="xs:choice" />
+      <xs:element ref="xs:sequence" />
+      <xs:element ref="xs:any" />
+    </xs:choice>
+  </xs:group>
+
+  <xs:complexType name="attribute">
+    <xs:complexContent>
+      <xs:extension base="xs:annotated">
+        <xs:sequence>
+          <xs:element name="simpleType" minOccurs="0"
+            type="xs:localSimpleType" />
+        </xs:sequence>
+        <xs:attributeGroup ref="xs:defRef" />
+        <xs:attribute name="type" type="xs:QName" />
+        <xs:attribute name="use" use="optional" default="optional">
+          <xs:simpleType>
+            <xs:restriction base="xs:NMTOKEN">
+              <xs:enumeration value="prohibited" />
+              <xs:enumeration value="optional" />
+              <xs:enumeration value="required" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute name="default" type="xs:string" />
+        <xs:attribute name="fixed" type="xs:string" />
+        <xs:attribute name="form" type="xs:formChoice" />
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="topLevelAttribute">
+    <xs:complexContent>
+      <xs:restriction base="xs:attribute">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+          <xs:element name="simpleType" minOccurs="0"
+            type="xs:localSimpleType" />
+        </xs:sequence>
+        <xs:attribute name="ref" use="prohibited" />
+        <xs:attribute name="form" use="prohibited" />
+        <xs:attribute name="use" use="prohibited" />
+        <xs:attribute name="name" use="required" type="xs:NCName" />
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:group name="attrDecls">
+    <xs:sequence>
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element name="attribute" type="xs:attribute" />
+        <xs:element name="attributeGroup" type="xs:attributeGroupRef" />
+      </xs:choice>
+      <xs:element ref="xs:anyAttribute" minOccurs="0" />
+    </xs:sequence>
+  </xs:group>
+
+  <xs:element name="anyAttribute" type="xs:wildcard" id="anyAttribute">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-anyAttribute" />
+    </xs:annotation>
+  </xs:element>
+
+  <xs:group name="complexTypeModel">
+    <xs:choice>
+      <xs:element ref="xs:simpleContent" />
+      <xs:element ref="xs:complexContent" />
+      <xs:sequence>
+        <xs:annotation>
+          <xs:documentation>
+            This branch is short for
+            &lt;complexContent>
+            &lt;restriction base="xs:anyType">
+            ...
+            &lt;/restriction>
+            &lt;/complexContent></xs:documentation>
+        </xs:annotation>
+        <xs:group ref="xs:typeDefParticle" minOccurs="0" />
+        <xs:group ref="xs:attrDecls" />
+      </xs:sequence>
+    </xs:choice>
+  </xs:group>
+
+  <xs:complexType name="complexType" abstract="true">
+    <xs:complexContent>
+      <xs:extension base="xs:annotated">
+        <xs:group ref="xs:complexTypeModel" />
+        <xs:attribute name="name" type="xs:NCName">
+          <xs:annotation>
+            <xs:documentation>
+              Will be restricted to required or forbidden
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="mixed" type="xs:boolean" use="optional"
+          default="false">
+          <xs:annotation>
+            <xs:documentation>
+              Not allowed if simpleContent child is chosen.
+              May be overriden by setting on complexContent child.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="abstract" type="xs:boolean"
+          use="optional" default="false" />
+        <xs:attribute name="final" type="xs:derivationSet" />
+        <xs:attribute name="block" type="xs:derivationSet" />
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="topLevelComplexType">
+    <xs:complexContent>
+      <xs:restriction base="xs:complexType">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+          <xs:group ref="xs:complexTypeModel" />
+        </xs:sequence>
+        <xs:attribute name="name" type="xs:NCName" use="required" />
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="localComplexType">
+    <xs:complexContent>
+      <xs:restriction base="xs:complexType">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+          <xs:group ref="xs:complexTypeModel" />
+        </xs:sequence>
+        <xs:attribute name="name" use="prohibited" />
+        <xs:attribute name="abstract" use="prohibited" />
+        <xs:attribute name="final" use="prohibited" />
+        <xs:attribute name="block" use="prohibited" />
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="restrictionType">
+    <xs:complexContent>
+      <xs:extension base="xs:annotated">
+        <xs:sequence>
+          <xs:choice minOccurs="0">
+            <xs:group ref="xs:typeDefParticle" />
+            <xs:group ref="xs:simpleRestrictionModel" />
+          </xs:choice>
+          <xs:group ref="xs:attrDecls" />
+        </xs:sequence>
+        <xs:attribute name="base" type="xs:QName" use="required" />
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="complexRestrictionType">
+    <xs:complexContent>
+      <xs:restriction base="xs:restrictionType">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+          <xs:choice minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>This choice is added simply to
+                make this a valid restriction per the REC
+              </xs:documentation>
+            </xs:annotation>
+            <xs:group ref="xs:typeDefParticle" />
+          </xs:choice>
+          <xs:group ref="xs:attrDecls" />
+        </xs:sequence>
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="extensionType">
+    <xs:complexContent>
+      <xs:extension base="xs:annotated">
+        <xs:sequence>
+          <xs:group ref="xs:typeDefParticle" minOccurs="0" />
+          <xs:group ref="xs:attrDecls" />
+        </xs:sequence>
+        <xs:attribute name="base" type="xs:QName" use="required" />
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:element name="complexContent" id="complexContent">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-complexContent" />
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="xs:annotated">
+          <xs:choice>
+            <xs:element name="restriction" type="xs:complexRestrictionType" />
+            <xs:element name="extension" type="xs:extensionType" />
+          </xs:choice>
+          <xs:attribute name="mixed" type="xs:boolean">
+            <xs:annotation>
+              <xs:documentation>
+                Overrides any setting on complexType parent.
+              </xs:documentation>
+            </xs:annotation>
+          </xs:attribute>
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:complexType name="simpleRestrictionType">
+    <xs:complexContent>
+      <xs:restriction base="xs:restrictionType">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+          <xs:choice minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>This choice is added simply to
+                make this a valid restriction per the REC
+              </xs:documentation>
+            </xs:annotation>
+            <xs:group ref="xs:simpleRestrictionModel" />
+          </xs:choice>
+          <xs:group ref="xs:attrDecls" />
+        </xs:sequence>
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="simpleExtensionType">
+    <xs:complexContent>
+      <xs:restriction base="xs:extensionType">
+        <xs:sequence>
+          <xs:annotation>
+            <xs:documentation>
+              No typeDefParticle group reference
+            </xs:documentation>
+          </xs:annotation>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+          <xs:group ref="xs:attrDecls" />
+        </xs:sequence>
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:element name="simpleContent" id="simpleContent">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-simpleContent" />
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="xs:annotated">
+          <xs:choice>
+            <xs:element name="restriction" type="xs:simpleRestrictionType" />
+            <xs:element name="extension" type="xs:simpleExtensionType" />
+          </xs:choice>
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="complexType" type="xs:topLevelComplexType"
+    id="complexType">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-complexType" />
+    </xs:annotation>
+  </xs:element>
+
+
+  <xs:simpleType name="blockSet">
+    <xs:annotation>
+      <xs:documentation>
+        A utility type, not for public use
+      </xs:documentation>
+      <xs:documentation>
+        #all or (possibly empty) subset of {substitution, extension,
+        restriction}
+      </xs:documentation>
+    </xs:annotation>
+    <xs:union>
+      <xs:simpleType>
+        <xs:restriction base="xs:token">
+          <xs:enumeration value="#all" />
+        </xs:restriction>
+      </xs:simpleType>
+      <xs:simpleType>
+        <xs:list>
+          <xs:simpleType>
+            <xs:restriction base="xs:derivationControl">
+              <xs:enumeration value="extension" />
+              <xs:enumeration value="restriction" />
+              <xs:enumeration value="substitution" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:list>
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+
+  <xs:complexType name="element" abstract="true">
+    <xs:annotation>
+      <xs:documentation>
+        The element element can be used either
+        at the top level to define an element-type binding globally,
+        or within a content model to either reference a globally-defined
+        element or type or declare an element-type binding locally.
+        The ref form is not allowed at the top level.
+      </xs:documentation>
+    </xs:annotation>
+
+    <xs:complexContent>
+      <xs:extension base="xs:annotated">
+        <xs:sequence>
+          <xs:choice minOccurs="0">
+            <xs:element name="simpleType" type="xs:localSimpleType" />
+            <xs:element name="complexType" type="xs:localComplexType" />
+          </xs:choice>
+          <xs:group ref="xs:identityConstraint" minOccurs="0"
+            maxOccurs="unbounded" />
+        </xs:sequence>
+        <xs:attributeGroup ref="xs:defRef" />
+        <xs:attribute name="type" type="xs:QName" />
+        <xs:attribute name="substitutionGroup" type="xs:QName" />
+        <xs:attributeGroup ref="xs:occurs" />
+        <xs:attribute name="default" type="xs:string" />
+        <xs:attribute name="fixed" type="xs:string" />
+        <xs:attribute name="nillable" type="xs:boolean"
+          use="optional" default="false" />
+        <xs:attribute name="abstract" type="xs:boolean"
+          use="optional" default="false" />
+        <xs:attribute name="final" type="xs:derivationSet" />
+        <xs:attribute name="block" type="xs:blockSet" />
+        <xs:attribute name="form" type="xs:formChoice" />
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="topLevelElement">
+    <xs:complexContent>
+      <xs:restriction base="xs:element">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+          <xs:choice minOccurs="0">
+            <xs:element name="simpleType" type="xs:localSimpleType" />
+            <xs:element name="complexType" type="xs:localComplexType" />
+          </xs:choice>
+          <xs:group ref="xs:identityConstraint" minOccurs="0"
+            maxOccurs="unbounded" />
+        </xs:sequence>
+        <xs:attribute name="ref" use="prohibited" />
+        <xs:attribute name="form" use="prohibited" />
+        <xs:attribute name="minOccurs" use="prohibited" />
+        <xs:attribute name="maxOccurs" use="prohibited" />
+        <xs:attribute name="name" use="required" type="xs:NCName" />
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="localElement">
+    <xs:complexContent>
+      <xs:restriction base="xs:element">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+          <xs:choice minOccurs="0">
+            <xs:element name="simpleType" type="xs:localSimpleType" />
+            <xs:element name="complexType" type="xs:localComplexType" />
+          </xs:choice>
+          <xs:group ref="xs:identityConstraint" minOccurs="0"
+            maxOccurs="unbounded" />
+        </xs:sequence>
+        <xs:attribute name="substitutionGroup" use="prohibited" />
+        <xs:attribute name="final" use="prohibited" />
+        <xs:attribute name="abstract" use="prohibited" />
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:element name="element" type="xs:topLevelElement" id="element">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-element" />
+    </xs:annotation>
+  </xs:element>
+
+  <xs:complexType name="group" abstract="true">
+    <xs:annotation>
+      <xs:documentation>
+        group type for explicit groups, named top-level groups and
+        group references
+      </xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="xs:annotated">
+        <xs:group ref="xs:particle" minOccurs="0" maxOccurs="unbounded" />
+        <xs:attributeGroup ref="xs:defRef" />
+        <xs:attributeGroup ref="xs:occurs" />
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="realGroup">
+    <xs:complexContent>
+      <xs:restriction base="xs:group">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+          <xs:choice minOccurs="0" maxOccurs="1">
+            <xs:element ref="xs:all" />
+            <xs:element ref="xs:choice" />
+            <xs:element ref="xs:sequence" />
+          </xs:choice>
+        </xs:sequence>
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="namedGroup">
+    <xs:complexContent>
+      <xs:restriction base="xs:realGroup">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+          <xs:choice minOccurs="1" maxOccurs="1">
+            <xs:element name="all">
+              <xs:complexType>
+                <xs:complexContent>
+                  <xs:restriction base="xs:all">
+                    <xs:group ref="xs:allModel" />
+                    <xs:attribute name="minOccurs" use="prohibited" />
+                    <xs:attribute name="maxOccurs" use="prohibited" />
+                    <xs:anyAttribute namespace="##other"
+                      processContents="lax" />
+                  </xs:restriction>
+                </xs:complexContent>
+              </xs:complexType>
+            </xs:element>
+            <xs:element name="choice" type="xs:simpleExplicitGroup" />
+            <xs:element name="sequence" type="xs:simpleExplicitGroup" />
+          </xs:choice>
+        </xs:sequence>
+        <xs:attribute name="name" use="required" type="xs:NCName" />
+        <xs:attribute name="ref" use="prohibited" />
+        <xs:attribute name="minOccurs" use="prohibited" />
+        <xs:attribute name="maxOccurs" use="prohibited" />
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="groupRef">
+    <xs:complexContent>
+      <xs:restriction base="xs:realGroup">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+        </xs:sequence>
+        <xs:attribute name="ref" use="required" type="xs:QName" />
+        <xs:attribute name="name" use="prohibited" />
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="explicitGroup">
+    <xs:annotation>
+      <xs:documentation>
+        group type for the three kinds of group
+      </xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:restriction base="xs:group">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+          <xs:group ref="xs:nestedParticle" minOccurs="0"
+            maxOccurs="unbounded" />
+        </xs:sequence>
+        <xs:attribute name="name" type="xs:NCName" use="prohibited" />
+        <xs:attribute name="ref" type="xs:QName" use="prohibited" />
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="simpleExplicitGroup">
+    <xs:complexContent>
+      <xs:restriction base="xs:explicitGroup">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+          <xs:group ref="xs:nestedParticle" minOccurs="0"
+            maxOccurs="unbounded" />
+        </xs:sequence>
+        <xs:attribute name="minOccurs" use="prohibited" />
+        <xs:attribute name="maxOccurs" use="prohibited" />
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:group name="allModel">
+    <xs:sequence>
+      <xs:element ref="xs:annotation" minOccurs="0" />
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>This choice with min/max is here to
+            avoid a pblm with the Elt:All/Choice/Seq
+            Particle derivation constraint
+          </xs:documentation>
+        </xs:annotation>
+        <xs:element name="element" type="xs:narrowMaxMin" />
+      </xs:choice>
+    </xs:sequence>
+  </xs:group>
+
+
+  <xs:complexType name="narrowMaxMin">
+    <xs:annotation>
+      <xs:documentation>restricted max/min</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:restriction base="xs:localElement">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+          <xs:choice minOccurs="0">
+            <xs:element name="simpleType" type="xs:localSimpleType" />
+            <xs:element name="complexType" type="xs:localComplexType" />
+          </xs:choice>
+          <xs:group ref="xs:identityConstraint" minOccurs="0"
+            maxOccurs="unbounded" />
+        </xs:sequence>
+        <xs:attribute name="minOccurs" use="optional"
+          default="1">
+          <xs:simpleType>
+            <xs:restriction base="xs:nonNegativeInteger">
+              <xs:enumeration value="0" />
+              <xs:enumeration value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute name="maxOccurs" use="optional"
+          default="1">
+          <xs:simpleType>
+            <xs:restriction base="xs:allNNI">
+              <xs:enumeration value="0" />
+              <xs:enumeration value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:attribute>
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="all">
+    <xs:annotation>
+      <xs:documentation>
+        Only elements allowed inside
+      </xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:restriction base="xs:explicitGroup">
+        <xs:group ref="xs:allModel" />
+        <xs:attribute name="minOccurs" use="optional"
+          default="1">
+          <xs:simpleType>
+            <xs:restriction base="xs:nonNegativeInteger">
+              <xs:enumeration value="0" />
+              <xs:enumeration value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute name="maxOccurs" use="optional"
+          default="1">
+          <xs:simpleType>
+            <xs:restriction base="xs:allNNI">
+              <xs:enumeration value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:attribute>
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:element name="all" id="all" type="xs:all">
+    <xs:annotation>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-all" />
+    </xs:annotation>
+  </xs:element>
+
+  <xs:element name="choice" type="xs:explicitGroup" id="choice">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-choice" />
+    </xs:annotation>
+  </xs:element>
+
+  <xs:element name="sequence" type="xs:explicitGroup" id="sequence">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-sequence" />
+    </xs:annotation>
+  </xs:element>
+
+  <xs:element name="group" type="xs:namedGroup" id="group">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-group" />
+    </xs:annotation>
+  </xs:element>
+
+  <xs:complexType name="wildcard">
+    <xs:complexContent>
+      <xs:extension base="xs:annotated">
+        <xs:attribute name="namespace" type="xs:namespaceList"
+          use="optional" default="##any" />
+        <xs:attribute name="processContents" use="optional"
+          default="strict">
+          <xs:simpleType>
+            <xs:restriction base="xs:NMTOKEN">
+              <xs:enumeration value="skip" />
+              <xs:enumeration value="lax" />
+              <xs:enumeration value="strict" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:element name="any" id="any">
+    <xs:annotation>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-any" />
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="xs:wildcard">
+          <xs:attributeGroup ref="xs:occurs" />
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:annotation>
+    <xs:documentation>
+      simple type for the value of the 'namespace' attr of
+      'any' and 'anyAttribute'
+    </xs:documentation>
+  </xs:annotation>
+  <xs:annotation>
+    <xs:documentation>
+      Value is
+      ##any - - any non-conflicting WFXML/attribute at all
+
+      ##other - - any non-conflicting WFXML/attribute from
+      namespace other than targetNS
+
+      ##local - - any unqualified non-conflicting WFXML/attribute
+
+      one or - - any non-conflicting WFXML/attribute from
+      more URI the listed namespaces
+      references
+      (space separated)
+
+      ##targetNamespace or ##local may appear in the above list, to
+      refer to the targetNamespace of the enclosing
+      schema or an absent targetNamespace respectively
+    </xs:documentation>
+  </xs:annotation>
+
+  <xs:simpleType name="namespaceList">
+    <xs:annotation>
+      <xs:documentation>
+        A utility type, not for public use
+      </xs:documentation>
+    </xs:annotation>
+    <xs:union>
+      <xs:simpleType>
+        <xs:restriction base="xs:token">
+          <xs:enumeration value="##any" />
+          <xs:enumeration value="##other" />
+        </xs:restriction>
+      </xs:simpleType>
+      <xs:simpleType>
+        <xs:list>
+          <xs:simpleType>
+            <xs:union memberTypes="xs:anyURI">
+              <xs:simpleType>
+                <xs:restriction base="xs:token">
+                  <xs:enumeration value="##targetNamespace" />
+                  <xs:enumeration value="##local" />
+                </xs:restriction>
+              </xs:simpleType>
+            </xs:union>
+          </xs:simpleType>
+        </xs:list>
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+
+  <xs:element name="attribute" type="xs:topLevelAttribute"
+    id="attribute">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-attribute" />
+    </xs:annotation>
+  </xs:element>
+
+  <xs:complexType name="attributeGroup" abstract="true">
+    <xs:complexContent>
+      <xs:extension base="xs:annotated">
+        <xs:group ref="xs:attrDecls" />
+        <xs:attributeGroup ref="xs:defRef" />
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="namedAttributeGroup">
+    <xs:complexContent>
+      <xs:restriction base="xs:attributeGroup">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+          <xs:group ref="xs:attrDecls" />
+        </xs:sequence>
+        <xs:attribute name="name" use="required" type="xs:NCName" />
+        <xs:attribute name="ref" use="prohibited" />
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="attributeGroupRef">
+    <xs:complexContent>
+      <xs:restriction base="xs:attributeGroup">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+        </xs:sequence>
+        <xs:attribute name="ref" use="required" type="xs:QName" />
+        <xs:attribute name="name" use="prohibited" />
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:element name="attributeGroup" type="xs:namedAttributeGroup"
+    id="attributeGroup">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-attributeGroup" />
+    </xs:annotation>
+  </xs:element>
+
+  <xs:element name="include" id="include">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-include" />
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="xs:annotated">
+          <xs:attribute name="schemaLocation" type="xs:anyURI"
+            use="required" />
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="redefine" id="redefine">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-redefine" />
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="xs:openAttrs">
+          <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element ref="xs:annotation" />
+            <xs:group ref="xs:redefinable" />
+          </xs:choice>
+          <xs:attribute name="schemaLocation" type="xs:anyURI"
+            use="required" />
+          <xs:attribute name="id" type="xs:ID" />
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="import" id="import">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-import" />
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="xs:annotated">
+          <xs:attribute name="namespace" type="xs:anyURI" />
+          <xs:attribute name="schemaLocation" type="xs:anyURI" />
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="selector" id="selector">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-selector" />
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="xs:annotated">
+          <xs:attribute name="xpath" use="required">
+            <xs:simpleType>
+              <xs:annotation>
+                <xs:documentation>A subset of XPath expressions for use
+                  in selectors
+                </xs:documentation>
+                <xs:documentation>A utility type, not for public
+                  use
+                </xs:documentation>
+              </xs:annotation>
+              <xs:restriction base="xs:token">
+                <xs:annotation>
+                  <xs:documentation>The following pattern is intended to
+                    allow XPath
+                    expressions per the following EBNF:
+                    Selector ::= Path ( '|' Path )*
+                    Path ::= ('.//')? Step ( '/' Step )*
+                    Step ::= '.' | NameTest
+                    NameTest ::= QName | '*' | NCName ':' '*'
+                    child:: is also allowed
+                  </xs:documentation>
+                </xs:annotation>
+                <xs:pattern
+                  value="(\.//)?(((child::)?((\i\c*:)?(\i\c*|\*)))|\.)(/(((child::)?((\i\c*:)?(\i\c*|\*)))|\.))*(\|(\.//)?(((child::)?((\i\c*:)?(\i\c*|\*)))|\.)(/(((child::)?((\i\c*:)?(\i\c*|\*)))|\.))*)*">
+                </xs:pattern>
+              </xs:restriction>
+            </xs:simpleType>
+          </xs:attribute>
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="field" id="field">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-field" />
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="xs:annotated">
+          <xs:attribute name="xpath" use="required">
+            <xs:simpleType>
+              <xs:annotation>
+                <xs:documentation>A subset of XPath expressions for use
+                  in fields
+                </xs:documentation>
+                <xs:documentation>A utility type, not for public
+                  use
+                </xs:documentation>
+              </xs:annotation>
+              <xs:restriction base="xs:token">
+                <xs:annotation>
+                  <xs:documentation>The following pattern is intended to
+                    allow XPath
+                    expressions per the same EBNF as for selector,
+                    with the following change:
+                    Path ::= ('.//')? ( Step '/' )* ( Step | '@' NameTest )
+                  </xs:documentation>
+                </xs:annotation>
+                <xs:pattern
+                  value="(\.//)?((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)/)*((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)|((attribute::|@)((\i\c*:)?(\i\c*|\*))))(\|(\.//)?((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)/)*((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)|((attribute::|@)((\i\c*:)?(\i\c*|\*)))))*">
+                </xs:pattern>
+              </xs:restriction>
+            </xs:simpleType>
+          </xs:attribute>
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:complexType name="keybase">
+    <xs:complexContent>
+      <xs:extension base="xs:annotated">
+        <xs:sequence>
+          <xs:element ref="xs:selector" />
+          <xs:element ref="xs:field" minOccurs="1" maxOccurs="unbounded" />
+        </xs:sequence>
+        <xs:attribute name="name" type="xs:NCName" use="required" />
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:group name="identityConstraint">
+    <xs:annotation>
+      <xs:documentation>The three kinds of identity constraints, all
+        with
+        type of or derived from 'keybase'.
+      </xs:documentation>
+    </xs:annotation>
+    <xs:choice>
+      <xs:element ref="xs:unique" />
+      <xs:element ref="xs:key" />
+      <xs:element ref="xs:keyref" />
+    </xs:choice>
+  </xs:group>
+
+  <xs:element name="unique" type="xs:keybase" id="unique">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-unique" />
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="key" type="xs:keybase" id="key">
+    <xs:annotation>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-key" />
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="keyref" id="keyref">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-keyref" />
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="xs:keybase">
+          <xs:attribute name="refer" type="xs:QName" use="required" />
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="notation" id="notation">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-notation" />
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="xs:annotated">
+          <xs:attribute name="name" type="xs:NCName" use="required" />
+          <xs:attribute name="public" type="xs:public" />
+          <xs:attribute name="system" type="xs:anyURI" />
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:simpleType name="public">
+    <xs:annotation>
+      <xs:documentation>
+        A utility type, not for public use
+      </xs:documentation>
+      <xs:documentation>
+        A public identifier, per ISO 8879
+      </xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:token" />
+  </xs:simpleType>
+
+  <xs:element name="appinfo" id="appinfo">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-appinfo" />
+    </xs:annotation>
+    <xs:complexType mixed="true">
+      <xs:sequence minOccurs="0" maxOccurs="unbounded">
+        <xs:any processContents="lax" />
+      </xs:sequence>
+      <xs:attribute name="source" type="xs:anyURI" />
+      <xs:anyAttribute namespace="##other"
+        processContents="lax" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="documentation" id="documentation">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-documentation" />
+    </xs:annotation>
+    <xs:complexType mixed="true">
+      <xs:sequence minOccurs="0" maxOccurs="unbounded">
+        <xs:any processContents="lax" />
+      </xs:sequence>
+      <xs:attribute name="source" type="xs:anyURI" />
+      <xs:attribute ref="xml:lang" />
+      <xs:anyAttribute namespace="##other"
+        processContents="lax" />
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="annotation" id="annotation">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-annotation" />
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="xs:openAttrs">
+          <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element ref="xs:appinfo" />
+            <xs:element ref="xs:documentation" />
+          </xs:choice>
+          <xs:attribute name="id" type="xs:ID" />
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:annotation>
+    <xs:documentation>
+      notations for use within XML Schema schemas
+    </xs:documentation>
+  </xs:annotation>
+
+  <xs:notation name="XMLSchemaStructures" public="structures"
+    system="http://www.w3.org/2000/08/XMLSchema.xsd" />
+  <xs:notation name="XML" public="REC-xml-19980210"
+    system="http://www.w3.org/TR/1998/REC-xml-19980210" />
+
+  <xs:complexType name="anyType" mixed="true">
+    <xs:annotation>
+      <xs:documentation>
+        Not the real urType, but as close an approximation as we can
+        get in the XML representation
+      </xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:any minOccurs="0" maxOccurs="unbounded"
+        processContents="lax" />
+    </xs:sequence>
+    <xs:anyAttribute processContents="lax" />
+  </xs:complexType>
+
+  <xs:annotation>
+    <xs:documentation>
+      First the built-in primitive datatypes. These
+      definitions are for
+      information only, the real built-in definitions
+      are magic.
+    </xs:documentation>
+
+    <xs:documentation>
+      For each built-in datatype in this schema (both
+      primitive and
+      derived) can be uniquely addressed via a URI
+      constructed
+      as follows:
+      1) the base URI is the URI of the XML Schema namespace
+      2) the fragment identifier is the name of the datatype
+
+      For example, to
+      address the int datatype, the URI is:
+
+      http://www.w3.org/2001/XMLSchema#int
+
+      Additionally, each facet
+      definition element can be uniquely
+      addressed via a URI constructed
+      as follows:
+      1) the base URI is the URI of the XML Schema namespace
+      2) the fragment identifier is the name of the facet
+
+      For example, to
+      address the maxInclusive facet, the URI is:
+
+      http://www.w3.org/2001/XMLSchema#maxInclusive
+
+      Additionally, each
+      facet usage in a built-in datatype definition
+      can be uniquely
+      addressed via a URI constructed as follows:
+      1) the base URI is the URI of the XML Schema namespace
+      2) the fragment identifier is the name of the datatype, followed
+      by a period (".") followed by the name of the facet
+
+      For example, to
+      address the usage of the maxInclusive facet in
+      the definition of
+      int, the URI is:
+
+      http://www.w3.org/2001/XMLSchema#int.maxInclusive
+
+    </xs:documentation>
+  </xs:annotation>
+
+  <xs:simpleType name="string" id="string">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="length" />
+        <hfp:hasFacet name="minLength" />
+        <hfp:hasFacet name="maxLength" />
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasProperty name="ordered" value="false" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#string" />
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="preserve" id="string.preserve" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="boolean" id="boolean">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasProperty name="ordered" value="false" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="finite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#boolean" />
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="collapse" fixed="true"
+        id="boolean.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="float" id="float">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasFacet name="maxInclusive" />
+        <hfp:hasFacet name="maxExclusive" />
+        <hfp:hasFacet name="minInclusive" />
+        <hfp:hasFacet name="minExclusive" />
+        <hfp:hasProperty name="ordered" value="total" />
+        <hfp:hasProperty name="bounded" value="true" />
+        <hfp:hasProperty name="cardinality" value="finite" />
+        <hfp:hasProperty name="numeric" value="true" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#float" />
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="collapse" fixed="true"
+        id="float.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="double" id="double">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasFacet name="maxInclusive" />
+        <hfp:hasFacet name="maxExclusive" />
+        <hfp:hasFacet name="minInclusive" />
+        <hfp:hasFacet name="minExclusive" />
+        <hfp:hasProperty name="ordered" value="total" />
+        <hfp:hasProperty name="bounded" value="true" />
+        <hfp:hasProperty name="cardinality" value="finite" />
+        <hfp:hasProperty name="numeric" value="true" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#double" />
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="collapse" fixed="true"
+        id="double.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="decimal" id="decimal">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="totalDigits" />
+        <hfp:hasFacet name="fractionDigits" />
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="maxInclusive" />
+        <hfp:hasFacet name="maxExclusive" />
+        <hfp:hasFacet name="minInclusive" />
+        <hfp:hasFacet name="minExclusive" />
+        <hfp:hasProperty name="ordered" value="total" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="true" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#decimal" />
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="collapse" fixed="true"
+        id="decimal.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="duration" id="duration">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasFacet name="maxInclusive" />
+        <hfp:hasFacet name="maxExclusive" />
+        <hfp:hasFacet name="minInclusive" />
+        <hfp:hasFacet name="minExclusive" />
+        <hfp:hasProperty name="ordered" value="partial" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#duration" />
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="collapse" fixed="true"
+        id="duration.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="dateTime" id="dateTime">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasFacet name="maxInclusive" />
+        <hfp:hasFacet name="maxExclusive" />
+        <hfp:hasFacet name="minInclusive" />
+        <hfp:hasFacet name="minExclusive" />
+        <hfp:hasProperty name="ordered" value="partial" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#dateTime" />
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="collapse" fixed="true"
+        id="dateTime.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="time" id="time">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasFacet name="maxInclusive" />
+        <hfp:hasFacet name="maxExclusive" />
+        <hfp:hasFacet name="minInclusive" />
+        <hfp:hasFacet name="minExclusive" />
+        <hfp:hasProperty name="ordered" value="partial" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#time" />
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="collapse" fixed="true"
+        id="time.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="date" id="date">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasFacet name="maxInclusive" />
+        <hfp:hasFacet name="maxExclusive" />
+        <hfp:hasFacet name="minInclusive" />
+        <hfp:hasFacet name="minExclusive" />
+        <hfp:hasProperty name="ordered" value="partial" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#date" />
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="collapse" fixed="true"
+        id="date.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="gYearMonth" id="gYearMonth">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasFacet name="maxInclusive" />
+        <hfp:hasFacet name="maxExclusive" />
+        <hfp:hasFacet name="minInclusive" />
+        <hfp:hasFacet name="minExclusive" />
+        <hfp:hasProperty name="ordered" value="partial" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#gYearMonth" />
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="collapse" fixed="true"
+        id="gYearMonth.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="gYear" id="gYear">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasFacet name="maxInclusive" />
+        <hfp:hasFacet name="maxExclusive" />
+        <hfp:hasFacet name="minInclusive" />
+        <hfp:hasFacet name="minExclusive" />
+        <hfp:hasProperty name="ordered" value="partial" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#gYear" />
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="collapse" fixed="true"
+        id="gYear.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="gMonthDay" id="gMonthDay">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasFacet name="maxInclusive" />
+        <hfp:hasFacet name="maxExclusive" />
+        <hfp:hasFacet name="minInclusive" />
+        <hfp:hasFacet name="minExclusive" />
+        <hfp:hasProperty name="ordered" value="partial" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#gMonthDay" />
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="collapse" fixed="true"
+        id="gMonthDay.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="gDay" id="gDay">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasFacet name="maxInclusive" />
+        <hfp:hasFacet name="maxExclusive" />
+        <hfp:hasFacet name="minInclusive" />
+        <hfp:hasFacet name="minExclusive" />
+        <hfp:hasProperty name="ordered" value="partial" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#gDay" />
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="collapse" fixed="true"
+        id="gDay.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="gMonth" id="gMonth">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasFacet name="maxInclusive" />
+        <hfp:hasFacet name="maxExclusive" />
+        <hfp:hasFacet name="minInclusive" />
+        <hfp:hasFacet name="minExclusive" />
+        <hfp:hasProperty name="ordered" value="partial" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#gMonth" />
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="collapse" fixed="true"
+        id="gMonth.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="hexBinary" id="hexBinary">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="length" />
+        <hfp:hasFacet name="minLength" />
+        <hfp:hasFacet name="maxLength" />
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasProperty name="ordered" value="false" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#binary" />
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="collapse" fixed="true"
+        id="hexBinary.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="base64Binary" id="base64Binary">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="length" />
+        <hfp:hasFacet name="minLength" />
+        <hfp:hasFacet name="maxLength" />
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasProperty name="ordered" value="false" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#base64Binary" />
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="collapse" fixed="true"
+        id="base64Binary.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="anyURI" id="anyURI">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="length" />
+        <hfp:hasFacet name="minLength" />
+        <hfp:hasFacet name="maxLength" />
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasProperty name="ordered" value="false" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#anyURI" />
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="collapse" fixed="true"
+        id="anyURI.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="QName" id="QName">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="length" />
+        <hfp:hasFacet name="minLength" />
+        <hfp:hasFacet name="maxLength" />
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasProperty name="ordered" value="false" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#QName" />
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="collapse" fixed="true"
+        id="QName.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="NOTATION" id="NOTATION">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="length" />
+        <hfp:hasFacet name="minLength" />
+        <hfp:hasFacet name="maxLength" />
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasProperty name="ordered" value="false" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#NOTATION" />
+      <xs:documentation>
+        NOTATION cannot be used directly in a schema;
+        rather a type
+        must be derived from it by specifying at least one
+        enumeration
+        facet whose value is the name of a NOTATION declared
+        in the
+        schema.
+      </xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:anySimpleType">
+      <xs:whiteSpace value="collapse" fixed="true"
+        id="NOTATION.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:annotation>
+    <xs:documentation>
+      Now the derived primitive types
+    </xs:documentation>
+  </xs:annotation>
+
+  <xs:simpleType name="normalizedString" id="normalizedString">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#normalizedString" />
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:whiteSpace value="replace" id="normalizedString.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="token" id="token">
+    <xs:annotation>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#token" />
+    </xs:annotation>
+    <xs:restriction base="xs:normalizedString">
+      <xs:whiteSpace value="collapse" id="token.whiteSpace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="language" id="language">
+    <xs:annotation>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#language" />
+    </xs:annotation>
+    <xs:restriction base="xs:token">
+      <xs:pattern value="[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*"
+        id="language.pattern">
+        <xs:annotation>
+          <xs:documentation source="http://www.ietf.org/rfc/rfc3066.txt">
+            pattern specifies
+            the content of section 2.12 of XML 1.0e2
+            and RFC 3066
+            (Revised version of RFC 1766).
+          </xs:documentation>
+        </xs:annotation>
+      </xs:pattern>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="IDREFS" id="IDREFS">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="length" />
+        <hfp:hasFacet name="minLength" />
+        <hfp:hasFacet name="maxLength" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasProperty name="ordered" value="false" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#IDREFS" />
+    </xs:annotation>
+    <xs:restriction>
+      <xs:simpleType>
+        <xs:list itemType="xs:IDREF" />
+      </xs:simpleType>
+      <xs:minLength value="1" id="IDREFS.minLength" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="ENTITIES" id="ENTITIES">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="length" />
+        <hfp:hasFacet name="minLength" />
+        <hfp:hasFacet name="maxLength" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasProperty name="ordered" value="false" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#ENTITIES" />
+    </xs:annotation>
+    <xs:restriction>
+      <xs:simpleType>
+        <xs:list itemType="xs:ENTITY" />
+      </xs:simpleType>
+      <xs:minLength value="1" id="ENTITIES.minLength" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="NMTOKEN" id="NMTOKEN">
+    <xs:annotation>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#NMTOKEN" />
+    </xs:annotation>
+    <xs:restriction base="xs:token">
+      <xs:pattern value="\c+" id="NMTOKEN.pattern">
+        <xs:annotation>
+          <xs:documentation source="http://www.w3.org/TR/REC-xml#NT-Nmtoken">
+            pattern matches
+            production 7 from the XML spec
+          </xs:documentation>
+        </xs:annotation>
+      </xs:pattern>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="NMTOKENS" id="NMTOKENS">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasFacet name="length" />
+        <hfp:hasFacet name="minLength" />
+        <hfp:hasFacet name="maxLength" />
+        <hfp:hasFacet name="enumeration" />
+        <hfp:hasFacet name="whiteSpace" />
+        <hfp:hasFacet name="pattern" />
+        <hfp:hasProperty name="ordered" value="false" />
+        <hfp:hasProperty name="bounded" value="false" />
+        <hfp:hasProperty name="cardinality" value="countably infinite" />
+        <hfp:hasProperty name="numeric" value="false" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#NMTOKENS" />
+    </xs:annotation>
+    <xs:restriction>
+      <xs:simpleType>
+        <xs:list itemType="xs:NMTOKEN" />
+      </xs:simpleType>
+      <xs:minLength value="1" id="NMTOKENS.minLength" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="Name" id="Name">
+    <xs:annotation>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#Name" />
+    </xs:annotation>
+    <xs:restriction base="xs:token">
+      <xs:pattern value="\i\c*" id="Name.pattern">
+        <xs:annotation>
+          <xs:documentation source="http://www.w3.org/TR/REC-xml#NT-Name">
+            pattern matches
+            production 5 from the XML spec
+          </xs:documentation>
+        </xs:annotation>
+      </xs:pattern>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="NCName" id="NCName">
+    <xs:annotation>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#NCName" />
+    </xs:annotation>
+    <xs:restriction base="xs:Name">
+      <xs:pattern value="[\i-[:]][\c-[:]]*" id="NCName.pattern">
+        <xs:annotation>
+          <xs:documentation
+            source="http://www.w3.org/TR/REC-xml-names/#NT-NCName">
+            pattern matches production 4 from the Namespaces in
+            XML spec
+          </xs:documentation>
+        </xs:annotation>
+      </xs:pattern>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="ID" id="ID">
+    <xs:annotation>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#ID" />
+    </xs:annotation>
+    <xs:restriction base="xs:NCName" />
+  </xs:simpleType>
+
+  <xs:simpleType name="IDREF" id="IDREF">
+    <xs:annotation>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#IDREF" />
+    </xs:annotation>
+    <xs:restriction base="xs:NCName" />
+  </xs:simpleType>
+
+  <xs:simpleType name="ENTITY" id="ENTITY">
+    <xs:annotation>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#ENTITY" />
+    </xs:annotation>
+    <xs:restriction base="xs:NCName" />
+  </xs:simpleType>
+
+  <xs:simpleType name="integer" id="integer">
+    <xs:annotation>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#integer" />
+    </xs:annotation>
+    <xs:restriction base="xs:decimal">
+      <xs:fractionDigits value="0" fixed="true"
+        id="integer.fractionDigits" />
+      <xs:pattern value="[\-+]?[0-9]+" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="nonPositiveInteger" id="nonPositiveInteger">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#nonPositiveInteger" />
+    </xs:annotation>
+    <xs:restriction base="xs:integer">
+      <xs:maxInclusive value="0"
+        id="nonPositiveInteger.maxInclusive" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="negativeInteger" id="negativeInteger">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#negativeInteger" />
+    </xs:annotation>
+    <xs:restriction base="xs:nonPositiveInteger">
+      <xs:maxInclusive value="-1"
+        id="negativeInteger.maxInclusive" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="long" id="long">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasProperty name="bounded" value="true" />
+        <hfp:hasProperty name="cardinality" value="finite" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#long" />
+    </xs:annotation>
+    <xs:restriction base="xs:integer">
+      <xs:minInclusive value="-9223372036854775808" id="long.minInclusive" />
+      <xs:maxInclusive value="9223372036854775807" id="long.maxInclusive" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="int" id="int">
+    <xs:annotation>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#int" />
+    </xs:annotation>
+    <xs:restriction base="xs:long">
+      <xs:minInclusive value="-2147483648" id="int.minInclusive" />
+      <xs:maxInclusive value="2147483647" id="int.maxInclusive" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="short" id="short">
+    <xs:annotation>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#short" />
+    </xs:annotation>
+    <xs:restriction base="xs:int">
+      <xs:minInclusive value="-32768" id="short.minInclusive" />
+      <xs:maxInclusive value="32767" id="short.maxInclusive" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="byte" id="byte">
+    <xs:annotation>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#byte" />
+    </xs:annotation>
+    <xs:restriction base="xs:short">
+      <xs:minInclusive value="-128" id="byte.minInclusive" />
+      <xs:maxInclusive value="127" id="byte.maxInclusive" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="nonNegativeInteger" id="nonNegativeInteger">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#nonNegativeInteger" />
+    </xs:annotation>
+    <xs:restriction base="xs:integer">
+      <xs:minInclusive value="0"
+        id="nonNegativeInteger.minInclusive" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="unsignedLong" id="unsignedLong">
+    <xs:annotation>
+      <xs:appinfo>
+        <hfp:hasProperty name="bounded" value="true" />
+        <hfp:hasProperty name="cardinality" value="finite" />
+      </xs:appinfo>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#unsignedLong" />
+    </xs:annotation>
+    <xs:restriction base="xs:nonNegativeInteger">
+      <xs:maxInclusive value="18446744073709551615" id="unsignedLong.maxInclusive" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="unsignedInt" id="unsignedInt">
+    <xs:annotation>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#unsignedInt" />
+    </xs:annotation>
+    <xs:restriction base="xs:unsignedLong">
+      <xs:maxInclusive value="4294967295" id="unsignedInt.maxInclusive" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="unsignedShort" id="unsignedShort">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#unsignedShort" />
+    </xs:annotation>
+    <xs:restriction base="xs:unsignedInt">
+      <xs:maxInclusive value="65535"
+        id="unsignedShort.maxInclusive" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="unsignedByte" id="unsignedByte">
+    <xs:annotation>
+      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#unsignedByte" />
+    </xs:annotation>
+    <xs:restriction base="xs:unsignedShort">
+      <xs:maxInclusive value="255" id="unsignedByte.maxInclusive" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="positiveInteger" id="positiveInteger">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#positiveInteger" />
+    </xs:annotation>
+    <xs:restriction base="xs:nonNegativeInteger">
+      <xs:minInclusive value="1"
+        id="positiveInteger.minInclusive" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="derivationControl">
+    <xs:annotation>
+      <xs:documentation>
+        A utility type, not for public use
+      </xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:NMTOKEN">
+      <xs:enumeration value="substitution" />
+      <xs:enumeration value="extension" />
+      <xs:enumeration value="restriction" />
+      <xs:enumeration value="list" />
+      <xs:enumeration value="union" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:group name="simpleDerivation">
+    <xs:choice>
+      <xs:element ref="xs:restriction" />
+      <xs:element ref="xs:list" />
+      <xs:element ref="xs:union" />
+    </xs:choice>
+  </xs:group>
+
+  <xs:simpleType name="simpleDerivationSet">
+    <xs:annotation>
+      <xs:documentation>
+        #all or (possibly empty) subset of {restriction, union, list}
+      </xs:documentation>
+      <xs:documentation>
+        A utility type, not for public use
+      </xs:documentation>
+    </xs:annotation>
+    <xs:union>
+      <xs:simpleType>
+        <xs:restriction base="xs:token">
+          <xs:enumeration value="#all" />
+        </xs:restriction>
+      </xs:simpleType>
+      <xs:simpleType>
+        <xs:list>
+          <xs:simpleType>
+            <xs:restriction base="xs:derivationControl">
+              <xs:enumeration value="list" />
+              <xs:enumeration value="union" />
+              <xs:enumeration value="restriction" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:list>
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+
+  <xs:complexType name="simpleType" abstract="true">
+    <xs:complexContent>
+      <xs:extension base="xs:annotated">
+        <xs:group ref="xs:simpleDerivation" />
+        <xs:attribute name="final" type="xs:simpleDerivationSet" />
+        <xs:attribute name="name" type="xs:NCName">
+          <xs:annotation>
+            <xs:documentation>
+              Can be restricted to required or forbidden
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="topLevelSimpleType">
+    <xs:complexContent>
+      <xs:restriction base="xs:simpleType">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+          <xs:group ref="xs:simpleDerivation" />
+        </xs:sequence>
+        <xs:attribute name="name" use="required" type="xs:NCName">
+          <xs:annotation>
+            <xs:documentation>
+              Required at the top level
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="localSimpleType">
+    <xs:complexContent>
+      <xs:restriction base="xs:simpleType">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+          <xs:group ref="xs:simpleDerivation" />
+        </xs:sequence>
+        <xs:attribute name="name" use="prohibited">
+          <xs:annotation>
+            <xs:documentation>
+              Forbidden when nested
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="final" use="prohibited" />
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:element name="simpleType" type="xs:topLevelSimpleType"
+    id="simpleType">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-simpleType" />
+    </xs:annotation>
+  </xs:element>
+
+  <xs:group name="facets">
+    <xs:annotation>
+      <xs:documentation>
+        We should use a substitution group for facets, but
+        that's ruled out because it would allow users to
+        add their own, which we're not ready for yet.
+      </xs:documentation>
+    </xs:annotation>
+    <xs:choice>
+      <xs:element ref="xs:minExclusive" />
+      <xs:element ref="xs:minInclusive" />
+      <xs:element ref="xs:maxExclusive" />
+      <xs:element ref="xs:maxInclusive" />
+      <xs:element ref="xs:totalDigits" />
+      <xs:element ref="xs:fractionDigits" />
+      <xs:element ref="xs:length" />
+      <xs:element ref="xs:minLength" />
+      <xs:element ref="xs:maxLength" />
+      <xs:element ref="xs:enumeration" />
+      <xs:element ref="xs:whiteSpace" />
+      <xs:element ref="xs:pattern" />
+    </xs:choice>
+  </xs:group>
+
+  <xs:group name="simpleRestrictionModel">
+    <xs:sequence>
+      <xs:element name="simpleType" type="xs:localSimpleType"
+        minOccurs="0" />
+      <xs:group ref="xs:facets" minOccurs="0" maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:group>
+
+  <xs:element name="restriction" id="restriction">
+    <xs:complexType>
+      <xs:annotation>
+        <xs:documentation
+          source="http://www.w3.org/TR/xmlschema-2/#element-restriction">
+          base attribute and simpleType child are mutually
+          exclusive, but one or other is required
+        </xs:documentation>
+      </xs:annotation>
+      <xs:complexContent>
+        <xs:extension base="xs:annotated">
+          <xs:group ref="xs:simpleRestrictionModel" />
+          <xs:attribute name="base" type="xs:QName" use="optional" />
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="list" id="list">
+    <xs:complexType>
+      <xs:annotation>
+        <xs:documentation
+          source="http://www.w3.org/TR/xmlschema-2/#element-list">
+          itemType attribute and simpleType child are mutually
+          exclusive, but one or other is required
+        </xs:documentation>
+      </xs:annotation>
+      <xs:complexContent>
+        <xs:extension base="xs:annotated">
+          <xs:sequence>
+            <xs:element name="simpleType" type="xs:localSimpleType"
+              minOccurs="0" />
+          </xs:sequence>
+          <xs:attribute name="itemType" type="xs:QName"
+            use="optional" />
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="union" id="union">
+    <xs:complexType>
+      <xs:annotation>
+        <xs:documentation
+          source="http://www.w3.org/TR/xmlschema-2/#element-union">
+          memberTypes attribute must be non-empty or there must
+          be
+          at least one simpleType child
+        </xs:documentation>
+      </xs:annotation>
+      <xs:complexContent>
+        <xs:extension base="xs:annotated">
+          <xs:sequence>
+            <xs:element name="simpleType" type="xs:localSimpleType"
+              minOccurs="0" maxOccurs="unbounded" />
+          </xs:sequence>
+          <xs:attribute name="memberTypes" use="optional">
+            <xs:simpleType>
+              <xs:list itemType="xs:QName" />
+            </xs:simpleType>
+          </xs:attribute>
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:complexType name="facet">
+    <xs:complexContent>
+      <xs:extension base="xs:annotated">
+        <xs:attribute name="value" use="required" />
+        <xs:attribute name="fixed" type="xs:boolean" use="optional"
+          default="false" />
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="noFixedFacet">
+    <xs:complexContent>
+      <xs:restriction base="xs:facet">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+        </xs:sequence>
+        <xs:attribute name="fixed" use="prohibited" />
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:element name="minExclusive" id="minExclusive" type="xs:facet">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-minExclusive" />
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="minInclusive" id="minInclusive" type="xs:facet">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-minInclusive" />
+    </xs:annotation>
+  </xs:element>
+
+  <xs:element name="maxExclusive" id="maxExclusive" type="xs:facet">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-maxExclusive" />
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="maxInclusive" id="maxInclusive" type="xs:facet">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-maxInclusive" />
+    </xs:annotation>
+  </xs:element>
+
+  <xs:complexType name="numFacet">
+    <xs:complexContent>
+      <xs:restriction base="xs:facet">
+        <xs:sequence>
+          <xs:element ref="xs:annotation" minOccurs="0" />
+        </xs:sequence>
+        <xs:attribute name="value" type="xs:nonNegativeInteger"
+          use="required" />
+        <xs:anyAttribute namespace="##other"
+          processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:element name="totalDigits" id="totalDigits">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-totalDigits" />
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:restriction base="xs:numFacet">
+          <xs:sequence>
+            <xs:element ref="xs:annotation" minOccurs="0" />
+          </xs:sequence>
+          <xs:attribute name="value" type="xs:positiveInteger"
+            use="required" />
+          <xs:anyAttribute namespace="##other"
+            processContents="lax" />
+        </xs:restriction>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="fractionDigits" id="fractionDigits" type="xs:numFacet">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-fractionDigits" />
+    </xs:annotation>
+  </xs:element>
+
+  <xs:element name="length" id="length" type="xs:numFacet">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-length" />
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="minLength" id="minLength" type="xs:numFacet">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-minLength" />
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="maxLength" id="maxLength" type="xs:numFacet">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-maxLength" />
+    </xs:annotation>
+  </xs:element>
+
+  <xs:element name="enumeration" id="enumeration" type="xs:noFixedFacet">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-enumeration" />
+    </xs:annotation>
+  </xs:element>
+
+  <xs:element name="whiteSpace" id="whiteSpace">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-whiteSpace" />
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:restriction base="xs:facet">
+          <xs:sequence>
+            <xs:element ref="xs:annotation" minOccurs="0" />
+          </xs:sequence>
+          <xs:attribute name="value" use="required">
+            <xs:simpleType>
+              <xs:restriction base="xs:NMTOKEN">
+                <xs:enumeration value="preserve" />
+                <xs:enumeration value="replace" />
+                <xs:enumeration value="collapse" />
+              </xs:restriction>
+            </xs:simpleType>
+          </xs:attribute>
+          <xs:anyAttribute namespace="##other"
+            processContents="lax" />
+        </xs:restriction>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="pattern" id="pattern">
+    <xs:annotation>
+      <xs:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-pattern" />
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:restriction base="xs:noFixedFacet">
+          <xs:sequence>
+            <xs:element ref="xs:annotation" minOccurs="0" />
+          </xs:sequence>
+          <xs:attribute name="value" type="xs:string" use="required" />
+          <xs:anyAttribute namespace="##other"
+            processContents="lax" />
+        </xs:restriction>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+
+</xsd:schema>
diff --git a/DFDL/attribution/org/apache/daffodil/xsd/XMLSchema_for_DFDL.xsd b/DFDL/attribution/org/apache/daffodil/xsd/XMLSchema_for_DFDL.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..0d070b1a34bcc21c8f32ab52829980b7116503f6
--- /dev/null
+++ b/DFDL/attribution/org/apache/daffodil/xsd/XMLSchema_for_DFDL.xsd
@@ -0,0 +1,1801 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!--
+  Copyright © 2018 World Wide Web Consortium, (Massachusetts
+  Institute of Technology, European Research Consortium for Informatics and
+  Mathematics, Keio University, Beihang). All Rights Reserved. This work is
+  distributed under the W3C® Software License [1] in the hope that it will be
+  useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+  [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+-->
+
+<!-- 
+
+To get enforcement of the XML Schema Subset for DFDL, but at the 
+same time let users use the original XML Schema namespace URI, we
+give this schema the XML Schema URI as its namespace, and we use 
+this to validate when we load a DFDL Schema.
+
+ -->
+<!-- XML Schema schema for XML Schemas: Part 1: Structures -->
+<!-- Note this schema is NOT the normative structures schema. -->
+<!-- The prose copy in the structures REC is the normative -->
+<!-- version (which shouldn't differ from this one except for -->
+<!-- this comment and entity expansions, but just in case -->
+
+<xsd:schema  
+  targetNamespace="http://www.w3.org/2001/XMLSchema"
+  xmlns:xs="http://www.w3.org/2001/XMLSchema"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  blockDefault="#all" elementFormDefault="qualified" version="1.0"
+  xml:lang="EN" xmlns:xml="http://www.w3.org/XML/1998/namespace"
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"
+  xmlns:dfdlx="http://www.ogf.org/dfdl/dfdl-1.0/extensions">
+  <!-- Use the real URI for this, not the subset URI
+   "http://www.w3.org/2001/XMLSchema"
+  -->
+
+  <xsd:import namespace="http://www.ogf.org/dfdl/dfdl-1.0/"/>
+
+  <xsd:import namespace="http://www.ogf.org/dfdl/dfdl-1.0/extensions"/>
+
+  <xsd:import namespace="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:int"/>
+
+  <xsd:annotation>
+    <xsd:documentation>
+      Part 1 version: Id: structures.xsd,v 1.2 2004/01/15 11:34:25 ht Exp
+      Part 2 version: Id: datatypes.xsd,v 1.3 2004/01/23 18:11:13 ht Exp
+    </xsd:documentation>
+  </xsd:annotation>
+
+  <xsd:annotation>
+    <xsd:documentation
+      source="http://www.w3.org/TR/2004/PER-xmlschema-1-20040318/structures.html">
+      The schema corresponding to this document is normative,
+      with respect to the syntactic constraints it expresses in the
+      XML Schema language. The documentation (within &lt;documentation>
+      elements)
+      below, is not normative, but rather highlights important aspects of
+      the W3C Recommendation of which this is a part
+    </xsd:documentation>
+  </xsd:annotation>
+
+  <xsd:annotation>
+    <xsd:documentation>
+      The simpleType element and all of its members are defined
+      towards the end
+      of this schema document
+    </xsd:documentation>
+  </xsd:annotation>
+
+  <xsd:import namespace="http://www.w3.org/XML/1998/namespace"
+    schemaLocation="./xml.xsd">
+    <xsd:annotation>
+      <xsd:documentation>
+        Get access to the xml: attribute groups for xml:lang
+        as declared on 'schema' and 'documentation' below
+      </xsd:documentation>
+    </xsd:annotation>
+  </xsd:import>
+
+  <xsd:complexType name="openAttrs">
+    <xsd:annotation>
+      <xsd:documentation>
+        This type is extended by almost all schema types
+        to allow attributes from other namespaces to be
+        added to user schemas.
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:complexContent>
+      <xsd:restriction base="xsd:anyType">
+        <xsd:attributeGroup ref="xsd:anyOther" />
+      </xsd:restriction>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="annotated">
+    <xsd:annotation>
+      <xsd:documentation>
+        This type is extended by all types which allow annotation
+        other than &lt;schema&gt; itself
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:complexContent>
+      <xsd:extension base="xsd:openAttrs">
+        <xsd:sequence>
+          <xsd:element ref="xsd:annotation" minOccurs="0" />
+        </xsd:sequence>
+        <xsd:attribute name="id" type="xsd:ID" />
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:group name="schemaTop">
+    <xsd:annotation>
+      <xsd:documentation>
+        This group is for the
+        elements which occur freely at the top level of schemas.
+        All of their types are based on the "annotated" type by extension.
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:choice>
+      <xsd:group ref="xsd:redefinable" />
+      <xsd:element ref="xsd:element" />
+      <!-- <xsd:element ref="xsd:attribute"/> -->
+      <!-- <xsd:element ref="xsd:notation"/> -->
+    </xsd:choice>
+  </xsd:group>
+
+  <xsd:group name="redefinable">
+    <xsd:annotation>
+      <xsd:documentation>
+        This group is for the
+        elements which can self-redefine (see &lt;redefine> below).
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:choice>
+      <xsd:element ref="xsd:simpleType" />
+      <xsd:element ref="xsd:complexType" />
+      <xsd:element ref="xsd:group" />
+      <!-- <xsd:element ref="xsd:attributeGroup"/> -->
+    </xsd:choice>
+  </xsd:group>
+
+  <xsd:simpleType name="formChoice">
+    <xsd:annotation>
+      <xsd:documentation>
+        A utility type, not for public use
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NMTOKEN">
+      <xsd:enumeration value="qualified" />
+      <xsd:enumeration value="unqualified" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="reducedDerivationControl">
+    <xsd:annotation>
+      <xsd:documentation>
+        A utility type, not for public use
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:derivationControl">
+      <!-- <xsd:enumeration value="extension"/> -->
+      <xsd:enumeration value="restriction" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="derivationSet">
+    <xsd:annotation>
+      <xsd:documentation>
+        A utility type, not for public use
+      </xsd:documentation>
+      <xsd:documentation>
+        #all or (possibly empty) subset of {extension, restriction}
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:union>
+      <xsd:simpleType>
+        <xsd:restriction base="xsd:token">
+          <xsd:enumeration value="#all" />
+        </xsd:restriction>
+      </xsd:simpleType>
+      <xsd:simpleType>
+        <xsd:list itemType="xsd:reducedDerivationControl" />
+      </xsd:simpleType>
+    </xsd:union>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="typeDerivationControl">
+    <xsd:annotation>
+      <xsd:documentation>
+        A utility type, not for public use
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:derivationControl">
+      <!-- <xsd:enumeration value="extension"/> -->
+      <xsd:enumeration value="restriction" />
+      <!-- <xsd:enumeration value="list"/> -->
+      <xsd:enumeration value="union" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:simpleType name="fullDerivationSet">
+    <xsd:annotation>
+      <xsd:documentation>
+        A utility type, not for public use
+      </xsd:documentation>
+      <xsd:documentation>
+        #all or (possibly empty) subset of {extension, restriction, list, union}
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:union>
+      <xsd:simpleType>
+        <xsd:restriction base="xsd:token">
+          <xsd:enumeration value="#all" />
+        </xsd:restriction>
+      </xsd:simpleType>
+      <xsd:simpleType>
+        <xsd:list itemType="xsd:typeDerivationControl" />
+      </xsd:simpleType>
+    </xsd:union>
+  </xsd:simpleType>
+
+  <xsd:element name="schema" id="schema">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-schema" />
+    </xsd:annotation>
+    <xsd:complexType>
+      <xsd:complexContent>
+        <xsd:extension base="xsd:openAttrs">
+          <xsd:sequence>
+            <xsd:choice minOccurs="0" maxOccurs="unbounded">
+              <xsd:element ref="xsd:include" />
+              <xsd:element ref="xsd:import" />
+              <!-- <xsd:element ref="xsd:redefine"/> -->
+              <xsd:element ref="xsd:annotation" />
+            </xsd:choice>
+            <xsd:sequence minOccurs="0" maxOccurs="unbounded">
+              <xsd:group ref="xsd:schemaTop" />
+              <xsd:element ref="xsd:annotation" minOccurs="0"
+                maxOccurs="unbounded" />
+            </xsd:sequence>
+          </xsd:sequence>
+          <xsd:attribute name="targetNamespace" type="xsd:anyURI" />
+          <xsd:attribute name="version" type="xsd:token" />
+          <!-- <xsd:attribute name="finalDefault" type="xsd:fullDerivationSet" 
+            use="optional" default=""/>
+            <xsd:attribute name="blockDefault" type="xsd:blockSet" use="optional" 
+            default=""/>
+          -->
+          <xsd:attribute name="attributeFormDefault" type="xsd:formChoice"
+            use="optional" default="unqualified" />
+          <xsd:attribute name="elementFormDefault" type="xsd:formChoice"
+            use="optional" default="unqualified" />
+          <xsd:attribute name="id" type="xsd:ID" />
+          <xsd:attribute ref="xml:lang" />
+        </xsd:extension>
+      </xsd:complexContent>
+    </xsd:complexType>
+
+    <xsd:key name="element">
+      <xsd:selector xpath="xsd:element" />
+      <xsd:field xpath="@name" />
+    </xsd:key>
+
+    <xsd:key name="attribute">
+      <xsd:selector xpath="xsd:attribute" />
+      <xsd:field xpath="@name" />
+    </xsd:key>
+
+    <xsd:key name="type">
+      <xsd:selector xpath="xsd:complexType|xsd:simpleType" />
+      <xsd:field xpath="@name" />
+    </xsd:key>
+
+    <xsd:key name="group">
+      <xsd:selector xpath="xsd:group" />
+      <xsd:field xpath="@name" />
+    </xsd:key>
+
+    <xsd:key name="attributeGroup">
+      <xsd:selector xpath="xsd:attributeGroup" />
+      <xsd:field xpath="@name" />
+    </xsd:key>
+
+    <!-- not in DFDL v1.0
+      <xsd:key name="notation">
+      <xsd:selector xpath="xsd:notation"/>
+      <xsd:field xpath="@name"/>
+      </xsd:key>
+
+
+      <xsd:key name="identityConstraint">
+      <xsd:selector xpath=".//xsd:key|.//xsd:unique|.//xsd:keyref"/>
+      <xsd:field xpath="@name"/>
+      </xsd:key>
+    -->
+  </xsd:element>
+
+  <xsd:simpleType name="allNNI">
+    <xsd:annotation>
+      <xsd:documentation>
+        for maxOccurs
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:union memberTypes="xsd:nonNegativeInteger">
+      <xsd:simpleType>
+        <xsd:restriction base="xsd:NMTOKEN">
+          <xsd:enumeration value="unbounded" />
+        </xsd:restriction>
+      </xsd:simpleType>
+    </xsd:union>
+  </xsd:simpleType>
+
+  <xsd:attributeGroup name="occurs">
+    <xsd:annotation>
+      <xsd:documentation>
+        for all particles
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:attribute name="minOccurs" type="xsd:nonNegativeInteger"
+      use="optional" default="1" />
+    <xsd:attribute name="maxOccurs" type="xsd:allNNI" use="optional"
+      default="1" />
+  </xsd:attributeGroup>
+
+  <xsd:attributeGroup name="defRef">
+    <xsd:annotation>
+      <xsd:documentation>
+        for element, group and attributeGroup,
+        which both define and reference
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:attribute name="name" type="xsd:NCName" />
+    <xsd:attribute name="ref" type="xsd:QName" />
+  </xsd:attributeGroup>
+
+  <xsd:group name="typeDefParticle">
+    <xsd:annotation>
+      <xsd:documentation>
+        'complexType' uses this
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:choice>
+      <xsd:element name="group" type="xsd:groupRef" />
+      <!-- <xsd:element ref="xsd:all"/> -->
+      <xsd:element ref="xsd:choice" />
+      <xsd:element ref="xsd:sequence" />
+    </xsd:choice>
+  </xsd:group>
+
+
+
+  <xsd:group name="nestedParticle">
+    <xsd:choice>
+      <xsd:element name="element" type="xsd:localElement" />
+      <xsd:element name="group" type="xsd:groupRef" />
+      <xsd:element ref="xsd:choice" />
+      <xsd:element ref="xsd:sequence" />
+      <!-- <xsd:element ref="xsd:any"/> -->
+    </xsd:choice>
+  </xsd:group>
+
+  <xsd:group name="particle">
+    <xsd:choice>
+      <xsd:element name="element" type="xsd:localElement" />
+      <xsd:element name="group" type="xsd:groupRef" />
+      <!-- <xsd:element ref="xsd:all"/> -->
+      <xsd:element ref="xsd:choice" />
+      <xsd:element ref="xsd:sequence" />
+      <!-- <xsd:element ref="xsd:any"/> -->
+    </xsd:choice>
+  </xsd:group>
+
+  <!-- No attributes in DFDL v1.0
+    <xsd:complexType name="attribute">
+    <xsd:complexContent>
+    <xsd:extension base="xsd:annotated">
+    <xsd:sequence>
+    <xsd:element name="simpleType" minOccurs="0" type="xsd:localSimpleType"/>
+    </xsd:sequence>
+    <xsd:attributeGroup ref="xsd:defRef"/>
+    <xsd:attribute name="type" type="xsd:QName"/>
+    <xsd:attribute name="use" use="optional" default="optional">
+    <xsd:simpleType>
+    <xsd:restriction base="xsd:NMTOKEN">
+    <xsd:enumeration value="prohibited"/>
+    <xsd:enumeration value="optional"/>
+    <xsd:enumeration value="required"/>
+    </xsd:restriction>
+    </xsd:simpleType>
+    </xsd:attribute>
+    <xsd:attribute name="default" type="xsd:string"/>
+    <xsd:attribute name="fixed" type="xsd:string"/>
+    <xsd:attribute name="form" type="xsd:formChoice"/>
+    </xsd:extension>
+    </xsd:complexContent>
+    </xsd:complexType>
+
+    <xsd:complexType name="topLevelAttribute">
+    <xsd:complexContent>
+    <xsd:restriction base="xsd:attribute">
+    <xsd:sequence>
+    <xsd:element ref="xsd:annotation" minOccurs="0"/>
+    <xsd:element name="simpleType" minOccurs="0" type="xsd:localSimpleType"/>
+    </xsd:sequence>
+    <xsd:attribute name="ref" use="prohibited"/>
+    <xsd:attribute name="form" use="prohibited"/>
+    <xsd:attribute name="use" use="prohibited"/>
+    <xsd:attribute name="name" use="required" type="xsd:NCName"/>
+    <xsd:attributeGroup ref="xsd:anyOther"/>
+    </xsd:restriction>
+    </xsd:complexContent>
+    </xsd:complexType>
+  -->
+
+  <!-- No attribute decls of any sort in DFDL v1.0
+    <xsd:group name="attrDecls">
+    <xsd:sequence>
+    <xsd:choice minOccurs="0" maxOccurs="unbounded">
+    <xsd:element name="attribute" type="xsd:attribute"/>
+    <xsd:element name="attributeGroup" type="xsd:attributeGroupRef"/>
+    </xsd:choice>
+    <xsd:element ref="xsd:anyAttribute" minOccurs="0"/>
+    </xsd:sequence>
+    </xsd:group>
+  -->
+  <!--
+    <xsd:element name="anyAttribute" type="xsd:wildcard" id="anyAttribute">
+    <xsd:annotation>
+    <xsd:documentation source="http://www.w3.org/TR/xmlschema-1/#element-anyAttribute"/>
+    </xsd:annotation>
+    </xsd:element>
+  -->
+  <xsd:group name="complexTypeModel">
+    <xsd:choice>
+      <!-- <xsd:element ref="xsd:simpleContent"/> Not DFDL v1.0 -->
+      <!-- <xsd:element ref="xsd:complexContent"/> Not DFDL v1.0 -->
+      <xsd:sequence>
+        <xsd:annotation>
+          <xsd:documentation>
+            This branch is short for
+            &lt;complexContent>
+            &lt;restriction base="xsd:anyType">
+            ...
+            &lt;/restriction>
+            &lt;/complexContent></xsd:documentation>
+        </xsd:annotation>
+        <xsd:group ref="xsd:typeDefParticle" minOccurs="0" />
+        <!-- <xsd:group ref="xsd:attrDecls"/> --> <!-- no attributes in DFDL -->
+      </xsd:sequence>
+    </xsd:choice>
+  </xsd:group>
+
+  <xsd:complexType name="complexType" abstract="true">
+    <xsd:complexContent>
+      <xsd:extension base="xsd:annotated">
+        <xsd:group ref="xsd:complexTypeModel" />
+        <xsd:attribute name="name" type="xsd:NCName">
+          <xsd:annotation>
+            <xsd:documentation>
+              Will be restricted to required or forbidden
+            </xsd:documentation>
+          </xsd:annotation>
+        </xsd:attribute>
+        <!-- No type derivation (for complex types in DFDL v1.0
+          <xsd:attribute name="mixed" type="xsd:boolean" use="optional" default="false">
+          <xsd:annotation>
+          <xsd:documentation>
+          Not allowed if simpleContent child is chosen.
+          May be overriden by setting on complexContent child.</xsd:documentation>
+          </xsd:annotation>
+          </xsd:attribute>
+        -->
+        <!-- none of these make sense in DFDL v1.0. Changed to "prohibited" -->
+        <xsd:attribute name="abstract" type="xsd:boolean"
+          use="prohibited" /> <!-- default="false" -->
+        <xsd:attribute name="final" type="xsd:derivationSet"
+          use="prohibited" />
+        <xsd:attribute name="block" type="xsd:derivationSet"
+          use="prohibited" />
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+
+  <!--
+    <xsd:complexType name="restrictionType">
+    <xsd:complexContent>
+    <xsd:extension base="xsd:annotated">
+    <xsd:sequence>
+    <xsd:choice minOccurs="0">
+    <xsd:group ref="xsd:typeDefParticle"/>
+    <xsd:group ref="xsd:simpleRestrictionModel"/>
+    </xsd:choice>
+    <xsd:group ref="xsd:attrDecls"/>
+    </xsd:sequence>
+    <xsd:attribute name="base" type="xsd:QName" use="required"/>
+    </xsd:extension>
+    </xsd:complexContent>
+    </xsd:complexType>
+
+
+
+    <xsd:complexType name="extensionType">
+    <xsd:complexContent>
+    <xsd:extension base="xsd:annotated">
+    <xsd:sequence>
+    <xsd:group ref="xsd:typeDefParticle" minOccurs="0"/>
+    <xsd:group ref="xsd:attrDecls"/>
+    </xsd:sequence>
+    <xsd:attribute name="base" type="xsd:QName" use="required"/>
+    </xsd:extension>
+    </xsd:complexContent>
+    </xsd:complexType>
+  -->
+
+
+  <!--
+    <xsd:complexType name="simpleExtensionType">
+    <xsd:complexContent>
+    <xsd:restriction base="xsd:extensionType">
+    <xsd:sequence>
+    <xsd:annotation>
+    <xsd:documentation>
+    No typeDefParticle group reference</xsd:documentation>
+    </xsd:annotation>
+    <xsd:element ref="xsd:annotation" minOccurs="0"/>
+    <xsd:group ref="xsd:attrDecls"/>
+    </xsd:sequence>
+    <xsd:attributeGroup ref="xsd:anyOther"/>
+    </xsd:restriction>
+    </xsd:complexContent>
+    </xsd:complexType>
+
+
+    <xsd:element name="simpleContent" id="simpleContent">
+    <xsd:annotation>
+    <xsd:documentation source="http://www.w3.org/TR/xmlschema-1/#element-simpleContent"/>
+    </xsd:annotation>
+    <xsd:complexType>
+    <xsd:complexContent>
+    <xsd:extension base="xsd:annotated">
+    <xsd:choice>
+    <xsd:element name="restriction" type="xsd:simpleRestrictionType"/>
+    <xsd:element name="extension" type="xsd:simpleExtensionType"/>
+    </xsd:choice>
+    </xsd:extension>
+    </xsd:complexContent>
+    </xsd:complexType>
+    </xsd:element>
+  -->
+
+  <xsd:attributeGroup name="anyOther">
+    <!--
+    IBM's DFDL Schemas have ibm-specific attributes on them that we 
+    need to tolerate. Users may want to decorate their DFDL schemas with
+    other non-native and non-DFDL attributes and annotation sub-elements.
+    
+    The default XSD behavior (commented out below) is to allow any additional
+    attributes on a schema by performing lax validation on anything not in the
+    XSD namespace.
+    
+    The problem: since DFDL short form properties are not in the XSD namespace,
+    they are not validated. This means common typographical errors or forgetting
+    the dfdl: prefix are often not caught.
+
+    So instead, we reference an attributeGroup that has the same anyAttribute line,
+    but is in a schema with a dfdl target namespace. This means we will perform lax
+    validation for attributes not in the dfdl namespace, but all dfdl properties
+    will be strictly validated.
+    -->
+    <!-- <xsd:anyAttribute namespace="##other" processContents="lax"/> -->
+    <xsd:attributeGroup ref="dfdl:anyOther" />
+  </xsd:attributeGroup>
+
+  <xsd:complexType name="topLevelComplexType">
+    <xsd:complexContent>
+      <xsd:restriction base="xsd:complexType">
+        <xsd:sequence>
+          <xsd:element ref="xsd:annotation" minOccurs="0" />
+          <xsd:group ref="xsd:complexTypeModel" />
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:NCName" use="required" />
+        <xsd:attributeGroup ref="xsd:anyOther" />
+      </xsd:restriction>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="localComplexType">
+    <xsd:complexContent>
+      <xsd:restriction base="xsd:complexType">
+        <xsd:sequence>
+          <xsd:element ref="xsd:annotation" minOccurs="0" />
+          <xsd:group ref="xsd:complexTypeModel" />
+        </xsd:sequence>
+        <xsd:attribute name="name" use="prohibited" />
+        <xsd:attribute name="abstract" use="prohibited" />
+        <xsd:attribute name="final" use="prohibited" />
+        <xsd:attribute name="block" use="prohibited" />
+        <xsd:attributeGroup ref="xsd:anyOther" />
+      </xsd:restriction>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+
+  <!--
+    <xsd:complexType name="complexRestrictionType">
+    <xsd:complexContent>
+    <xsd:restriction base="xsd:restrictionType">
+    <xsd:sequence>
+    <xsd:element ref="xsd:annotation" minOccurs="0"/>
+    <xsd:choice minOccurs="0">
+    <xsd:annotation>
+    <xsd:documentation>This choice is added simply to
+    make this a valid restriction per the REC</xsd:documentation>
+    </xsd:annotation>
+    <xsd:group ref="xsd:typeDefParticle"/>
+    </xsd:choice>
+    <xsd:group ref="xsd:attrDecls"/>
+    </xsd:sequence>
+    <xsd:attributeGroup ref="xsd:anyOther"/>
+    </xsd:restriction>
+    </xsd:complexContent>
+    </xsd:complexType>
+  -->
+
+  <!--
+    <xsd:element name="complexContent" id="complexContent">
+    <xsd:annotation>
+    <xsd:documentation source="http://www.w3.org/TR/xmlschema-1/#element-complexContent"/>
+    </xsd:annotation>
+    <xsd:complexType>
+    <xsd:complexContent>
+    <xsd:extension base="xsd:annotated">
+
+    <xsd:choice>
+    <xsd:element name="restriction" type="xsd:complexRestrictionType"/>
+    <xsd:element name="extension" type="xsd:extensionType"/>
+    </xsd:choice>
+
+    No mixed content in DFDL v1.0
+    <xsd:attribute name="mixed" type="xsd:boolean">
+    <xsd:annotation>
+    <xsd:documentation>
+    Overrides any setting on complexType parent.</xsd:documentation>
+    </xsd:annotation>
+    </xsd:attribute>
+
+    </xsd:extension>
+    </xsd:complexContent>
+    </xsd:complexType>
+    </xsd:element>
+  -->
+  <!--
+    <xsd:complexType name="simpleRestrictionType">
+    <xsd:complexContent>
+    <xsd:restriction base="xsd:restrictionType">
+    <xsd:sequence>
+    <xsd:element ref="xsd:annotation" minOccurs="0"/>
+    <xsd:choice minOccurs="0">
+    <xsd:annotation>
+    <xsd:documentation>This choice is added simply to
+    make this a valid restriction per the REC</xsd:documentation>
+    </xsd:annotation>
+    <xsd:group ref="xsd:simpleRestrictionModel"/>
+    </xsd:choice>
+    <xsd:group ref="xsd:attrDecls"/>
+    </xsd:sequence>
+    <xsd:attributeGroup ref="xsd:anyOther"/>
+    </xsd:restriction>
+    </xsd:complexContent>
+    </xsd:complexType>
+  -->
+
+  <xsd:element name="complexType" type="xsd:topLevelComplexType"
+    id="complexType">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-complexType" />
+    </xsd:annotation>
+  </xsd:element>
+
+  <xsd:simpleType name="__blockSet">
+    <xsd:annotation>
+      <xsd:documentation>
+        A utility type, not for public use
+      </xsd:documentation>
+      <xsd:documentation>
+        #all or (possibly empty) subset of {substitution, extension,
+        restriction}
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:union>
+      <xsd:simpleType>
+        <xsd:restriction base="xsd:token">
+          <xsd:enumeration value="#all" />
+        </xsd:restriction>
+      </xsd:simpleType>
+      <xsd:simpleType>
+        <xsd:list>
+          <xsd:simpleType>
+            <xsd:restriction base="xsd:derivationControl">
+              <!-- <xsd:enumeration value="extension"/> -->
+              <xsd:enumeration value="restriction" />
+              <!-- <xsd:enumeration value="substitution"/> -->
+            </xsd:restriction>
+          </xsd:simpleType>
+        </xsd:list>
+      </xsd:simpleType>
+    </xsd:union>
+  </xsd:simpleType>
+
+  <xsd:complexType name="element" abstract="true">
+    <xsd:annotation>
+      <xsd:documentation>
+        The element element can be used either
+        at the top level to define an element-type binding globally,
+        or within a content model to either reference a globally-defined
+        element or type or declare an element-type binding locally.
+        The ref form is not allowed at the top level.
+      </xsd:documentation>
+    </xsd:annotation>
+
+    <xsd:complexContent>
+      <xsd:extension base="xsd:annotated">
+        <xsd:sequence>
+          <xsd:choice minOccurs="0" maxOccurs="1">
+            <xsd:element name="simpleType" type="xsd:localSimpleType" />
+            <xsd:element name="complexType" type="xsd:localComplexType" />
+          </xsd:choice>
+          <!-- <xsd:group ref="xsd:identityConstraint" minOccurs="0" maxOccurs="unbounded"/> 
+            Not in DFDL v1.0 -->
+        </xsd:sequence>
+        <xsd:attributeGroup ref="xsd:defRef" />
+        <xsd:attribute name="type" type="xsd:QName" />
+        <!-- <xsd:attribute name="substitutionGroup" type="xsd:QName"/> Not 
+          in DFDL v1.0 -->
+        <xsd:attributeGroup ref="xsd:occurs" />
+        <xsd:attribute name="default" type="xsd:string" />
+        <xsd:attribute name="fixed" type="xsd:string" />
+        <!-- remove default="false" because Xerces is inserting that
+        as part of its parsing, and that ends up being incorrect since
+        element references cannot have nillable -->
+        <xsd:attribute name="nillable" type="xsd:boolean" />
+        <!-- Not in DFDL v1.0
+          <xsd:attribute name="abstract" type="xsd:boolean" use="optional" 
+          default="false"/>
+          <xsd:attribute name="final" type="xsd:derivationSet"/>
+          <xsd:attribute name="block" type="xsd:blockSet"/>
+          <xsd:attribute name="form" type="xsd:formChoice"/>
+        -->
+        <!--
+          Include short-form DFDL Attributes.
+        -->
+        <xsd:attributeGroup ref="dfdl:BaseAGQualified" />
+        <xsd:attributeGroup ref="dfdl:CommonAGQualified" />
+        <xsd:attributeGroup ref="dfdl:AlignmentAGQualified" />
+        <xsd:attributeGroup ref="dfdl:MarkupAGQualified" />
+        <xsd:attributeGroup ref="dfdl:ElementAGQualified" />
+
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="topLevelElement">
+    <xsd:complexContent>
+      <xsd:restriction base="xsd:element">
+        <xsd:sequence>
+          <xsd:element ref="xsd:annotation" minOccurs="0" />
+          <xsd:choice minOccurs="0">
+            <xsd:element name="simpleType" type="xsd:localSimpleType" />
+            <xsd:element name="complexType" type="xsd:localComplexType" />
+          </xsd:choice>
+          <!-- <xsd:group ref="xsd:identityConstraint" minOccurs="0" maxOccurs="unbounded"/> 
+            Not in DFDL v1.0 -->
+        </xsd:sequence>
+        <xsd:attribute name="ref" use="prohibited" />
+        <xsd:attribute name="form" use="prohibited" />
+        <xsd:attribute name="minOccurs" use="prohibited" />
+        <xsd:attribute name="maxOccurs" use="prohibited" />
+        <xsd:attribute name="name" use="required" type="xsd:NCName" />
+        <xsd:attributeGroup ref="xsd:anyOther" />
+
+      </xsd:restriction>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="localElement">
+    <xsd:complexContent>
+      <xsd:restriction base="xsd:element">
+        <xsd:sequence>
+          <xsd:element ref="xsd:annotation" minOccurs="0" />
+          <xsd:choice minOccurs="0">
+            <xsd:element name="simpleType" type="xsd:localSimpleType" />
+            <xsd:element name="complexType" type="xsd:localComplexType" />
+          </xsd:choice>
+          <!-- <xsd:group ref="xsd:identityConstraint" minOccurs="0" maxOccurs="unbounded"/> 
+            Not in DFDL v1.0 -->
+        </xsd:sequence>
+        <xsd:attribute name="substitutionGroup" use="prohibited" />
+        <xsd:attribute name="final" use="prohibited" />
+        <xsd:attribute name="abstract" use="prohibited" />
+        <xsd:attributeGroup ref="xsd:anyOther" />
+      </xsd:restriction>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:element name="element" type="xsd:topLevelElement" id="element">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-element" />
+    </xsd:annotation>
+  </xsd:element>
+
+  <xsd:complexType name="group" abstract="true">
+    <xsd:annotation>
+      <xsd:documentation>
+        group type for explicit groups, named top-level groups and
+        group references
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:complexContent>
+      <xsd:extension base="xsd:annotated">
+        <xsd:group ref="xsd:particle" minOccurs="0" maxOccurs="unbounded" />
+        <xsd:attributeGroup ref="xsd:defRef" />
+        <!-- No Occurs except on elements in DFDL v1.0
+          <xsd:attributeGroup ref="xsd:occurs"/>
+        -->
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="realGroup">
+    <xsd:complexContent>
+      <xsd:restriction base="xsd:group">
+        <xsd:sequence>
+          <xsd:element ref="xsd:annotation" minOccurs="0" />
+          <xsd:choice minOccurs="0" maxOccurs="1">
+            <xsd:element ref="xsd:choice" />
+            <xsd:element ref="xsd:sequence" />
+          </xsd:choice>
+        </xsd:sequence>
+        <xsd:attributeGroup ref="xsd:anyOther" />
+      </xsd:restriction>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="namedGroup">
+    <xsd:complexContent>
+      <xsd:extension base="xsd:realGroup">
+        <!-- <xsd:attribute name="name" use="required" type="xsd:NCName"/> -->
+        <xsd:attribute name="ref" use="prohibited" />
+        <xsd:attribute name="minOccurs" use="prohibited" />
+        <xsd:attribute name="maxOccurs" use="prohibited" />
+        <xsd:attributeGroup ref="xsd:anyOther" />
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="groupRef">
+    <xsd:complexContent>
+      <xsd:extension base="xsd:annotated">
+        <xsd:attribute name="ref" use="required" type="xsd:QName" />
+        <xsd:attribute name="name" use="prohibited" />
+        <xsd:attributeGroup ref="xsd:anyOther" />
+
+        <!-- DFDL -->
+
+        <xsd:attributeGroup ref="dfdl:BaseAGQualified" />
+        <xsd:attributeGroup ref="dfdl:CommonAGQualified" />
+        <xsd:attributeGroup ref="dfdl:AlignmentAGQualified" />
+        <xsd:attributeGroup ref="dfdl:MarkupAGQualified" />
+        <xsd:attributeGroup ref="dfdl:GroupAGQualified" />
+
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="explicitGroup">
+    <xsd:annotation>
+      <xsd:documentation>
+        group type for the three kinds of group
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element ref="xsd:annotation" minOccurs="0" />
+      <xsd:group ref="xsd:nestedParticle" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xsd:sequence>
+    <xsd:attributeGroup ref="xsd:anyOther" />
+
+    <!-- DFDL attributes for short form -->
+    <xsd:attributeGroup ref="dfdl:BaseAGQualified" />
+    <xsd:attributeGroup ref="dfdl:CommonAGQualified" />
+    <xsd:attributeGroup ref="dfdl:AlignmentAGQualified" />
+    <xsd:attributeGroup ref="dfdl:MarkupAGQualified" />
+    <xsd:attributeGroup ref="dfdl:GroupCommonAGQualified" />
+  </xsd:complexType>
+
+  <xsd:complexType name="simpleExplicitGroup">
+    <xsd:complexContent>
+      <xsd:restriction base="xsd:explicitGroup">
+        <xsd:sequence>
+          <xsd:element ref="xsd:annotation" minOccurs="0" />
+          <xsd:group ref="xsd:nestedParticle" minOccurs="0"
+            maxOccurs="unbounded" />
+        </xsd:sequence>
+        <xsd:attribute name="minOccurs" use="prohibited" />
+        <xsd:attribute name="maxOccurs" use="prohibited" />
+        <xsd:attributeGroup ref="xsd:anyOther" />
+      </xsd:restriction>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <!-- No ALL groups in DFDL v1.0
+    <xsd:group name="allModel">
+    <xsd:sequence>
+    <xsd:element ref="xsd:annotation" minOccurs="0"/>
+    <xsd:choice minOccurs="0" maxOccurs="unbounded">
+    <xsd:annotation>
+    <xsd:documentation>This choice with min/max is here to
+    avoid a pblm with the Elt:All/Choice/Seq
+    Particle derivation constraint</xsd:documentation>
+    </xsd:annotation>
+    <xsd:element name="element" type="xsd:narrowMaxMin"/>
+    </xsd:choice>
+    </xsd:sequence>
+    </xsd:group>
+  -->
+
+  <xsd:complexType name="narrowMaxMin">
+    <xsd:annotation>
+      <xsd:documentation>restricted max/min</xsd:documentation>
+    </xsd:annotation>
+    <xsd:complexContent>
+      <xsd:restriction base="xsd:localElement">
+        <xsd:sequence>
+          <xsd:element ref="xsd:annotation" minOccurs="0" />
+          <xsd:choice minOccurs="0">
+            <xsd:element name="simpleType" type="xsd:localSimpleType" />
+            <xsd:element name="complexType" type="xsd:localComplexType" />
+          </xsd:choice>
+          <!-- <xsd:group ref="xsd:identityConstraint" minOccurs="0" maxOccurs="unbounded"/> 
+            Not in DFDL v1.0 -->
+        </xsd:sequence>
+        <xsd:attribute name="minOccurs" use="optional"
+          default="1">
+          <xsd:simpleType>
+            <xsd:restriction base="xsd:nonNegativeInteger">
+              <xsd:enumeration value="0" />
+              <xsd:enumeration value="1" />
+            </xsd:restriction>
+          </xsd:simpleType>
+        </xsd:attribute>
+        <xsd:attribute name="maxOccurs" use="optional"
+          default="1">
+          <xsd:simpleType>
+            <xsd:restriction base="xsd:allNNI">
+              <xsd:enumeration value="0" />
+              <xsd:enumeration value="1" />
+            </xsd:restriction>
+          </xsd:simpleType>
+        </xsd:attribute>
+        <xsd:attributeGroup ref="xsd:anyOther" />
+      </xsd:restriction>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="explicitChoiceGroup">
+    <xsd:complexContent>
+      <xsd:extension base="xsd:explicitGroup">
+        <!-- DFDL -->
+        <xsd:attributeGroup ref="dfdl:ChoiceAGQualified" />
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:element name="choice" type="xsd:explicitChoiceGroup"
+    id="choice">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-choice" />
+    </xsd:annotation>
+  </xsd:element>
+
+  <xsd:complexType name="explicitSequenceGroup">
+    <xsd:complexContent>
+      <xsd:extension base="xsd:explicitGroup">
+        <!-- DFDL -->
+        <xsd:attributeGroup ref="dfdl:SequenceAGQualified" />
+        <xsd:attributeGroup ref="dfdl:SeparatorAGQualified" />
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:element name="sequence" type="xsd:explicitSequenceGroup"
+    id="sequence">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-sequence" />
+    </xsd:annotation>
+  </xsd:element>
+
+  <xsd:element name="group" type="xsd:namedGroup" id="group">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-group" />
+    </xsd:annotation>
+  </xsd:element>
+
+  <!-- <xsd:complexType name="wildcard">
+    <xsd:complexContent>
+    <xsd:extension base="xsd:annotated">
+    <xsd:attribute name="namespace" type="xsd:namespaceList" use="optional" 
+    default="##any"/>
+  -->
+  <!-- Chapter 21: processContents not allowed in v1
+    <xsd:attribute name="processContents" use="optional" default="strict">
+    <xsd:simpleType>
+    <xsd:restriction base="xsd:NMTOKEN">
+    <xsd:enumeration value="skip"/>
+    <xsd:enumeration value="lax"/>
+    <xsd:enumeration value="strict"/>
+    </xsd:restriction>
+    </xsd:simpleType>
+    </xsd:attribute>
+  --> <!--
+    </xsd:extension>
+    </xsd:complexContent>
+    </xsd:complexType>
+  -->
+  <!-- No ANY wildcards in DFDL v1.0
+    <xsd:element name="any" id="any">
+    <xsd:annotation>
+    <xsd:documentation source="http://www.w3.org/TR/xmlschema-1/#element-any"/>
+    </xsd:annotation>
+    <xsd:complexType>
+    <xsd:complexContent>
+    <xsd:extension base="xsd:wildcard">
+    <xsd:attributeGroup ref="xsd:occurs"/>
+    <xsd:attributeGroup ref="xsd:anyOther"/>
+    </xsd:extension>
+    </xsd:complexContent>
+    </xsd:complexType>
+    </xsd:element>
+  -->
+  <!--
+    <xsd:annotation>
+    <xsd:documentation>
+    simple type for the value of the 'namespace' attr of
+    'any' and 'anyAttribute'</xsd:documentation>
+    </xsd:annotation>
+    <xsd:annotation>
+    <xsd:documentation>
+    Value is
+    ##any - - any non-conflicting WFXML/attribute at all
+
+    ##other - - any non-conflicting WFXML/attribute from
+    namespace other than targetNS
+
+    ##local - - any unqualified non-conflicting WFXML/attribute
+
+    one or - - any non-conflicting WFXML/attribute from
+    more URI the listed namespaces
+    references
+    (space separated)
+
+    ##targetNamespace or ##local may appear in the above list, to
+    refer to the targetNamespace of the enclosing
+    schema or an absent targetNamespace respectively</xsd:documentation>
+    </xsd:annotation>
+
+    <xsd:simpleType name="namespaceList">
+    <xsd:annotation>
+    <xsd:documentation>
+    A utility type, not for public use</xsd:documentation>
+    </xsd:annotation>
+    <xsd:union>
+    <xsd:simpleType>
+    <xsd:restriction base="xsd:token">
+    <xsd:enumeration value="##any"/>
+    <xsd:enumeration value="##other"/>
+    </xsd:restriction>
+    </xsd:simpleType>
+    <xsd:simpleType>
+    <xsd:list>
+    <xsd:simpleType>
+    <xsd:union memberTypes="xsd:anyURI">
+    <xsd:simpleType>
+    <xsd:restriction base="xsd:token">
+    <xsd:enumeration value="##targetNamespace"/>
+    <xsd:enumeration value="##local"/>
+    </xsd:restriction>
+    </xsd:simpleType>
+    </xsd:union>
+    </xsd:simpleType>
+    </xsd:list>
+    </xsd:simpleType>
+    </xsd:union>
+    </xsd:simpleType>
+  -->
+  <!--
+    <xsd:element name="attribute" type="xsd:topLevelAttribute" id="attribute">
+    <xsd:annotation>
+    <xsd:documentation source="http://www.w3.org/TR/xmlschema-1/#element-attribute"/>
+    </xsd:annotation>
+    </xsd:element>
+
+    <xsd:complexType name="attributeGroup" abstract="true">
+    <xsd:complexContent>
+    <xsd:extension base="xsd:annotated">
+    <xsd:group ref="xsd:attrDecls"/>
+    <xsd:attributeGroup ref="xsd:defRef"/>
+    </xsd:extension>
+    </xsd:complexContent>
+    </xsd:complexType>
+
+    <xsd:complexType name="namedAttributeGroup">
+    <xsd:complexContent>
+    <xsd:restriction base="xsd:attributeGroup">
+    <xsd:sequence>
+    <xsd:element ref="xsd:annotation" minOccurs="0"/>
+    <xsd:group ref="xsd:attrDecls"/>
+    </xsd:sequence>
+    <xsd:attribute name="name" use="required" type="xsd:NCName"/>
+    <xsd:attribute name="ref" use="prohibited"/>
+    <xsd:attributeGroup ref="xsd:anyOther"/>
+    </xsd:restriction>
+    </xsd:complexContent>
+    </xsd:complexType>
+
+    <xsd:complexType name="attributeGroupRef">
+    <xsd:complexContent>
+    <xsd:restriction base="xsd:attributeGroup">
+    <xsd:sequence>
+    <xsd:element ref="xsd:annotation" minOccurs="0"/>
+    </xsd:sequence>
+    <xsd:attribute name="ref" use="required" type="xsd:QName"/>
+    <xsd:attribute name="name" use="prohibited"/>
+    <xsd:attributeGroup ref="xsd:anyOther"/>
+    </xsd:restriction>
+    </xsd:complexContent>
+    </xsd:complexType>
+
+    <xsd:element name="attributeGroup" type="xsd:namedAttributeGroup" id="attributeGroup">
+    <xsd:annotation>
+    <xsd:documentation source="http://www.w3.org/TR/xmlschema-1/#element-attributeGroup"/>
+    </xsd:annotation>
+    </xsd:element>
+  -->
+
+  <xsd:element name="include" id="include">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-include" />
+    </xsd:annotation>
+    <xsd:complexType>
+      <xsd:complexContent>
+        <xsd:extension base="xsd:annotated">
+          <xsd:attribute name="schemaLocation" type="xsd:anyURI"
+            use="required" />
+        </xsd:extension>
+      </xsd:complexContent>
+    </xsd:complexType>
+  </xsd:element>
+
+  <!--
+    <xsd:element name="redefine" id="redefine">
+    <xsd:annotation>
+    <xsd:documentation source="http://www.w3.org/TR/xmlschema-1/#element-redefine"/>
+    </xsd:annotation>
+    <xsd:complexType>
+    <xsd:complexContent>
+    <xsd:extension base="xsd:openAttrs">
+    <xsd:choice minOccurs="0" maxOccurs="unbounded">
+    <xsd:element ref="xsd:annotation"/>
+    <xsd:group ref="xsd:redefinable"/>
+    </xsd:choice>
+    <xsd:attribute name="schemaLocation" type="xsd:anyURI" use="required"/>
+    <xsd:attribute name="id" type="xsd:ID"/>
+    </xsd:extension>
+    </xsd:complexContent>
+    </xsd:complexType>
+    </xsd:element>
+  -->
+
+  <xsd:element name="import" id="import">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-import" />
+    </xsd:annotation>
+    <xsd:complexType>
+      <xsd:complexContent>
+        <xsd:extension base="xsd:annotated">
+          <xsd:attribute name="namespace" type="xsd:anyURI" />
+          <xsd:attribute name="schemaLocation" type="xsd:anyURI" />
+        </xsd:extension>
+      </xsd:complexContent>
+    </xsd:complexType>
+  </xsd:element>
+
+  <!--
+    <xsd:element name="__selector" id="selector">
+    <xsd:annotation>
+    <xsd:documentation source="http://www.w3.org/TR/xmlschema-1/#element-selector"/>
+    </xsd:annotation>
+    <xsd:complexType>
+    <xsd:complexContent>
+    <xsd:extension base="xsd:annotated">
+    <xsd:attribute name="xpath" use="required">
+    <xsd:simpleType>
+    <xsd:annotation>
+    <xsd:documentation>A subset of XPath expressions for use
+    in selectors</xsd:documentation>
+    <xsd:documentation>A utility type, not for public
+    use</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:token">
+    <xsd:annotation>
+    <xsd:documentation>The following pattern is intended to allow XPath
+    expressions per the following EBNF:
+    Selector ::= Path ( '|' Path )*
+    Path ::= ('.//')? Step ( '/' Step )*
+    Step ::= '.' | NameTest
+    NameTest ::= QName | '*' | NCName ':' '*'
+    child:: is also allowed
+    </xsd:documentation>
+    </xsd:annotation>
+    <xsd:pattern value="(\.//)?(((child::)?((\i\c*:)?(\i\c*|\*)))|\.)(/(((child::)?((\i\c*:)?(\i\c*|\*)))|\.))*(\|(\.//)?(((child::)?((\i\c*:)?(\i\c*|\*)))|\.)(/(((child::)?((\i\c*:)?(\i\c*|\*)))|\.))*)*">
+    </xsd:pattern>
+    </xsd:restriction>
+    </xsd:simpleType>
+    </xsd:attribute>
+    </xsd:extension>
+    </xsd:complexContent>
+    </xsd:complexType>
+    </xsd:element>
+
+    <xsd:element name="__field" id="field">
+    <xsd:annotation>
+    <xsd:documentation source="http://www.w3.org/TR/xmlschema-1/#element-field"/>
+    </xsd:annotation>
+    <xsd:complexType>
+    <xsd:complexContent>
+    <xsd:extension base="xsd:annotated">
+    <xsd:attribute name="xpath" use="required">
+    <xsd:simpleType>
+    <xsd:annotation>
+    <xsd:documentation>A subset of XPath expressions for use
+    in fields</xsd:documentation>
+    <xsd:documentation>A utility type, not for public
+    use</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:token">
+    <xsd:annotation>
+    <xsd:documentation>The following pattern is intended to allow XPath
+    expressions per the same EBNF as for selector,
+    with the following change:
+    Path ::= ('.//')? ( Step '/' )* ( Step | '@' NameTest )
+    </xsd:documentation>
+    </xsd:annotation>
+    <xsd:pattern value="(\.//)?((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)/)*((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)|((attribute::|@)((\i\c*:)?(\i\c*|\*))))(\|(\.//)?((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)/)*((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)|((attribute::|@)((\i\c*:)?(\i\c*|\*)))))*">
+    </xsd:pattern>
+    </xsd:restriction>
+    </xsd:simpleType>
+    </xsd:attribute>
+    </xsd:extension>
+    </xsd:complexContent>
+    </xsd:complexType>
+    </xsd:element>
+
+    <xsd:complexType name="__keybase">
+    <xsd:complexContent>
+    <xsd:extension base="xsd:annotated">
+    <xsd:sequence>
+    <xsd:element ref="xsd:selector"/>
+    <xsd:element ref="xsd:field" minOccurs="1" maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="name" type="xsd:NCName" use="required"/>
+    </xsd:extension>
+    </xsd:complexContent>
+    </xsd:complexType>
+
+    <xsd:group name="__identityConstraint">
+    <xsd:annotation>
+    <xsd:documentation>The three kinds of identity constraints, all with
+    type of or derived from 'keybase'.
+    </xsd:documentation>
+    </xsd:annotation>
+    <xsd:choice>
+    <xsd:element ref="xsd:unique"/>
+    <xsd:element ref="xsd:key"/>
+    <xsd:element ref="xsd:keyref"/>
+    </xsd:choice>
+    </xsd:group>
+
+    <xsd:element name="__unique" type="xsd:keybase" id="unique">
+    <xsd:annotation>
+    <xsd:documentation source="http://www.w3.org/TR/xmlschema-1/#element-unique"/>
+    </xsd:annotation>
+    </xsd:element>
+    <xsd:element name="__key" type="xsd:keybase" id="key">
+    <xsd:annotation>
+    <xsd:documentation source="http://www.w3.org/TR/xmlschema-1/#element-key"/>
+    </xsd:annotation>
+    </xsd:element>
+    <xsd:element name="__keyref" id="keyref">
+    <xsd:annotation>
+    <xsd:documentation source="http://www.w3.org/TR/xmlschema-1/#element-keyref"/>
+    </xsd:annotation>
+    <xsd:complexType>
+    <xsd:complexContent>
+    <xsd:extension base="xsd:keybase">
+    <xsd:attribute name="refer" type="xsd:QName" use="required"/>
+    </xsd:extension>
+    </xsd:complexContent>
+    </xsd:complexType>
+    </xsd:element>
+
+    <xsd:element name="__notation" id="notation">
+    <xsd:annotation>
+    <xsd:documentation source="http://www.w3.org/TR/xmlschema-1/#element-notation"/>
+    </xsd:annotation>
+    <xsd:complexType>
+    <xsd:complexContent>
+    <xsd:extension base="xsd:annotated">
+    <xsd:attribute name="name" type="xsd:NCName" use="required"/>
+    <xsd:attribute name="public" type="xsd:public"/>
+    <xsd:attribute name="system" type="xsd:anyURI"/>
+    </xsd:extension>
+    </xsd:complexContent>
+    </xsd:complexType>
+    </xsd:element>
+
+    <xsd:simpleType name="public">
+    <xsd:annotation>
+    <xsd:documentation>
+    A utility type, not for public use</xsd:documentation>
+    <xsd:documentation>
+    A public identifier, per ISO 8879</xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:token"/>
+    </xsd:simpleType>
+  -->
+  <xsd:element name="appinfo" id="appinfo">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-appinfo" />
+    </xsd:annotation>
+    <xsd:complexType mixed="true">
+      <xsd:choice minOccurs="0" maxOccurs="unbounded">
+        <!--
+          Some users may want to provide appinfo annotations specific to their
+          use-case in addition to the DFDL annotations. Normal XML schema allows
+          any elements with lax validation using the commented out line below.
+          However, we want to perform extra validation on the dfdl elements. So
+          the DFDLAppInfoGroup defines all the DFDL specific attribute-form
+          elements that are allowed in an xs:appinfo and what attributes they may
+          have. The dfdl:anyOther group reference is used to allow elements from any
+          other namespace with lax validation.
+        -->
+        <!--<xsd:any processContents="lax" />-->
+        <xsd:group ref="dfdl:DFDLAppInfoGroup" />
+        <xsd:group ref="dfdl:anyOther" />
+      </xsd:choice>
+      <xsd:attribute name="source" type="xsd:anyURI" />
+      <xsd:attributeGroup ref="xsd:anyOther" />
+    </xsd:complexType>
+  </xsd:element>
+
+  <xsd:element name="documentation" id="documentation">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-documentation" />
+    </xsd:annotation>
+    <xsd:complexType mixed="true">
+      <xsd:sequence minOccurs="0" maxOccurs="unbounded">
+        <xsd:any processContents="lax" />
+      </xsd:sequence>
+      <xsd:attribute name="source" type="xsd:anyURI" />
+      <xsd:attribute ref="xml:lang" />
+      <xsd:attributeGroup ref="xsd:anyOther" />
+    </xsd:complexType>
+  </xsd:element>
+
+  <xsd:element name="annotation" id="annotation">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-1/#element-annotation" />
+    </xsd:annotation>
+    <xsd:complexType>
+      <xsd:complexContent>
+        <xsd:extension base="xsd:openAttrs">
+          <xsd:choice minOccurs="0" maxOccurs="unbounded">
+            <xsd:element ref="xsd:appinfo" />
+            <xsd:element ref="xsd:documentation" />
+          </xsd:choice>
+          <xsd:attribute name="id" type="xsd:ID" />
+        </xsd:extension>
+      </xsd:complexContent>
+    </xsd:complexType>
+  </xsd:element>
+
+
+
+  <xsd:simpleType name="derivationControl">
+    <xsd:annotation>
+      <xsd:documentation>
+        A utility type, not for public use
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:NMTOKEN">
+      <!-- <xsd:enumeration value="substitution"/> -->
+      <!-- <xsd:enumeration value="extension"/> -->
+      <xsd:enumeration value="restriction" />
+      <!-- <xsd:enumeration value="list"/> -->
+      <xsd:enumeration value="union" />
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:group name="simpleDerivation">
+    <xsd:choice>
+      <xsd:element ref="xsd:restriction" />
+      <!-- <xsd:element ref="xsd:list"/> Not in DFDL v1.0 -->
+      <xsd:element ref="xsd:union" />
+    </xsd:choice>
+  </xsd:group>
+
+
+
+  <xsd:simpleType name="simpleDerivationSet">
+    <xsd:annotation>
+      <xsd:documentation>
+        #all or (possibly empty) subset of {restriction, union, list}
+      </xsd:documentation>
+      <xsd:documentation>
+        A utility type, not for public use
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:union>
+      <xsd:simpleType>
+        <xsd:restriction base="xsd:token">
+          <xsd:enumeration value="#all" />
+        </xsd:restriction>
+      </xsd:simpleType>
+      <xsd:simpleType>
+        <xsd:list>
+          <xsd:simpleType>
+            <xsd:restriction base="xsd:derivationControl">
+              <!-- <xsd:enumeration value="list"/> -->
+              <xsd:enumeration value="union" />
+              <xsd:enumeration value="restriction" />
+            </xsd:restriction>
+          </xsd:simpleType>
+        </xsd:list>
+      </xsd:simpleType>
+    </xsd:union>
+  </xsd:simpleType>
+
+  <xsd:complexType name="simpleType" abstract="true">
+    <xsd:complexContent>
+      <xsd:extension base="xsd:annotated">
+        <xsd:group ref="xsd:simpleDerivation" />
+        <xsd:attribute name="final" type="xsd:simpleDerivationSet" />
+        <xsd:attribute name="name" type="xsd:NCName">
+          <xsd:annotation>
+            <xsd:documentation>
+              Can be restricted to required or
+              forbidden
+            </xsd:documentation>
+          </xsd:annotation>
+        </xsd:attribute>
+
+        <!-- DFDL -->
+        <xsd:attributeGroup ref="dfdl:BaseAGQualified" />
+        <xsd:attributeGroup ref="dfdl:CommonAGQualified" />
+        <xsd:attributeGroup ref="dfdl:AlignmentAGQualified" />
+        <xsd:attributeGroup ref="dfdl:MarkupAGQualified" />
+        <xsd:attributeGroup ref="dfdl:SimpleTypeAGQualified" />
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+
+  <xsd:complexType name="topLevelSimpleType">
+    <xsd:complexContent>
+      <xsd:restriction base="xsd:simpleType">
+        <xsd:sequence>
+          <xsd:element ref="xsd:annotation" minOccurs="0" />
+          <xsd:group ref="xsd:simpleDerivation" />
+        </xsd:sequence>
+        <xsd:attribute name="name" use="required" type="xsd:NCName">
+          <xsd:annotation>
+            <xsd:documentation>
+              Required at the top level
+            </xsd:documentation>
+          </xsd:annotation>
+        </xsd:attribute>
+        <xsd:attributeGroup ref="xsd:anyOther" />
+      </xsd:restriction>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="localSimpleType">
+    <xsd:complexContent>
+      <xsd:restriction base="xsd:simpleType">
+        <xsd:sequence>
+          <xsd:element ref="xsd:annotation" minOccurs="0" />
+          <xsd:group ref="xsd:simpleDerivation" />
+        </xsd:sequence>
+        <xsd:attribute name="name" use="prohibited">
+          <xsd:annotation>
+            <xsd:documentation>
+              Forbidden when nested
+            </xsd:documentation>
+          </xsd:annotation>
+        </xsd:attribute>
+        <xsd:attribute name="final" use="prohibited" />
+        <xsd:attributeGroup ref="xsd:anyOther" />
+      </xsd:restriction>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:element name="simpleType" type="xsd:topLevelSimpleType"
+    id="simpleType">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-simpleType" />
+    </xsd:annotation>
+  </xsd:element>
+
+  <xsd:group name="facets">
+    <xsd:annotation>
+      <xsd:documentation>
+        We should use a substitution group for facets, but
+        that's ruled out because it would allow users to
+        add their own, which we're not ready for yet.
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:choice>
+      <xsd:element ref="xsd:minExclusive" />
+      <xsd:element ref="xsd:minInclusive" />
+      <xsd:element ref="xsd:maxExclusive" />
+      <xsd:element ref="xsd:maxInclusive" />
+      <xsd:element ref="xsd:totalDigits" />
+      <xsd:element ref="xsd:fractionDigits" />
+      <xsd:element ref="xsd:length" />
+      <xsd:element ref="xsd:minLength" />
+      <xsd:element ref="xsd:maxLength" />
+      <xsd:element ref="xsd:enumeration" />
+      <!-- <xsd:element ref="xsd:whiteSpace"/> -->
+      <xsd:element ref="xsd:pattern" />
+    </xsd:choice>
+  </xsd:group>
+
+  <xsd:group name="simpleRestrictionModel">
+    <xsd:sequence>
+      <xsd:element name="simpleType" type="xsd:localSimpleType"
+        minOccurs="0" />
+      <xsd:group ref="xsd:facets" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:group>
+
+  <xsd:element name="restriction" id="restriction">
+    <xsd:complexType>
+      <xsd:annotation>
+        <xsd:documentation
+          source="http://www.w3.org/TR/xmlschema-2/#element-restriction">
+          base attribute and simpleType child are mutually
+          exclusive, but one or other is required
+        </xsd:documentation>
+      </xsd:annotation>
+      <xsd:complexContent>
+        <xsd:extension base="xsd:annotated">
+          <xsd:group ref="xsd:simpleRestrictionModel" />
+          <xsd:attribute name="base" type="xsd:QName" use="optional" />
+        </xsd:extension>
+      </xsd:complexContent>
+    </xsd:complexType>
+  </xsd:element>
+
+  <!--
+    <xsd:element name="list" id="list">
+    <xsd:complexType>
+    <xsd:annotation>
+    <xsd:documentation
+    source="http://www.w3.org/TR/xmlschema-2/#element-list">
+    itemType attribute and simpleType child are mutually
+    exclusive, but one or other is required
+    </xsd:documentation>
+    </xsd:annotation>
+    <xsd:complexContent>
+    <xsd:extension base="xsd:annotated">
+    <xsd:sequence>
+    <xsd:element name="simpleType" type="xsd:localSimpleType"
+    minOccurs="0"/>
+    </xsd:sequence>
+    <xsd:attribute name="itemType" type="xsd:QName" use="optional"/>
+    </xsd:extension>
+    </xsd:complexContent>
+    </xsd:complexType>
+    </xsd:element>
+  -->
+  <xsd:element name="union" id="union">
+    <xsd:complexType>
+      <xsd:annotation>
+        <xsd:documentation
+          source="http://www.w3.org/TR/xmlschema-2/#element-union">
+          memberTypes attribute must be non-empty or there must
+          be
+          at least one simpleType child
+        </xsd:documentation>
+      </xsd:annotation>
+      <xsd:complexContent>
+        <xsd:extension base="xsd:annotated">
+          <xsd:sequence>
+            <xsd:element name="simpleType" type="xsd:localSimpleType"
+              minOccurs="0" maxOccurs="unbounded" />
+          </xsd:sequence>
+          <xsd:attribute name="memberTypes" use="optional">
+            <xsd:simpleType>
+              <xsd:list itemType="xsd:QName" />
+            </xsd:simpleType>
+          </xsd:attribute>
+        </xsd:extension>
+      </xsd:complexContent>
+    </xsd:complexType>
+  </xsd:element>
+
+  <xsd:complexType name="facet">
+    <xsd:complexContent>
+      <xsd:extension base="xsd:annotated">
+        <xsd:attribute name="value" use="required" />
+        <xsd:attribute name="fixed" type="xsd:boolean"
+          use="optional" default="false" />
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="noFixedFacet">
+    <xsd:complexContent>
+      <xsd:restriction base="xsd:facet">
+        <xsd:sequence>
+          <xsd:element ref="xsd:annotation" minOccurs="0" />
+        </xsd:sequence>
+        <xsd:attribute name="fixed" use="prohibited" />
+        <xsd:attributeGroup ref="xsd:anyOther" />
+      </xsd:restriction>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:element name="minExclusive" id="minExclusive" type="xsd:facet">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-minExclusive" />
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:element name="minInclusive" id="minInclusive" type="xsd:facet">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-minInclusive" />
+    </xsd:annotation>
+  </xsd:element>
+
+  <xsd:element name="maxExclusive" id="maxExclusive" type="xsd:facet">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-maxExclusive" />
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:element name="maxInclusive" id="maxInclusive" type="xsd:facet">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-maxInclusive" />
+    </xsd:annotation>
+  </xsd:element>
+
+  <xsd:complexType name="numFacet">
+    <xsd:complexContent>
+      <xsd:restriction base="xsd:facet">
+        <xsd:sequence>
+          <xsd:element ref="xsd:annotation" minOccurs="0" />
+        </xsd:sequence>
+        <xsd:attribute name="value" type="xsd:nonNegativeInteger"
+          use="required" />
+        <xsd:attributeGroup ref="xsd:anyOther" />
+      </xsd:restriction>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:element name="totalDigits" id="totalDigits">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-totalDigits" />
+    </xsd:annotation>
+    <xsd:complexType>
+      <xsd:complexContent>
+        <xsd:restriction base="xsd:numFacet">
+          <xsd:sequence>
+            <xsd:element ref="xsd:annotation" minOccurs="0" />
+          </xsd:sequence>
+          <xsd:attribute name="value" type="xsd:positiveInteger"
+            use="required" />
+          <xsd:attributeGroup ref="xsd:anyOther" />
+        </xsd:restriction>
+      </xsd:complexContent>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="fractionDigits" id="fractionDigits"
+    type="xsd:numFacet">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-fractionDigits" />
+    </xsd:annotation>
+  </xsd:element>
+
+  <xsd:element name="length" id="length" type="xsd:numFacet">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-length" />
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:element name="minLength" id="minLength" type="xsd:numFacet">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-minLength" />
+    </xsd:annotation>
+  </xsd:element>
+  <xsd:element name="maxLength" id="maxLength" type="xsd:numFacet">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-maxLength" />
+    </xsd:annotation>
+  </xsd:element>
+
+  <xsd:element name="enumeration" id="enumeration">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-enumeration" />
+    </xsd:annotation>
+    <xsd:complexType>
+      <xsd:complexContent>
+        <xsd:extension base="xsd:facet">
+          <xsd:attributeGroup ref="dfdlx:RepValuesAGQualified" />
+          <xsd:attributeGroup ref="xsd:anyOther" />
+        </xsd:extension>
+      </xsd:complexContent>
+    </xsd:complexType>
+  </xsd:element>
+
+  <!--
+    <xsd:element name="whiteSpace" id="whiteSpace">
+    <xsd:annotation>
+    <xsd:documentation
+    source="http://www.w3.org/TR/xmlschema-2/#element-whiteSpace"/>
+    </xsd:annotation>
+    <xsd:complexType>
+    <xsd:complexContent>
+    <xsd:restriction base="xsd:facet">
+    <xsd:sequence>
+    <xsd:element ref="xsd:annotation" minOccurs="0"/>
+    </xsd:sequence>
+    <xsd:attribute name="value" use="required">
+    <xsd:simpleType>
+    <xsd:restriction base="xsd:NMTOKEN">
+    <xsd:enumeration value="preserve"/>
+    <xsd:enumeration value="replace"/>
+    <xsd:enumeration value="collapse"/>
+    </xsd:restriction>
+    </xsd:simpleType>
+    </xsd:attribute>
+    <xsd:attributeGroup ref="xsd:anyOther"/>
+    </xsd:restriction>
+    </xsd:complexContent>
+    </xsd:complexType>
+    </xsd:element>
+  -->
+  <xsd:element name="pattern" id="pattern">
+    <xsd:annotation>
+      <xsd:documentation
+        source="http://www.w3.org/TR/xmlschema-2/#element-pattern" />
+    </xsd:annotation>
+    <xsd:complexType>
+      <xsd:complexContent>
+        <xsd:restriction base="xsd:noFixedFacet">
+          <xsd:sequence>
+            <xsd:element ref="xsd:annotation" minOccurs="0" />
+          </xsd:sequence>
+          <xsd:attribute name="value" type="xsd:string"
+            use="required" />
+          <xsd:attributeGroup ref="xsd:anyOther" />
+        </xsd:restriction>
+      </xsd:complexContent>
+    </xsd:complexType>
+  </xsd:element>
+
+</xsd:schema>
diff --git a/DFDL/attribution/org/apache/daffodil/xsd/dafext.xsd b/DFDL/attribution/org/apache/daffodil/xsd/dafext.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..017849422008dc3c25e671d129c3aa235ba54d37
--- /dev/null
+++ b/DFDL/attribution/org/apache/daffodil/xsd/dafext.xsd
@@ -0,0 +1,731 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<xs:schema
+  targetNamespace="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:ext"
+  xmlns:tns="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:ext"
+  xmlns:xs="http://www.w3.org/2001/XMLSchema"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:daf="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:ext"
+  xmlns:dafint="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:int"
+  xmlns:dfdlx="http://www.ogf.org/dfdl/dfdl-1.0/extensions"
+  attributeFormDefault="unqualified"
+  elementFormDefault="qualified">
+  
+  <!-- Add schemaLocation="daflx.xsd" to allow NetBeans XML validation to work -->
+  <xs:import namespace="http://www.ogf.org/dfdl/dfdl-1.0/extensions" schemaLocation="dfdlx.xsd"/>
+  <xs:import namespace="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:int"/>
+
+  <!-- needed for backwards compatability with daf:parseUnparsePolicy -->
+  <xs:attribute name="parseUnparsePolicy" type="dfdlx:ParseUnparsePolicyEnum"/>
+
+  <xs:element name="property" type="daf:PropertyType" />
+
+  <xs:complexType name="PropertyType">
+    <xs:simpleContent>
+      <xs:extension base="xs:string">
+        <xs:attribute name="name" type="daf:PropertyNameType" use='required'/>
+        <xs:attributeGroup ref="dafint:daffodilAG"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:simpleType name="PropertyNameType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="parseUnparsePolicy"/>
+    </xs:restriction>
+  </xs:simpleType>
+
+
+  <!-- properties related to daffodil configuration -->
+
+  <xs:element name="externalVariableBindings" type="daf:externalVarType" />
+
+  <xs:complexType name="externalVarType">
+    <xs:sequence>
+      <xs:element ref="daf:bind" minOccurs="0" maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:element name="bind" type="daf:bindType" />
+
+  <xs:simpleType name="bindNameType">
+    <xs:restriction base="xs:string" />
+  </xs:simpleType>
+
+  <xs:complexType name="bindType">
+    <xs:simpleContent>
+      <xs:extension base="daf:bindNameType">
+        <xs:attribute name="name" use="required">
+          <xs:simpleType>
+            <xs:restriction base="xs:string" />
+          </xs:simpleType>
+        </xs:attribute>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <!--
+    This file is used by TunableGenerator.scala to generate code that parses and
+    validates tunable values. The following schema elements define these tunables
+    to be generated. Although this schema is verbose and repetitive, it makes it
+    relatively straightforward to parse and ensure we generate correct code. As
+    such, one must follow a strict pattern to ensure correct code is generated.
+
+    Each element representing a tunable must have an schema primitive as its type,
+    as determined by the tunables allowed value space. Each tunable must also have
+    a default value that is valid for the type. If an element needs additional
+    limitations beyond the value space of the type, then an xs:simpleType with
+    xs:restriction must be used. The base attribute of the restriction must be a
+    schema primitive type. Only the following restrictions are currently supported:
+
+      - minInclusive
+      - maxInclusive
+      - minExclusive
+      - maxExclusive
+  -->
+  <xs:element name="tunables">
+    <xs:complexType>
+      <xs:all>
+        <xs:element name="allowBigIntegerBits" type="xs:boolean" default="true" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Previous Daffodil releases let schemas define every type's length using "bits" as the length unit
+              even though the specification allows bit length units only for a specific set of types' binary
+              representations and does not allow bit length units for any other type's binary representation
+              or any type's text representation.  When this tunable is true, a deprecation warning is issued
+              when bit length units are incorrectly used.  When this tunable is false, a schema definition
+              error will be issued instead.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="allowExpressionResultCoercion" type="xs:boolean" default="true" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Defines how Daffodil coerces expressions where the result type differs
+              from the expected type. As an example, assume the expected type of an
+              expression is an xs:string, but the expression is { 3 }. In this case, the
+              expression result is an xs:int, which should not be automatically coerced
+              to an xs:string. Instead, the expression should be { xs:string(3) } or { "3" }
+              If the value of this tunable is false, these types of expressions will
+              result in a schema definition error. If the value is true, Daffodil will
+              provide a warning and attempt to coerce the result type to the expected
+              type.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="allowExternalPathExpressions" type="xs:boolean" default="false" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              By default, path expressions in Daffodil will only work correctly if path
+              steps are used in an expression defined in the schema when compiled. To
+              enable the use of other expressions (e.g. during debugging, where not all
+              expressions are known at schema compile time), set this tunable to true.
+              This may cause a degredation of performance in path expression evaluation,
+              so this should be avoided when in production. This flag is automatically
+              enabled when debugging is enabled.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="blobChunkSizeInBytes" default="4096" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              When reading/writing blob data, the maximum number of bytes to read/write
+              at a time. This is also used when parsing xs:hexBinary data.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="1" />
+              <xs:maxInclusive value="268435455" /> <!-- Limit to (MaxInt / 8) because some places convert this tunable to bits -->
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="defaultEmptyElementParsePolicy" type="daf:TunableEmptyElementParsePolicy" default="treatAsEmpty" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Defines the default empty element parse policy to use if it is not defined
+              in a schema. This is only used if requireEmptyElementParsePolicyProperty is
+              false.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="defaultInitialRegexMatchLimitInChars" default="32" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Deprecated. This tunable no longer has any affect and is only kept for
+              backwards compatability.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="errorOnUnsupportedJavaVersion" type="xs:boolean" default="true" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Deprecated. This tunable no longer has any affect and is only kept for
+              backwards compatability.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="generatedNamespacePrefixStem" type="xs:string" default="tns" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Stem to use when generating a namespace prefix when one is not defined for
+              the target naespace.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="initialElementOccurrencesHint" default="10" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Initial array buffer size allocated for recurring elements/arrays.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="initialRegexMatchLimitInCharacters" default="64" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Initial number of characters to match when performing regular expression
+              matches on input data. When a regex fails to match, more data may be
+              consumed up to the maximumRegexMatchLengthInCharacters tunable.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="infosetWalkerSkipMin" default="32" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Daffodil periodically walks the internal infoset to send events to the configured
+              InfosetOutputter, skipping at least this number of walk attempts. Larger values
+              mean delayed InfosetOutputter events and more memory usage; Smaller values mean
+              more CPU usage. Set this value to zero to never skip any walk attempts. This is
+              specifically for advanced testing behavior and should not need to be changed by users.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="0" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="infosetWalkerSkipMax" default="2048" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Daffodil periodically walks the internal infoset to send events to the configured
+              InfosetOutputter. On walks where no progress is made, the number of walks to skip
+              is increased with the assumption that something is blocking it (like an
+              unresolved point of uncertainty), up to this maximum value. Higher values mean
+              less attempts are made when blocked for a long time, but with potentially more
+              delays and memory usage before InfosetOutputter events are created. This is
+              specifically for advanced testing behavior and should not need to be changed by users.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="0" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="inputFileMemoryMapLowThreshold" type="xs:int" default="33554432" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Deprecated. This tunable no longer has any affect and is only kept for
+              backwards compatability.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="maxBinaryDecimalVirtualPoint" default="200" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              The largest allowed value of the dfdl:binaryDecimalVirtualPoint property.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="maxByteArrayOutputStreamBufferSizeInBytes" default="2097152000" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              When unparsing, this is the maximum size of the buffer that the
+              ByteArrayOutputStream can grow to before switching to a file based
+              output stream.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="0" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="maxDataDumpSizeInBytes" default="256" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              The maximum size of data to retrive when when getting data to display
+              for debugging.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="maxFieldContentLengthInBytes" type="xs:int" default="1048576" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Deprecated. This tunable no longer has any affect and is only kept for
+              backwards compatability.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="maxHexBinaryLengthInBytes" default="1073741823" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              The maximum size allowed for an xs:hexBinary element.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="1" />
+              <!--
+                The maxInclusive value is set to (Int.MaxValue / 2) since each byte in
+                hex binary becomes 2 hex chars, and the maximum length of a string in
+                Java is Int.MaxValue
+              -->
+              <xs:maxInclusive value="1073741823" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="maxLengthForVariableLengthDelimiterDisplay" default="10" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              When unexpected text is found where a delimiter is expected, this is the maximum
+              number of bytes (characters) to display when the expected delimiter is a variable
+              length delimiter.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="maxLookaheadFunctionBits" default="512" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Max distance that the DPath lookahead function is permitted to look.
+              Distance is defined by the distance to the last bit accessed, and
+              so it is offset+bitsize.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:long">
+              <xs:minInclusive value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="maxOccursBounds" default="2147483647" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Maximum number of occurances of an array element.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:long">
+              <xs:minInclusive value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="maxSkipLengthInBytes" default="1024" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Maximum number of bytes allowed to skip in a skip region.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="maxValidYear" default="9999" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Due to differences in the DFDL spec and ICU4J SimpleDateFormat, we must
+              have SimpleDateFormat parse in lenient mode, which allows the year value
+              to overflow with very large years into possibly negative years. This
+              tunable tunable sets an upper limit for values to prevent overflow.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="maximumRegexMatchLengthInCharacters" default="1048576" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Maximum number of characters to match when performing regular expression
+              matches on input data.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="maximumSimpleElementSizeInCharacters" default="1048576" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Maximum number of characters to parse when parsing string data.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="minBinaryDecimalVirtualPoint" default="-200" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              The smallest allowed value of the dfdl:binaryDecimalVirtualPoint property.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:maxInclusive value="-1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="minValidYear" type="xs:int" default="0" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Due to differences in the DFDL spec and ICU4J SimpleDateFormat, we must
+              have SimpleDateFormat parse in lenient mode, which allows the year value
+              to overflow with very large years into possibly negative years. This
+              tunable tunable sets an upper limit for values to prevent underflow.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="outputStreamChunkSizeInBytes" default="65536" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              When writing file data to the output stream during unparse, this
+              is the maximum number of bytes to write at a time.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="parseUnparsePolicy" type="daf:TunableParseUnparsePolicyTunable" default="fromRoot" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Whether to compile a schema to support only parsing, only unparsing, both, or to
+              use the daf:parseUnparsePolicy from the root node. All child elements of the root
+              must have a compatable daf:parseUnaprsePolicy property.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="readerByteBufferSize" type="xs:int" default="8192" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Deprecated. This tunable no longer has any affect and is only kept for
+              backwards compatability.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="releaseUnneededInfoset" type="xs:boolean" default="true" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Daffodil will periodically release internal infoset elements that it determines
+              are no longer needed, thus freeing memory. Setting this value to false will
+              prevent this from taking place. This should usually only be used while debugging
+              or with very specific tests.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="requireBitOrderProperty" type="xs:boolean" default="false" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              If true, require that the dfdl:bitOrder property is specified. If false, use a
+              default value if the property is not defined in the schema.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="requireEmptyElementParsePolicyProperty" type="xs:boolean" default="false" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              If true, require that the dfdl:emptyElementParsePolicy property is specified in
+              the schema. If false, and not defined in the schema, uses the
+              defaultEmptyElementParsePolicy as the value of emptyElementParsePolicy.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="requireEncodingErrorPolicyProperty" type="xs:boolean" default="false" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              If true, require that the dfdl:encodingErrorPolicy property is specified. If
+              false, use a default value if the property is not defined in the schema.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="requireFloatingProperty" type="xs:boolean" default="false" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              If true, require that the dfdl:floating property is specified. If
+              false, use a default value if the property is not defined in the schema.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="requireTextBidiProperty" type="xs:boolean" default="false" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              If true, require that the dfdl:testBidi property is specified. If
+              false, use a default value if the property is not defined in the schema.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="requireTextStandardBaseProperty" type="xs:boolean" default="false" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              If true, require that the dfdl:textStandardBase property is specified. If false
+              and the property is missing, behave as if the property is set to 10.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="saxUnparseEventBatchSize" default="100" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Daffodil's SAX Unparse API allows events to be batched in memory to minimize the
+              frequency of context switching between the SAXInfosetInputter thread that processes
+              the events, and the DaffodilUnparseContentHandler thread that generates the events.
+              Setting this value to a low number will increase the frequency of context switching,
+              but will reduce the memory footprint. Swtting it to a high number will decrease the
+              frequency of context switching, but increase the memory footprint.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="suppressSchemaDefinitionWarnings" type="daf:TunableSuppressSchemaDefinitionWarnings" default="emptyElementParsePolicyError" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Space-separated list of schema definition warnings that should be ignored,
+              or "all" to ignore all warnings.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="tempFilePath" type="xs:string" default="This string is ignored. Default value is taken from java.io.tmpdir property"  minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              When unparsing, use this path to store temporary files that may be genrated.
+              The default value (empty string) will result in the use of the java.io.tmpdir
+              property being used as the path.
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="unqualifiedPathStepPolicy" type="daf:TunableUnqualifiedPathStepPolicy" default="noNamespace" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              Defines how to lookup DFDL expression path steps that to not include a
+              namespace prefix. Values are:
+              - noNamespace: only match elements that do not have a namespace
+              - defaultNamespace: only match elements defined in the default namespace
+              - preferDefaultNamespace: match elements defined in the default namespace;
+                  if non are found, match elemnts that do not have a namespace
+            </xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="unparseSuspensionWaitOld" default="100" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              While unparsing, some unparse actions require "suspending" which
+              requires buffering unparse output until the suspension can be
+              evaluated. Daffodil periodically attempts to reevaluate these
+              suspensions so that these buffers can be released. We attempt to
+              evaluate young suspensions shortly after creation with the hope
+              that it will succeed and we can release associated buffers. But if
+              a young suspension fails it is moved to the old suspension list.
+              Old suspensions are evaluated less frequently since they are less
+              likely to succeeded. This minimizes the overhead related to
+              evaluating suspensions that are likely to fail. The
+              unparseSuspensionWaitYoung and unparseSuspensionWaitOld
+              values determine how many elements are unparsed before evaluating
+              young and old suspensions, respectively.
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element name="unparseSuspensionWaitYoung" default="5" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>
+              See unparseSuspensionWaitOld
+            </xs:documentation>
+          </xs:annotation>
+          <xs:simpleType>
+            <xs:restriction base="xs:int">
+              <xs:minInclusive value="1" />
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+      </xs:all>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:simpleType name="TunableEmptyElementParsePolicy">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="treatAsEmpty" />
+      <xs:enumeration value="treatAsAbsent" />
+      <xs:enumeration value="treatAsMissing" /> <!-- deprecated -->
+    </xs:restriction>
+  </xs:simpleType>
+
+  <!--
+    The two 'Tunables' in the name are intentional. The first is the standard for
+    Tunable enums used by the generator. The second is to differentiate between
+    the dfdl property enum and the tunable enum, since they have different allowed
+    values.
+  -->
+  <xs:simpleType name="TunableParseUnparsePolicyTunable">
+    <xs:union>
+      <xs:simpleType>
+        <xs:restriction base="dfdlx:ParseUnparsePolicyEnum" />
+      </xs:simpleType>
+      <xs:simpleType>
+        <xs:restriction base="xs:token">
+          <xs:enumeration value="fromRoot" />
+        </xs:restriction>
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+
+  <!--
+    TDML implementation to use when running TDML tests. Currently daffodil and ibm use the
+    same classname, so you still need different classpaths to call ibm as a cross tester.
+  -->
+  <xs:simpleType name="TunableTDMLImplementation">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="daffodil" />
+      <xs:enumeration value="daffodilC" />
+      <xs:enumeration value="ibm" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="TunableUnqualifiedPathStepPolicy">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="defaultNamespace" />
+      <xs:enumeration value="noNamespace" />
+      <xs:enumeration value="preferDefaultNamespace" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="TunableSuppressSchemaDefinitionWarnings">
+    <xs:list>
+      <xs:simpleType>
+        <xs:restriction base="xs:token">
+          <xs:enumeration value="all" />
+          <xs:enumeration value="alignmentNotSame" />
+          <xs:enumeration value="alignmentAndInitiatorTextAlignmentNotCompatible" />
+          <xs:enumeration value="appinfoDFDLSourceWrong" />
+          <xs:enumeration value="appinfoNoSource" />
+          <xs:enumeration value="choiceInsideHiddenGroup" />
+          <xs:enumeration value="codeGenerator" />
+          <xs:enumeration value="deprecatedBigIntegerBits" />
+          <xs:enumeration value="deprecatedBuiltInFormats" />
+          <xs:enumeration value="deprecatedEncodingNameUSASCII7BitPacked" />
+          <xs:enumeration value="deprecatedExpressionResultCoercion" />
+          <xs:enumeration value="deprecatedFunctionDAFError" />
+          <xs:enumeration value="deprecatedPropertyDAFError" />
+          <xs:enumeration value="deprecatedPropertyDFDLXError" />
+          <xs:enumeration value="deprecatedPropertyDFDLError" />
+          <xs:enumeration value="deprecatedPropertySeparatorPolicy" />
+          <xs:enumeration value="discouragedDiscriminatorPlacement" />
+          <xs:enumeration value="discouragedAssertPlacement" />
+          <xs:enumeration value="emptyElementParsePolicyError" />
+          <xs:enumeration value="encodingErrorPolicyError" />
+          <xs:enumeration value="escapeSchemeRefUndefined" />
+          <xs:enumeration value="expressionCompilationSkipped" />
+          <xs:enumeration value="facetExplicitLengthOutOfRange" />
+          <xs:enumeration value="floatingError" />
+          <xs:enumeration value="ignoreImport" />
+          <xs:enumeration value="ignoreDFDLProperty" />
+          <xs:enumeration value="inconsistentLengthKind" />
+          <xs:enumeration value="invalidAnnotationPoint" />
+          <xs:enumeration value="layerCompileWarning" />
+          <xs:enumeration value="multipleChoiceBranches" />
+          <xs:enumeration value="namespaceDifferencesOnly" />
+          <xs:enumeration value="noEmptyDefault" />
+          <xs:enumeration value="nonExpressionPropertyValueLooksLikeExpression" />
+          <xs:enumeration value="pathNotToArray" />
+          <xs:enumeration value="patternEncodingSlashW" />
+          <xs:enumeration value="queryStylePathExpression" />
+          <xs:enumeration value="regexPatternZeroLength" />
+          <xs:enumeration value="textBidiError" />
+          <xs:enumeration value="textNumberPatternWarning" />
+          <xs:enumeration value="textOutputMinLengthOutOfRange" />
+          <xs:enumeration value="textStandardBaseUndefined" />
+          <xs:enumeration value="unsupportedAttributeBlockDefault" />
+          <xs:enumeration value="unsupportedAttributeFinalDefault" />
+          <xs:enumeration value="unsupportedAttributeFormDefault" />
+          <xs:enumeration value="unsupportedAttributeSchemaLocation" />
+          <xs:enumeration value="variableSet" />
+          <xs:enumeration value="xmlParser" />
+        </xs:restriction>
+      </xs:simpleType>
+    </xs:list>
+  </xs:simpleType>
+
+  <xs:element name="dfdlConfig">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="tns:externalVariableBindings" minOccurs="0" />
+        <xs:element ref="tns:tunables" minOccurs="0" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+
+</xs:schema>
diff --git a/DFDL/attribution/org/apache/daffodil/xsd/dafint.xsd b/DFDL/attribution/org/apache/daffodil/xsd/dafint.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..7f8361cc261ae16299fc4e0353162ca9d93fb952
--- /dev/null
+++ b/DFDL/attribution/org/apache/daffodil/xsd/dafint.xsd
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+  attributeFormDefault="unqualified" elementFormDefault="qualified"
+  targetNamespace="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:int"
+  xmlns:dafint="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:int"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <!--
+    This schema is for daffodil-specific internal use attribute definitions.
+  -->
+
+  <!-- Attributes to carry file and line number information -->
+  <xsd:attribute name="line" type="xsd:int"  />
+  <xsd:attribute name="col" type="xsd:int"  />
+  <xsd:attribute name="file" type="xsd:token" />
+
+  <xsd:attributeGroup name="daffodilAG">
+    <!-- allows xsi prefixed attributes, and also dafint and daf prefixed
+      attributes -->
+    <xsd:anyAttribute
+      namespace="http://www.w3.org/XML/1998/namespace 
+    urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:int 
+    urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:ext" />
+  </xsd:attributeGroup>
+
+  <xsd:element name="testElement">
+    <xsd:complexType>
+      <xsd:attributeGroup ref="dafint:daffodilAG" />
+    </xsd:complexType>
+  </xsd:element>
+
+</xsd:schema>
diff --git a/DFDL/attribution/org/apache/daffodil/xsd/datatypes.dtd b/DFDL/attribution/org/apache/daffodil/xsd/datatypes.dtd
new file mode 100644
index 0000000000000000000000000000000000000000..536edd21c5fb730967f087499038971c0906242e
--- /dev/null
+++ b/DFDL/attribution/org/apache/daffodil/xsd/datatypes.dtd
@@ -0,0 +1,214 @@
+<!--
+  Copyright © 2018 World Wide Web Consortium, (Massachusetts
+  Institute of Technology, European Research Consortium for Informatics and
+  Mathematics, Keio University, Beihang). All Rights Reserved. This work is
+  distributed under the W3C® Software License [1] in the hope that it will be
+  useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+  [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+-->
+
+<!--
+        DTD for XML Schemas: Part 2: Datatypes
+        $Id: datatypes.dtd,v 1.23 2001/03/16 17:36:30 ht Exp $
+        Note this DTD is NOT normative, or even definitive. - - the
+        prose copy in the datatypes REC is the definitive version
+        (which shouldn't differ from this one except for this comment
+        and entity expansions, but just in case)
+  -->
+
+<!--
+        This DTD cannot be used on its own, it is intended
+        only for incorporation in XMLSchema.dtd, q.v.
+  -->
+
+<!-- Define all the element names, with optional prefix -->
+<!ENTITY % simpleType "%p;simpleType">
+<!ENTITY % restriction "%p;restriction">
+<!ENTITY % list "%p;list">
+<!ENTITY % union "%p;union">
+<!ENTITY % maxExclusive "%p;maxExclusive">
+<!ENTITY % minExclusive "%p;minExclusive">
+<!ENTITY % maxInclusive "%p;maxInclusive">
+<!ENTITY % minInclusive "%p;minInclusive">
+<!ENTITY % totalDigits "%p;totalDigits">
+<!ENTITY % fractionDigits "%p;fractionDigits">
+<!ENTITY % length "%p;length">
+<!ENTITY % minLength "%p;minLength">
+<!ENTITY % maxLength "%p;maxLength">
+<!ENTITY % enumeration "%p;enumeration">
+<!ENTITY % whiteSpace "%p;whiteSpace">
+<!ENTITY % pattern "%p;pattern">
+
+<!--
+        Customisation entities for the ATTLIST of each element
+        type. Define one of these if your schema takes advantage
+        of the anyAttribute='##other' in the schema for schemas
+  -->
+
+<!ENTITY % simpleTypeAttrs "">
+<!ENTITY % restrictionAttrs "">
+<!ENTITY % listAttrs "">
+<!ENTITY % unionAttrs "">
+<!ENTITY % maxExclusiveAttrs "">
+<!ENTITY % minExclusiveAttrs "">
+<!ENTITY % maxInclusiveAttrs "">
+<!ENTITY % minInclusiveAttrs "">
+<!ENTITY % totalDigitsAttrs "">
+<!ENTITY % fractionDigitsAttrs "">
+<!ENTITY % lengthAttrs "">
+<!ENTITY % minLengthAttrs "">
+<!ENTITY % maxLengthAttrs "">
+<!ENTITY % enumerationAttrs "">
+<!ENTITY % whiteSpaceAttrs "">
+<!ENTITY % patternAttrs "">
+
+<!-- Define some entities for informative use as attribute
+        types -->
+<!ENTITY % URIref "CDATA">
+<!ENTITY % XPathExpr "CDATA">
+<!ENTITY % QName "NMTOKEN">
+<!ENTITY % QNames "NMTOKENS">
+<!ENTITY % NCName "NMTOKEN">
+<!ENTITY % nonNegativeInteger "NMTOKEN">
+<!ENTITY % boolean "(true|false)">
+<!ENTITY % simpleDerivationSet "CDATA">
+<!--
+        #all or space-separated list drawn from derivationChoice
+  -->
+
+<!--
+        Note that the use of 'facet' below is less restrictive
+        than is really intended:  There should in fact be no
+        more than one of each of minInclusive, minExclusive,
+        maxInclusive, maxExclusive, totalDigits, fractionDigits,
+        length, maxLength, minLength within datatype,
+        and the min- and max- variants of Inclusive and Exclusive
+        are mutually exclusive. On the other hand,  pattern and
+        enumeration may repeat.
+  -->
+<!ENTITY % minBound "(%minInclusive; | %minExclusive;)">
+<!ENTITY % maxBound "(%maxInclusive; | %maxExclusive;)">
+<!ENTITY % bounds "%minBound; | %maxBound;">
+<!ENTITY % numeric "%totalDigits; | %fractionDigits;">
+<!ENTITY % ordered "%bounds; | %numeric;">
+<!ENTITY % unordered
+   "%pattern; | %enumeration; | %whiteSpace; | %length; |
+   %maxLength; | %minLength;">
+<!ENTITY % facet "%ordered; | %unordered;">
+<!ENTITY % facetAttr 
+        "value CDATA #REQUIRED
+        id ID #IMPLIED">
+<!ENTITY % fixedAttr "fixed %boolean; #IMPLIED">
+<!ENTITY % facetModel "(%annotation;)?">
+<!ELEMENT %simpleType;
+        ((%annotation;)?, (%restriction; | %list; | %union;))>
+<!ATTLIST %simpleType;
+    name      %NCName; #IMPLIED
+    final     %simpleDerivationSet; #IMPLIED
+    id        ID       #IMPLIED
+    %simpleTypeAttrs;>
+<!-- name is required at top level -->
+<!ELEMENT %restriction; ((%annotation;)?,
+                         (%restriction1; |
+                          ((%simpleType;)?,(%facet;)*)),
+                         (%attrDecls;))>
+<!ATTLIST %restriction;
+    base      %QName;                  #IMPLIED
+    id        ID       #IMPLIED
+    %restrictionAttrs;>
+<!--
+        base and simpleType child are mutually exclusive,
+        one is required.
+
+        restriction is shared between simpleType and
+        simpleContent and complexContent (in XMLSchema.xsd).
+        restriction1 is for the latter cases, when this
+        is restricting a complex type, as is attrDecls.
+  -->
+<!ELEMENT %list; ((%annotation;)?,(%simpleType;)?)>
+<!ATTLIST %list;
+    itemType      %QName;             #IMPLIED
+    id        ID       #IMPLIED
+    %listAttrs;>
+<!--
+        itemType and simpleType child are mutually exclusive,
+        one is required
+  -->
+<!ELEMENT %union; ((%annotation;)?,(%simpleType;)*)>
+<!ATTLIST %union;
+    id            ID       #IMPLIED
+    memberTypes   %QNames;            #IMPLIED
+    %unionAttrs;>
+<!--
+        At least one item in memberTypes or one simpleType
+        child is required
+  -->
+
+<!ELEMENT %maxExclusive; %facetModel;>
+<!ATTLIST %maxExclusive;
+        %facetAttr;
+        %fixedAttr;
+        %maxExclusiveAttrs;>
+<!ELEMENT %minExclusive; %facetModel;>
+<!ATTLIST %minExclusive;
+        %facetAttr;
+        %fixedAttr;
+        %minExclusiveAttrs;>
+
+<!ELEMENT %maxInclusive; %facetModel;>
+<!ATTLIST %maxInclusive;
+        %facetAttr;
+        %fixedAttr;
+        %maxInclusiveAttrs;>
+<!ELEMENT %minInclusive; %facetModel;>
+<!ATTLIST %minInclusive;
+        %facetAttr;
+        %fixedAttr;
+        %minInclusiveAttrs;>
+
+<!ELEMENT %totalDigits; %facetModel;>
+<!ATTLIST %totalDigits;
+        %facetAttr;
+        %fixedAttr;
+        %totalDigitsAttrs;>
+<!ELEMENT %fractionDigits; %facetModel;>
+<!ATTLIST %fractionDigits;
+        %facetAttr;
+        %fixedAttr;
+        %fractionDigitsAttrs;>
+
+<!ELEMENT %length; %facetModel;>
+<!ATTLIST %length;
+        %facetAttr;
+        %fixedAttr;
+        %lengthAttrs;>
+<!ELEMENT %minLength; %facetModel;>
+<!ATTLIST %minLength;
+        %facetAttr;
+        %fixedAttr;
+        %minLengthAttrs;>
+<!ELEMENT %maxLength; %facetModel;>
+<!ATTLIST %maxLength;
+        %facetAttr;
+        %fixedAttr;
+        %maxLengthAttrs;>
+
+<!-- This one can be repeated -->
+<!ELEMENT %enumeration; %facetModel;>
+<!ATTLIST %enumeration;
+        %facetAttr;
+        %enumerationAttrs;>
+
+<!ELEMENT %whiteSpace; %facetModel;>
+<!ATTLIST %whiteSpace;
+        %facetAttr;
+        %fixedAttr;
+        %whiteSpaceAttrs;>
+
+<!-- This one can be repeated -->
+<!ELEMENT %pattern; %facetModel;>
+<!ATTLIST %pattern;
+        %facetAttr;
+        %patternAttrs;>
diff --git a/DFDL/attribution/org/apache/daffodil/xsd/dfdlx.xsd b/DFDL/attribution/org/apache/daffodil/xsd/dfdlx.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..395aed008de26ca702e978a2acaa2a102dad914e
--- /dev/null
+++ b/DFDL/attribution/org/apache/daffodil/xsd/dfdlx.xsd
@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<xs:schema
+  targetNamespace="http://www.ogf.org/dfdl/dfdl-1.0/extensions"
+  xmlns:xs="http://www.w3.org/2001/XMLSchema"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"
+  xmlns:dfdlx="http://www.ogf.org/dfdl/dfdl-1.0/extensions"
+  xmlns:daf="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:ext"
+  xmlns:dafint="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:int"
+  attributeFormDefault="unqualified"
+  elementFormDefault="qualified">
+
+  <xs:import namespace="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:int"/>
+  <xs:import namespace="http://www.ogf.org/dfdl/dfdl-1.0/"/>
+
+  <!-- dfdl:property="..." extension values. Extension properties must start with dfdlx: -->
+
+  <xs:simpleType name="PropertyNameType">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="dfdlx:alignmentKind" />
+      <xs:enumeration value="dfdlx:choiceBranchKeyRanges" />
+      <xs:enumeration value="dfdlx:emptyElementParsePolicy"/> <!-- deprecated -->
+      <xs:enumeration value="dfdlx:inputTypeCalc"/>
+      <xs:enumeration value="dfdlx:objectKind"/>
+      <xs:enumeration value="dfdlx:outputTypeCalc"/>
+      <xs:enumeration value="dfdlx:parseUnparsePolicy"/>
+      <xs:enumeration value="dfdlx:repType"/>
+      <xs:enumeration value="dfdlx:repValueRanges"/>
+      <xs:enumeration value="dfdlx:repValues"/>
+      <xs:enumeration value="dfdlx:runtimeProperties"/>
+    </xs:restriction>
+  </xs:simpleType>
+
+
+  <xs:attribute name="alignmentKind" type="dfdlx:AlignmentKindEnum" default="automatic">
+    <xs:annotation>
+      <xs:documentation><![CDATA[
+        If manual, then the dfdl:alignment property is ignored, and all alignment must be done
+        manually by way of dfdl:leadingSkip, dfdl:trailingSkip, or just arranging for elements
+        that have the right size such that alignment is correct.
+
+        The dfdl:alignmentUnits property still applies and is used with dfdl:leadingSkip and dfdl:trailingSkip.
+
+        This property helps overcome limitations of the Daffodil schema compiler where it attempts to optimize
+        out normal alignment regions, but is unable to, resulting in the inability to unparse some formats.
+
+        For all constructs in the scope of this property, there will be no alignment regions created,
+        and charset encodings will not have mandatory text alignment of their characters.
+
+        Since this is a new extension property that is experimental, it will have a default value of "automatic".
+        ]]></xs:documentation>
+    </xs:annotation>
+  </xs:attribute>
+
+  <xs:simpleType name="AlignmentKindEnum">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="automatic" />
+      <xs:enumeration value="manual" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:attribute name="parseUnparsePolicy" type="dfdlx:ParseUnparsePolicyEnum"/>
+  <xs:simpleType name="ParseUnparsePolicyEnum">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="both" />
+      <xs:enumeration value="parseOnly" />
+      <xs:enumeration value="unparseOnly" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:attribute name="direction" type="dfdlx:VariableDirectionEnum"/>
+  <xs:simpleType name="VariableDirectionEnum">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="both" />
+      <xs:enumeration value="parseOnly" />
+      <xs:enumeration value="unparseOnly" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:attribute name="emptyElementParsePolicy" type="dfdlx:EmptyElementParsePolicyEnum"/> <!-- deprecated -->
+  <xs:simpleType name="EmptyElementParsePolicyEnum">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="treatAsEmpty" />
+      <xs:enumeration value="treatAsMissing" /> <!-- deprecated -->
+    </xs:restriction>
+  </xs:simpleType>
+  
+  <xs:attribute name="choiceBranchKeyRanges" type="dfdl:NonEmptyListOfInteger" />
+
+  <xs:attributeGroup name="SimpleTypeValueCalcAG">
+    <xs:attribute form="qualified" name="repType" type="dfdl:DFDLQName" />
+    <xs:attribute form="qualified" name="inputTypeCalc" type="dfdl:DFDLExpression" />
+    <xs:attribute form="qualified" name="outputTypeCalc" type="dfdl:DFDLExpression" />
+    <xs:attributeGroup ref="dfdlx:RepValuesAG" />
+  </xs:attributeGroup>
+
+  <xs:attributeGroup name="RepValuesAG">
+    <xs:attribute form="qualified" name="repValues" type="dfdl:NonEmptyListofDFDLStringLiteralOrNonEmptyListOfInteger" />
+    <xs:attribute form="qualified" name="repValueRanges" type="dfdl:NonEmptyListOfInteger" />
+  </xs:attributeGroup>
+
+  <xs:attributeGroup name="SimpleTypeValueCalcAGQualified">
+    <xs:attribute form="qualified" name="repType" type="dfdl:DFDLQName" />
+    <xs:attribute form="qualified" name="inputTypeCalc" type="dfdl:DFDLExpression" />
+    <xs:attribute form="qualified" name="outputTypeCalc" type="dfdl:DFDLExpression" />
+    <xs:attributeGroup ref="dfdlx:RepValuesAGQualified" />
+  </xs:attributeGroup>
+
+  <xs:attributeGroup name="RepValuesAGQualified">
+    <xs:attribute form="qualified" name="repValues" type="dfdl:NonEmptyListofDFDLStringLiteralOrNonEmptyListOfInteger" />
+    <xs:attribute form="qualified" name="repValueRanges" type="dfdl:NonEmptyListOfInteger" />
+  </xs:attributeGroup>
+
+  <xs:attributeGroup name="ExtLayeringAGQualified">
+    <xs:attribute form="qualified" name="layerTransform" type="dfdlx:LayerTransformType" />
+    <xs:attribute form="qualified" name="layerEncoding" type="dfdl:EncodingEnum_Or_DFDLExpression" />
+    <xs:attribute form="qualified" name="layerLengthKind" type="dfdlx:LayerLengthKindEnum" />
+    <xs:attribute form="qualified" name="layerLength" type="dfdl:DFDLNonNegativeInteger_Or_DFDLExpression" />
+    <xs:attribute form="qualified" name="layerLengthUnits" type="dfdlx:LayerLengthUnitsEnum" />
+    <xs:attribute form="qualified" name="layerBoundaryMark" type="dfdl:ListOfDFDLStringLiteral_Or_DFDLExpression" />
+  </xs:attributeGroup>
+
+
+  <xs:simpleType name="LayerTransformType">
+    <xs:union>
+      <xs:simpleType>
+        <xs:restriction base="dfdlx:LayerTransformEnum" />
+      </xs:simpleType>
+      <xs:simpleType>
+        <xs:restriction base="xs:NCName" /><!-- for dynamically loaded layers -->
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+
+  <xs:simpleType name="LayerTransformEnum">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="fourbyteswap">
+        <xs:annotation>
+          <xs:documentation>
+            Swap bytes in 32 bit words.
+          </xs:documentation>
+        </xs:annotation>
+      </xs:enumeration>
+      <xs:enumeration value="base64_MIME">
+        <xs:annotation>
+          <xs:documentation>
+            IETF RFC 2045
+
+            Max line length 76 characters.
+          </xs:documentation>
+        </xs:annotation>
+      </xs:enumeration>
+      <xs:enumeration value="lineFolded_IMF">
+        <xs:annotation>
+          <xs:documentation><![CDATA[
+             IETF RFC 2822 Internet Message Format (IMF)
+
+             Each line of characters MUST be no more than
+             998 characters, and SHOULD be no more than 78 characters, excluding
+             the CRLF.
+
+             Though structured field bodies are defined in such a way that
+             folding can take place between many of the lexical tokens (and even
+             within some of the lexical tokens), folding SHOULD be limited to
+             placing the CRLF at higher-level syntactic breaks.  For instance, if
+             a field body is defined as comma-separated values, it is recommended
+             that folding occur after the comma separating the structured items in
+             preference to other places where the field could be folded, even if
+             it is allowed elsewhere.
+
+             Unfolding is accomplished by simply removing any CRLF
+             that is immediately followed by WSP.
+             ]]>
+          </xs:documentation>
+        </xs:annotation>
+      </xs:enumeration>
+      <xs:enumeration value="lineFolded_iCalendar">
+        <xs:annotation>
+          <xs:documentation><![CDATA[
+             IETF RFC 5545 Internet Calendaring and Scheduling (iCalendar)
+
+             Lines of text SHOULD NOT be longer than 75 octets, excluding the line
+             break.  Long content lines SHOULD be split into a multiple line
+             representations using a line "folding" technique.  That is, a long
+             line can be split between any two characters by inserting a CRLF
+             immediately followed by a single linear white-space character (i.e.,
+             SPACE or HTAB).  Any sequence of CRLF followed immediately by a
+             single linear white-space character is ignored (i.e., removed) when
+             processing the content type.
+             ]]>
+          </xs:documentation>
+        </xs:annotation>
+      </xs:enumeration>
+      <xs:enumeration value="gzip">
+        <xs:annotation>
+          <xs:documentation>
+            GZIP per https://www.ietf.org/rfc/rfc1952.txt
+          </xs:documentation>
+        </xs:annotation>
+      </xs:enumeration>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="LayerLengthUnitsEnum">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="bytes" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="LayerLengthKindEnum">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="explicit" />
+      <xs:enumeration value="boundaryMark" />
+      <xs:enumeration value="implicit" />
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:attributeGroup name="ObjectKindAG">
+    <xs:attribute form="qualified" name="objectKind" type="dfdlx:ObjectKindType" />
+  </xs:attributeGroup>
+
+  <xs:attributeGroup name="ObjectKindAGQualified">
+    <xs:attribute form="qualified" name="objectKind" type="dfdlx:ObjectKindType" />
+  </xs:attributeGroup>
+
+  <xs:simpleType name="ObjectKindType">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="bytes"/>
+      <xs:enumeration value="chars"/>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:attributeGroup name="RuntimePropertiesAG">
+    <xs:attribute form="qualified" name="runtimeProperties" type="dfdlx:RuntimePropertiesType" />
+  </xs:attributeGroup>
+
+  <xs:attributeGroup name="RuntimePropertiesAGQualified">
+    <xs:attribute form="qualified" name="runtimeProperties" type="dfdlx:RuntimePropertiesType" />
+  </xs:attributeGroup>
+
+  <xs:simpleType name="RuntimePropertiesType">
+    <xs:restriction base="dfdlx:KVList" />
+  </xs:simpleType>
+
+  <xs:simpleType name="KVList">
+    <xs:list>
+      <xs:simpleType>
+        <xs:restriction base="xs:token">
+          <xs:pattern value="[a-zA-Z_][a-zA-Z0-9_]*=\S*"/>
+        </xs:restriction>
+      </xs:simpleType>
+    </xs:list>
+  </xs:simpleType>
+
+</xs:schema>
diff --git a/DFDL/attribution/org/apache/daffodil/xsd/tdml.xsd b/DFDL/attribution/org/apache/daffodil/xsd/tdml.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..5a9c157e31f49b781648c9eb6f7870c37cfa3228
--- /dev/null
+++ b/DFDL/attribution/org/apache/daffodil/xsd/tdml.xsd
@@ -0,0 +1,370 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
+  xmlns="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="http://www.ibm.com/xmlns/dfdl/testData" 
+  xmlns:tns="http://www.ibm.com/xmlns/dfdl/testData" 
+  elementFormDefault="unqualified"
+  xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/" 
+  xmlns:daf="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:ext" 
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+  <xsd:import namespace="http://www.w3.org/2001/XMLSchema" />
+  <xsd:import namespace="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:ext" />
+  <xsd:import namespace="http://www.ogf.org/dfdl/dfdl-1.0/"/>
+  <xsd:import namespace="http://www.ogf.org/dfdl/dfdl-1.0/extensions"/>
+
+  <xs:attribute name="tutorialInclude" type="xs:string" fixed="no"/>
+  
+<!-- 
+  This element's type is a stub that satisfies the need for xhtml5 validation as part of TDML files.
+
+  It is just a wildcard with skip validation in it. So it's not really validating anything.
+
+  Users of TDML creating tutorials should paste in known-correct xhtml5 as the contents of the 
+  tutorial elements.
+-->
+  <xs:element name="tutorial">
+      <xs:complexType mixed="true">
+      <xs:sequence>
+        <xs:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
+      </xs:sequence>
+      <xs:anyAttribute namespace="##any" processContents="skip"/>
+    </xs:complexType>
+  </xs:element>
+  
+  <!-- IBM uses this namespace http://www.ibm.com/xmlns/dfdl/testData -->
+
+  <element name="testSuite">
+    <complexType>
+      <sequence>
+        <choice maxOccurs="unbounded" minOccurs="0">
+          <element ref="tns:tutorial"/>
+          <element ref="tns:parserTestCase"/>
+          <!-- This is an extension to the IBM TDML language. We allow schemas 
+            to be directly embedded inside the TDML file. A TDML file that contains all 
+            the schemas it needs is a "self contained" TDML file. -->
+          <element ref="tns:defineSchema" minOccurs="0"/>
+
+          <element ref="tns:defineConfig" minOccurs="0"/>
+
+          <element ref="tns:unparserTestCase"/>
+        </choice>
+      </sequence>
+      <attribute name="suiteName" type="xs:token" use="optional"/>
+      <attribute name="ID" type="xs:token" use="optional"/>
+      <attribute name="description" type="xs:string" use="optional"/>
+      <attribute name="defaultRoundTrip" type="tns:roundTripType" use="optional"/>
+      <attribute name="defaultValidation" type="tns:validationType" use="optional"/>
+      <attribute name="defaultConfig" type="xs:string" use="optional"/>
+      <attribute name="defaultImplementations" type="tns:implementationsType" use="optional"/>
+    </complexType>
+    <unique name="unique-parserTestCase-name">
+      <selector xpath="parserTestCase"/>
+      <field xpath="@name"/>
+    </unique>
+    <unique name="unique-unparserTestCase-name">
+      <selector xpath="unparserTestCase"/>
+      <field xpath="@name"/>
+    </unique>
+    <unique name="unique-embeddedSchema-name">
+      <selector xpath="defineSchema"/>
+      <field xpath="@name"/>
+    </unique>
+    <unique name="unique-embeddedConfig-name">
+      <selector xpath="defineConfig"/>
+      <field xpath="@name"/>
+    </unique>
+  </element>
+  
+  <simpleType name="implementationsType">
+    <list itemType="tns:implementationItem"/>
+  </simpleType>
+  
+  <simpleType name="implementationItem">
+    <restriction base="xs:token">
+      <enumeration value="daffodil"/>
+      <enumeration value="daffodilC"/>
+      <enumeration value="ibm"/>
+    </restriction>
+  </simpleType>
+  
+<!-- We want to allow an xsd:schema to be named and directly embedded in 
+  the TDML thereby allowing a fully-self-contained single file test case as 
+  an exchange medium for tests. -->
+
+  <element name="defineSchema" type="tns:defineSchemaType"/>
+  <complexType name="defineSchemaType">
+    <choice maxOccurs='unbounded'>
+      <element ref='dfdl:format'/>
+      <element ref='dfdl:defineVariable'/>
+      <element ref='dfdl:defineEscapeScheme'/>
+      <element ref='dfdl:defineFormat'/>
+      <element ref='xs:element'/>
+      <element ref='xs:complexType'/>
+      <element ref='xs:group'/>
+      <element ref='xs:simpleType'/>
+      <element ref='xs:include'/>
+      <element ref='xs:import'/>
+                        <!-- <any namespace="##other" processContents="lax"/> -->
+    </choice>
+    <attribute name="name" type="xs:NCName" use="required"/>
+                <!-- We want the default to be 'unqualified' in the longer term but 
+                     we leave it 'qualified here to prevent lots of tests from breaking. -->
+    <attribute name="elementFormDefault" type="tns:elementFormDefaultType" default="qualified"/>
+        <!-- we want the default for useDefaultNamespace to be false longer term but
+             we leave it as true here to prevent lots of tests from breaking.
+             81 tests to be exact. -->
+    <attribute name="useDefaultNamespace" type="xs:boolean" default="true">
+      <annotation><documentation>
+        Controls whether a xmlns="http://example.com" default namespace prefix
+        definition will be provided for the embedded schema.
+
+        This matters when the defined schema is used to validate the infoset xml
+        before unparsing, or after parsing, as it affects the interpretation of
+        path expressions in the DFDL schema based on the unqualifiedPathStepPolicy
+        tunable.
+
+        False is recommended since default namespaces can be confusing.
+      </documentation></annotation>
+    </attribute>
+    <attribute ref="tns:tutorialInclude"/>
+  </complexType>
+
+  <element name="defineConfig" type="tns:defineConfigType"/>
+  <complexType name="defineConfigType">
+    <sequence>
+      <element ref="daf:externalVariableBindings" minOccurs="0" maxOccurs="1"/>
+      <element ref="daf:tunables" minOccurs="0" maxOccurs="1"/>
+    </sequence>
+    <attribute name="name" type="xs:NCName" use="required"/>
+  </complexType>
+
+
+  <element name="parserTestCase" type="tns:parserTestCaseType"/>
+  <complexType name="parserTestCaseType">
+    <choice minOccurs="2" maxOccurs="11">
+      <!-- we can't enforce the cardinality in XSD 1.0 -->
+      <element ref="tns:tutorial"/>
+      <element ref="tns:document"/>
+      <element ref="tns:infoset"/>
+      <element ref="tns:errors"/>
+      <element ref="tns:warnings" minOccurs='0'/>
+      <element ref="tns:validationErrors" minOccurs="0"/>
+    </choice>
+    <attributeGroup ref="tns:testCaseAttribs"/>
+  </complexType>
+
+  <attributeGroup name="testCaseAttribs">
+    <attribute name="name" type="xs:NCName" use="required"/>
+    <attribute name="ID" type="xs:token" use="optional"/>
+    <attribute name="root" type="xs:NCName" use="optional"/> <!-- only needed when there is no infoset. -->
+    <attribute name="rootNS" type="xs:string" use="optional"/> <!-- only needed when there is no infoset. -->
+    <attribute name="model" type="xs:string" use="optional"/> <!-- is there a type for a path/uri? -->
+    <attribute name="config" type="xs:string" use="optional"/> <!-- is there a type for a path/uri? -->
+    <attribute name="roundTrip" type="tns:roundTripType" use="optional"/>
+    <attribute name="description" type="xs:string" use="optional"/>
+    <attribute name="unsupported" type="xs:boolean" use="optional" default="false"/>
+    <attribute name="validation" type="tns:validationType" use="optional"/>
+    <attribute name="implementations" type="tns:implementationsType" use="optional"/>
+
+  </attributeGroup>
+
+  <simpleType name="roundTripType">
+    <restriction base="xs:token">
+      <enumeration value="false"/> <!-- means same as none -->
+      <enumeration value="true"/> <!-- means same as onePass -->
+      <!-- 
+        parse only - compare infoset. 
+        -->
+      <enumeration value="none"/>
+      <!--  
+        parse, compare infoset, unparse - compare data 
+        -->
+      <enumeration value="onePass"/> 
+      <!-- 
+        parse, unparse, reparse - compare infoset.
+        Note that this can mask certain errors. So must be used with caution.
+        -->
+      <enumeration value="twoPass"/> 
+      <!-- 
+        parse, unparse, reparse, reunparse, compare data.
+        Note that this can mask many kinds of errors very easily, so must be used
+        rarely and with caution. 
+        -->
+      <enumeration value="threePass"/>
+    </restriction>
+  </simpleType>
+  
+  <simpleType name="elementFormDefaultType">
+    <restriction base="xs:token">
+      <enumeration value="qualified"/>
+      <enumeration value="unqualified"/>
+    </restriction>
+  </simpleType>
+
+  <simpleType name="validationType">
+    <restriction base="xs:token">
+      <enumeration value="on"/>
+      <enumeration value="limited"/>
+      <enumeration value="off"/>
+    </restriction>
+  </simpleType>
+
+  <element name="document" type="tns:documentType"/>
+  <element name="infoset" type="tns:infosetType"/>
+  <element name="errors" type="tns:errorsType"/>
+  <element name="warnings" type="tns:warningsType"/>
+  <element name="validationErrors" type="tns:validationErrorsType"/>
+
+  <complexType name="documentType" mixed="true">
+    <sequence>
+      <element ref="tns:documentPart" minOccurs="0" maxOccurs="unbounded"/>
+    </sequence>
+    <attribute name="bitOrder" type="tns:bitOrderEnum" use="optional"/>
+    <attribute ref="tns:tutorialInclude"/>
+  </complexType>
+
+  <element name="documentPart" type="tns:documentPartType"/>
+  <complexType name="documentPartType">
+    <simpleContent>
+      <extension base="xs:string">
+        <attribute name="type" type="tns:documentPartTypeEnum" use="required"/>
+        <attribute name="replaceDFDLEntities" type="xs:boolean"/>
+        <attributeGroup ref="tns:bitOrderAG"/>
+        <attribute name="encoding" type="xs:token" use="optional"/>
+      </extension>
+    </simpleContent>
+  </complexType>
+
+  <simpleType name="documentPartTypeEnum">
+    <restriction base="xs:string">
+      <enumeration value="byte"/>
+      <enumeration value="text"/>
+      <enumeration value="bits"/>
+      <enumeration value="file"/>
+    </restriction>
+  </simpleType>
+
+  <attributeGroup name="bitOrderAG">
+    <attribute name="bitOrder" type="tns:bitOrderEnum" use="optional"/>
+    <attribute name="byteOrder" type="tns:byteOrderEnum" use="optional"/>
+  </attributeGroup>
+
+  <simpleType name="byteOrderEnum">
+    <annotation>
+      <documentation>
+        Not to be confused with dfdl:byteOrder, this attribute describes the
+        order of bits or bytes in the TDML document part, that is, whether
+        they
+        should be given their positions starting from the beginning (LTR) or the
+        end (RTL). LTR is the normal default where data location number
+        increase
+        from left to right. RTL is used for bit-order LSBFirst, and the bytes
+        are ordered starting on the right increasing to the left.
+      </documentation>
+    </annotation>
+    <restriction base="xs:string">
+      <enumeration value="RTL"/>
+      <enumeration value="LTR"/>
+    </restriction>
+  </simpleType>
+
+  <simpleType name="bitOrderEnum">
+    <restriction base="xs:string">
+      <enumeration value="LSBFirst"/>
+      <enumeration value="MSBFirst"/>
+    </restriction>
+  </simpleType>
+
+  <complexType name="infosetType">
+    <sequence>
+      <element ref="tns:dfdlInfoset"/>
+    </sequence>
+    <attribute ref="tns:tutorialInclude"/>
+  </complexType>
+
+  <element name="dfdlInfoset" type="tns:dfdlInfosetType"/>
+
+  <complexType name="dfdlInfosetType" mixed="true">
+    <sequence>
+      <any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+    </sequence>
+    <attribute name="type" use="optional" default="infoset">
+      <simpleType>
+        <restriction base="xs:string">
+          <enumeration value="infoset"/>
+          <enumeration value="file"/>
+        </restriction>
+      </simpleType>
+    </attribute>
+  </complexType>
+
+  <complexType name="errorsType">
+    <sequence>
+      <element ref="tns:error" maxOccurs="unbounded" minOccurs="1"/>
+    </sequence>
+    <attributeGroup ref="tns:errorWarnAttribs"/>
+  </complexType>
+
+  <complexType name="warningsType">
+    <sequence>
+      <element ref="tns:warning" maxOccurs="unbounded" minOccurs="0"/>
+                        <!-- use <warnings/> to indicate no warnings should occur. -->
+    </sequence>
+    <attributeGroup ref="tns:errorWarnAttribs"/>
+  </complexType>
+
+  <complexType name="validationErrorsType">
+    <sequence>
+      <element ref="tns:error" maxOccurs="unbounded" minOccurs="0"/>
+                        <!-- use <validationErrors/> to indicate no validation should occur. -->
+    </sequence>
+    <attributeGroup ref="tns:errorWarnAttribs"/>
+  </complexType>
+
+  <element name="error" type="xs:string"/>
+  <element name="warning" type="xs:string"/>
+
+  <xs:attributeGroup name="errorWarnAttribs">
+    <xs:attribute name="match" use="optional" default="all">
+      <xs:simpleType>
+        <xs:restriction base="xs:string">
+          <xs:enumeration value="all"/>
+          <xs:enumeration value="any"/>
+        </xs:restriction>
+      </xs:simpleType>
+    </xs:attribute>
+  </xs:attributeGroup>
+
+  <element name="unparserTestCase" type="tns:unparserTestCaseType"/>
+  <complexType name="unparserTestCaseType">
+    <choice minOccurs="2" maxOccurs="9">
+      <!-- we just can't enforce cardinality of any of these things using XSD 1.0 -->
+      <element ref="tns:tutorial"/> <!-- these before, between, or after any of the others -->
+      <element ref="tns:infoset"/> <!-- required -->
+      <element ref="tns:document"/> <!-- must have either document, or errors, or both -->
+      <element ref="tns:errors"/>
+      <element ref="tns:warnings"/>
+    </choice>
+    <attributeGroup ref="tns:testCaseAttribs"/>
+  </complexType>
+
+</xsd:schema>
diff --git a/DFDL/attribution/org/apache/daffodil/xsd/xml.xsd b/DFDL/attribution/org/apache/daffodil/xsd/xml.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..fd6d5aaf40e7565f09eb864ab05018032e3c8b1a
--- /dev/null
+++ b/DFDL/attribution/org/apache/daffodil/xsd/xml.xsd
@@ -0,0 +1,155 @@
+<?xml version='1.0'?>
+<!--
+  Copyright © 2018 World Wide Web Consortium, (Massachusetts
+  Institute of Technology, European Research Consortium for Informatics and
+  Mathematics, Keio University, Beihang). All Rights Reserved. This work is
+  distributed under the W3C® Software License [1] in the hope that it will be
+  useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+  [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+-->
+
+<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace"
+  xmlns:xs="http://www.w3.org/2001/XMLSchema" xml:lang="en"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+  <xs:annotation>
+    <xs:documentation>
+      See http://www.w3.org/XML/1998/namespace.html and
+      http://www.w3.org/TR/REC-xml for information about this namespace.
+
+      This schema document describes the XML namespace, in a form
+      suitable for import by other schema documents.
+
+      Note that local names in this namespace are intended to be defined
+      only by the World Wide Web Consortium or its subgroups. The
+      following names are currently defined in this namespace and should
+      not be used with conflicting semantics by any Working Group,
+      specification, or document instance:
+
+      base (as an attribute name): denotes an attribute whose value
+      provides a URI to be used as the base for interpreting any
+      relative URIs in the scope of the element on which it
+      appears; its value is inherited. This name is reserved
+      by virtue of its definition in the XML Base specification.
+
+      id (as an attribute name): denotes an attribute whose value
+      should be interpreted as if declared to be of type ID.
+      The xml:id specification is not yet a W3C Recommendation,
+      but this attribute is included here to facilitate experimentation
+      with the mechanisms it proposes. Note that it is _not_ included
+      in the specialAttrs attribute group.
+
+      lang (as an attribute name): denotes an attribute whose value
+      is a language code for the natural language of the content of
+      any element; its value is inherited. This name is reserved
+      by virtue of its definition in the XML specification.
+
+      space (as an attribute name): denotes an attribute whose
+      value is a keyword indicating what whitespace processing
+      discipline is intended for the content of the element; its
+      value is inherited. This name is reserved by virtue of its
+      definition in the XML specification.
+
+      Father (in any context at all): denotes Jon Bosak, the chair of
+      the original XML Working Group. This name is reserved by
+      the following decision of the W3C XML Plenary and
+      XML Coordination groups:
+
+      In appreciation for his vision, leadership and dedication
+      the W3C XML Plenary on this 10th day of February, 2000
+      reserves for Jon Bosak in perpetuity the XML name
+      xml:Father
+    </xs:documentation>
+  </xs:annotation>
+
+  <xs:annotation>
+    <xs:documentation>This schema defines attributes and an attribute
+      group
+      suitable for use by
+      schemas wishing to allow xml:base, xml:lang or xml:space attributes
+      on elements they define.
+
+      To enable this, such a schema must import this schema
+      for the XML namespace, e.g. as follows:
+      &lt;schema . . .>
+      . . .
+      &lt;import namespace="http://www.w3.org/XML/1998/namespace"
+      schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>
+
+      Subsequently, qualified reference to any of the attributes
+      or the group defined below will have the desired effect, e.g.
+
+      &lt;type . . .>
+      . . .
+      &lt;attributeGroup ref="xml:specialAttrs"/>
+
+      will define a type which will schema-validate an instance
+      element with any of those attributes
+    </xs:documentation>
+  </xs:annotation>
+
+  <xs:annotation>
+    <xs:documentation>In keeping with the XML Schema WG's standard
+      versioning
+      policy, this schema document will persist at
+      http://www.w3.org/2004/10/xml.xsd.
+      At the date of issue it can also be found at
+      http://www.w3.org/2001/xml.xsd.
+      The schema document at that URI may however change in the future,
+      in order to remain compatible with the latest version of XML Schema
+      itself, or with the XML namespace itself. In other words, if the
+      XML
+      Schema or XML namespaces change, the version of this document at
+      http://www.w3.org/2001/xml.xsd will change
+      accordingly; the version at
+      http://www.w3.org/2004/10/xml.xsd will not change.
+    </xs:documentation>
+  </xs:annotation>
+
+  <xs:attribute name="lang" type="xs:language">
+    <xs:annotation>
+      <xs:documentation>Attempting to install the relevant ISO 2- and
+        3-letter
+        codes as the enumerated possible values is probably never
+        going to be a realistic possibility. See
+        RFC 3066 at http://www.ietf.org/rfc/rfc3066.txt and the IANA registry
+        at http://www.iana.org/assignments/lang-tag-apps.htm for
+        further information.
+      </xs:documentation>
+    </xs:annotation>
+  </xs:attribute>
+
+  <xs:attribute name="space">
+    <xs:simpleType>
+      <xs:restriction base="xs:NCName">
+        <xs:enumeration value="default" />
+        <xs:enumeration value="preserve" />
+      </xs:restriction>
+    </xs:simpleType>
+  </xs:attribute>
+
+  <xs:attribute name="base" type="xs:anyURI">
+    <xs:annotation>
+      <xs:documentation>See http://www.w3.org/TR/xmlbase/ for
+        information about this attribute.
+      </xs:documentation>
+    </xs:annotation>
+  </xs:attribute>
+
+  <xs:attribute name="id" type="xs:ID">
+    <xs:annotation>
+      <xs:documentation>See http://www.w3.org/TR/xml-id/ for
+        information about this attribute.
+      </xs:documentation>
+    </xs:annotation>
+  </xs:attribute>
+
+  <xs:attributeGroup name="specialAttrs">
+    <xs:attribute ref="xml:base" />
+    <xs:attribute ref="xml:lang" />
+    <xs:attribute ref="xml:space" />
+  </xs:attributeGroup>
+
+</xs:schema>