XML path semantics

On the XML path string, you can state at a particular path component that subsequent components in the path are parsed/validated. This assumes the modified element type has been substituted by another type using an xsi:type attribute at runtime.

To indicate a type modifier on an XML path component, the XML path uses an illegal character in XML element names to prevent character collision.

The "{" character indicates the text is the name of the substituted type, ending at the "}" character. XML path components that are specified after the re-declared component walks the hierarchy based on the substituted type.

These path examples use this schema for validation:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <xsd:element name="root">
                <xsd:element ref="child" maxOccurs="unbounded"/>
      </xsd:element>
      <xsd:element name="child" type="abstracttype"/>
      <xsd:complexType name="abstracttype" abstract="true">
                <xsd:attribute name="abstractattr"/>
      </xsd:complexType>
      <xsd:complexType name="realtype">
                <xsd:simpleContent>
                          <xsd:extension base="abstracttype">
                                    <xsd:attribute name="realattr"/>
                          </xsd:extension>
                </xsd:simpleContent>
      </xsd:complexType>
      <xsd:complexType name="otherrealtype">
                <xsd:complexContent>
                          <xsd:extension base="abstracttype">
                                    <xsd:sequence>
                                        <xsd:element name="othergrandchild" type="xsd:string"/>
                                    </xsd:sequence>
                          </xsd:extension>
                </xsd:complexContent>
      </xsd:complexType>
</xsd:schema>