diff --git a/spec/src/main/asciidoc/XMLBinding.adoc b/spec/src/main/asciidoc/XMLBinding.adoc
index bfd2671..a90a755 100644
--- a/spec/src/main/asciidoc/XMLBinding.adoc
+++ b/spec/src/main/asciidoc/XMLBinding.adoc
@@ -24,40 +24,6 @@
 
 '''''
 
-[.footnoteNumber]# 21.# [[a5372]]Note that
-link:jaxb.html#a1084[See Binding of an anonymous complex type
-definition]” defines the name and package property for anonymous type
-definitions occurring within an element declaration.
-
-[.footnoteNumber]# 22.# [[a5373]]Element substitution
-extensibility does allow element substitution(s) to be defined in a
-separate schema than a global element reference occurs. When schemas are
-not compiled at same time, the schema to java binding declaration,
-<jaxb:property generateElementProperty=”true”/> described in
-link:jaxb.html#a1786[See Usage] forces the generation of an
-element property for a global element reference, independent of it not
-belonging to a element substitution group.
-
-[.footnoteNumber]# 23.# [[a5374]]The desire to reduce
-the overall number of schema-derived classes generated by default
-influenced the decision to default to binding an element declaration to
-an element instance factory. A customization described in
-link:jaxb.html#a1580[See <globalBindings> Declaration] exists
-that binds each element declaration to a Java element class so element
-substitution checking can be enforced entirely by strongly typed method
-signatures.
-
-[.footnoteNumber]# 24.# [[a5375]]Specifying a
-customization of the local element declaration A within Derived complex
-type to a different property name than A would avoid the fallback
-position for this case.
-
-[.footnoteNumber]# 25.# [[a5376]]Note that primitive
-Java types must be represented by their Java wrapper classes when base
-type is used in the choice content property method signatures. Also, all
-sequence descendants of the choice are treated as either a general
-content property or are mapped to their own value class.
-
 [.footnoteNumber]# 26.# [[a5377]]XML schema does not
 associate anonymous types with a specific symbol space. However,
 _nameXmlTransform_ is used since it provides a convenient way to
diff --git a/spec/src/main/asciidoc/ch01-introduction.adoc b/spec/src/main/asciidoc/ch01-introduction.adoc
index 8ec81ac..a697886 100644
--- a/spec/src/main/asciidoc/ch01-introduction.adoc
+++ b/spec/src/main/asciidoc/ch01-introduction.adoc
@@ -152,7 +152,7 @@
 the relevant parts of the XML document to a content tree and
 _marshalling_ updates back to the original XML document.
 
-=== [[a23]]Goals
+=== Goals
 
 The JAXB architecture is designed with the
 goals outlined here in mind.
diff --git a/spec/src/main/asciidoc/ch02-requirements.adoc b/spec/src/main/asciidoc/ch02-requirements.adoc
index 083afd5..c5615df 100644
--- a/spec/src/main/asciidoc/ch02-requirements.adoc
+++ b/spec/src/main/asciidoc/ch02-requirements.adoc
@@ -34,7 +34,7 @@
 description of the default mapping of schema components to Java
 representations in order to satisfy the portability goal.
 
-==== [[a165]]Customized Binding Schema
+==== Customized Binding Schema
 
 A binding schema language and its formats must
 be specified. There must be a means to describe the binding without
@@ -90,7 +90,7 @@
 passed as EJB method parameter and to any other API that requires
 Serializable instances.
 
-===== [[a179]]Disabling Databinding
+===== Disabling Databinding
 
 A customization to disable databinding must be
 specified. When databinding is disabled, an XML Schema component is
@@ -101,14 +101,14 @@
 
 === Java to XML Schema
 
-==== [[a182]]Default Mapping
+==== Default Mapping
 
 A default mapping Java constructs to XML
 Schema must be specified. The default mapping may be overridden by
 customizations described in link:jaxb.html#a184[See Customized
 Mapping]”.
 
-==== [[a184]]Customized Mapping
+==== Customized Mapping
 
 A customization mechanism to override default
 mapping of Java constructs to XML Schema constructs must be specified.
diff --git a/spec/src/main/asciidoc/ch03-architecture.adoc b/spec/src/main/asciidoc/ch03-architecture.adoc
index a9aefa1..8079c98 100644
--- a/spec/src/main/asciidoc/ch03-architecture.adoc
+++ b/spec/src/main/asciidoc/ch03-architecture.adoc
@@ -258,7 +258,7 @@
 introduction of a flexible unmarshalling mode. These changes are
 described in link:jaxb.html#a379[See Unmarshalling Modes]”.
 
-==== [[a256]]Validation
+==== Validation
 
 The constraints expressed in a schema fall
 into three general categories:
diff --git a/spec/src/main/asciidoc/ch04-binding_framework.adoc b/spec/src/main/asciidoc/ch04-binding_framework.adoc
index 060dd1f..b548dac 100644
--- a/spec/src/main/asciidoc/ch04-binding_framework.adoc
+++ b/spec/src/main/asciidoc/ch04-binding_framework.adoc
@@ -62,7 +62,7 @@
 regenerate the schema-derived implementation classes when changing JAXB
 implementations.
 
-=== [[a298]]JAXBContext
+=== JAXBContext
 
 The `JAXBContext` class provides the client’s
 entry point to the JAXB API. It provides an abstraction for managing the
@@ -178,7 +178,7 @@
 ====
 
 
-=== [[a326]]General Validation Processing
+=== General Validation Processing
 
 Three identifiable forms of validation exist
 within the JAXB architecture include:
@@ -399,7 +399,7 @@
 listener receives events when unmarshalling to a JAXB element or to JAXB
 mapped class.
 
-==== [[a379]]Unmarshalling Modes
+==== Unmarshalling Modes
 
 There exist numerous use cases requiring the
 ability to unmarshal invalid XML content. A flexible unmarshalling mode
@@ -434,7 +434,7 @@
 Interface], can implement either structural unmarshalling or flexible
 unmarshalling.
 
-==== [[a386]]Flexible Unmarshalling
+==== Flexible Unmarshalling
 
 To address the rigidness of structural
 unmarshalling, flexible unmarshalling mode is specified to enable
@@ -477,7 +477,7 @@
 link:jaxb.html#a3856[See Runtime Processing]”. Flexible
 unmarshalling is required for JAXB annotated classes.
 
-=== [[a397]]Marshalling
+=== Marshalling
 
 The `Marshaller` class is responsible for
 governing the process of serializing a Java content tree into XML data.
diff --git a/spec/src/main/asciidoc/ch05-java_representation.adoc b/spec/src/main/asciidoc/ch05-java_representation.adoc
index 96814b1..1de8a3c 100644
--- a/spec/src/main/asciidoc/ch05-java_representation.adoc
+++ b/spec/src/main/asciidoc/ch05-java_representation.adoc
@@ -29,7 +29,7 @@
 so all implementations of this specification perform the mapping in the
 same compatible manner.
 
-=== [[a482]]Java Package
+=== Java Package
 
 Just as the target XML namespace provides a
 naming context for the named type definitions, named model groups,
@@ -66,7 +66,7 @@
  public JAXBElement<T> createFoo(T elementValue);
 
 ** Dynamic instance factory allocator method signature:
- 
+
  public Object newInstance(Class javaContentInterface);
 
 ** Property setter/getter +
@@ -100,8 +100,8 @@
 ----
 package com.example.PO1;
 import jakarta.xml.bind.JAXBElement;
-public class PurchaseOrderType { .... };
-public Comment { String getValue(){...} void setValue(String){...} }
+public class PurchaseOrderType {...};
+public Comment { String getValue() {...} void setValue(String) {...} }
 ...
 public class ObjectFactory {
     PurchaseOrderType createPurchaseOrderType();
@@ -175,7 +175,7 @@
 properties of the Java content representation. Property representations
 are introduced in link:jaxb.html#a541[See Properties].
 
-==== [[a521]]Value Class
+==== Value Class
 
 A value class consists of:
 
@@ -233,7 +233,7 @@
 
  Bar.Foo createBarFoo() {...}
 
-==== [[a536]]Java Content Interface
+==== Java Content Interface
 
 JAXB 1.0 bound a complex type definition to a
 content interface. This binding is similar to the value class binding
@@ -250,7 +250,7 @@
 signatures for the set of properties it contains, while a value class
 contains method implementations.
 
-=== [[a541]]Properties
+=== Properties
 
 The schema compiler binds local schema
 components to _properties_ within a Java value class.
@@ -399,7 +399,7 @@
 `null` is the semantic equivalent of removing an optional element from
 the collection property.
 
-===== [[a572]]Indexed Property
+===== Indexed Property
 
 This property follows the indexed property
 design pattern for a multi-valued property from the JavaBean
@@ -502,7 +502,7 @@
 public int getItemLength();
 ----
 
-===== [[a595]]List Property
+===== List Property
 
 A list property `prop` with base type _Type_
 is realized by the method where `List`
@@ -582,7 +582,7 @@
 link:jaxb.html#a1783[See <property> Declaration]” describe how
 to use this attribute.
 
-==== [[a610]] `isSet` Property Modifier
+==== `isSet` Property Modifier
 
 This optional modifier augments a modifiable
 property to enable the manipulation of the property’s value as
@@ -668,7 +668,7 @@
 constraint rather than a type constraint, so it is checked during
 validation rather than during mutation.
 
-==== [[a630]]Element Property
+==== Element Property
 
 This property pattern enables the dynamic
 association of an element name for a JAXB property. Typically, the
@@ -711,7 +711,7 @@
 property modifier enables an application to determine if a property’s
 value is set or not.
 
-=== [[a642]]Java Element Representation
+=== Java Element Representation
 
 Based on rationale and criteria described in
 link:jaxb.html#a1023[See Element Declaration], the schema
@@ -734,7 +734,7 @@
 a schema-dervied Element class for an element declaration is described
 in link:jaxb.html#a657[See Java Element Class]”.
 
-==== [[a645]]Named Java Element instance
+==== Named Java Element instance
 
 Based on the normative binding details
 described in link:jaxb.html#a1040[See Bind to JAXBElement<T>
@@ -771,7 +771,7 @@
 }
 ----
 
-==== [[a657]]Java Element Class
+==== Java Element Class
 
 Based on criteria to be identified in
 link:jaxb.html#a1068[See Bind to Element Class], the schema
@@ -834,19 +834,19 @@
 Xml Schema’s type substitution capability is enabled by this property.
 ** whether the element’s content model is `nil`
 
-*_Example:_* +:
-Given a complex type definition with mixed content:
-
-[source,xml,indent=4,subs="+macros"]
-----
-<xs:complexType name="AComplexType" mixed="true">footnote:[Bind mixed
+*_Example:_* +
+Given a complex type definition with mixed contentfootnote:[Bind mixed
 content describes why <ASimpleElement> element is bound to a Java
-Element representation.]
-  <xs:sequence>
-    <xs:element name="ASimpleElement" type="xs:int"/>footnote:[Assume a
+Element representation.]footnote:[Assume a
 customization that binds this local element declaration to an element
 class. By default, this local declaration binds to a element instance
-factory returning JAXBElement<Integer>]
+factory returning JAXBElement<Integer>]:
+
+[source,xml,indent=4]
+----
+<xs:complexType name="AComplexType" mixed="true">
+  <xs:sequence>
+    <xs:element name="ASimpleElement" type="xs:int"/>
   </xs:sequence>
 </xs:complexType>
 ----
@@ -869,7 +869,7 @@
 }
 ----
 
-==== [[a680]]Java Element Representation Summary
+==== Java Element Representation Summary
 
 Element declaration binding evolved in JAXB
 v2.0 to support XML Schema type substitution. The following diagrams
diff --git a/spec/src/main/asciidoc/ch06-binding_xml_schema.adoc b/spec/src/main/asciidoc/ch06-binding_xml_schema.adoc
index 028941f..c2f1758 100644
--- a/spec/src/main/asciidoc/ch06-binding_xml_schema.adoc
+++ b/spec/src/main/asciidoc/ch06-binding_xml_schema.adoc
@@ -2,7 +2,7 @@
 // Copyright (c) 2020 Contributors to the Eclipse Foundation
 //
 
-== [[a694]]Binding XML Schema to Java Representations
+== Binding XML Schema to Java Representations
 
 This chapter describes binding of XML schema
 components to Java representations. The default binding is identified in
@@ -56,7 +56,7 @@
 annotations directly connected to the schema component being discussed
 are listed in its example.
 
-=== [[a702]]Simple Type Definition
+=== Simple Type Definition
 
 A schema component using a simple type
 definition typically binds to a Java property. Since there are different
@@ -96,7 +96,7 @@
 simple type definitions: atomic, list, union. The Java property
 attributes for each of these are described next.
 
-==== [[a715]]Atomic Datatype
+==== Atomic Datatype
 
 If an atomic datatype has been derived by
 restriction using an “enumeration” facet, the Java property attributes
@@ -146,7 +146,7 @@
 | *xsd:double* | *double*
 | *xsd:boolean* | *boolean*
 | *xsd:byte* | *byte*
-| *xsd:QName* | *javax.xml.namespace.QName* footnote:jaxp[JAXP 1.3 defines package
+| *xsd:QName* | *javax.xml.namespace.QName* footnote:jaxp[JAXP defines package
 `javax.xml.datatype` and `javax.xml.namespace`]
 | xsd:dateTime |javax.xml.datatype.XMLGregorianCalendar footnote:jaxp[]
 | *xsd:base64Binary* | *byte[]*
@@ -277,7 +277,7 @@
 pic.setFormat(new QName("http://e.org","jpeg"));
 ----
 
-===== [[a803]]Bind to a JAXB mapped class
+===== Bind to a JAXB mapped class
 
 By default, a named simple type definition is
 not bound to a Java class. This binding is only necessary to enable the
@@ -338,7 +338,7 @@
 }
 ----
 
-===== [[a820]]Annotations for standard XML datatypes
+===== Annotations for standard XML datatypes
 
 By default, a schema-derived JAXB property
 bound from one of the following standard XML datatypes is annotated with
@@ -355,7 +355,7 @@
 Note that JAXB schema customizations could
 override these default binding.
 
-==== [[a829]]Enum Type
+==== Enum Type
 
 The default mapping for a named atomic type
 that is derived by restriction with enumeration facet(s) and whose
@@ -397,7 +397,7 @@
 public enum USState {
     AK, AL;
     public String value() { return name(); }
-    public static USState fromValue(String value) { ... }
+    public static USState fromValue(String value) {...}
 };
 ----
 
@@ -518,7 +518,7 @@
     EnumConstantNameX(EnumConstantValueX);
     public EnumConstantValueType value() { return value; }
     public static enumType fromValue(EnumConstantValueType val)
-        { ... }
+        {...}
 
     final private EnumConstantValueType value;
     private enumType(EnumConstantValueType value) {
@@ -533,7 +533,7 @@
 public enum enumType {
     EnumConstantName1, ..., EnumConstantNameX;
     public Stringfootnote:[Note for this case, the _enumConstantValueType_ is always `java.lang.String`.] value() { return name(); }
-    public static enumType fromValue(String value) { ... }
+    public static enumType fromValue(String value) {...}
 }
 ----
 
@@ -583,14 +583,14 @@
     @XmlEnumValue("25") QUARTER(25);
 
     public int value() { return value; }
-    public static Coin fromValue(int value) { ... }
+    public static Coin fromValue(int value) {...}
 
     private final Integer value;
     Coin(int value) { this.value = value; }
 }
 ----
 
-==== [[a883]]List
+==== List
 
 A list simple type definition can only
 contain list items of atomic or union datatypes. The item type within
@@ -646,7 +646,7 @@
 either explicitly or by default mapping annotations, with the mapping
 annotation @XmlList, specified in Section 8.
 
-==== [[a899]]Union Property
+==== Union Property
 
 A union property _prop_ is used to bind a
 union simple type definition schema component. A union simple type
@@ -716,9 +716,9 @@
 specified in “Simple Type Definition Validation Rules,” Section 4.1.4
 [XSD PART2].
 
-=== [[a917]]Complex Type Definition
+=== Complex Type Definition
 
-==== [[a918]]Aggregation of Java Representation
+==== Aggregation of Java Representation
 
 A Java representation for the entire schema
 is built based on aggregation. A schema component aggregates the Java
@@ -728,13 +728,12 @@
 and referred to in different parts of the specification.
 
 The model assumes that there is a schema
-component _SP_ which references another schema component _SC_ . The Java
+component _SP_ which references another schema component _SC_. The Java
 representation of _SP_ needs to aggregate the Java representation of
-_SC_ . There are two possibilities:
+_SC_. There are two possibilities:
 
-*  _SC_ is bound to a property set.
-*  _SC_ is bound to a Java datatype or a Java
-value class.
+* _SC_ is bound to a property set.
+* _SC_ is bound to a Java datatype or a Java value class.
 
 Each of these is described below.
 
@@ -744,19 +743,18 @@
 datatype or a Java value class, then _SP_ aggregates _SC’s_ Java
 representation as a simple property defined by:
 
-*  _name:_ the name is the class/interface
+* *name*: the name is the class/interface
 name or the Java datatype or a name determined by SP. The name of the
 property is therefore defined by the schema component which is
 performing the aggregation.
-*  _base type:_ If SC is bound to a Java
+* *base type*: If SC is bound to a Java
 datatype, the base type is the Java datatype. If SC is bound to a Java
 value class, then the base type is the class name, including a dot
 separated list of class names within which SC is nested.
-*  _collection type:_ There is no collection
-type.
-*  _predicate:_ There is no predicate.
+* *collection type*: There is no collection type.
+* *predicate*: There is no predicate.
 
-===== [[a930]]Aggregation of Property Set
+===== Aggregation of Property Set
 
 If _SC_ is bound to a property set, then _SP_
 aggregates by adding _SC’s_ property set to its own property set.
@@ -767,93 +765,99 @@
 Name collisions can be resolved by using customization to change a
 property name.
 
-==== [[a933]]Java value class
+==== Java value class
 
-{empty}The binding of a complex type
+The binding of a complex type
 definition to a Java value class is based on the abstract model
 properties in link:jaxb.html#a4907[See Complex Type Definition
 Schema Component]. The Java value class must be defined as specified
 here, unless the ref attribute is specified on the _<jaxb:class>_
 customization, in which case the schema compiler will simply assume that
 the nominated class is already bound to this complex
-type.link:#a5372[21]
+type.footnote:[Note that
+link:jaxb.html#a1084[See Binding of an anonymous complex type
+definition] defines the name and package property for anonymous type
+definitions occurring within an element declaration.]
 
-*  _name:_ name is the Java identifier
-obtained by mapping the XML name _\{name}_ using the name mapping
+* *name*: name is the Java identifier
+obtained by mapping the XML name _{name}_ using the name mapping
 algorithm, specified in link:jaxb.html#a4656[See The Name to
 Identifier Mapping Algorithm]. For the handling of an anonymous complex
 type definition, see link:jaxb.html#a1084[See Binding of an
-anonymous complex type definition]” for how a _name_ value is derived
+anonymous complex type definition]” for how a *name* value is derived
 from its parent element declaration.
-*  _package:_
-* For a global complex type definition, the
+* *package*:
+** For a global complex type definition, the
 derived Java value class is generated into the Java package that
-represents the binding of \{target namespace}
-* For the value of _package_ for an anonymous
+represents the binding of _{target namespace}_
+** For the value of *package* for an anonymous
 complex type definition, see link:jaxb.html#a1084[See Binding of
 an anonymous complex type definition]".
-*  _outer class name:_
-* There is no outer class name for a global
+* *outer class name*:
+** There is no outer class name for a global
 complex type definition.
-* link:jaxb.html#a1084[See Binding of
+** link:jaxb.html#a1084[See Binding of
 an anonymous complex type definition]" defines how to derive this
 property from the element declaration that contains the anonymous
 complex type definition.
-*  _base class:_ A complex type definition
-can derive by restriction or extension (i.e. _\{derivation method}_ is
-either “extension” or “restriction”). However, since there is no concept
+* *base class*: A complex type definition
+can derive by restriction or extension (i.e. _{derivation method}_ is
+either "extension" or "restriction"). However, since there is no concept
 in Java programming similar to restriction, both are handled the same.
-If the _\{base type definition}_ is itself mapped to a Java value class
-(Ci2), then the base class must be Ci2. This must be realized as: +
-
- public class Ci1 extends Ci2 \{ +
-..... +
+If the _{base type definition}_ is itself mapped to a Java value class
+(Ci2), then the base class must be Ci2. This must be realized as:
++
+--
+[source,java]
+----
+public class Ci1 extends Ci2 {
+    .....
 }
-
+----
+--
++
 See example of derivation by extension at the
 end of this section.
 
-* abstract: The generated Java class is
-abstract when the complex type definition’s _\{abstract}_ property is
-_true_ .
-*  _property set:_ The Java representation of
+* *abstract*: The generated Java class is
+abstract when the complex type definition’s _{abstract}_ property is
+`true`.
+* *property set*: The Java representation of
 each of the following must be aggregated into Java value class’s
 property set (link:jaxb.html#a918[See Aggregation of Java
-Representation]”).
-* A subset of _\{attribute uses}_ is
+Representation]).
+** A subset of _{attribute uses}_ is
 constructed. The subset must include the schema attributes corresponding
-to the _<xs:attribute>_ children and the _\{attribute uses}_ of the
+to the `<xs:attribute>` children and the _{attribute uses}_ of the
 schema attribute groups resolved by the <ref> attribute. Every
-attribute’s Java representation (link:jaxb.html#a1252[See
-Attribute use]”) in the set of attributes computed above must be
-aggregated.
-* If the optional _\{attribute wildcard}_ is
+attribute’s Java representation (link:jaxb.html#a1252[See Attribute use])
+in the set of attributes computed above must be aggregated.
+** If the optional _{attribute wildcard}_ is
 present, either directly or indirectly, a property defined by
 link:jaxb.html#a1306[See Attribute Wildcard]“is generated.
-* The Java representation for _\{content
-type}_ must be aggregated.
-
+** The Java representation for _{content type}_ must be aggregated.
++
 For a “Complex Type Definition with complex
-content,” the Java representation for _\{content type}_ is specified in
+content,” the Java representation for _{content type}_ is specified in
 link:jaxb.html#a1332[See Content Model - Particle, Model Group,
-Wildcard].” +
+Wildcard].”
++
 For a complex type definition which is a “Simple Type Definition with
-simple content,” the Java representation for _\{content type}_ is
+simple content,” the Java representation for _{content type}_ is
 specified in link:jaxb.html#a973[See Simple Content Binding].”
-
-* If a complex type derives by restriction,
+** If a complex type derives by restriction,
 there is no requirement that Java properties representing the attributes
 or elements removed by the restriction to be disabled. This is because
 (as noted earlier), derivation by restriction is handled the same as
 derivation by extension.
 * When the complex type definition’s
-_\{abstract}_ property is _false_ , a factory method is generated in the
-package’s _ObjectFactory_ class introduced in
-link:jaxb.html#a482[See Java Package].” The factory method
+_{abstract}_ property is `false`, a factory method is generated in the
+package’s `ObjectFactory` class introduced in
+link:jaxb.html#a482[See Java Package]. The factory method
 returns the type of the Java value class. The name of the factory method
 is generated by concatenating the following components:
-* The string constant _create_ .
-* The _name_ of the Java value class.
+** The string constant `create`.
+** The _name_ of the Java value class.
 
 The schema-derived Java value class is
 annotated, either explicitly or by default mapping annotations, with the
@@ -866,163 +870,166 @@
 .[[a956]]Annotate Java value class with @XmlType element-value pairs
 [width="100%",cols="50%,50%",options="header",]
 |===
-|@XmlType element
-|@XmlType value
-|name |complex
-type definition's \{name}
-
-|namespace
-|\{target namespace}
-
-|propOrder a|
-When \{content type} is element-only
-\{content model} and top-level \{compositor} is xs:sequence, ordered
+| @XmlType element | @XmlType value
+| name | complex type definition's {name}
+| namespace | {target namespace}
+| propOrder a | When \{content type} is element-only
+{content model} and top-level {compositor} is xs:sequence, ordered
 list of JAXB property names representing order of xs:elements in
-\{content model}.
-
+{content model}.
  +
+
 All other cases do not need to set propOrder.
 
 |===
 
-*_Example:_* + Complex Type: Derivation by Extension
+*_Example:_* Complex Type: Derivation by Extension
 
 XML Schema Fragment (from XSD PART 0 primer):
 
-<xs:complexType name="Address"> +
-<xs:sequence> +
-<xs:element name="name" type="xs:string"/> +
-<xs:element name="street" type="xs:string"/> +
-<xs:element name="city" type="xs:string"/> +
-</xs:sequence> +
+[source,xml,indent=4]
+----
+<xs:complexType name="Address">
+  <xs:sequence>
+    <xs:element name="name" type="xs:string"/>
+    <xs:element name="street" type="xs:string"/>
+    <xs:element name="city" type="xs:string"/>
+  </xs:sequence>
 </xs:complexType>
-
-<xs:complexType name="USAddress"> +
-<xs:complexContent> +
-<xs:extension base="ipo:Address"> +
-<xs:sequence> +
-<xs:element name="state" type="xs:string"/> +
-<xs:element name="zip" type="xs:integer"/> +
-</xs:sequence> +
-</xs:extension> +
-</xs:complexContent> +
+<xs:complexType name="USAddress">
+  <xs:complexContent>
+    <xs:extension base="ipo:Address">
+      <xs:sequence>
+        <xs:element name="state" type="xs:string"/>
+        <xs:element name="zip" type="xs:integer"/>
+      </xs:sequence>
+    </xs:extension>
+  </xs:complexContent>
 </xs:complexType>
+----
 
 Default Java binding:
 
-public class Address \{ +
-String getName() \{...} +
-void setName(String) \{...} +
-String getStreet() \{...} +
-void setStreet(String) \{...} +
-void getCity() \{...} +
-void setCity(String) \{...} +
+[source,java,indent=4]
+----
+public class Address {
+    String getName() {...}
+    void setName(String) {...}
+    String getStreet() {...}
+    void setStreet(String) {...}
+    void getCity() {...}
+    void setCity(String) {...}
 }
 
- +
 import java.math.BigInteger;
 
-public class USAdress extends Address \{ +
-String getState() \{...} +
-void setState(String) \{...}\{ +
-BigInteger getZip() \{...} +
-void setZip(BigInteger) \{...} +
-} +
- +
-class ObjectFactory \{ +
-Address createAddress() \{...} +
-USAddress createUSAddress() \{...} +
+public class USAdress extends Address {
+    String getState() {...}
+    void setState(String) {...} {
+    BigInteger getZip() {...}
+    void setZip(BigInteger) {...}
 }
 
-===== [[a973]]Simple Content Binding
+class ObjectFactory {
+    Address createAddress() {...}
+    USAddress createUSAddress() {...}
+}
+----
+
+===== Simple Content Binding
 
 ====== Binding to Property
 
 By default, a complex type definition with
 simple content is bound to a Java property defined by:
 
-*  _name:_ The property name must be “
-_value_ ”.
-*  _base type, predicate, collection type:_
+* *name*: The property name must be `value`.
+* *base type, predicate, collection type*:
 As specified in [XSD Part 1], when a complex type has simple content,
-the content type (\{content type}) is always a simple type schema
+the content type (_{content type}_) is always a simple type schema
 component. And a simple type component always maps to a Java datatype
 (link:jaxb.html#a702[See Simple Type Definition]”). Values of
 the following three properties are copied from that Java type:
-* base type
-* predicate
-* collection type
+** base type
+** predicate
+** collection type
 
 The schema-derived JAXB property representing
 simple content is annotated, either explicitly or by default mapping
 annotations, with the mapping annotation @XmlValue, specified in Section
 link:jaxb.html#a3331[See @XmlValue].
 
-*_Example:_* + Simple Content: Binding To Property
+*_Example:_* Simple Content: Binding To Property
 
 XML Schema fragment:
-
-<xs:complexType name="internationalPrice"> +
-<xs:simpleContent> +
-<xs:extension base="xs:decimal"> +
-<xs:attribute name="currency" type="xs:string"/> +
-</xs:extension> +
-</xs:simpleContent> +
+[source,xml,indent=4]
+----
+<xs:complexType name="internationalPrice">
+  <xs:simpleContent>
+    <xs:extension base="xs:decimal">
+      <xs:attribute name="currency" type="xs:string"/>
+    </xs:extension>
+  </xs:simpleContent>
 </xs:complexType>
+----
 
 Default Java binding:
 
-class InternationalPrice \{ +
-/** Java property for simple content */ +
-@XmlValue +
-java.math.BigDecimal getValue() \{...} +
-void setValue(java.math.BigDecimal value) \{...} +
- +
-/** Java property for attribute*/ +
-String getCurrency() \{...} +
-void setCurrency(String) \{...} +
+[source,java,indent=4]
+----
+class InternationalPrice {
+    /** Java property for simple content */
+    @XmlValue
+    java.math.BigDecimal getValue() {...}
+    void setValue(java.math.BigDecimal value) {...}
+
+    /** Java property for attribute */
+    String getCurrency() {...}
+    void setCurrency(String) {...}
 }
+----
 
 ==== xsd:anyType
 
- _xsd:anyType_ is the root of the type
+`xsd:anyType` is the root of the type
 definition hierarchy for a schema. All complex type definitions in a
-schema implicitly derive from _xsd:anyType_ . Given that the JAXB 2.0
+schema implicitly derive from `xsd:anyType`. Given that the JAXB
 architecture does not define a common base class for all JAXB class
 bindings of complex type definitions, the only possible binding property
-base type binding for _xsd:anyType_ is to _java.lang.Object_ . This
+base type binding for `xsd:anyType` is to `java.lang.Object`. This
 binding enables all possible type and element substitutions for an
-element of type _xsd:anyType_ .
+element of type `xsd:anyType`.
 
 .Binding of element with type _xsd:anyType_
-
- +
-<xs:element name="anyContent/> <!-- _@type_ defaults to _xs:anyType_
---> +
-<xs:complexType name="base"> +
-<xs:sequence>
-
- <xs:element ref="anyContent/> +
-<xs:element name="anyContentAgain" type="xs:anyType"/> +
-</xs:sequence> +
-</xs:complexType> +
- +
-public class Base \{ +
-void setAnyContent(Object obj); +
-Object getAnyContent(); +
-void setAnyContentAgain(Object obj); +
-Object getAnyContentAgain(); +
+[source,xml,indent=4]
+----
+<xs:element name="anyContent/> <!-- @type defaults to xs:anyType -->
+<xs:complexType name="base">
+  <xs:sequence>
+    <xs:element ref="anyContent/>
+    <xs:element name="anyContentAgain" type="xs:anyType"/>
+  </xs:sequence>
+</xs:complexType>
+----
+[source,java,indent=4]
+----
+public class Base {
+    void setAnyContent(Object obj);
+    Object getAnyContent();
+    void setAnyContentAgain(Object obj);
+    Object getAnyContentAgain();
 }
+----
 
 A schema author defines an element to be of
-type _xs:anyType_ to defer constraining an element to a particular type
-to the xml document author. Through the use of _xsi:type_ attribute or
+type `xs:anyType` to defer constraining an element to a particular type
+to the xml document author. Through the use of `xsi:type` attribute or
 element substitution, an xml document author provides constraints for an
-element defined as _xs:anyType_ . The JAXB unmarshaller is able to
-unmarshal a schema defined _xsd:anyType_ element that has been
+element defined as `xs:anyType`. The JAXB unmarshaller is able to
+unmarshal a schema defined `xsd:anyType` element that has been
 constrained within the xml document to an easy to access JAXB mapped
 class. However, when the xml document does not constrain the
-_xs:anyType_ element, JAXB unmarshals the unconstrained content to an
+`xs:anyType` element, JAXB unmarshals the unconstrained content to an
 element node instance of a supported DOM API.
 
 Type substitution is covered in more detail
@@ -1036,16 +1043,16 @@
 
 There is no default mapping for an attribute
 group definition. When an attribute group is referenced, each attribute
-in the attribute group definition becomes a part of the [attribute uses]
+in the attribute group definition becomes a part of the _[attribute uses]_
 property of the referencing complex type definition. Each attribute is
 mapped to a Java property as described in
 link:jaxb.html#a1252[See Attribute use]“. If the attribute group
 definition contains an attribute wildcard, denoted by the
-_xs:anyAttribute_ element, then the referencing complex type definition
+`xs:anyAttribute` element, then the referencing complex type definition
 will contain a property providing access to wildcard attributes as
 described in link:jaxb.html#a1306[See Attribute Wildcard]“.
 
-=== [[a996]]Model Group Definition
+=== Model Group Definition
 
 When a named model group definition is
 referenced, the JAXB property set representing its content model is
@@ -1070,7 +1077,7 @@
 link:jaxb.html#a1012[See Deriving Class Names for Named Model
 Group Descendants]."
 
-To meet the JAXB 2.0 goal of predictable
+To meet the JAXB goal of predictable
 unmarshalling of invalid XML content, the JAXB 1.0 customization for
 binding a model group to a JAXB mapped class is no longer supported.
 link:jaxb.html#a386[See Flexible Unmarshalling]“details the
@@ -1079,7 +1086,7 @@
 ==== Bind to a set of properties
 
 A non-repeating reference to a model group
-definition, when the particle referencing the group has _\{max occurs}_
+definition, when the particle referencing the group has _{max occurs}_
 equal to one, results in a set of content properties being generated to
 represent the content model. link:jaxb.html#a1332[See Content
 Model - Particle, Model Group, Wildcard]” describes how a content model
@@ -1093,39 +1100,44 @@
 group]“.
 
 *_Example:_* +
-
 Schema fragment contains a particle that
-references the model group definition has a _\{maxOccurs}_ value greater
+references the model group definition has a _{maxOccurs}_ value greater
 than one.
 
-<xs:group name="AModelGroup"> +
-<xs:choice> +
-<xs:element name="A" type="xs:int"/> +
-<xs:element name="B" type="xs:float"/> +
-</xs:choice> +
-</xs:group> +
- +
-<xs:complexType name="foo"> +
-<xs:sequence> +
-<xs:group ref="AModelGroup" maxOccurs="unbounded"/> +
-<xs:element name="C" type="xs:float"/> +
-</xs:sequence> +
+[source,xml,indent=4]
+----
+<xs:group name="AModelGroup">
+  <xs:choice>
+    <xs:element name="A" type="xs:int"/>
+    <xs:element name="B" type="xs:float"/>
+  </xs:choice>
+</xs:group>
+
+<xs:complexType name="foo">
+  <xs:sequence>
+    <xs:group ref="AModelGroup" maxOccurs="unbounded"/>
+    <xs:element name="C" type="xs:float"/>
+  </xs:sequence>
 </xs:complexType>
+----
 
 Derived Java representation:
 
- public class Foo \{ +
-/** A valid general content property of AModelGroup content +
-model.*/ +
-@XmlElements(\{@XmlElement(type=Integer.class, name="A"), +
-@XmlElement(type=Float.class, name="B")}) +
-java.util.List<Object> getAModelGroup() \{...} +
- +
-float getC() \{...} +
-void setC(float value) \{...} +
-};
+[source,java,indent=4]
+----
+public class Foo {
+    /** A valid general content property of AModelGroup content model.*/
+    @XmlElements({
+        @XmlElement(type=Integer.class, name="A"),
+        @XmlElement(type=Float.class, name="B")})
+    java.util.List<Object> getAModelGroup() {...}
 
-==== [[a1012]]Deriving Class Names for Named Model Group Descendants
+    float getC() {...}
+    void setC(float value) {...}
+};
+----
+
+==== Deriving Class Names for Named Model Group Descendants
 
 When a model group definition’s content model
 contains XML Schema components that need to be bound to a Java class or
@@ -1143,23 +1155,23 @@
 interface or typesafe enum class are bound as specified with the
 following naming exceptions:
 
-*  _package_ : The element class, Java value
+* *package*: The element class, Java value
 class or typesafe enum class is bound in the Java package that
 represents the target namespace containing the model group definition.
-*  _name_ : The name of the interface or
+* *name*: The name of the interface or
 class is generated as previously specified with one additional step to
 promote uniqueness between interfaces/classes promoted from a model
 group definition to be bound to a top-level class within a Java package.
 By default, a prefix for the interface/class name is computed from the
-model group definition’s _\{name}_ using the XML name to Java identifier
-algorithm.If the schema customization _[jaxb:globalBindings]_ @
-_localScoping_ has a value of _toplevel_ , then a prefix is not
-generated from the model group definition’s _\{name}_ .
+model group definition’s _{name}_ using the XML name to Java identifier
+algorithm. If the schema customization *[jaxb:globalBindings]*
+_@localScoping_ has a value of _toplevel_, then a prefix is not
+generated from the model group definition’s _{name}_.
 
 For example, given a model group definition
 named _Foo_ containing an element declaration named _bar_ with an
 anonymous complex type definition, the anonymous complex type definition
-is bound to a Java value class with the name _FooBar_ . The following
+is bound to a Java value class with the name _FooBar_. The following
 figure illustrates this example.
 
 .Default binding for anonymous type def within a model group definition.
@@ -1169,9 +1181,9 @@
 Note that even customization specified Java
 value class, interface or typesafe enum class names are prepended with
 the model group definition’s name. Thus, if a model group definition
-named _Foo_ contains an anonymous simple type definition with a typesafe
-enum class customization name of _Colors,_ the enum type name is
-_FooColors_ .
+named `Foo` contains an anonymous simple type definition with a typesafe
+enum class customization name of `Colors`, the enum type name is
+`FooColors`.
 
 === Attribute Declaration
 
@@ -1180,7 +1192,45 @@
 link:jaxb.html#a1252[See Attribute use],” from a complex type
 definition.
 
-=== [[a1023]]Element Declaration
+==== Bind global attribute to a QName Constant
+
+To assist the dynamic access to schema-defined global attributes
+described in Section 6.9, “Attribute Wildcard", a global attribute
+declaration is bound to a JAXB QName constant, derived in terms of
+the properties of the “Attribute Declaration Schema Component”
+as follows:
+
+* A _package name_, which is either computed from the attribute
+declaration _{target namespace}_ or specified by binding
+customization of the target namespace or a specified package
+name for components that are scoped to no target namespace.
+* The _name_ of the generated constant is derived from
+the element declaration _{name}_ using the XML Name to Java
+identifier mapping algorithm for a constant name or
+specified by a binding customization of the attribute’s name.
+* The QName constant is a JAXB constant property in class _ObjectFactory_.
+* The QName constant value is initialized using the attribute declaration’s
+_{target namespace}_ and _{name}_.
+
+.Bind global attribute declaration to a JAXB QName constant
+[source,xml,indent=4]
+----
+<xs:schema targetNamespace="http://e.org" xmlns:a="http://e.org">
+  <xs:attribute name="isOpen" type="xs:boolean"/>
+</xs:schema>
+----
+[source,java,indent=4]
+----
+package org.e;
+public class ObjectFactory {
+    /** <xs:attribute name="{http://e.org}isOpen" type="xs:boolean"/> */
+    public static final javax.xml.namespace.QName IS_OPEN =
+                new QName("http://e.org", "isOpen");
+...
+}
+----
+
+=== Element Declaration
 
 This section describes the binding of an XML
 element declaration to a Java representation. For a description of how
@@ -1193,16 +1243,13 @@
 An XML element declaration is composed of the
 following key components:
 
-* its qualified name is \{target namespace}
-and \{name}
-* its value is an instance of the Java class
-binding of its \{type definition}
-* whether the element’s content is
-_\{nillable}_
+* its qualified name is _{target namespace}_ and _{name}_
+* its value is an instance of the Java class binding of its _{type definition}_
+* whether the element’s content is _{nillable}_
 
 Typically, an instance of
-_jakarta.xml.bind.JAXBElement<T>_ , returned by an element factory method,
-__ represents an element declaration’s key components. An instance of a
+`jakarta.xml.bind.JAXBElement<T>`, returned by an element factory method,
+represents an element declaration’s key components. An instance of a
 Java value class or content interface represents only the value of an
 element. Commonly in JAXB binding, the Java representation of XML
 content enables one to manipulate just the value of an XML element, not
@@ -1216,27 +1263,31 @@
 *_Example:_* +
 
 Given the XML Schema fragment:
-
-<xs:complexType name="chair_kind"> +
-<xs:sequence> +
-<xs:element name="has_arm_rest" type="xs:boolean"/> +
-</xs:sequence> +
-</xs:complexType> +
+[source,xml,indent=4]
+----
+<xs:complexType name="chair_kind">
+  <xs:sequence>
+    <xs:element name="has_arm_rest" type="xs:boolean"/>
+  </xs:sequence>
+</xs:complexType>
+----
 
 Schema-derived Java value class:
-
-public class ChairKind \{ +
-boolean isHasArmRest() \{...} +
-void setHasArmRest(boolean value) \{...} +
+[source,java,indent=4]
+----
+public class ChairKind {
+    boolean isHasArmRest() {...}
+    void setHasArmRest(boolean value) {...}
 }
+----
 
-A user of the Java value class _ChairKind_
+A user of the Java value class `ChairKind`
 never has to create a Java instance that both has the value of local
-element _has_arm_rest_ and knows that its XML element name is
-_has_arm_rest_ . The user only provides the value of the element to the
-content-property _hasArmRest_ . A JAXB implementation associates the
-content-property _hasArmRest_ with XML element name _has_arm_rest_ when
-marshalling an instance of _ChairKind_ .
+element `has_arm_rest` and knows that its XML element name is
+`has_arm_rest`. The user only provides the value of the element to the
+content-property `hasArmRest`. A JAXB implementation associates the
+content-property `hasArmRest` with XML element name `has_arm_rest` when
+marshalling an instance of `ChairKind`.
 
 The next schema/derived Java code example
 illustrates when XML element information can not be inferred by the
@@ -1244,84 +1295,92 @@
 relies on binding described in link:jaxb.html#a1384[See Bind
 wildcard schema component].”
 
-*_Example:_* +
+*_Example:_*
 
-<xs:complexType name="chair_kind"> +
-<xs:sequence> +
-<xs:any/> +
-</xs:sequence> +
-</xs:complexType> +
- +
-public class ChairKind \{ +
-@XmlAnyElement(lax="true") +
-java.lang.Object getAny() \{...} +
-void setAny(java.lang.Object elementOrValue) \{...} +
+[source,xml,indent=4]
+----
+<xs:complexType name="chair_kind">
+  <xs:sequence>
+    <xs:any/>
+  </xs:sequence>
+</xs:complexType>
+----
+
+[source,java,indent=4]
+----
+public class ChairKind {
+    @XmlAnyElement(lax="true")
+    java.lang.Object getAny() {...}
+    void setAny(java.lang.Object elementOrValue) {...}
 }
+----
 
 For this example, the user can provide an
-Element instance to the _any_ content-property that contains both the
+Element instance to the `any` content-property that contains both the
 value of an XML element and the XML element name since the XML element
-name could not be statically associated with the content-property _any_
+name could not be statically associated with the content-property `any`
 when the Java representation was derived from its XML Schema
 representation. The XML element information is dynamically provided by
 the application for this case. link:jaxb.html#a1332[See Content
 Model - Particle, Model Group, Wildcard] cover additional circumstances
 when one can use JAXB elements.
 
-==== [[a1040]]Bind to _JAXBElement<T>_ Instance
+==== Bind to _JAXBElement<T>_ Instance
 
 The characteristics of the generated
-ObjectFactory element factory method that returns an _JAXBElement<T>_
+ObjectFactory element factory method that returns an `JAXBElement<T>`
 instance are derived in terms of the properties of the
 link:jaxb.html#a4937[See Element Declaration Schema Component]
 as follows:
 
 * The element factory method is generated
-into the _ObjectFactory_ class in the Java package that represents the
-binding of the element declaration’s \{target namespace}.
+into the `ObjectFactory` class in the Java package that represents the
+binding of the element declaration’s _{target namespace}_.
 * The element factory method returns an
-instance of _jakarta.xml.bind.JAXBElement<T>_ , where _T_ is the Java
-value class representing the _\{type definition}_ of the element
+instance of `jakarta.xml.bind.JAXBElement<T>`, where `T` is the Java
+value class representing the _{type definition}_ of the element
 declaration. The factory method sets the element name of the returned
 instance to the element declaration’s fully qualified name.
 * The element factory method has a single
-parameter that is an instance of type _T_ , where T is the Java value
-class representing the _\{type definition}_ of the element declaration.
+parameter that is an instance of type `T`, where `T` is the Java value
+class representing the _{type definition}_ of the element declaration.
 * The name of the factory method is generated
 by concatenating the following components:
-* The string constant _create_ .
-* By default, if the element declaration is
+** The string constant `create`.
+** By default, if the element declaration is
 nested within another XML Schema component, then the concatenation of
 all outer Java class names representing those XML Schema components. If
-the schema customization _[jaxb:globalBindings]_ @ _localScoping_ has a
+the schema customization *[jaxb:globalBindings]*  _@localScoping_ has a
 value of toplevel, skip this step.
-* A name that is generated from the element
-declaration’s _\{name}_ using the XML Name to Java identifier name
+** A name that is generated from the element
+declaration's _{name}_ using the XML Name to Java identifier name
 mapping algorithm specified in link:jaxb.html#a4656[See The Name
 to Identifier Mapping Algorithm].
-* The _JAXBElement<T>_ property for nil __
-test whether an element’s content model is _xsi:nil="true"_ .
+* The `JAXBElement<T>` property for nil
+test whether an element’s content model is `xsi:nil="true"`.
 
 For example, an element declaration named
-_Foo_ __ with a type of __ _xs:int_ __ that is nested within the content
-model of complex type definition _Bar_ would have the following factory
-method generated in the containing Java package’s _ObjectFactory_ class:
+`Foo` with a type of `xs:int` that is nested within the content
+model of complex type definition `Bar` would have the following factory
+method generated in the containing Java package's `ObjectFactory` class:
 
-JAXBElement<Integer> createBarFoo(Integer
-value) \{...}
+[source,java,indent=8]
+----
+JAXBElement<Integer> createBarFoo(Integer value) {...}
+----
 
 Default binding rules require an element
 declaration to be bound to element factory method under the following
 conditions:
 
 * All non-abstract, named element
-declarations with global \{scope} are bound to an element factory method
-that returns an _JAXBElement<T>_ instance. The rationale is that any
+declarations with global _{scope}_ are bound to an element factory method
+that returns an `JAXBElement<T>` instance. The rationale is that any
 global element declaration can occur within a wildcard context and one
 might want to provide element instances, not instances of the element’s
 type, the element’s value, for this case.
 * All local element declarations, having a
-\{scope} of a complex type definition, occurring within content that is
+_{scope}_ of a complex type definition, occurring within content that is
 mapped to a general content property of JAXB elements must have an
 element factory method generated. General content property is specified
 in link:jaxb.html#a1344[See General content property]” An
@@ -1331,8 +1390,8 @@
 
 The schema-derived element factory method is
 annotated, either explicitly or by default mapping annotations, with the
-mapping annotation _@XmlElementDecl_ , specified in Section 8. The
-_@XmlElementDecl_ annotation elements are derived in terms of the
+mapping annotation `@XmlElementDecl`, specified in Section 8. The
+`@XmlElementDecl` annotation elements are derived in terms of the
 abstract model properties for an element declaration summarized in
 link:jaxb.html#a4937[See Element Declaration Schema Component]
 as follows:
@@ -1340,29 +1399,18 @@
 .Annotate element instance factory with @XmlElementDecl element-value pairs.
 [width="100%",cols="50%,50%",options="header",]
 |===
-|@XmlElementDecl element
-|@XmlElementDecl value
-|name |element
-declaration’s _\{name}_
-
-|namespace |
-_\{target namespace}_
-
-|scope |If
-_\{scope}_ is _global_ , _JAXBElement.GlobalScope.class_ . else the JAXB
-Java value class representing the _\{scope}_ ing complex type
-definition.
-
-|substitutionHeadName
-|If optional _\{substitution group
-affiliation}_ exists, its local name.
-
-|substitutionHeadNamespace
-|If optional _\{substitution group
-affiliation}_ exists, its namespace.
+| @XmlElementDecl element |@XmlElementDecl value
+| name | element declaration's _{name}_
+| namespace | _{target namespace}_
+| scope | If _{scope}_ is _global_, `JAXBElement.GlobalScope.class` else the JAXB
+Java value class representing the __{scope}__ing complex type definition.
+| substitutionHeadName | If optional _{substitution group affiliation}_ exists,
+its local name.
+| substitutionHeadNamespace | If optional _{substitution group affiliation}_ exists,
+its namespace.
 |===
 
-The element declaration’s _\{type}_ can
+The element declaration’s _{type}_ can
 result in additional JAXB annotations being generated on the element
 instance factory. For more details, see link:jaxb.html#a820[See
 Annotations for standard XML datatypes]“and @XmlList in
@@ -1372,7 +1420,7 @@
 containing the @XmlElementDecl annotations is annotated with
 @XmlRegistry annotation.
 
-==== [[a1068]]Bind to Element Class
+==== Bind to Element Class
 
 link:jaxb.html#a1698[See <class>
 Declaration]“customization enables the binding of an element declaration
@@ -1381,58 +1429,53 @@
 of the properties of the link:jaxb.html#a4937[See Element
 Declaration Schema Component] as follows:
 
-* The name of the generated Java Element
-class is derived from the element declaration \{name} using the XML Name
+* The _name_ of the generated Java Element
+class is derived from the element declaration _{name}_ using the XML Name
 to Java identifier mapping algorithm for class names.
 * Each generated Element class must extend
-the Java value class _jakarta.xml.bind.JAXBElement_ <T>. The next bullet
+the Java value class `jakarta.xml.bind.JAXBElement <T>`. The next bullet
 specifies the schema-derived Java class name to use for generic
-parameter _T_ .
-* If the element declaration’s \{type
-definition} is
-* Anonymous
-
-Generic parameter _T_ from the second bullet
+parameter `T`.
+* If the element declaration’s _{type definition}_ is
+** Anonymous
++
+Generic parameter `T` from the second bullet
 is set to the schema-derived class represented the anonymous type
 definition generated as specified in Section 6.7.3.
-
-* Named
-
-Generic parameter T from the second bullet is
-set to the Java class representing the element declaration’s \{type
-definition}.
-
-The _ObjectFactory_ method to create an
-instance of name has a single parameter that is an instance of type _T_
-. By default, the name of the ObjectFactory method is derived by
-concatenating outerClassNames and name. When schema customization,
-_[jaxb:globalBindings]_ _@localScoping,_ specified in Section
-_link:jaxb.html#a1582[See Usage],_ has a value of _toplevel_ ,
+** Named
++
+Generic parameter `T` from the second bullet is
+set to the Java class representing the element declaration’s
+_{type definition}_.
+* The `ObjectFactory` method to create an
+instance of _name_ has a single parameter that is an instance of type `T`.
+By default, the name of the ObjectFactory method is derived by
+concatenating _outerClassNames_ and _name_. When schema customization,
+*[jaxb:globalBindings]* _@localScoping,_ specified in Section
+_link:jaxb.html#a1582[See Usage],_ has a value of _toplevel_,
 then the outer Classnames are ommitted from the factory method name.
-
-* If \{scope} is
-*  _Global:_ The derived Element class is
-generated into the Java package that represents the binding of \{target
-namespace}.
-*  _A Complex Type Definition:_ By default,
+* If _{scope}_ is
+** *Global*: The derived Element class is
+generated into the Java package that represents the binding of
+_{target namespace}_.
+** *A Complex Type Definition*: By default,
 the derived Element class is generated within the Java value class
-represented by the complex type definition value of \{scope}. When
+represented by the complex type definition value of _{scope}_. When
 _@localScoping_ is _toplevel_ , the derived element class is generated
 as a toplevel class.
-* The property for nil __ test whether
-element’s content model is _xsi:nil="true"_ .
-* Optional \{value constraint} property with
-pair of _default_ or _fixed_ and a value. +
+* The property for nil test whether element’s content model is `xsi:nil="true"`.
+* Optional _{value constraint}_ property with
+pair of `default` or `fixed` and a value. +
 If a default or fixed value is specified, the data binding system must
 substitute the default or fixed value if an empty tag for the element
 declaration occurs in the XML content.
 
 A global binding customization,
-_@generateElementClass,_ specified in link:jaxb.html#a1580[See
+*@generateElementClass*, specified in link:jaxb.html#a1580[See
 <globalBindings> Declaration]“enables this binding over the default
 binding specified in the previous subsection.
 
-==== [[a1084]]Binding of an anonymous complex type definition
+==== Binding of an anonymous complex type definition
 
 An anonymous complex type definition is bound
 to a generated schema-derived Java value class by default.
@@ -1442,53 +1485,52 @@
 link:jaxb.html#a4937[See Element Declaration Schema Component]
 as follows:
 
-* The name of the generated Java value class
-is derived from the element declaration \{name} using the XML Name to
-Java identifier
+* The _name_ of the generated Java value class
+is derived from the element declaration _{name}_ using the XML Name to
+Java identifier.
 * The _package_ of the generated Java value
 class is the same as the package derived from the element declaration’s
-_\{target namespace}_ .
+_{target namespace}_.
 * The _outer class names_ of the generated
-Java value class is determined by the element declaration’s _\{scope}._
-If _\{scope}_ is:
-* Global +
+Java value class is determined by the element declaration’s _{scope}_.
+If _{scope}_ is:
+** Global +
 There is no outer class name.
-* A Complex Type Definition +
+** A Complex Type Definition +
 By default, the derived Java value class is generated nested within the
 Java value class represented by the complex type definition value of
-\{scope}. The derived Java value is not generated nested when schema
-customization _[globalBindings]_ has attribute _@localScoping_ with a
-value of _toplevel_ _._
-*  _base class:_ Same as defined in
+_{scope}_. The derived Java value is not generated nested when schema
+customization *[globalBindings]* has attribute _@localScoping_ with a
+value of _toplevel_.
+* _base class_: Same as defined in
 link:jaxb.html#a933[See Java value class]“.
-*  _property set:_ As defined in
+*  _property set_: As defined in
 link:jaxb.html#a933[See Java value class]“.
 * A type factory method is generated in the
-package’s _ObjectFactory_ class introduced in
+package’s `ObjectFactory` class introduced in
 link:jaxb.html#a482[See Java Package].” The factory method
 returns the type of the Java value class. The name of the factory method
 is generated by concatenating the following components:
-* The string constant _create_ .
-* If the element declaration containing the
+** The string constant `create`.
+** If the element declaration containing the
 anonymous complex type definition is nested within another complex type
 definition representing a value class and [globalBindings] @localScoping
 has a value of _nested_ , then the concatenation of all outer Java class
-names. This step is skipped when @localScoping has a value of _toplevel_
-.
-* The _name_ of the Java value class.
+names. This step is skipped when @localScoping has a value of _toplevel_.
+** The _name_ of the Java value class.
 
 The schema-derived value class is annotated
-with the mapping annotation _@XmlType_ , specified in Section
-link:jaxb.html#a2578[See @XmlType]. The _@XmlType_ annotation
+with the mapping annotation `@XmlType`, specified in Section
+link:jaxb.html#a2578[See @XmlType]. The `@XmlType` annotation
 elements are set as described in link:jaxb.html#a956[See
 Annotate Java value class with @XmlType element-value pairs] with one
-exception: _@XmlType.name()_ is set to the empty string.
+exception: `@XmlType.name()` is set to the empty string.
 
 As long as the element declaration is not one
 of the exception cases specified in link:jaxb.html#a1113[See
 Bind Element Declaration to JAXBElement]", the schema-derived value
-class is annotated with the mapping annotation _@XmlRootElement_
-specified in Section 8. The _@XmlRootElement_ annotation elements are
+class is annotated with the mapping annotation `@XmlRootElement`
+specified in Section 8. The `@XmlRootElement` annotation elements are
 derived in terms of the abstract model properties for the referenced
 global element declaration summarized in
 link:jaxb.html#a4937[See Element Declaration Schema Component]
@@ -1497,53 +1539,58 @@
 .Annotate JAXB Mapped Class with @XmlRootElement element-value pairs
 [width="100%",cols="50%,50%",options="header",]
 |===
-|@XmlRootElement element
-|@XmlRootElement value
-|namespace a|
-When element declaration _\{target
-namespace}_ is absent, +
+| @XmlRootElement element | @XmlRootElement value
+|namespace a| When element declaration _{target namespace}_ is absent, +
 (i.e. unqualified local element declaration), @XmlElement.namespace() is
 not set. +
 
 Otherwise, set @XmlElement.namespace() to
-value of _\{target namespace}_ . (either a qualified local element
+value of _{target namespace}_. (either a qualified local element
 declaration or a reference to a global element)
 
 Note: same result could be achieved with
 package level annotation of @XmlSchema and not setting
 @XmlElement.namespace.
-
-|name |element
-declaration _\{name}_
+| name | element declaration _{name}_
 |===
 
-*_Example:_* +
+*_Example:_*
 
 Given XML Schema fragment:
-
-<xs:element name="foo"> +
-<xs:complexType> +
-<xs:sequence> +
-<xs:element name="bar" type="xs:int"/> +
-</xs:sequence> +
-</xs:complexType> +
+[source,xml,indent=4]
+----
+<xs:element name="foo">
+  <xs:complexType>
+    <xs:sequence>
+      <xs:element name="bar" type="xs:int"/>
+    </xs:sequence>
+  </xs:complexType>
 </xs:element>
+----
 
 Derived Java code:
+[source,java,indent=4]
+----
+/* Value class representing element
+declaration with an anonymous complex type definition. */
+@XmlType(name="")
+@XmlRootElement(namespace="", name="foo")
+public class Foo {
+    int getBar() {...}
+    void setBar(int value) {...}
+};
+class ObjectFactory {
+    // type factory method
+    Foo              createFoo() {...}
+    // element factory method
+    JAXBElement<Foo> createFoo(Foo value) {...}
+}
+----
 
-/*Value class representing element
-declaration with an anonymous complex type definition.*/ +
-@XmlType(name="") +
-@XmlRootElement(namespace="", name="foo") +
-public class Foo \{ +
-int getBar() \{...} +
-void setBar(int value) \{...} +
-}; +
-
-===== [[a1113]]Bind Element Declaration to JAXBElement
+===== Bind Element Declaration to JAXBElement
 
 An element declaration with an anonymous
-complex type definition is not bound to a _@XmlRootElement_ ,annotated
+complex type definition is not bound to a `@XmlRootElement`,annotated
 schema-derived class when the element declaration is:
 
 * nillable
@@ -1554,41 +1601,43 @@
 
 When one or more of the above conditions are
 met, the schema-derived class representing the anonymous complex type
-definition must not be annotated with _@XmlRootElement_ . Instead, an
-element factory that returns _JAXBElement<_ _anonymousTypeValueClass_
-_>_ may be generated as specified in link:jaxb.html#a1040[See
+definition must not be annotated with `@XmlRootElement`. Instead, an
+element factory that returns `JAXBElement<__anonymousTypeValueClass__>`
+may be generated as specified in link:jaxb.html#a1040[See
 Bind to JAXBElement<T> Instance]“.
 
-*_Example:_* +
+*_Example:_*
 
 Given XML Schema fragment:
-
- +
-<xs:element name="foo" nillable="true"> +
-<xs:complexType> +
-<xs:sequence> +
-<xs:element name="bar" type="xs:int"/> +
-</xs:sequence> +
-</xs:complexType> +
-</xs:element> +
+[source,xml,indent=4]
+----
+<xs:element name="foo" nillable="true">
+  <xs:complexType>
+    <xs:sequence>
+      <xs:element name="bar" type="xs:int"/>
+    </xs:sequence>
+  </xs:complexType>
+</xs:element>
+----
 
 Derived Java code:
-
-/*Value class representing anonymous complex
-type definition.*/ +
-@XmlType(name="") +
-public class Foo \{ +
-int getBar() \{...} +
-void setBar(int value) \{...} +
-}; +
-@XmlRegistry +
-class ObjectFactory \{ +
-// type factory method +
-Foo createFoo() \{...} +
-// element factory method +
-@XmlElementDecl(name="foo", namespace="", nillable="true") +
-JAXBElement<Foo> createFoo(Foo value) \{...} +
+[source,java,indent=4]
+----
+/* Value class representing anonymous complex type definition. */
+@XmlType(name="")
+public class Foo {
+    int getBar() {...}
+    void setBar(int value) {...}
+};
+@XmlRegistry
+class ObjectFactory {
+    // type factory method
+    Foo              createFoo() {...}
+    // element factory method
+    @XmlElementDecl(name="foo", namespace="", nillable="true")
+    JAXBElement<Foo> createFoo(Foo value) {...}
 }
+----
 
 ==== Bind to a Property
 
@@ -1600,56 +1649,55 @@
 and link:jaxb.html#a5022[See Particle Schema Component] as
 follows:
 
-* The name of the Java property is derived
-from the \{element declaration} property’s \{name} property using the
+* The _name_ of the Java property is derived
+from the _{element declaration}_ property’s _{name}_ property using the
 XML Name to Java Identifier mapping algorithm described in
 link:jaxb.html#a4656[See The Name to Identifier Mapping
 Algorithm].
 * A _base type_ for the Java property is
-derived from the _\{element declaration}_ property’s _\{type
-definition}_ property as described in binding of Simple Type Definition
+derived from the `{element declaration}` property’s `{type
+definition}` property as described in binding of Simple Type Definition
 in _link:jaxb.html#a702[See Simple Type Definition]_ .” or
 link:jaxb.html#a917[See Complex Type Definition]". If the base
-type is initially a primitive type and this JAXB property is _optional_
-, the _[jaxb:globalBinding]_ customization _@optionalProperty_ controls
+type is initially a primitive type and this JAXB property is _optional_,
+the *[jaxb:globalBinding]* customization `@optionalProperty` controls
 the binding of an optional primitive property as described in
 link:jaxb.html#a1582[See Usage]“.
 * An optional _predicate_ for the Java
-property is constructed from the _\{element declaration}_ property’s
-_\{type definition}_ property as described in the binding of simple type
+property is constructed from the `{element declaration}` property’s
+`{type definition}` property as described in the binding of simple type
 definition to a Java representation.
-* An optional _collection type_ for the Java
-property is derived from:
-*  _\{element declaration}_ property’s
-_\{type definition}_ property as described in the binding of simple type
+* An optional _collection type_ for the Java property is derived from:
+** `{element declaration}` property’s
+`{type definition}` property as described in the binding of simple type
 definition to a Java representation
-* the \{particle} property’s \{max occurs}
+**  the `{particle}` property’s `{max occurs}`
 value being greater than one.
 * Element defaulting +
 The default value is derived from the element declaration’s \{value
 constraint} property’s value. Unlike attribute defaulting, an element
 only defaults when there is an empty element tag in an xml document. The
 element’s default value is captured by mapping annotation
-_@XmlElement.defaultValue()_ . The unmarshaller sets the property to
+`@XmlElement.defaultValue()`. The unmarshaller sets the property to
 this default value when it encounters an empty element tag. The
 marshaller can output an empty element tag whenever the element’s
-_@XmlValue_ property value is the same as its defaulted value..
+`@XmlValue` property value is the same as its defaulted value..
 * A local element declaration that binds to a
 JAXB property with a primitive base type is bound as an _optional_ JAXB
 property if the element declaration is a member of a choice model group
-or the element declaration’s particle has optional occurrence, \{ _min
-occurs} value is "0",_ or belongs to a model group that has optional
+or the element declaration’s particle has optional occurrence, `{min
+occurs}` value is `"0"`, or belongs to a model group that has optional
 occurrence. By default, the optional JAXB property binds the property’s
 base type to the Java wrapper class for the primitive type. One can test
 and set the absence of an optional property using null. The
-_[jaxb:globalBinding]_ customization _@optionalProperty_ controls
+*[jaxb:globalBinding]* customization `@optionalProperty` controls
 alternative bindings of an optional primitive property as described in
 link:jaxb.html#a1582[See Usage]“.
-* If the element declaration’s \{nillable}
-property is _“true”_ , the base type for the Java property is mapped to
+* If the element declaration’s _{nillable}_
+property is `"true"` , the base type for the Java property is mapped to
 the corresponding Java wrapper class for the Java primitive type.
-Setting the property to the _null_ value indicates that the property has
-been set to the XML Schema concept of @xs: _nil=’true_ ’.
+Setting the property to the `null` value indicates that the property has
+been set to the XML Schema concept of `@xs:nil="true"`.
 
 This Java property is a member of the Java
 value class that represents the binding of the complex type definition
@@ -1657,8 +1705,8 @@
 
 The schema-derived JAXB property getter
 method is annotated, either explicitly or by default mapping
-annotations, with the mapping annotation _@XmlElement_ , specified in
-Section 8, “@XmlElement”. The _@XmlElement_ annotation elements are
+annotations, with the mapping annotation `@XmlElement`, specified in
+Section 8, “@XmlElement”. The `@XmlElement` annotation elements are
 derived in terms of the abstract model properties for the referenced
 global element declaration summarized in
 link:jaxb.html#a4937[See Element Declaration Schema Component]
@@ -1667,31 +1715,22 @@
 .Annotate JAXB Property with @XmlElement element-value pairs
 [width="100%",cols="50%,50%",options="header",]
 |===
-|@XmlElement element
-|@XmlElement value
-|namespace a|
-When element declaration _\{target
-namespace}_ is absent, +
+| @XmlElement element | @XmlElement value
+|namespace a| When element declaration _{target namespace}_ is absent, +
 (i.e. unqualified local element declaration), @XmlElement.namespace() is
 not set. +
 
 Otherwise, set @XmlElement.namespace() to
-value of _\{target namespace}_ . (either a qualified local element
+value of _{target namespace}_. (either a qualified local element
 declaration or a reference to a global element)
 
 Note: same result could be achieved with
 package level annotation of @XmlSchema and not setting
 @XmlElement.namespace.
-
-|name |element
-declaration _\{name}_
-
-|nillable |element
-declaration _\{nillable}_
-
-|defaultValue |if
-element declaration _\{value constraint}_ is not absent, set
-defaultValue() to _\{value constraint}_ ’s value.
+| name | element declaration _{name}_
+| nillable | element declaration _{nillable}_
+| defaultValue |if element declaration _{value constraint}_ is not absent,
+set defaultValue() to _{value constraint}_ ’s value.
 |===
 
 link:jaxb.html#a1240[See Xml Schema
@@ -1706,7 +1745,7 @@
 element substitution using Java bindings from CODE EXAMPLE 6-6]
 illustrates invalid element substitution handling.
 
-===== [[a1148]]Type Substitution of a Complex Type Definition
+===== Type Substitution of a Complex Type Definition
 
 link:jaxb.html#a917[See Complex Type
 Definition]“describes that when a complex type definition is mapped to
@@ -1722,70 +1761,74 @@
 as part of unmarshalling or marshalling process.
 
 The following three code examples illustrate
-how type substitution is supported in JAXB 2.0 for a complex type
+how type substitution is supported in JAXB for a complex type
 definition hierarchy.
 
 .[[a1152]]Xml Schema example containing type derivation hierarchy
+[source,xml,indent=4,subs=+quotes]
+----
+<xs:schema targetNamespace="travel:acme" xmlns:a="travel:acme">
 
- +
-<xs:schema targetNamespace="travel:acme" xmlns:a="travel:acme"> +
- +
-<!-- Define type definition derivation hierarchy --> +
-<xs:complexType name=" _TransportType_ ">...<\xs:complexType> +
-<xs:complexType name=" _PlaneType_ "> +
-<xs:extension base="a:TransportType">...<\xs:complexType> +
-<xs:complexType name=" _AutoType_ "> +
-<xs:extension base="a:TransportType">...<\xs:complexType> +
-<<xs:complexType name=" _SUV_ "> +
-<xs:extension base="a:AutoType">...<\xs:complexType> +
- +
-<xs:complexType name=" _itinerary_ "> +
-<xs:sequence> +
-<!-- Type substitution possible for " _transport"._ -->. +
-<xs:element name=" _transport_ " type=" _TransportType_ "/> +
-</xs:sequence> +
-</xs:complexType> +
-</xs:schema> +
+  <!-- Define type definition derivation hierarchy -->
+  <xs:complexType name="**TransportType**">...</xs:complexType>
+  <xs:complexType name="**PlaneType**">
+    <xs:extension base="a:TransportType">...</xs:complexType>
+  <xs:complexType name="**AutoType**">
+    <xs:extension base="a:TransportType">...</xs:complexType>
+  <xs:complexType name="**SUV**">
+    <xs:extension base="a:AutoType">...</xs:complexType>
+
+  <xs:complexType name="**itinerary**">
+    <xs:sequence>
+      <!-- Type substitution possible for "transport". -->
+      <xs:element name="**transport**" type="**TransportType**"/>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>
+----
 
 .[[a1154]]Java binding of Xml Schema from link:jaxb.html#a1240[See Xml Schema example containing an element substitution group]
+[source,java,indent=4,subs=+quotes]
+----
+package travel.acme;
 
-package travel.acme; +
- +
-// Type derivation hierarchy from schema is preserved in Java binding. +
-public class _TransportType_ \{ ... } +
-public class _PlaneType_ extends TransportType \{ ... } +
-public class _AutoType_ extends TransportType \{ ... } +
-public class _SUV_ extends AutoType \{ ... } +
- +
-public class ObjectFactory \{ +
-// Type Factories +
-TransportType createTransportType()\{...} +
-AutoType createAutoType()\{...} +
-PlaneType createPlaneType()\{...} +
-TrainType createSUV()\{...} +
-} +
- +
-public class Itinerary \{ +
-// Simple property supports type substitution. +
-_TransportType_ getTransport()\{...} +
-void setTransport( _TransportType_ value) +
+// Type derivation hierarchy from schema is preserved in Java binding.
+public class *TransportType* {...}
+public class *PlaneType* extends TransportType {...}
+public class *AutoType* extends TransportType {...}
+public class *SUV* extends AutoType {...}
+
+public class ObjectFactory {
+    // Type Factories
+    TransportType createTransportType() {...}
+    AutoType createAutoType() {...}
+    PlaneType createPlaneType() {...}
+    TrainType createSUV() {...}
 }
 
+public class Itinerary {
+    // Simple property supports type substitution.
+    *TransportType* getTransport() {...}
+    void setTransport(**TransportType** value)
+}
+----
+
 .Type substitution using Java bindings from link:jaxb.html#a1242[See avo binding of Xml Schema from CODE EXAMPLE 6-5]
+[source,java,indent=8,subs=+quotes]
+----
+ObjectFactory of = ...;
+Itinerary itinerary = of.createItinerary();
+itinerary.setTransport(of.createTransportType); // Typical Use
 
- +
-ObjectFactory of = ...; +
-Itinerary itinerary = of.createItinerary(); +
-itinerary.setTransport(of.createTransportType); // Typical Use +
- +
-// Type Substitution +
-// transport marshalled as <e:transport xsi:type="e:AutoType">> +
-itinerary.setTransport(of.createAutoType()); +
- +
-// transport marshalled as <e:transport xsi:type="e:PlaneType">> +
+*// Type Substitution*
+// transport marshalled as <e:transport xsi:type="e:AutoType">
+itinerary.setTransport(of.createAutoType());
+
+// transport marshalled as <e:transport xsi:type="e:PlaneType">
 itinerary.setTransport(of.createPlaneType());
+----
 
-===== [[a1158]]Type Substitution of a Simple Type Definition
+===== Type Substitution of a Simple Type Definition
 
 An XML element declaration having a simple
 type definition is bound most naturally to a JAXB property with a base
@@ -1800,13 +1843,13 @@
 required to enable optimal support of simple type substitution.
 
 For example, the most natural binding of an
-XML Schema built-in datatype _xs:int_ is to the Java primitive datatype,
-_int_ . However, simple type substitution implies that an _xs:short_ or
-a complex type definition that derives by extension from _xs:int_ can be
-type substituted for an _xs:int_ within an XML document using the
-_xsi:type_ attribute. The strongly typed JAXB property with Java type
-_int_ would never allow for a Java value class for the complex type to
-be assigned to a JAXB property of type _int_ .
+XML Schema built-in datatype `xs:int` is to the Java primitive datatype,
+`int`. However, simple type substitution implies that an `xs:short` or
+a complex type definition that derives by extension from `xs:int` can be
+type substituted for an `xs:int` within an XML document using the
+`xsi:type` attribute. The strongly typed JAXB property with Java type
+`int` would never allow for a Java value class for the complex type to
+be assigned to a JAXB property of type `int`.
 
 By default, unmarshalling handles simple type
 substitution by assigning the relevant part of the type substituted
@@ -1814,13 +1857,13 @@
 resolves to:
 
 * a type that derives by restriction from the
-element’s schema type. +
+element’s schema type.
 The substituted value is always parsable into a legal value of the base
 type of the JAXB property being type substituted.
 * a complex type that derives by extension
-from element’s schema type. +
-The JAXB binding of the substituted complex type definition must have
-one JAXB property annotated with an _@XmlValue_ that is assignable to
+from element’s schema type. The JAXB binding
+of the substituted complex type definition must have
+one JAXB property annotated with an `@XmlValue` that is assignable to
 the type substituted JAXB property’s base type. Attribute(s) associated
 with the complex type definition can not be preserved by the default
 binding.
@@ -1828,29 +1871,29 @@
 The rationale behind the default binding is
 that substitution of a simple type definition occurs rarely. The default
 JAXB binding is more convenient and precise for programmer to use. Its
-one drawback is that it does not faithfully preserve _xsi:type_
+one drawback is that it does not faithfully preserve `xsi:type`
 occurring in an XML document.
 
 To enable more comprehensive support of
 simple type substituting of an XML element with a simple type
 definition, the JAXB property customization specified in
 link:jaxb.html#a1809[See Generalize/Specialize baseType with
-attribute @name]“enables setting the property’s base type to the more
-general type of _java.lang.Object._ This binding allows for retention of
-the XML document _xsi:type_ and attributes associated with complex type
+attribute @name] enables setting the property’s base type to the more
+general type of `java.lang.Object`. This binding allows for retention of
+the XML document `xsi:type` and attributes associated with complex type
 definition substituted for an XML element with a simple type definition.
-When an _xsi:type_ value refers to a type definition not registered with
-_JAXBContext_ instance, the content is unmarshalled as the element’s
+When an `xsi:type` value refers to a type definition not registered with
+`JAXBContext` instance, the content is unmarshalled as the element’s
 schema type.
 
 To preserve an application-defined simple
 type definition involved in simple type substitution, it must be mapped
 to a JAXB mapped class as described in link:jaxb.html#a803[See
 Bind to a JAXB mapped class]“. This can be achieved for all simple type
-definitions in a schema using the customization _<jaxb:globalBinding
-mapSimpleTypeDefs="true"/>_ or it can be achieved per simple type
+definitions in a schema using the customization `<jaxb:globalBinding
+mapSimpleTypeDefs="true"/>` or it can be achieved per simple type
 definition using <jaxb:class> customization. An invalid simple type
-substitution can be detected by JAXP 1.3 validation enabled at unmarshal
+substitution can be detected by JAXP validation enabled at unmarshal
 or marshal time
 
 Below are examples of the type substitution
@@ -1858,68 +1901,76 @@
 customized binding.
 
 .[[a1168]]Schema fragment to illustrate simple type substitution
-
-<xsd:element name="Price"> +
-<xsd:complexType> +
-<xsd:sequence> +
-<xsd:element name="name" type="xsd:string"/> +
-_<!-- element price subject to type substitution-> +
-_ <xsd:element name="price" type="xsd:int"/> +
-</xsd:sequence> +
-</xsd:complexType> +
-</xsd:element> +
-<xsd:complexType name="AmountType"> +
-<xsd:simpleContent> _<!-- type substitutable for xs:int --> +
-_ <xsd:extension base="xsd:int"> +
-<xsd:attribute name="currency" type="xsd:string"/> +
-</xsd:extension> +
-</xsd:simpleContent> +
-</xsd:complexType> +
-<xsd:simpleType name="AppInt"> +
-<xsd:restriction base="xsd:int"/> +
+[source,xml,indent=4,subs=+quotes]
+----
+<xsd:element name="Price">
+  <xsd:complexType>
+    <xsd:sequence>
+      <xsd:element name="name" type="xsd:string"/>
+      _<!-- element price subject to type substitution -->_
+      <xsd:element name="price" type="xsd:int"/>
+    </xsd:sequence>
+  </xsd:complexType>
+</xsd:element>
+<xsd:complexType name="AmountType">
+  <xsd:simpleContent> _<!-- type substitutable for xs:int -->_
+    <xsd:extension base="xsd:int">
+      <xsd:attribute name="currency" type="xsd:string"/>
+    </xsd:extension>
+  </xsd:simpleContent>
+</xsd:complexType>
+<xsd:simpleType name="AppInt">
+  <xsd:restriction base="xsd:int"/>
 </xsd:simpleType>
+----
 
 .[[a1170]]XML documents with simple type substitution
-
-<product> +
-<name>hotdog</name><price>3</price> +
+[source,xml,indent=4,subs=+quotes]
+----
+<product>
+  <name>hotdog</name>
+  <price>3</price>
 </product>
 
-<product> +
-<name>peanuts</name> +
-<price _xsi:type="short_ ">4</price> +
+<product>
+  <name>peanuts</name>
+  <price **xsi:type="short"**>4</price>
 </product>
 
-<product> +
-<name>popcorn</name> +
-<price _xsi:type="AppInt_ ">5</price> +
+<product>
+  <name>popcorn</name>
+  <price **xsi:type="AppInt"**>5</price>
 </product>
 
-<product> +
-<name>sushi</name> +
-<price _xsi:type="AmountType"_ currency="yen">500</price> +
+<product>
+  <name>sushi</name>
+  <price **xsi:type="AmountType"** currency="yen">500</price>
 </product>
+----
 
 ====== Default Handling of Simple Type Substitution
 
 .[[a1176]]Default JAXB binding of link:jaxb.html#a1168[See Schema fragment to illustrate simple type substitution]
-
-public class AmountType \{ +
-@XmlValue +
-int getValue()\{...} void setValue(int value) \{...} +
-String getCurrency() \{...} void setCurrency(String value) \{...} +
-} +
-@XmlRootElement(namespace="", name="product") +
-public class Product \{ +
-int getPrice()\{...} void setPrice(int value) \{ ...} +
-int getName() \{...} void setName(String value) \{...} +
+[source,java,indent=4]
+----
+public class AmountType {
+    @XmlValue
+    int getValue() {...} void setValue(int value) {...}
+    String getCurrency() {...} void setCurrency(String value) {...}
 }
 
+@XmlRootElement(namespace="", name="product")
+public class Product {
+    int getPrice() {...} void setPrice(int value) {...}
+    int getName() {...} void setName(String value) {...}
+}
+----
+
 Unmarshalling XML document fragments from
 link:jaxb.html#a1170[See XML documents with simple type
 substitution] into link:jaxb.html#a1176[See Default JAXB binding
-of CODE EXAMPLE 6-1] JAXB binding of element _product_ results in the
-_xsi:type_ and attributes associated with JAXB mapped class _Price_
+of CODE EXAMPLE 6-1] JAXB binding of element `product` results in the
+`xsi:type` and attributes associated with JAXB mapped class `Price`
 being lost as part of the unmarshal process. This loss is illustrated by
 comparing link:jaxb.html#a1179[See Product instances from
 unmarshalling XML docs from CODE EXAMPLE 6-2] with
@@ -1929,106 +1980,87 @@
 .[[a1179]]Product instances from unmarshalling XML docs from link:jaxb.html#a1170[See XML documents with simple type substitution]
 [width="100%",cols="20%,20%,20%,20%,20%",options="header",]
 |===
-|document xsi:type
-| _Product.name +
-value_ | _Product.price +
-value_ | _Product.price +
-type_ | _marshal Product.price xsi:type_
-| |hotdog
-|3 |int
-|
-
-|xs:short |peanuts
-|4 |int
-|
-
-|AppInt |popcorn
-|5 |int
-|
-
-|AmountType |sushi
-|500 |int
-|
+| document xsi:type | Product.name +
+value | Product.price +
+value | Product.price +
+type | marshal Product.price xsi:type
+| | hotdog | 3 | int |
+| xs:short | peanuts | 4 | int |
+| AppInt | popcorn | 5 | int |
+| AmountType | sushi | 500 | int |
 |===
 
 ====== Simple Type Substitution enabled by JAXB customizations.
 
-The simple type definition _AppInt_ is mapped
-to a JAXB class either by _<jaxb:class>_ customization or by
-_<jaxb:globalBindings mapSimpleTypeDef="true"/>_ . The JAXB property
-_Product.Price_ is mapped to a JAXB property with a general base type of
-_java.lang.Object_ with following external JAXB schema customization:
+The simple type definition `AppInt` is mapped
+to a JAXB class either by `<jaxb:class>` customization or by
+`<jaxb:globalBindings mapSimpleTypeDef="true"/>`. The JAXB property
+`Product.Price` is mapped to a JAXB property with a general base type of
+`java.lang.Object` with following external JAXB schema customization:
 
-<jaxb:bindings
-schemaLocation="link:jaxb.html#a1168[See Schema fragment to
-illustrate simple type substitution]" +
-node="//xsd:element[@name=’price’]"> +
-<jaxb:property> +
-<jaxb:baseType name="java.lang.Object"/> +
-</jaxb:property> +
+[source,xml,indent=4]
+----
+<jaxb:bindings schemaLocation="CODE EXAMPLE"
+        node="//xsd:element[@name=’price’]">
+  <jaxb:property>
+    <jaxb:baseType name="java.lang.Object" />
+  </jaxb:property>
 </jaxb:bindings>
+----
 
 specified in link:jaxb.html#a1809[See
 Generalize/Specialize baseType with attribute @name]“.
 
 .[[a1201]]Customized JAXB binding of link:jaxb.html#a1168[See Schema fragment to illustrate simple type substitution]
-
-public class AmountType \{ +
-@XmlValue +
-int getValue()\{...} void setValue(int value) \{...} +
-String getCurrency() \{...} void setCurrency(String value) \{...} +
-} +
-public class AppInt \{ +
-@XmlValue +
-int getValue() \{...} void setValue(int value) \{...} +
-} +
-public class Product \{ +
-// enable simple type substitution with base type of Object +
-@XmlElement(type=java.lang.Integer.class) +
-Object getPrice()\{...} void setPrice(Object value) \{ ...} +
-int getName() \{...} void setName(String value) \{...} +
+[source,java,indent=4]
+----
+public class AmountType {
+    @XmlValue
+    int getValue() {...} void setValue(int value) {...}
+    String getCurrency() {...} void setCurrency(String value) {...}
 }
 
+public class AppInt {
+    @XmlValue
+    int getValue() {...} void setValue(int value) {...}
+}
+
+public class Product {
+    // enable simple type substitution with base type of Object
+    @XmlElement(type=java.lang.Integer.class)
+    Object getPrice() {...} void setPrice(Object value) {...}
+    int getName() {...} void setName(String value) {...}
+}
+----
+
 Unmarshalling XML document fragments from
 link:jaxb.html#a1170[See XML documents with simple type
 substitution] into link:jaxb.html#a1201[See Customized JAXB
-binding of CODE EXAMPLE 6-1] JAXB binding of element _product_ preserves
-the _xsi:type_ and attributes associated with JAXB mapped class
-_AmountType_ is illustrated in link:jaxb.html#a1204[See Product
+binding of CODE EXAMPLE 6-1] JAXB binding of element `product` preserves
+the `xsi:type` and attributes associated with JAXB mapped class
+`AmountType` is illustrated in link:jaxb.html#a1204[See Product
 instances from unmarshalling XML docs from CODE EXAMPLE 6-2].
 
 .[[a1204]]Product instances from unmarshalling XML docs from link:jaxb.html#a1170[See XML documents with simple type substitution]
 [width="100%",cols="20%,20%,20%,20%,20%",options="header",]
 |===
-|document xsi:type
-| _Product.name +
-value_ | _Product. +
+| document xsi:type | Product.name +
+value | Product. +
 price +
-value_ | _Product. +
+value | Product. +
 price +
-Java type_ | _Marshal +
+Java type | Marshal +
 Product. +
 price +
-_ _xsi:type_
-| |hotdog
-|3 |Integer
-|
-
-|xs:short |peanuts
-|4 |Short
-|xs:short
-
-|AppInt |popcorn
-|5 |AppInt
-|AppInt
-
-|AmountType |sushi
-|\{value=500, +
-currency=”yen”} |AmountType
-|AmountType
+xsi:type
+| | hotdog | 3 | Integer |
+| xs:short | peanuts | 4 | Short | xs:short
+| AppInt | popcorn | 5 | AppInt | AppInt
+| AmountType | sushi | {value=500, +
+currency=”yen”} | AmountType | AmountType
 |===
 
-==== [[a1223]]Bind to a Simple Element property
+==== Bind to a Simple Element property
 
 Element substitution group is an Xml Schema
 mechanism that enables the substitution of one named element for
@@ -2041,57 +2073,64 @@
 
 . Element substitution is only possible for a
 reference to a global element.
-. Assuming the absence of the Xml Schema
+.. Assuming the absence of the Xml Schema
 constraints on substitution, any global element can be made the head
 element of a substitution group.
 . All elements in a substitution group must
 derive from or have the same type definition as the head element.
 
-{empty}To support element substitution, for
+To support element substitution, for
 each global element reference to a head element of a substitution group
 or to an abstract element, it is necessary to generate the Element
 property bindings defined in link:jaxb.html#a630[See Element
-Property].link:#a5373[22] This property enables the overriding
+Property].footnote:[Element substitution
+extensibility does allow element substitution(s) to be defined in a
+separate schema than a global element reference occurs. When schemas are
+not compiled at same time, the schema to java binding declaration,
+<jaxb:property generateElementProperty=”true”/> described in
+link:jaxb.html#a1786[See Usage] forces the generation of an
+element property for a global element reference, independent of it not
+belonging to a element substitution group.] This property enables the overriding
 of the schema-specified element name bound to a JAXB property by setting
 and getting the JAXB element representation,
-_jakarta.xml.bind.JAXBElement<T>_ . The name property of the JAXBElement
-_<T>_ instance overrides the schema specified element declaration name.
+`jakarta.xml.bind.JAXBElement<T>`. The name property of the `JAXBElement<T>`
+instance overrides the schema specified element declaration name.
 To enable the passing of any element that could be part of the element
 substitution group, it is necessary to accept any JAXBElement derivation
 that extends Java binding of the head element’s type definition. Using
 the upper bounded wildcard notation for a generic JAXBElement container,
-_JAXBElement<? extends T>_ , the element property is able to get and set
+`JAXBElement<? extends T>`, the element property is able to get and set
 any element that has an element value that is a subtype of T. Compile
 time checking will not allow invalid JAXBElement derivations to be
 passed to the Element property setter. When the element type is correct
 but the element name is not part of the substitution group, this invalid
 scenario can only be caught at runtime by validation or optional
 fail-fast checking by the element property
-setter.link:#a5374[23]
+setter.footnote:[The desire to reduce
+the overall number of schema-derived classes generated by default
+influenced the decision to default to binding an element declaration to
+an element instance factory. A customization described in
+link:jaxb.html#a1580[See <globalBindings> Declaration] exists
+that binds each element declaration to a Java element class so element
+substitution checking can be enforced entirely by strongly typed method
+signatures.]
 
 The schema-derived Element property getter
 method is annotated, either explicitly or by default mapping
-annotations, with the mapping annotation _@XmlElementRef_ , specified in
-Section 8.10.3, “@XmlElementRef”. The _@XmlElementRef_ annotation
+annotations, with the mapping annotation `@XmlElementRef`, specified in
+Section 8.10.3, “@XmlElementRef”. The `@XmlElementRef` annotation
 elements are derived in terms of the abstract model properties for the
 referenced global element declaration summarized in
 link:jaxb.html#a4937[See Element Declaration Schema Component]
 as follows:
 
 .Annotate Element Property with @XmlElementRef element-value pairs
-[width="100%",cols="50%,50%",options="header",]
+[cols="1,1",options="header",]
 |===
-|@XmlElementRef element
-|@XmlElementRef value
-|value
-|jakarta.xml.bind.JAXBElement.class
-
-|namespace
-|referenced element declaration _\{target
-namespace}_
-
-|name |referenced
-element declaration _\{name}_
+| @XmlElementRef element | @XmlElementRef value
+| value | jakarta.xml.bind.JAXBElement.class
+| namespace | referenced element declaration _{target namespace}_
+| name | referenced element declaration _{name}_
 |===
 
 link:jaxb.html#a1240[See Xml Schema
@@ -2107,99 +2146,98 @@
 illustrates invalid element substitution handling.
 
 .[[a1240]]Xml Schema example containing an element substitution group
+[source,xml,indent=4]
+----
+<xs:schema targetNamespace="travel:acme" xmlns:a="travel:acme">
 
-<xs:schema targetNamespace="travel:acme"
-xmlns:a="travel:acme"> +
- +
-<!-- See type definition derivation hierarchy defined in
-link:jaxb.html#a1152[See Xml Schema example containing type
-derivation hierarchy]for +
-complexType definitions TransportType, PlaneType, AutoType and SUV.--> +
-< +
-<!-- Define element substitution group. a:transport is head
-element.--> +
-<xs:element name="transport" type="a:TransportType"/> +
-<xs:element name="plane" type="a:PlaneType"
-substitutionGroup="a:transport"/> +
-<xs:element name="auto" type="a:AutoType"
-substitutionGroup="a:transport"/><!- +
- +
-<xs:complexType name="itinerary"> +
-<xs:sequence> +
-<!-- Global element reference. +
-References head element of element substitution group. --> +
-<xs:element ref="a:transport"/> +
-</xs:sequence> +
-</xs:complexType> +
-<\xs:schema>
+  <!-- See type definition derivation hierarchy defined in CODE EXAMPLE for
+complexType definitions TransportType, PlaneType, AutoType and SUV.-->
+  <!-- Define element substitution group. a:transport is head element. -->
+  <xs:element name="transport" type="a:TransportType"/>
+  <xs:element name="plane" type="a:PlaneType" substitutionGroup="a:transport" />
+  <xs:element name="auto" type="a:AutoType" substitutionGroup="a:transport" />
 
-.[[a1242]]avo binding of Xml Schema from link:jaxb.html#a1240[See Xml Schema example containing an element substitution group]
+  <xs:complexType name="itinerary">
+    <xs:sequence>
+      <!-- Global element reference.
+           References head element of element substitution group. -->
+      <xs:element ref="a:transport"/>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>
+----
 
-ppackage travel.acme; +
-public class ObjectFactory \{ +
-// Type Factories +
-TransportType createTransportType(); +
-AutoType createAutoType(); +
-PlaneType createPlaneType(); +
-TrainType createSUVType(); +
- +
-// Element Instance Factories +
-JAXBElement<AutoType> createAuto(AutoType value); +
-JAXBElement<PlaneType> createPlane(PlaneType value); +
-JAXBElement<TransportType> createTrain(TransportType value); +
-} +
- +
-// See Java binding of type derivation hierarchy in
-link:jaxb.html#a1154[See Java binding of Xml Schema from CODE
-EXAMPLE 6-5] +
- +
-public class Itinerary \{ +
-// Element substitution supported by link:jaxb.html#a630[See
-Element Property]" +
-JAXBElement<? extends TransportType> getTransport(); +
-void setTransport(JAXBElement<? extends TransportType> value); +
+.[[a1242]]avoid binding of Xml Schema from link:jaxb.html#a1240[See Xml Schema example containing an element substitution group]
+[source,java,indent=4]
+----
+package travel.acme;
+public class ObjectFactory {
+    // Type Factories
+    TransportType createTransportType();
+    AutoType createAutoType();
+    PlaneType createPlaneType();
+    TrainType createSUVType();
+
+    // Element Instance Factories
+    JAXBElement<AutoType> createAuto(AutoType value);
+    JAXBElement<PlaneType> createPlane(PlaneType value);
+    JAXBElement<TransportType> createTrain(TransportType value);
 }
 
+// See Java binding of type derivation hierarchy in CODE EXAMPLE 6-5
+
+public class Itinerary {
+    // Element substitution supported by See [Element Property]
+    JAXBElement<? extends TransportType> getTransport();
+    void setTransport(JAXBElement<? extends TransportType> value);
+}
+----
+
 .[[a1244]]Element substitution using Java bindings from link:jaxb.html#a1242[See avo binding of Xml Schema from CODE EXAMPLE 6-5]
+[source,java,indent=8,subs=+quotes]
+----
+ObjectFactory of = ...;
+Itinerary itinerary = of.createItinerary();
+itinerary.setTransport(of.createTransportType()); // Typical use.
 
- +
-ObjectFactory of = ...; +
-Itinerary itinerary = of.createItinerary(); +
-itinerary.setTransport(of.createTransportType()); // Typical use. +
- +
-// Element substitution: +
-// Substitute <e:auto> for schema specified <e:transport>. +
-itinerary.setTransport(of.createAuto(of.createAutoType())); +
- +
-// Substitute <e:plane> for schema specified <e:transport>> +
-itinerary.setTransport(of.createPlane(of.createPlaneType())); +
- +
-// Combination of element and type substitution: +
-_// Substitutes <e:auto xsi:type="e:SUV"> for <e:transport>> +
-_ itinerary.setTransport(of.createAuto(of.createSUV()));
+**// Element substitution:**
+__// Substitute <e:auto> for schema specified <e:transport>.__
+itinerary.setTransport(of.createAuto(of.createAutoType()));
 
-.[[a1246]]Invalid element substitution using Java bindings from link:jaxb.html#a1242[See avo binding of Xml Schema from CODE EXAMPLE 6-5]
+__// Substitute <e:plane> for schema specified <e:transport>__
+itinerary.setTransport(of.createPlane(of.createPlaneType()));
 
- +
-<!-- Add elements not part of element substitution group. --> +
-<xs:element name="apple" type="xsd:string"/> +
-<xs:complexType name="spaceShuttle"> +
-<xs:extension base="a:TransportType">...<\xs:complexType> +
-<xs:element name="spaceShuttle" type="a:spaceShuttleType"> +
- +
-ObjectFactory of = ...; +
-Itinerary itinerary = of.createItinerary(); +
-// Invalid element substitution +
-// compile time error: method not found +
-//Element apple of type JAXBElement<String> does not match +
-//bounded wildcard JAXBElement<? extends TransportType>. +
-itinerary.setTransport(of.createApple("granny smith")); +
- +
-//Invalid element substitution detected by validation. +
-// Element spaceShuttle not part of substitution group. +
-// Adding _substitutionGroup="transport"_ to line 4 fixes this. +
-itinerary.setTranport( +
+**// Combination of element and type substitution:**
+__// Substitutes <e:auto xsi:type="e:SUV"> for <e:transport>__
+itinerary.setTransport(of.createAuto(of.createSUV()));
+----
+
+.[[a1246]]Invalid element substitution using Java bindings from link:jaxb.html#a1242[See avoid binding of Xml Schema from CODE EXAMPLE 6-5]
+[source,xml,indent=4]
+----
+<!-- Add elements not part of element substitution group. -->
+<xs:element name="apple" type="xsd:string"/>
+<xs:complexType name="spaceShuttle">
+  <xs:extension base="a:TransportType">...</xs:complexType>
+<xs:element name="spaceShuttle" type="a:spaceShuttleType">
+----
+
+[source,java,indent=8,subs=+quotes]
+----
+ObjectFactory of = ...;
+Itinerary itinerary = of.createItinerary();
+**// Invalid element substitution**
+**// compile time error: method not found**
+// Element apple of type JAXBElement<String> does not match
+// bounded wildcard JAXBElement<? extends TransportType>.
+itinerary.setTransport(of.createApple("granny smith"));
+
+**// Invalid element substitution detected by validation.**
+// Element spaceShuttle not part of substitution group.
+// Adding _substitutionGroup="transport"_ to line 4 fixes this.
+itinerary.setTranport(
 of.createSpaceShuttle(of.createSpaceShuttleType()));
+----
 
 ==== Bind to an Element Collection property
 
@@ -2208,23 +2246,26 @@
 of JAXBElement.
 
 .Bind repeating occurrence element substitution variant of link:jaxb.html#a1240[See Xml Schema example containing an element substitution group]
+[source,xml,indent=4,subs=+quotes]
+----
+<!--deleted schema that remains same -->
+<xs:complexType name="itinerary">
+  <xs:sequence>
+    **<!-- Repeating occurance to substitutable global element reference. -->**
+    <xs:element ref="a:transport" **maxOccurs="unbounded"** />
+  </xs:sequence>
+</xs:complexType>
+----
 
-<!--deleted schema that remains same --> +
-<xs:complexType name="itinerary"> +
-<xs:sequence> +
-<!-- Repeating occurance to substitutable global element reference.
---> +
-<xs:element ref="a:transport" _maxOccurs="unbounded"_ /> +
-</xs:sequence> +
-</xs:complexType> +
-<\xs:schema> +
- +
-Java Binding: +
-public class Itinerary \{ +
-List<JAXBElement<? extends TransportType>> getTransport(); +
+Java Binding:
+[source,java,indent=4]
+----
+public class Itinerary {
+    List<JAXBElement<? extends TransportType>> getTransport();
 }
+----
 
-=== [[a1252]]Attribute use
+=== Attribute use
 
 A ‘required’ or ‘optional’ attribute use is
 bound by default to a Java property as described in
@@ -2234,33 +2275,33 @@
 link:jaxb.html#a4965[See Attribute Declaration Schema Component]
 as follows:
 
-* The name of the Java property is derived
-from the \{attribute declaration} property’s \{name} property using the
+* The _name_ of the Java property is derived
+from the _{attribute declaration}_ property’s _{name}_ property using the
 XML Name to Java Identifier mapping algorithm described in
 link:jaxb.html#a4656[See The Name to Identifier Mapping
 Algorithm].
 * A _base type_ for the Java property is
-derived from the _\{attribute declaration}_ property’s _\{type
-definition}_ property as described in binding of Simple Type Definition
-in _link:jaxb.html#a702[See Simple Type Definition]_ .”. If the
+derived from the `{attribute declaration}` property’s `{type
+definition}` property as described in binding of Simple Type Definition
+in _link:jaxb.html#a702[See Simple Type Definition]_ . If the
 base type is initially a primitive type and this JAXB property is
-_optional_ , the _[jaxb:globalBinding]_ customization
-_@optionalProperty_ controls the binding of an optional primitive
+_optional_ , the *[jaxb:globalBinding]* customization
+`@optionalProperty` controls the binding of an optional primitive
 property as described in link:jaxb.html#a1582[See Usage]“.
 * An optional _predicate_ for the Java
-property is constructed from the _\{attribute declaration}_ property’s
-_\{type definition}_ property as described in the binding of simple type
+property is constructed from the `{attribute declaration}` property’s
+`{type definition}` property as described in the binding of simple type
 definition to a Java representation.
 * An optional _collection type_ for the Java
-property is derived from the _\{attribute declaration}_ property’s
-_\{type definition}_ property as described in the binding of simple type
+property is derived from the `{attribute declaration}` property’s
+`{type definition}` property as described in the binding of simple type
 definition to a Java representation.
 * The _default value_ for the Java property
-is the value from the attribute use’s \{value constraint} property. If
-the optional \{value constraint} is absent, the default value for the
+is the _value_ from the attribute use’s _{value constraint}_ property. If
+the optional _{value constraint}_ is absent, the default value for the
 Java property is the Java default value for the base type.
 * The JAXB property is _optional_ when the
-attribute use’s _\{required}_ property is _false_ .
+attribute use’s `{required}` property is `false`.
 
 This Java property is a member of the Java
 value class that represents the binding of the complex type definition
@@ -2276,83 +2317,94 @@
 as follows:
 
 .[[a1262]]Annotate Attribute property getter method with @XmlAttribute annotation
-[width="100%",cols="50%,50%",options="header",]
+[cols="1,1",options="header",]
 |===
-|@XmlAttribute element
-|@XmlAttribute value
-|name |attribute
-declaration's \{name}
-
-|namespace a|
-if attribute declaration’s \{target
-namespace} absent, set to “”
-
-otherwise, set to \{target namespace}
-
-|required
-|attribute use's \{required}
+| @XmlAttribute element | @XmlAttribute value
+| name | attribute declaration's _{name}_
+| namespace | if attribute declaration’s _{target namespace}_ absent,
+set to “” +
+otherwise, set to _{target namespace}_
+| required | attribute use's _{required}_
 |===
 
-*
+[NOTE]
+.Design Note
+====
+Since the target namespace is not being considered when mapping
+an attribute to a Java property, two distinct attributes
+that have the same _{name}_ property but not the same _{target namespace}_
+will result in a Java property naming collision.
+As specified generically in Section D.2.1, “Collisions and conflicts”,
+the binding compiler detect this name collision between
+the two distinct properties and reports the error.
+The user can provide a customization that provides an alternative
+Java property name to resolve this situation.
+
+====
 
 *_Example:_* +
 
 Given XML Schema fragment:
-
-<xs:complexType name="USAddress"> +
-<xs:attribute name="country" type="xs:string"/> +
+[source,xml,indent=4]
+----
+<xs:complexType name="USAddress">
+  <xs:attribute name="country" type="xs:string"/>
 </xs:complexType>
+----
 
 Default derived Java code:
-
-public class USAddress \{ +
-@XmlAttribute(name="country", targetNamespace="", +
-required="false"); +
-public String getCountry() \{...} +
-public void setCountry(String value) \{...} +
+[source,java,indent=4]
+----
+public class USAddress {
+    @XmlAttribute(name="country", targetNamespace="", required="false");
+    public String getCountry() {...}
+    public void setCountry(String value) {...}
 }
+----
 
-==== [[a1277]]Bind to a Java Constant property
+==== Bind to a Java Constant property
 
 Rather than binding to a read/write JAXB
-property, an attribute use with a _fixed_ \{value constraint} property
+property, an attribute use with a `fixed` _{value constraint}_ property
 can be bound to a Java Constant property. This mapping is not performed
-by default since _fixed_ is only a validation constraint. The user must
-set the binding declaration attribute _fixedAttributeToConstantProperty_
-on _<jaxb:globalBinding>_ element as specified in
-link:jaxb.html#a1582[See Usage] or on _<jaxb:property>_ element
+by default since `fixed` is only a validation constraint. The user must
+set the binding declaration attribute `fixedAttributeToConstantProperty`
+on `<jaxb:globalBinding>` element as specified in
+link:jaxb.html#a1582[See Usage] or on`<jaxb:property>` element
 as specified in link:jaxb.html#a1786[See Usage] to enable this
 mapping.
 
 *_Example:_* +
 
 Given XML Schema fragment:
-
+[source,xml,indent=4]
+----
 <xs:annotation><xs:appinfo>
-
- <jaxb:globalBindings
-fixedAttributeAsConstantProperty="true"/>
-
-</xs:appinfo></xs:annotation> +
-<xs:complexType name="USAddress"> +
-<xs:attribute name="country" type="xs:NMTOKEN" fixed="US"/> +
+  <jaxb:globalBindings fixedAttributeAsConstantProperty="true"/>
+</xs:appinfo></xs:annotation>
+<xs:complexType name="USAddress">
+  <xs:attribute name="country" type="xs:NMTOKEN" fixed="US"/>
 </xs:complexType>
+----
 
 If the appropriate binding schema
 customization enables mapping a fixed XML value to Java constant
 property, the following Java code fragment is generated.
 
-public class USAddress \{ +
-@XmlAttribute +
-public static final String COUNTRY="US"; +
-... +
+[source,java,indent=4]
+----
+public class USAddress {
+    @XmlAttribute
+    public static final String COUNTRY="US";
+    ...
 }
+----
 
 The schema-derived constant for this fixed
 attribute is annotated, either explicitly or via default mapping, with
-the mapping annotation _@XmlAttribute._ The elements of _@XmlAttribute_
-are set as described in _link:jaxb.html#a1262[See Annotate
-Attribute property getter method with @XmlAttribute annotation]_
+the mapping annotation `@XmlAttribute`. The elements of `@XmlAttribute`
+are set as described in link:jaxb.html#a1262[See Annotate
+Attribute property getter method with @XmlAttribute annotation]
 
 Note that if derivation by restriction
 constrains an existing attribute declaration to be fixed, this
@@ -2362,44 +2414,42 @@
 
 ===== Contributions to Local Structural Constraint
 
-If the attribute use’s \{required} property
+If the attribute use’s _{required}_ property
 is true, the local structural constraint for an instance of the Java
 value class requires that the corresponding Java property to be set when
 the Java value class instance is validated.
 
-==== [[a1290]]Binding an IDREF component to a Java property
+==== Binding an IDREF component to a Java property
 
 An element or attribute with a type of
-_xs:IDREF_ refers to the element in the instance document that has an
-attribute with a type of _xs:ID_ or derived from type _xs:ID_ with the
-same value as the _xs:IDREF_ value. Rather than expose the Java
+`xs:IDREF` refers to the element in the instance document that has an
+attribute with a type of `xs:ID` or derived from type `xs:ID` with the
+same value as the `xs:IDREF` value. Rather than expose the Java
 programmer to this XML Schema concept, the default binding of an
-_xs:IDREF_ component maps it to a Java property with a base type of
-_java.lang.Object_ . The caller of the property setter method must be
+`xs:IDREF` component maps it to a Java property with a base type of
+`java.lang.Object`. The caller of the property setter method must be
 sure that its parameter is identifiable. An object is considered
 identifiable if one of its properties is derived from an element or
-attribute that is or derives from type _xs:ID_ . The JAXB mapped class
-must have one property annotated with an @XmlID program annotation as it
+attribute that is or derives from type `xs:ID`. The JAXB mapped class
+must have one property annotated with an `@XmlID` program annotation as it
 is specified in Section 8. There is an expectation that all instances
-provided as values for properties’ representing an _xs:IDREF_ should
-have the Java property representing the _xs:ID_ of the instances set
-before the content tree containing both the _xs:ID_ and _xs:IDREF_ is
-marshalled. If a property representing an _xs:IDREF_ is set with an
-object that does not have its _xs:ID_ set, the _NotIdentifiableEvent_ is
+provided as values for properties’ representing an `xs:IDREF` should
+have the Java property representing the `xs:ID` of the instances set
+before the content tree containing both the `xs:ID` and `xs:IDREF` is
+marshalled. If a property representing an `xs:IDREF` is set with an
+object that does not have its `xs:ID` set, the `NotIdentifiableEvent` is
 reported by marshalling.
 
-* The name of the Java property is derived
-from the \{name} property of the attribute or element using the XML Name
+* The _name_ of the Java property is derived
+from the _{name}_ property _of the attribute or element_ using the XML Name
 to Java Identifier mapping algorithm described in
 link:jaxb.html#a4656[See The Name to Identifier Mapping
 Algorithm].
-* A _base type_ for the Java property is
-java.lang.Object.
-* There is no _predicate_ for a property
-representing an _xs:IDREF_ .
+* A _base type_ for the Java property is java.lang.Object.
+* There is no _predicate_ for a property representing an `xs:IDREF`.
 * An optional _collection type_
 * Default and fixed values can not be
-supported for an attribute with type _xs:IDREF_ .
+supported for an attribute with type `xs:IDREF`.
 
 The schema-derived JAXB property representing
 xs:IDREF(s) is annotated, either explicitly or by default mapping
@@ -2409,48 +2459,55 @@
 *_Example:_* +
 
 Given XML Schema fragment:
-
-<xs:complexType name="Book"> +
-<xs:sequence> +
-_<xs:element name="author" type="xs:IDREF"/> +
-_ <!-- ... --> +
-</xs:sequence> +
-</xs:complexType> +
-<xs:complexType name="AuthorBio"> +
-<xs:sequence><!-- ... --> </xs:sequence> +
-_<xs:attribute name="name" type="xs:ID"/> +
-_ </xs:complexType>
+[source,xml,indent=4,subs=+quotes]
+----
+<xs:complexType name="Book">
+  <xs:sequence>
+    __<xs:element name="author" type="xs:IDREF"/>__
+    <!-- ... -->
+  </xs:sequence>
+</xs:complexType>
+<xs:complexType name="AuthorBio">
+  <xs:sequence> <!-- ... --> </xs:sequence>
+  __<xs:attribute name="name" type="xs:ID"/>__
+</xs:complexType>
+----
 
 Schema-derived Java value class:
+[source,java,indent=4]
+----
+public class Book {
+    @XmlIDREF
+    java.lang.Object getAuthor() {...}
 
-public class Book \{ +
-@XmlIDREF +
-java.lang.Object getAuthor() \{...} +
- +
-/** Parameter referencedObj should have an attribute or +
-* child element with base type of xs:ID by validation +
-* or marshal time. +
-*/ +
-void setAuthor(java.lang.Object referencedObj)\{...} +
-} +
-public class AuthorBio\{ +
-@XmlID +
-String getName()\{...} +
-void setName(String value)\{...} +
+    /** Parameter referencedObj should have an attribute or
+     * child element with base type of xs:ID by validation
+     * or marshal time.
+     */
+    void setAuthor(java.lang.Object referencedObj) {...}
 }
+public class AuthorBio {
+    @XmlID
+    String getName() {...}
+    void setName(String value) {...}
+}
+----
 
 Demonstration of a Java content instance
 referencing another instance:
 
-Book book = ...; +
-AuthorBio authorBio = ...; +
-book.setAuthor(authorBio); +
-authorBio.setName("<some author’s name>"); +
-// The content instance root used to validate or marshal book must +
-// also include "authorBio" as a child element somewhere. +
+[source,java,indent=8]
+----
+Book book = ...;
+AuthorBio authorBio = ...;
+book.setAuthor(authorBio);
+authorBio.setName("<some author’s name>");
+// The content instance root used to validate or marshal book must
+// also include "authorBio" as a child element somewhere.
 // A Java content instance is not included
+----
 
-Note that _ID_ and _IDREF_ mechanisms do not
+Note that `ID` and `IDREF` mechanisms do not
 incorporate type definitions that can be referenced. To generate
 stronger typing for a JAXB property representing an IDREF, the schema
 customization described in link:jaxb.html#a1809[See
@@ -2459,7 +2516,7 @@
 binding of an IDREF via customization] illustrates the generation of
 stronger typing for the above example.
 
-=== [[a1306]]Attribute Wildcard
+=== Attribute Wildcard
 
 Attribute wildcard is an extensibility
 feature in XML Schema. It enables an XML document author to introduce
@@ -2470,11 +2527,12 @@
 of a complex type definition that contains an attribute wildcard,
 directly or indirectly, provides dynamic access to the wildcard
 attributes via the following property:
-
+[source,java,indent=8]
+----
 // Return, by reference, a mapping of
 attribute QName and String. +
 Map<QName, String> getOtherAttributes();
-
+----
 The returned attribute map provides dynamic
 access to wildcard attributes associated with a complex type definition.
 The key to the map is the attribute’s QName and the key’s value is the
@@ -2482,57 +2540,61 @@
 
 The schema-derived property getter method is
 annotated, either explicitly or by default mapping annotations, with the
-mapping annotation _@XmlAnyAttribute_ , specified in Section 8.
+mapping annotation `@XmlAnyAttribute`, specified in Section 8.
 
 The following code examples show the JAXB
 binding for xs:anyAttribute and how to manipulate wildcard attributes
 using this binding.
 
 .Bind anyAttribute to a JAXB property
-
- +
-<xs:schema targetNamespace="http://a.org"> +
-<xs:complexType name=" _widget_ "> +
-<xs:anyAttribute/> +
-<xs:attribute name="color" type="xs:string"/> +
-</xs:complexType> +
-</xs:schema> +
- +
-package org.a; +
-import javax.xml.namespace.QName; +
-import java.util.Map; +
-public class _Widget_ \{ +
-String getColor()\{...} +
-void setColor(String value)\{...} +
-@XmlAnyAttribute Map<QName, String> _getOtherAttributes_ ()\{...} +
+[source,xml,indent=4,subs=+quotes]
+----
+<xs:schema targetNamespace="http://a.org">
+  <xs:complexType name="**widget**">
+    <xs:anyAttribute/>
+    <xs:attribute name="color" type="xs:string"/>
+  </xs:complexType>
+</xs:schema>
+----
+[source,java,indent=4,subs=+quotes]
+----
+package org.a;
+import javax.xml.namespace.QName;
+import java.util.Map;
+public class **Widget**  {
+    String getColor() {...}
+    void setColor(String value) {...}
+    @XmlAnyAttribute Map<QName, String> **getOtherAttributes** () {...}
 }
+----
 
 .Dynamic access to wildcard attribute and attribute use
+[source,java,indent=4]
+----
+import jakarta.xml.bind.DatatypeConverter;
+Widget w = ...;
+Map attrs = w.getOtherAttributes();
 
- +
-import jakarta.xml.bind.DatatypeConverter; +
-Widget w = ...; +
-Map attrs = w.getOtherAttributes(); +
- +
-// access schema-defined global attribute associated with +
-// complexType defintion widget via attribute wildcard. +
-QName IS_OPEN=new QName("http://example.org", "isOpen"); +
-boolean isOpen = DatatypeConverter.parseBoolean(attrs.get(IS_OPEN)); +
- +
-// set wildcard attribute value +
-attrs.put(IS_OPEN, DatatypeConverter.printBoolean(false)); +
- +
-// semantically the same results setting attribute use via +
-// dynamic or static setter for attribute use. +
-attrs.put(new QName("color"), "red"); +
- +
-// iterate over wildcard attributes +
-for (Map.Entry<QName,String> e: attrs.entrySet()) \{ +
-System.out.println("Attribute: " + e.getKey() + +
-" Value:" + e.getValue()); +
+// access schema-defined global attribute associated with
+// complexType defintion widget via attribute wildcard.
+QName IS_OPEN = new QName("http://example.org", "isOpen");
+boolean isOpen = DatatypeConverter.parseBoolean(attrs.get(IS_OPEN));
+
+// set wildcard attribute value
+attrs.put(IS_OPEN, DatatypeConverter.printBoolean(false));
+
+// semantically the same results setting attribute use via
+// dynamic or static setter for attribute use.
+attrs.put(new QName("color"), "red");
+
+// iterate over wildcard attributes
+for (Map.Entry<QName,String> e: attrs.entrySet()) {
+System.out.println("Attribute: " + e.getKey() +
+                   " Value:" + e.getValue());
 }
+----
 
-=== [[a1316]]Redefine
+=== Redefine
 
 Redefinition allows an existing XML Schema
 component to be “renamed” and its new definition takes the place of the
@@ -2568,41 +2630,46 @@
 represents the redefined complex type definition.
 
 .Binding of a redefined complex type definition
-
-File: v1.xsd: +
-<!-- Extracted from Section 4.2.2 of [XSD1] --> +
-<xs:complexType name="personName"> +
-<xs:sequence> +
-<xs:element name="title" type="xs:string" minOccurs="0"/> +
-<xs:element name="forename" type="xs:string" +
-minOccurs="0" maxOccurs="unbounded"/> +
-</xs:sequence> +
+[source,xml,indent=4]
+----
+File: v1.xsd:
+<!-- Extracted from Section 4.2.2 of [XSD1] -->
+<xs:complexType name="personName">
+  <xs:sequence>
+    <xs:element name="title" type="xs:string" minOccurs="0"/>
+    <xs:element name="forename" type="xs:string"
+                minOccurs="0" maxOccurs="unbounded"/>
+  </xs:sequence>
 </xs:complexType>
 
-File: v2.xsd: +
-<xs:redefine schemaLocation="v1.xsd"> +
-<xs:complexType name="personName"> +
-<xs:complexContent> +
-<xs:extension base="personName"> +
-<xs:sequence> +
-<xs:element name="generation" minOccurs="0"/> +
-</xs:sequence> +
-</xs:extension> +
-</xs:complexContent> +
-</xs:complexType> +
+File: v2.xsd:
+<xs:redefine schemaLocation="v1.xsd">
+  <xs:complexType name="personName">
+    <xs:complexContent>
+      <xs:extension base="personName">
+        <xs:sequence>
+          <xs:element name="generation" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
 </xs:redefine>
-
-Java binding: +
-// binding of file v1.xsd complex type definition for personName +
-@XmlType(name="_PersonName") +
-public class _PersonName \{ +
-void setTitle(String value); String getTitle(); +
-List<String> getForename(); +
-} +
-// binding of v2.xsd redefinition for complex type personName +
-@XmlType(name="PersonName") +
-public class PersonName extends _PersonName \{ +
-void setGeneration(Object value); Object getGeneration(); +
+----
+Java binding:
+[source,java,indent=4]
+----
+// binding of file v1.xsd complex type definition for personName
+@XmlType(name="_PersonName")
+public class _PersonName {
+    void setTitle(String value); String getTitle();
+    List<String> getForename();
+}
+// binding of v2.xsd redefinition for complex type personName
+@XmlType(name="PersonName")
+public class PersonName extends _PersonName {
+    void setGeneration(Object value); Object getGeneration();
+}
+----
 
 ==== Bind Redefined Group Definition
 
@@ -2623,13 +2690,13 @@
 constraints can be checked by optional validation that can be enabled at
 either unmarshal and/or marshal time.
 
-=== [[a1332]]Content Model - Particle, Model Group, Wildcard
+=== Content Model - Particle, Model Group, Wildcard
 
 This section describes the possible Java
 bindings for the content model of a complex type definition schema
-component with a \{content type} property of _mixed_ or _element-only_ .
+component with a _{content type}_ property of `mixed` or `element-only`.
 The possible element content(s) and the valid ordering between those
-contents are constrained by the \{particles} describing the complex type
+contents are constrained by the _{particles}_ describing the complex type
 definition’s content model. The Java binding of a content model is
 realized by the derivation of one or more content-properties to
 represent the element content constrained by the model group. Section
@@ -2642,16 +2709,17 @@
 uniquely named element declaration occurring within a content model to a
 single JAXB property. The model group schema component constraint,
 element declarations consistent, specified in [XSD-Part 1] ensures that
-all element declarations/references having the same \{target namespace}
-and \{name} must have the same top-level type definition. This model
+all element declarations/references having the same {target namespace}
+and {name} must have the same top-level type definition. This model
 allows the JAXB technology user to specify only the content and the JAXB
 implementation infers the valid ordering between the element content
-based on the \{particles} constraints in the source schema. However,
-there do exist numerous scenarios that this ideal binding is not
+based on the _{particles}_ constraints in the source schema.
+
+However, there do exist numerous scenarios that this ideal binding is not
 possible for parts of the content model or potentially the entire
 content model. For these cases, default binding has a fallback position
 of representing the element content and the ordering between the content
-using a _general content model_ . The scenarios where one must fallback
+using a _general content model_. The scenarios where one must fallback
 to the general content model will be identified later in this
 subsection.
 
@@ -2663,18 +2731,18 @@
 easiest to introduce this concept without allowing for repeating
 occurrences of model groups within a content model. Conceptually, this
 approach presents all element declarations within a content model as a
-set of element declaration \{name}’s. Each one of the \{name}’s is
+set of element declaration __{name}__’s. Each one of the __{name}__’s is
 mapped to a content-property. Based on the element content that is set
 by the JAXB application via setting content-properties, the JAXB
 implementation can compute the order between the element content using
 the following methods.
 
 Computing the ordering between element
-content within [children] of an element information item
+content within *[children]* of an element information item
 
 * Schema constrained fixed ordering or
 semantically insignificant ordering
-
++
 The sequence in the schema represents an
 ordering between children elements that is completely fixed by the
 schema. Schema-constrained ordering is not exposed to the Java
@@ -2683,24 +2751,28 @@
 ordering. No new ordering constraints between children elements can be
 introduced by an XML document or Java application for this case.
 Additionally, the Java application does not need to know the ordering
-between children elements. When the compositor is _all_ , the ordering
+between children elements. When the compositor is `all`, the ordering
 between element content is not specified semantically and any ordering
 is okay. So this additional case can be handled the same way.
 
 * Schema only constrains content and does not
 significantly constrain ordering
-
++
 If the ordering between the children elements
 is significant and must be accessible to the Java application, then the
 ordering is naturally preserved in Java representation via a collection.
 Below are examples where schema provides very little help in
 constraining order based on content.
-
- <xs:choice maxOccurs="unbounded"> ...
-</xs:choice> +
++
+--
+[source,xml,indent=4]
+----
+<xs:choice maxOccurs="unbounded"> ... </xs:choice>
 <xs:sequence maxOccurs="unbounded"> ... </xs:sequence>
+----
+--
 
-==== [[a1344]]General content property
+==== General content property
 
 A general content property is, as its name
 implies, the most general of all content properties. Such a property can
@@ -2715,12 +2787,12 @@
 
 A general content property is capable of
 representing both element information items and character data items
-occurring within [children] of an element information item. Character
+occurring within *[children]* of an element information item. Character
 data is inserted into the list as java.lang.String values. Element data
 is added to the list as instances of JAXB element. To support wildcard
 content occurring as part of a general content property, xml data
 content with no static Java binding is added and accessed from the list
-as instances of _org.w3c.org.dom.Node_ .
+as instances of `org.w3c.org.dom.Node`.
 
 The schema-derived Collection property getter
 method is annotated, either explicitly or by default mapping
@@ -2728,28 +2800,27 @@
 within the Collection.
 
 * If the content model is mixed, the property
-is annotated as _@XmlMixed_ . See link:jaxb.html#a1369[See Bind
+is annotated as `@XmlMixed`. See link:jaxb.html#a1369[See Bind
 mixed content]“for details.
 * link:jaxb.html#a1351[See Collection
 of Element types]“describes an optimized binding of a collection of
 element values, instead of a collection of JAXB elements annotated with
-_@XmlElementRefs(@XmlElementRef, ...)_ .
+`@XmlElementRefs(@XmlElementRef, ...)`.
 * If optimized binding can not be used, each
-element in the content model is represented by an _@XmlElementRef_ ,
+element in the content model is represented by an `@XmlElementRef`,
 described in link:jaxb.html#a1223[See Bind to a Simple Element
 property]“. If there is more than one element annotations needed, they
-must occur as elements in the map annotation _@XmlElementRefs_ specified
+must occur as elements in the map annotation `@XmlElementRefs` specified
 in Section 8.10.3, “@XmlElementRef”.
 
-===== [[a1351]]Collection of Element types
+===== Collection of Element types
 
 If the content model for a general content
 property meets all of the following constraints, the collection can be
 optimized to be a list of value classes instead of a list of JAXB
 elements.
 
-* If the content model is not mixed and does
-not contain a wildcard.
+* If the content model is not mixed and does not contain a wildcard.
 * If none of the element declarations in the
 content model are abstract or the head of an element substitution group.
 * If none of the element declarations in the
@@ -2761,202 +2832,205 @@
 * If not more than one element declaration in
 the content model is nillable.
 
-Such a collection is annotated with @
-_XmlElements_ annotation, specified in Section 8, that contains a
-_@XmlElement_ annotation for each unique Java datatype within the
-collection. The _@XmlElement_ annotation associates an element name with
+Such a collection is annotated with `@XmlElements` annotation,
+specified in Section 8, that contains a
+`@XmlElement` annotation for each unique Java datatype within the
+collection. The `@XmlElement` annotation associates an element name with
 each unique Java datatype in the collection
 
-===== [[a1359]]Examples
+===== Examples
 
 *_Example 1:_ Complex content model of Elements with primitive types* +
-
-<xs:complexType name="Base"> +
-<xs:choice maxOccurs="unbounded"> +
-<xs:element name="A" type="xs:string"/> +
-<xs:element name="B" type="xs:string"/> +
-<xs:element name="C" type="xs:int"/> +
-</xs:choice> +
-</xs:complexType> +
-public class ObjectFactory \{ +
-// Element instance factories. +
-JAXBElement<String> createBaseA(String value)\{...} +
-JAXBElement<String> createBaseB(String value)\{...} +
-JAXBElement<Integer> createBaseC(Integer value)\{...} +
-// Type factories +
-Base createBase()\{...} +
-} +
-public class Base \{ +
- +
-/** +
-* A general content list that can contain +
-* element instances representing A, B and/or C. +
-*/ +
-@XmlElementRefs(\{ @XmlElementRef(name="A", value=JAXBElement.class), +
-@XmlElementRef(name="B", value=JAXBElement.class), +
-@XmlElementRef(name="C", value=JAXBElement.class)}) +
-List<JAXBElement> getAOrBOrC()\{...} +
+[source,xml,indent=4]
+----
+<xs:complexType name="Base">
+  <xs:choice maxOccurs="unbounded">
+    <xs:element name="A" type="xs:string"/>
+    <xs:element name="B" type="xs:string"/>
+    <xs:element name="C" type="xs:int"/>
+  </xs:choice>
+</xs:complexType>
+----
+[source,java,indent=4]
+----
+public class ObjectFactory \{
+    // Element instance factories.
+    JAXBElement<String> createBaseA(String value) {...}
+    JAXBElement<String> createBaseB(String value) {...}
+    JAXBElement<Integer> createBaseC(Integer value) {...}
+    // Type factories
+    Base createBase() {...}
 }
 
+public class Base {
+    /**
+     * A general content list that can contain
+     * element instances representing A, B and/or C.
+     */
+    @XmlElementRefs({
+        @XmlElementRef(name="A", value=JAXBElement.class),
+        @XmlElementRef(name="B", value=JAXBElement.class),
+        @XmlElementRef(name="C", value=JAXBElement.class)})
+    List<JAXBElement> getAOrBOrC()\{...}
+}
+----
+
 *_Example 2:_ Optimized Binding to a Collection of Element Types* +
 XML Schema fragment:
-
-<xs:complexType name="AType"/> +
-<xs:complexType name="BType"/> +
-<xs:complexType name="FooBar"> +
-<xs:choice maxOccurs="unbounded"> +
-<xs:element name="foo" type="AType"/> +
-<xs:element name="bar" type="BType"/> +
-</xs:choice> +
+[source,xml,indent=4]
+----
+<xs:complexType name="AType"/>
+<xs:complexType name="BType"/>
+<xs:complexType name="FooBar">
+  <xs:choice maxOccurs="unbounded">
+    <xs:element name="foo" type="AType"/>
+    <xs:element name="bar" type="BType"/>
+  </xs:choice>
 </xs:complexType>
+----
 
- Default derived Java code:
+Default derived Java code:
+[source,java,indent=4]
+----
+public class AType {...}
+public class BType {...}
 
-public class AType \{ ... } +
-public class BType \{ ... } +
- +
-class ObjectFactory \{
+class ObjectFactory {
+    // element instance factories only
+    JAXBElement<AType> createFooBarFoo(AType value);
+    JAXBElement<BType> createFooBarBar(BType value);
+}
 
- // element instance factories only +
-JAXBElement<AType> createFooBarFoo(AType value); +
-JAXBElement<BType> createFooBarBar(BType value); +
-} +
- +
-public class FooBar \{
-
- /** +
-‘* Collection of element types: AType and BType. */ +
-@XmlElements(\{@XmlElement(value=AType.class, name="Foo"), +
-@XmlElement(value=BType.class, name="Bar")}) +
-List<Object> getFooOrBar() \{...} +
+public class FooBar {
+    /** Collection of element types: AType and BType. */
+    @XmlElements({
+        @XmlElement(value=AType.class, name="Foo"),
+        @XmlElement(value=BType.class, name="Bar")})
+    List<Object> getFooOrBar() {...}
 };
+----
 
-==== [[a1369]]Bind mixed content
+==== Bind mixed content
 
-When a complex type definition’s _\{content
-type}_ is “mixed,” its character and element information content is
+When a complex type definition’s _{content type}_
+is “mixed,” its character and element information content is
 bound to general content list as described in
 link:jaxb.html#a1344[See General content property].” Character
-information data is inserted as instances of _java.lang.String_ into a
+information data is inserted as instances of `java.lang.String` into a
 JAXB collection property.
 
 The schema-derived Collection property getter
 method is annotated, either explicitly or by default mapping
-annotations, with the mapping annotation _@XmlMixed_ , specified in
+annotations, with the mapping annotation `@XmlMixed`, specified in
 Section 8.
 
 *_Example:_* +
 
 Schema fragment loosely derived from mixed
-content example from +
-[XSD Part 0].
-
-<xs:element name="letterBody"> +
-<xs:complexType mixed="true"> +
-<xs:sequence> +
-<xs:element name="name" type="xs:string"/> +
-<xs:element name="quantity" type="xs:positiveInteger"/> +
-<xs:element name="productName" type="xs:string"/> +
-<!-- etc. --> +
-</xs:sequence> +
-</xs:complexType> +
+content example from [XSD Part 0].
+[source,xml,indent=4]
+----
+<xs:element name="letterBody">
+  <xs:complexType mixed="true">
+    <xs:sequence>
+      <xs:element name="name" type="xs:string"/>
+      <xs:element name="quantity" type="xs:positiveInteger"/>
+      <xs:element name="productName" type="xs:string"/>
+      <!-- etc. -->
+    </xs:sequence>
+  </xs:complexType>
 </xs:element>
+----
 
 Derived Java code:
-
-import java.math.BigInteger; +
-class ObjectFactory \{
-
- // element instance factories only +
-JAXBElement<LetterBody> createLetterBody(LetterBody value); +
-JAXBElement<String> createLetterBodyName(String value); +
-JAXBElement<BigInteger> +
-createLetterBodyQuantity(BigInteger value); +
-JAXBElement<String> +
-createLetterBodyProductName(String value); +
-} +
-public class LetterBody implements JAXBElement<LetterBody> \{ +
- +
-/** Mixed content can contain instances of Element classes +
-Name, Quantity and ProductName. Text data is represented as +
-java.util.String for text. +
-*/ +
-@XmlMixed +
-@XmlElementRefs(\{ +
-@XmlElementRef(name="productName", type=JAXBElement.class), +
-@XmlElementRef(name="quantity", type=JAXBElement.class), +
-@XmlElementRef(name="name", type=JAXBElement.class)}) +
-List getContent()\{...} +
+[source,java,indent=4]
+----
+import java.math.BigInteger;
+class ObjectFactory {
+    // element instance factories only
+    JAXBElement<LetterBody> createLetterBody(LetterBody value);
+    JAXBElement<String> createLetterBodyName(String value);
+    JAXBElement<BigInteger> createLetterBodyQuantity(BigInteger value);
+    JAXBElement<String> createLetterBodyProductName(String value);
 }
 
-The following instance document
+public class LetterBody implements JAXBElement<LetterBody> {
+    /** Mixed content can contain instances of Element classes
+        Name, Quantity and ProductName. Text data is represented as
+        java.util.String for text. */
+    @XmlMixed
+    @XmlElementRefs( {
+        @XmlElementRef(name="productName", type=JAXBElement.class),
+        @XmlElementRef(name="quantity", type=JAXBElement.class),
+        @XmlElementRef(name="name", type=JAXBElement.class)})
+    List getContent() {...}
+}
+----
 
-<letterBody> +
-Dear Mr.<name>Robert Smith</name> +
-Your order of <quantity>1</quantity> <productName>Baby +
-Monitor</productName> shipped from our warehouse. .... +
+The following instance document
+[source,xml,indent=4]
+----
+<letterBody>
+Dear Mr.<name>Robert Smith</name>
+Your order of <quantity>1</quantity> <productName>Baby
+Monitor</productName> shipped from our warehouse. ....
 </letterBody>
+----
 
 could be constructed using JAXB API.
-
-LetterBody lb =
-ObjectFactory.createLetterBody(null); +
-List gcl = lb.getContent(); +
-gcl.add("Dear Mr."); +
-gcl.add(ObjectFactory.createLetterBodyName("Robert Smith")); +
-gcl.add("Your order of "); +
+[source,java,indent=4]
+----
+LetterBody lb = ObjectFactory.createLetterBody(null);
+List gcl = lb.getContent();
+gcl.add("Dear Mr.");
+gcl.add(ObjectFactory.createLetterBodyName("Robert Smith")); 
+gcl.add("Your order of ");
 gcl.add(ObjectFactory.
-
- createLetterBodyQuantity(new
-BigInteger("1"))); +
-gcl.add(ObjectFactory.createLetterBodyProductName("Baby Monitor")); +
+    createLetterBodyQuantity(new BigInteger("1")));
+gcl.add(ObjectFactory.createLetterBodyProductName("Baby Monitor"));
 gcl.add("shipped from our warehouse");
+----
 
 Note that if any element instance is placed
-into the general content list, _gcl_ , that is not an instance of
-_LetterBody.Name_ , _LetterBody.Quantity_ or _LetterBody.ProductName_ ,
+into the general content list, _gcl_, that is not an instance of
+`LetterBody.Name`, `LetterBody.Quantity` or `LetterBody.ProductName`,
 validation would detect the invalid content model. With the fail fast
 customization enabled, element instances of the wrong type are detected
-when being added to the general content list, _gcl_ .
+when being added to the general content list, _gcl_.
 
-==== Bind wildcard schema component[[a1384]]
+==== Bind wildcard schema component
 
-A wildcard is mapped to a simple
-content-property with:
+A wildcard is mapped to a simple content-property with:
 
-* Content-property name set to the constant “
-_any_ ”. A binding schema customization could provide a more
+* Content-property name set to the constant “`any`”.
+A binding schema customization could provide a more
 semantically meaningful content-property name.
-* Content-property base type set to
-_java.lang.Object_ by default.
-
+* Content-property _base type_ set to
+`java.lang.Object` by default.
 Wildcard content is represented as one of the
 following:
-
-. JAXB element +
-Either an instance of _jakarta.xml.bind.JAXBElement<T>_ or a JAXB class
-annotated with _@XmlRootElement. +
-_ Corresponds to a recognized global element tag name registered with
-the instance _jakarta.xml.bind.JAXBContext_ , meaning the schema(s)
+.. JAXB element +
+Either an instance of `jakarta.xml.bind.JAXBElement<T>` or a JAXB class
+annotated with `@XmlRootElement`. +
+Corresponds to a recognized global element tag name registered with
+the instance `jakarta.xml.bind.JAXBContext`, meaning the schema(s)
 describing the element content is registered with the _JAXBContext_
 instance, see link:jaxb.html#a298[See JAXBContext] on how
-bindings are registered with a _JAXBContext_ instance.,
-. instance of _jakarta.xml.bind.JAXBElement. +
-_ Corresponds to an unknown element name but a recognized type
-definition specified by _@xsi:type_ on the element. JAXBElement
-_declaredType_ is set to _java.lang.Object_ since the unknown element
-declaration’s default type is _xs:anyType_ .
-. element node instance of a supported xml
-infoset API +
+bindings are registered with a `JAXBContext` instance.,
+.. instance of `jakarta.xml.bind.JAXBElement`. +
+Corresponds to an unknown element name but a recognized type
+definition specified by *_@xsi:type_* on the element. JAXBElement
+_declaredType_ is set to `java.lang.Object` since the unknown element
+declaration’s default type is `xs:anyType`.
+.. element node instance of a supported xml infoset API. +
 Necessary to represent Xml data content that does not have a schema
 defined element or type definition. Such content is allowed by element
-_xs:any_ with attribute _@processContents=”lax”_ or _"skip"_ .
-. See content-property predicate for a
-wildcard.
-. If the _maxOccurs_ is greater than one, the
+*xs:any* with attribute *@processContents="lax"* or "`*skip*`".
+* See content-property predicate for a wildcard.
+* If the `maxOccurs` is greater than one, the
 content property is mapped to a collection property. The default
 collection property is a List property of base type java.lang.Object.
-. These is no default value.
+* There is no _default value_.
 
 Since the schema does not contain any
 information about the element content of a wildcard content, even the
@@ -2966,149 +3040,146 @@
 The schema-derived property getter method for
 representing wildcard content is annotated, either explicitly or by
 default mapping annotations, with the mapping annotation
-_@XmlAnyElement_ , specified in Section 8. The @XmlAnyElement annotation
+`@XmlAnyElement`, specified in Section 8. The @XmlAnyElement annotation
 element values are derived in terms of the abstract model properties for
 wildcard summarized in link:jaxb.html#a5032[See Wildcard Schema
 Component] as follows:
 
 .Annotate JAXB property with @XmlAnyElement element-value pairs
-[width="100%",cols="50%,50%",options="header",]
+[cols="1,1",options="header"]
 |===
-|@XmlAnyElement element
-|@XmlAnyElement element value
-|lax |If wildcard
-schema component’s _\{process contents}_ is _lax_ or _strict_ , +
-set _@XmlAnyElement.lax()_ to _true_ . +
+| @XmlAnyElement element | @XmlAnyElement element value
+| lax | If wildcard schema component’s _{process contents}_ is `lax` or `strict_`, +
+set `@XmlAnyElement.lax()` to `true`. +
  +
-else if _\{process contents}_ is _skip_ , set _@XmlAnyElement.lax()_ to
-_false_ .
-
-|value |
-_jakarta.xml.bind.annotation. +
-W3CDomHandler.class_
+else if _{process contents}_ is `skip`, set `@XmlAnyElement.lax()` to `false`.
+| value | `jakarta.xml.bind.annotation.W3CDomHandler.class`
 |===
 
-==== [[a1402]]Bind a repeating occurrence model group
+==== Bind a repeating occurrence model group
 
 A choice or sequence model group, containing
-more than one member, with a repeating occurrence, _maxOccurs_ attribute
+more than one member, with a repeating occurrence, `maxOccurs` attribute
 greater than one, is bound to a general content property in the
 following manner:
 
-* Content-property name is derived in
-following ways:
-* If a named model group definition is being
-referenced, the value of its \{name} property is mapped to a Java
+* Content-property _name_ is derived in following ways:
+** If a named model group definition is being
+referenced, the value of its _{name}_ property is mapped to a Java
 identifier for a method using the algorithm specified in
 link:jaxb.html#a4656[See The Name to Identifier Mapping
 Algorithm].
-* To derive a content property name for
+** To derive a content property _name_ for
 unnamed model group, see link:jaxb.html#a4780[See Deriving an
 identifier for a model group].
-* Content-property base type set to
-_java.lang.Object_ . A binding schema customization could provide a more
+* Content-property _base type_ set to
+`java.lang.Object`. A binding schema customization could provide a more
 specialized java class.
-* Content-property predicate validates the
+* Content-property _predicate_ validates the
 order between element instances in the list and whether the occurrence
 constraints for each element instance type is valid according to the
 schema.
-* Since the _maxOccurs_ is always greater
+* Since the `maxOccurs` is always greater
 than one, the content property is mapped to a collection property. The
 default collection property is a List property.
-* These is no default value.
+* There is no _default value_.
 
 The schema-derived collection property is
 annotated as specified in link:jaxb.html#a1344[See General
-content property]“and link:jaxb.html#a1351[See Collection of
-Element types]“.
+content property] and link:jaxb.html#a1351[See Collection of
+Element types].
 
-====== Local structural Constraints
+*_Local structural Constraints_*
 
 The list content property’s value must
 satisfy the content specification of the model group. The ordering and
 element contents must satisfy the constraints specified by the model
 group.
 
-==== [[a1414]]Content Model Default Binding
+==== Content Model Default Binding
 
 The following rules define _element_ binding
 style for a complex type definition’s content model.
 
-. If \{content type} is mixed, bind the
+. If _{content type}_ is mixed, bind the
 entire content model to a general content property with the
-content-property name “ _content_ ”. See
-link:jaxb.html#a1369[See Bind mixed content]” for more details.
-. If (1) a particle has \{max occurs} >1 and
-(2) its \{term} is a model group and (3) all the particles in the model
+content-property name `"content"`. See
+link:jaxb.html#a1369[See Bind mixed content] for more details.
+. If (1) a particle has _{max occurs}_ >1 and
+(2) its _{term}_ is a model group and (3) all the particles in the model
 group have \{terms} that bind to different Java datatypes, bind to a
 collection of element types. See complete list of constraints required
 to perform this optimized binding in link:jaxb.html#a1351[See
-Collection of Element types]“.
-. If (1) a particle has \{max occurs} >1 and
-(2) its \{term} is a model group, then that particle and its descendants
+Collection of Element types].
+. If (1) a particle has _{max occurs}_ >1 and
+(2) its _{term}_ is a model group, then that particle and its descendants
 are mapped to one general content property that represents them. See
 link:jaxb.html#a1402[See Bind a repeating occurrence model
-group]” for details.
+group] for details.
 . Process all the remaining particles (1)
-whose \{term} are wildcard particles and (2) that did not belong to a
-repeating occurrence model group bound in step. 2. If there is only one
+whose _{term}_ are wildcard particles and (2) that did not belong to a
+repeating occurrence model group bound in step 2. If there is only one
 wildcard, bind it as specified in link:jaxb.html#a1384[See Bind
 wildcard schema component].” If there is more than one, then fallback to
 representing the entire content model as a single general content
 property. See link:jaxb.html#a1344[See General content
 property]).
-. Process all particles (1) whose \{term} are
+. Process all particles (1) whose _{term}_ are
 element declarations and (2) that do not belong to a repeating
-occurrence model group bound in step.2.
-
-First, we say a particle has a label L if it
-refers to an element declaration whose \{name} is L. Then, for all the
-possible pair of particles P and P’ in this set, if the following
+occurrence model group bound in step 2.
++
+First, we say a particle has a label _L_ if it
+refers to an element declaration whose _{name}_ is _L_. Then, for all the
+possible pair of particles _P_ and _P’_ in this set, if the following
 constraints are not met:
-
-. If P and P’ have the same label, then they
++
+--
+.. If _P_ and _P’_ have the same label, then they
 must refer to the same element declaration.
-. If P and P’ refer to the same element
+.. If _P_ and _P’_ refer to the same element
 reference, then its closest common ancestor particle may not have
-sequence as its \{term}.
-
+sequence as its _{term}_.
+--
++
 If either of the above constraints are
 violated, it is not possible to map each element declaration to a unique
 content property. Fallback to representing the entire content model as a
 single general content property.
 
++
 Otherwise, create a content property for each
-label L as follows:
+label _L_ as follows:
 
-* The content property name is derived from
-label name L.
-* The base type will be the Java type to
+* The content property _name_ is derived from label name _L_.
+* The _base type_ will be the Java type to
 which the referenced element declaration maps.
-* The content property predicate reflects the
+* The content property _predicate_ reflects the
 occurrence constraint.
-* The content property collection type
-defaults to ‘ _list_ ’ if there exist a particle with label L that has
-\{maxOccurs} > 1.
+* The content property _collection type_
+defaults to `‘list’` if there exist a particle with label _L_ that has
+_{maxOccurs}_ > 1.
 * For the default value, if all particles
-with label L has a \{term} with the same \{value constraint} default or
+with label _L_ has a _{term}_ with the same _{value constraint}_ default or
 fixed value, then this value. Otherwise none.
 
 Below is an example demonstrating of not
 meeting the uniqueness constraints of 5(a) and 5(b) specified above.
 
- +
-<xs:sequence> +
-<xs:choice> +
-<xs:element ref="ns1:bar"/> (A) +
-<xs:element ref="ns2:bar"/> (B) +
-</xs:choice> +
-<xs:element ref="ns1:bar"/> (C) +
+[source,xml,indent=4]
+----
+<xs:sequence>
+  <xs:choice>
+    <xs:element ref="ns1:bar"/> (A)
+    <xs:element ref="ns2:bar"/> (B)
+  </xs:choice>
+  <xs:element ref="ns1:bar"/> (C)
 </xs:sequence>
+----
 
-The pair (A,B) violates the first clause
+The pair _(A,B)_ violates the first clause
 because they both have the label “bar” but they refer to different
-element declarations. The pair (A,C) violates the second clause because
-their nearest common ancestor particle is the outermost _<sequence>_ .
+element declarations. The pair _(A,C)_ violates the second clause because
+their nearest common ancestor particle is the outermost `<sequence>`.
 This model group fragment is bound to a general content property.
 
 ===== Default binding of content model “derived by extension”
@@ -3118,54 +3189,60 @@
 definition and a content-property introduced by a “derive by extension”
 derived complex type definition, the content-properties from the
 colliding property on are represented by a general content property with
-the default property name _rest_ .
+the default property name `rest`.
 
-*_Example:_* + +
-derivation by extension content model with a content-property collision.
+*_Example:_* derivation by extension content model with a content-property collision.
 
 Given XML Schema fragment:
-
-<xs:complexType name="Base"> +
-<xs:sequence> +
-<xs:element name="A" type="xs:int"/> +
-<xs:element name="B" type="xs:int"/> +
-</xs:sequence> +
-</xs:complexType> +
- +
-<xs:complexType name="Derived"> +
-<xs:complexContent> +
-<xs:extension base="Base"> +
-<xs:sequence> +
-<xs:element name="A" type="xs:int"/> +
-</xs:sequence> +
-</xs:extension>
-
- </xs:complexContent> +
+[source,xml,indent=4]
+----
+<xs:complexType name="Base">
+  <xs:sequence>
+    <xs:element name="A" type="xs:int"/>
+    <xs:element name="B" type="xs:int"/>
+  </xs:sequence>
 </xs:complexType>
 
-Default binding derived Java code:
+<xs:complexType name="Derived">
+  <xs:complexContent>
+    <xs:extension base="Base">
+      <xs:sequence>
+        <xs:element name="A" type="xs:int"/>
+      </xs:sequence>
+    </xs:extension>
+  </xs:complexContent>
+</xs:complexType>
+----
 
-public class Base \{ +
-int getA()\{...} void setA(int)\{...} +
-int getB()\{...} void setB(int)\{...} +
-} +
- +
-public class Derived extends Base \{ +
-/** +
-* Instances of Derived.A must be placed in this general +
-* content propert that represents the rest of the content +
-* model. link:#a5375[24] */ +
-List getRest()\{...} +
-} +
-class ObjectFactory \{ +
-// element instance factories only +
-JAXBElement<Integer> createDerivedA(Integer value)\{...} +
+Default binding derived Java codefootnote:[Specifying a
+customization of the local element declaration A within Derived complex
+type to a different property name than A would avoid the fallback
+position for this case.]:
+[source,java,indent=4]
+----
+public class Base {
+    int getA() {...} void setA(int) {...}
+    int getB() {...} void setB(int) {...}
 }
 
-===== [[a1442]]Bind single occurrence choice group to a choice content property
+public class Derived extends Base {
+    /**
+     * Instances of Derived.A must be placed in this general
+     * content propert that represents the rest of the content
+     * model. */
+    List getRest() {...}
+}
 
-Setting the _choiceContentProperty_ attribute
-of _<jaxb:globalBindings>_ as specified in
+class ObjectFactory {
+    // element instance factories only
+    JAXBElement<Integer> createDerivedA(Integer value) {...}
+}
+----
+
+===== Bind single occurrence choice group to a choice content property
+
+Setting the `choiceContentProperty` attribute
+of `<jaxb:globalBindings>` as specified in
 link:jaxb.html#a1582[See Usage] enables this customized binding
 option.
 
@@ -3174,13 +3251,17 @@
 a choice model group as follows:
 
 * The choice content property name is either
-the referenced model group definition _\{name}_ or obtained using the
+the referenced model group definition _{name}_ or obtained using the
 algorithm specified in link:jaxb.html#a4780[See Deriving an
 identifier for a model group].
-* The choice content property _base type_ is
+* The choice content property `base type` is
 the first common supertype of all items within the choice model group,
-with _java.lang.Object_ always being a common root for all Java
-objects.link:#a5376[25]
+with `java.lang.Object` always being a common root for all Java
+objects.footnote:[Note that primitive
+Java types must be represented by their Java wrapper classes when base
+type is used in the choice content property method signatures. Also, all
+sequence descendants of the choice are treated as either a general
+content property or are mapped to their own value class.]
 * The predicate
 * The collection type defaults to List if one
 or more items in the choice model group bind to List.
@@ -3189,35 +3270,38 @@
 A choice property consists of the following
 methods:
 
-* The _getChoiceID_ method returns the set
-value. If the property has no set value then the value _null_ is
+* The `getChoiceID` method returns the set
+value. If the property has no set value then the value `null` is
 returned. Note that a set value of a primitive Java type is returned as
 an instance of the corresponding Java wrapper class.
-* The _setChoiceID_ method has a single
-parameter that is the type of the choice content property _base type_ .
+* The `setChoiceID` method has a single
+parameter that is the type of the choice content property `base type`.
 
-The _globalBindings_ and property
-customization attribute, _choiceContentProperty,_ enables this
-customized binding _._ The customization is specified in
-link:jaxb.html#a1580[See <globalBindings> Declaration].”
+The `globalBindings` and property
+customization attribute, `choiceContentProperty`, enables this
+customized binding. The customization is specified in
+link:jaxb.html#a1580[See <globalBindings> Declaration].
 
 *_Example:_* +
 
-XML Schema representation of a choice model
-group.
-
-<xs:choice> +
-<xs:element name="foo" type="xs:int"/> +
-<xs:element name="bar" type="xs:string"/> +
+XML Schema representation of a choice model group.
+[source,xml,indent=4]
+----
+<xs:choice>
+  <xs:element name="foo" type="xs:int"/>
+  <xs:element name="bar" type="xs:string"/>
 </xs:choice>
+----
 
 Derived choice content property method
 signatures:
+[source,java,indent=8]
+----
+void setFooOrBar(Object) {...}
+Object getFooOrBar() {...}
+----
 
- void setFooOrBar(Object)\{...} +
-Object getFooOrBar()\{...}
-
-=== [[a1459]]Modifying Schema-Derived Code
+=== Modifying Schema-Derived Code
 
 There exist a number of use cases on why a
 developer would find it beneficial to modify schema-derived classes.
@@ -3228,16 +3312,15 @@
 Since schema-derived classes are derived from a data description
 language, the derived classes only represent data and have no
 object-level functionality.
-* Add polymorphic methods to Java class
-hierarchy generated from XML Schema type definition derivation
-hierarchy.
+* Add polymorphic methods to Java class hierarchy generated
+from XML Schema type definition derivation hierarchy.
 * Initialize a JAXB property or field
 representing an XML element with a default value. Regretfully, XML
 Schema element defaulting is insufficient to accomplish this. Note that
 XML Schema attribute defaulting is sufficient and does not require this
 approach.
 
-The JAXB 2.0 schema-derived class was
+The JAXB schema-derived class was
 designed to be easily understandable and modifiable by a developer. For
 many development environments, it is not sufficient to only run the
 schema compiler once due to modification of the schema-derived classes.
@@ -3254,40 +3337,34 @@
 distinguishing between developer code and generated code in a
 schema-derived class.The next section describes the portable format for
 distinguishing between generated and developer added/modified methods
-and /or fields in a schema-derived class.
+and/or fields in a schema-derived class.
 
 ==== Distinguish between generated and user added code
 
 A schema compiler must have an option to
-generate the Common Annotation, _@javax.annotation.Generated_
+generate the Jakarta Annotation, `@jakarta.annotation.Generated`
 annotation, specified in [CA], on every generated class, method and
-field. If a developer does modify an _@Generated_ annotated method or
-field, they must denote this modification by deleting the _@Generated_
+field. If a developer does modify an `@Generated` annotated method or
+field, they must denote this modification by deleting the `@Generated`
 annotation. If a developer adds a new method or field, it will not have
-an _@Generated_ annotation on it. Based on these conventions, a JAXB
+an `@Generated` annotation on it. Based on these conventions, a JAXB
 implementation in conjunction with an IDE or other external tool, would
 be able to support regeneration of schema-derived code while preserving
 developer additions/modifications to methods and fields in a
 schema-derived class.
 
 When schema compiler option to generate
-_@Generated_ annotation is selected, the table describes the annotation
+`@Generated` annotation is selected, the table describes the annotation
 to be generated.
 
 .Annotate generated class, field and property with @Generated element-value pairs
-[width="100%",cols="50%,50%",options="header",]
+[cols="1,1",options="header"]
 |===
-|@Generated element
-|@Generated element value
-|value |fully
-qualified class name of schema compiler
-
-|date |date of
-generation of schema-derived class. Value must follow the ISO 8601
-standard.
-
-|comment
-|optional. Is implementation specific.
+| @Generated element | @Generated element value
+| value | fully qualified class name of schema compiler
+| date | date of generation of schema-derived class.
+Value must follow the ISO 8601 standard.
+| comment | optional. Is implementation specific.
 |===
 
 === Default Binding Rule Summary
@@ -3297,44 +3374,62 @@
 precedence over this summary.
 
 * Bind the following to Java package:
-*  XML Namespace URI
-* Bind the following XML Schema components to
-Java value class:
-* Named complex type
+** XML Namespace URI
+* Bind the following XML Schema components to Java value class:
+** Named complex type
 * Bind to typesafe enum class:
-* A named simple type definition with a
-basetype that derives from “ _xs:NCName_ ” and has enumeration facets.
+** A named simple type definition with a
+basetype that derives from `"xs:NCName"` and has enumeration facets.
 * Bind the following XML Schema components to
-an element instance factory that returns _jakarta.xml.bind.JAXBElement<T>_
-* A global element declaration with a named
-type definition.
-* Local element declaration with a named type
+an element instance factory that returns `jakarta.xml.bind.JAXBElement<T>`
+** A global element declaration with a named type definition.
+** Local element declaration with a named type
 definition that can be inserted into a general content list.
-* Bind the following XML Schema components to
-a Java Element class
-* A global element declaration with anonymous
+* Bind the following XML Schema components to a Java Element class
+** A global element declaration with anonymous
 type definition to a Java value class.
-* Local element declaration with anonymous
+** Local element declaration with anonymous
 type definition that can be inserted into a general content list.
 * Bind to Java property
-* Attribute use
-* Particle with a term that is an element
-reference or local element declaration.
-
+** Attribute use
+** Particle with a term that is an element reference or local element declaration.
++
 Additionally, generate an element property
 for an element reference to the head element of a substitution group.
-
 * Bind to JAXB property: +
-_getOtherAttributes(): java.util.Map<QName, String>_
-* Attribute Wildcard occurring directly or
+`getOtherAttributes(): java.util.Map<QName, String>`
+** Attribute Wildcard occurring directly or
 indirectly via an attribute group reference in a complex type
 definition.
 * Bind model group and wildcard content with
-a repeating occurrence and complex type definitions with _mixed_
-\{content type} to:
-* A general content property - a List
+a repeating occurrence and complex type definitions with `mixed`
+_{content type}_ to:
+** A general content property - a List
 content-property that holds Java instances representing element
 information items and character data items. To support dynamic Xml
 content that validates against xs:any processContents=”lax” or “skip”,
 allow instances of org.w3c.dom.Node into the list.
 
+.Summarize default XSD to Java binding for Figure 5.1 and Figure 5.2
+[cols="1,1",options="header"]
+|===
+| XML Schema | Java Representation
+| Schema targetNamespace | Package
+| Global Element Declaration with named type definition | ObjectFactory.elementInstanceFactory method returning JAXBElement<T>
+Value must follow the ISO 8601 standard.
+| Global Complex Type Definition (Named) | value class/class + ObjectFactory.typeInstanceFactory method
+a| Global Simple Type Definition
+
+* derive base of string
+* has @enum facet(s) | enum type
+| SimpleType facets | ConstraintPredicate
+a| Attribute Uses
+
+Local Element Declaration | Property
+a| facet *@maxOccurs > 1* xsd:list | PropertyStyle List
+a| **@fixed**PropertyStyle | Constant
+| Global Element Declaration with anonymous type definition | value class for anonymous type + ObjectFactory.typeInstanceFactory + ObjectFactory.elementInstanceFactory method
+| Element reference to SubstitutionGroup Head maxOccurs = “1” | Simple + Element property
+| Element reference to SubstitutionGroup Head maxOccurs > “1” | List<JAXBElement<T>>
+|===
+
diff --git a/spec/src/main/asciidoc/ch09-compatibility.adoc b/spec/src/main/asciidoc/ch09-compatibility.adoc
index 5e4c20f..e739f28 100644
--- a/spec/src/main/asciidoc/ch09-compatibility.adoc
+++ b/spec/src/main/asciidoc/ch09-compatibility.adoc
@@ -2,7 +2,7 @@
 // Copyright (c) 2020 Contributors to the Eclipse Foundation
 //
 
-== [[a3815]]Compatibility
+== Compatibility
 
 This section describes conformance
 requirements for an implementor of this specification. A JAXB
