MS Xaml 2017
MS Xaml 2017
 No Trade Secrets. Microsoft does not claim any trade secret rights in this documentation.
   Patents. Microsoft has patents that may cover your implementations of the technologies
    described in the Open Specifications. Neither this notice nor Microsoft's delivery of the
    documentation grants any licenses under those or any other Microsoft patents. However, a given
    Open Specification may be covered by Microsoft Open Specification Promise or the Community
    Promise. If you would prefer a written license, or if the technologies described in the Open
    Specifications are not covered by the Open Specifications Promise or Community Promise, as
    applicable, patent licenses are available by contacting iplg@microsoft.com.
   Trademarks. The names of companies and products contained in this documentation may be
    covered by trademarks or similar intellectual property rights. This notice does not grant any
    licenses under those rights. For a list of Microsoft trademarks, visit
    www.microsoft.com/trademarks.
   Fictitious Names. The example companies, organizations, products, domain names, email
    addresses, logos, people, places, and events depicted in this documentation are fictitious. No
    association with any real company, organization, product, domain name, email address, logo,
    person, place, or event is intended or should be inferred.
Reservation of Rights. All other rights are reserved, and this notice does not grant any rights
other than specifically described above, whether by implication, estoppel, or otherwise.
Tools. The Open Specifications do not require the use of Microsoft programming tools or
programming environments in order for you to develop an implementation. If you have access to
Microsoft programming tools and environments you are free to take advantage of them. Certain
Open Specifications are intended for use in conjunction with publicly available standard
specifications and network programming art, and assumes that the reader either is familiar with the
aforementioned material or has immediate access to it.
                                                                                                  1 / 86
[MS-XAML-2017]
XAML Object Mapping Specification 2017
Copyright © 2017 Microsoft Corporation
Table of Contents
 1    Preface ..................................................................................................................... 8
 3    Overview ................................................................................................................ 10
     3.1 Xaml Vocabularies and the Xaml Schema Information Set ......................................... 10
     3.2 Xaml Instances, Xaml Documents and the Xaml Information Set ............................... 10
     3.3 Well-Formed and Valid Xaml Information Sets ......................................................... 11
     3.4 The Structure of Information in Xaml ..................................................................... 11
     3.5 A Note on Notation .............................................................................................. 12
                                                                                                                                  2 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
        5.3.1.6 Only List, Dictionary, or Static Members May Be Read-Only ........................... 21
        5.3.1.7 Properties Required by Attachable Members ................................................. 21
        5.3.1.8 Properties Unique to Attachable Members .................................................... 21
        5.3.1.9 Event Type Must Be XamlEvent .................................................................. 22
        5.3.1.10 Properties Not Supported by Directives ...................................................... 22
      5.3.2 Notes (Non-Normative) ................................................................................... 22
    5.4 Text Syntax Information Item ............................................................................... 22
      5.4.1 Constraints .................................................................................................... 23
        5.4.1.1 Information Set Properties Must Be of Correct Type ...................................... 23
      5.4.2 Notes (Non-Normative) ................................................................................... 23
    5.5 Value Syntax Information Item.............................................................................. 23
      5.5.1 Constraints .................................................................................................... 23
        5.5.1.1 Information Set Properties Must Be of Correct Type ...................................... 24
    5.6 Pattern Syntax Information Item ........................................................................... 24
      5.6.1 Constraints .................................................................................................... 24
        5.6.1.1 Information Set Properties Must Be of Correct Type ...................................... 24
    5.7 Constructor Information Item ................................................................................ 24
      5.7.1 Constraints .................................................................................................... 24
        5.7.1.1 Information Set Properties Must Be of Correct Type ...................................... 25
                                                                                                                            3 / 86
[MS-XAML-2017]
XAML Object Mapping Specification 2017
Copyright © 2017 Microsoft Corporation
        6.3.1.7 x:Subclass Directive Rules ......................................................................... 33
        6.3.1.8 x:ClassModifier Directive Rules ................................................................... 33
        6.3.1.9 x:TypeArguments Directive Rules ............................................................... 33
        6.3.1.10 x:FieldModifier Directive Rules .................................................................. 33
      6.3.2 Validity Constraints ........................................................................................ 33
        6.3.2.1 Values Must Be of the Appropriate Type ...................................................... 34
        6.3.2.2 If Member Non-Attached, Non-Directive, Element Type Must Have Member ..... 34
        6.3.2.3 Attached Member Target Type Must Match ................................................... 34
        6.3.2.4 Text Value of Non-Text Member Must Match Text Syntax ............................... 34
        6.3.2.5 Read-Only Members .................................................................................. 34
        6.3.2.6 Names MUST Be Unique Within a Namespace Scope ..................................... 35
        6.3.2.7 x:Key Directive Rules ................................................................................ 35
        6.3.2.8 x:FieldModifier Directive Rules .................................................................... 35
        6.3.2.9 Members of Type x:XamlType and Type Names Must Refer to Valid Type......... 35
      6.3.3 Notes (Non-Normative) ................................................................................... 36
    6.4 Text Node Information Item .................................................................................. 36
      6.4.1 Constraints .................................................................................................... 37
        6.4.1.1 Information Set Properties Must Be of Correct Type ...................................... 37
      6.4.2 Notes (Non-Normative) ................................................................................... 37
                                                                                                                              4 / 86
[MS-XAML-2017]
XAML Object Mapping Specification 2017
Copyright © 2017 Microsoft Corporation
      7.3.4 x:Name Directive ........................................................................................... 49
      7.3.5 x:Key Directive .............................................................................................. 49
      7.3.6 x:Uid Directive ............................................................................................... 49
      7.3.7 x:Class Directive ............................................................................................ 49
      7.3.8 x:Subclass Directive ....................................................................................... 50
      7.3.9 x:ClassModifier Directive ................................................................................. 50
      7.3.10 x:FieldModifier Directive ................................................................................ 50
      7.3.11 x:TypeArguments Directive ............................................................................ 51
      7.3.12 x:DirectiveChildren ....................................................................................... 51
      7.3.13 xml:lang Directive ........................................................................................ 51
      7.3.14 xml:space Directive ...................................................................................... 52
      7.3.15 xml:base Directive ........................................................................................ 52
      7.3.16 x:Arguments Directive .................................................................................. 52
      7.3.17 x:FactoryMethod Directive ............................................................................. 53
      7.3.18 ArrayExtension.Items .................................................................................... 53
      7.3.19 ArrayExtension.Type ..................................................................................... 53
      7.3.20 StaticExtension.Member ................................................................................ 54
      7.3.21 TypeExtension.Type ...................................................................................... 54
      7.3.22 TypeExtension.TypeName .............................................................................. 54
      7.3.23 ReferenceExtension.Name ............................................................................. 55
    7.4 Intrinsic Text Syntax Information Items ................................................................. 55
      7.4.1 x:Char Text Syntax ........................................................................................ 55
      7.4.2 x:Single Text Syntax ...................................................................................... 55
      7.4.3 x:Double Text Syntax ..................................................................................... 56
      7.4.4 x:Byte Text Syntax ......................................................................................... 56
      7.4.5 x:Int16 Text Syntax ....................................................................................... 57
      7.4.6 x:Int32 Text Syntax ....................................................................................... 57
      7.4.7 x:Int64 Text Syntax ....................................................................................... 57
      7.4.8 x:Decimal Text Syntax .................................................................................... 57
      7.4.9 x:Uri Text Syntax ........................................................................................... 57
      7.4.10 x:Timespan Text Syntax ................................................................................ 58
      7.4.11 x:Boolean Text Syntax .................................................................................. 58
      7.4.12 x:XamlType Text Syntax ............................................................................... 58
      7.4.13 xml:space Text Syntax .................................................................................. 59
      7.4.14 x:XamlEvent Text Syntax .............................................................................. 59
      7.4.15 x:NameReference Text Syntax ....................................................................... 59
      7.4.16 x:TypeArguments Text Syntax ....................................................................... 59
      7.4.17 x:FactoryMethod Text Syntax ......................................................................... 60
    7.5 Intrinsic Constructor Information Items .................................................................. 60
      7.5.1 Static Extension String Constructor .................................................................. 60
      7.5.2 Type Extension String Constructor .................................................................... 60
      7.5.3 Reference Extension String Constructor ............................................................ 61
                                                                                                                              5 / 86
[MS-XAML-2017]
XAML Object Mapping Specification 2017
Copyright © 2017 Microsoft Corporation
      8.5.2 Collapsible Whitespace Characters .................................................................... 63
      8.5.3 Linefeed Collapsing Characters ......................................................................... 64
      8.5.4 Authoritative Schema ..................................................................................... 65
    8.6 Document Processing Rules................................................................................... 65
      8.6.1 XML:document Processing ............................................................................... 66
      8.6.2 Object Node Creation from an XML:element ...................................................... 67
        8.6.2.1 Notes (non-normative) .............................................................................. 71
      8.6.3 Member Node Creation from an XML:attribute ................................................... 71
        8.6.3.1 Notes (non-normative) .............................................................................. 73
      8.6.4 Value Creation from Attribute Text ................................................................... 74
      8.6.5 Member Node Creation from an XML:element .................................................... 74
      8.6.6 Member Node Creation from Content ................................................................ 76
      8.6.7 Object Node Creation from a Markup Extension in an Attribute ............................ 78
        8.6.7.1 Markup Extension Parsing .......................................................................... 78
        8.6.7.2 Converting Parsed MarkupExtension to Xaml Information Set Nodes ............... 81
      8.6.8 Member Lookup ............................................................................................. 84
      8.6.9 Xml Namespace Mapping Conversion ................................................................ 84
9 References ............................................................................................................. 85
11 Index ................................................................................................................... 87
                                                                                                                                6 / 86
[MS-XAML-2017]
XAML Object Mapping Specification 2017
Copyright © 2017 Microsoft Corporation
1     Preface
    About This Specification
    Xaml, the eXtensible Application Markup Language, is a system for representing structured
    information. This specification defines three aspects of Xaml:
The Xaml Schema Information Set - a model for defining a particular Xaml vocabulary.
The Xaml Information Set - a model for describing the information in a Xaml instance.
    The process for converting an XML [XML] document into the corresponding Xaml Information Set,
      as directed by one or more Xaml Schema Information Sets.
                                                                                                7 / 86
    [MS-XAML-2017]
    XAML Object Mapping Specification 2017
    Copyright © 2017 Microsoft Corporation
2     Language Notes
    In this specification, the words that are used to define the significance of each particular
    requirement are capitalized. These words are used in accordance with their definitions in [RFC2119]
    and their meaning is reproduced here for convenience:
    MUST. This word, or the adjective "REQUIRED," means that the item is an absolute requirement
      of the specification.
    SHOULD. This word, or the adjective "RECOMMENDED," means that there may exist valid reasons
      in particular circumstances to ignore this item, but the full implications should be understood and
      the case carefully weighed before choosing a different course.
    MAY. This word, or the adjective "OPTIONAL," means that this item is truly optional. For
      example, one implementation may choose to include the item because a particular marketplace
      or scenario requires it or because it enhances the product. Another implementation may omit the
      same item.
                                                                                                   8 / 86
    [MS-XAML-2017]
    XAML Object Mapping Specification 2017
    Copyright © 2017 Microsoft Corporation
3     Overview
    Xaml, the eXtensible Application Markup Language, is a system for representing structured
    information. This specification defines two abstract information models: the Xaml Schema
    Information Set model, and the Xaml Information Set model. The Xaml Information Set ('Xaml
    Infoset' for short) defines the structure of information that a Xaml instance can represent. The Xaml
    Schema Information Set allows specific Xaml vocabularies to be defined. This specification also
    defines a set of rules for transforming an XML document into a Xaml Information Set.
    XML is a common format for Xaml. (The term "Xaml Document" refers to an XML document that
    represents a Xaml Information Set.) But while this specification does not define any other
    representations, any physical representation may be used as long as it can represent the
    information in the Xaml Information Set.
    This first section of the specification describes the roles of the information sets, how they relate to
    applications that use Xaml, and how the transformation rules come into play.
    This specification does not mandate any particular application or interpretation of a Xaml Document.
    Each individual application of Xaml will define its own Xaml Vocabulary. For example, Xaml could be
    used to define the structure of a graphical user interface, or it could be used to represent a list of
    pieces of music. This specification does not define any such application-specific vocabularies. This
    specification provides the information to enable such vocabularies to be defined.
    A particular Xaml vocabulary is defined as a Xaml Schema. A schema defines the object types that
    may be used in a Xaml instance, determining the members and content each type supports.
    (Individual applications will likely go further, assigning meanings to element types. However, that is
    beyond the scope of a Xaml Schema.) Furthermore, some schema features are advisory - a schema
    may contain information which is not strictly required to process a Xaml Document, but which may
    be useful to tools. (For example, the information may enable compilers to provide better warnings,
    or for editors to offer better discoverability.)
    A Xaml Schema is always associated with a particular namespace URI. XML representations of Xaml
    indicate their vocabulary through XML namespaces - the namespace URI of an element or attribute
    indicates the Xaml Schema to which that node belongs.
    This specification does not define a Xaml Schema file format. Instead, this specification defines an
    abstract data model for schemas, the Xaml Schema Information Set. This specifies the information
    required to form a complete schema. It is defined in section 5, "Xaml Schema Information Set".
3.2 Xaml Instances, Xaml Documents and the Xaml Information Set
    A Xaml Instance is a structured set of information, made up of the elements described in "Xaml
    Information Set", (section 6). The term does not mandate any particular representation. The term
    Xaml Document means an XML document that represents a Xaml Instance. The process for
    converting the XML in a Xaml Document into the Xaml Instance it represents is described in
    "Creating a Xaml Information Set from XML", (section 8).
    The conversion process is defined in terms of the XML Information Set ([XML Infoset]), so the input
    XML document does not need to be a text stream formatted as required by the XML specification.
    Any representation may be used, as long as it can be mapped to the logical XML Information Set
    structure. For example, a Xaml Document could use a binary format, or it might be held in memory
                                                                                                        9 / 86
    [MS-XAML-2017]
    XAML Object Mapping Specification 2017
    Copyright © 2017 Microsoft Corporation
 as a set of objects or data structures. As with Xaml Schemas, this specification is not concerned with
 the physical representation of a Xaml Document, only the logical structure.
 This specification defines two characteristics that a Xaml Information Set may possess. It may be a
 well-formed Xaml Information Set. And it may be a valid Xaml Information Set.
 A Xaml Information Set is well-formed if it conforms to all of the rules for well-formedness in "Xaml
 Information Set", (section 6).
 A Xaml Information Set is valid with respect to one or more schemas if it conforms to all of the rules
 for validity in "Xaml Information Set", (section 6).
 A Xaml Document, i.e. an XML document representing a Xaml Instance, is valid with respect to a set
 of schemas if it can be successfully converted into a Xaml Infoset using the process defined in
 Section 8, and the resulting Xaml Infoset is valid with respect to those schemas.
 There are obvious parallels between the world of XML and Xaml. Each have schemas, documents
 and concepts of being well-formed and valid. The main difference is that the structure of the Xaml
 Information Set is more specialized than the XML Information Set. In particular, although there is no
 requirement that a Xaml instance be represented as objects in an object-oriented programming
 system, the Xaml Information Set has been designed to make such a mapping straightforward. Xaml
 Schemas are correspondingly specialized.
 The structure of the information in a Xaml Information Set is described formally in section "Xaml
 Schema Information Set", (section 5), but as an aid to understanding, there follows a short,
 informal, non-normative description of the structure.
 Information in a Xaml Instance is in one of three forms: objects, members, or text. The root of a
 Xaml Instance is an object. Objects can have members; an object's members are unordered.
 Members have values, which consist either of objects or text. Some members may have multiple
 values (forming an ordered sequence); in such cases, a single member's values may comprise a
 mixture of objects and text. Figure 1 shows an example XML representation of Xaml, and an
 illustration of the structure of the Xaml Infoset the XML represents.
                                                                                                10 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
 Figure 1: Structure of Xaml Information (non-normative)
 Some non-normative sections of this specification use terminology common in object oriented
 programming systems. An 'instance' of a type means an object of that type. 'Construction' refers to
 the act of creating an object.
 When referring to Information Set properties (whether Xaml or XML), this specification uses
 bracketed notation. For example if 'elem' refers to an XML element in an XML information set,
 elem[attributes] refers to the [attributes] property of that element.
                                                                                                 11 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
4     Information Set Type System
    The Xaml Schema Information Set and the Xaml Information Set each define a data model. The
    models define various Information Item types. For example, the Xaml Schema Information Set
    defines a Schema Information Item (section 5.1).
    Information Items have various properties, each of which has a type. In some cases, the type is
    another Information Item defined elsewhere in the data model. For example, the XamlMember
    Information Item (section 5.3) in the Xaml Schema Information Set has a [value type] property,
    and its type is another part of the model: a XamlType Information Item (section 5.2). However,
    these data models are not defined entirely in terms of themselves. For example, a XamlType
    Information Item has a [name] property whose type is XamlName. The following sections define
    the types such as these that are used in the information sets in this specification.
4.2 XamlName
    A XamlName is a Text String that conforms to the following grammar (using the ABNF syntax
    defined in [RFC4234]):
    This assumes the following general category values as defined in the Unicode Character Database
    [UNICODE5.0.0/2007]:
Abbreviation Description
                                                                                                12 / 86
    [MS-XAML-2017]
    XAML Object Mapping Specification 2017
    Copyright © 2017 Microsoft Corporation
4.3   Namespace Uri
4.4 Boolean
 A value of this type represents an allowed location for a member in an XML representation--some
 members (e.g., the xml:lang Directive defined in section 7.3.13) may only be specified as attributes
 in XML, and not as member elements; some (e.g. the x:Items member defined in section 7.3.1)
 may not appear in XML at all, and are only used in a Xaml Information Set. Values of this type are
 one of: Any, AttributeOnly, InitialMemberElementsOnly, AttributeOrInitialMemberElementsOnly, or
 None.
 IntitialMemberElementsOnly means that the member can be one of the initial member elements
 inside an element. As soon as content or a member element occurs that isn't an member with
 [allowed location] of InitialMemberElementsOnly or AttributeOrInitialMemberElementsOnly, no more
 (InitialMemberElementsOnly or AttributeOrInitialMemberElementsOnly) members may occur inside
 the element.
 A value of this type represents an XML namespace prefix and the corresponding XML namespace
 URI. It has two properties: [prefix] of type Text String, and [uri] of type Namespace Uri.
4.7 Set
 Some properties have a type defined as a 'Set of' some type, or a list of types. For example,
 XamlType Information Item (section 5.2)has a [types assignable to] property whose type is 'Set of
 XamlType Information Items'. Such property may contain any number of values of the type or types
 in question. Order is not significant in a set. Sets do not contain duplicates--any given value is either
 in a set or it is not. Sets may be empty.
 Some properties have a type defined as an 'Ordered Collection of' some type, or a list of types. For
 example, Member Node Information Item (section 6.3) has a [values] property, whose type is
 defined as 'Ordered collection of information items; each item may be either an Object Node
 Information Item, or a Text Node Information Item'. Such properties may contain any number of
 values of the type or types in question. The values are strictly ordered. Ordered collections may
 contain duplicates, e.g. the second and fourth item in an ordered collection may be the same value.
 An ordered collection may be empty.
                                                                                                   13 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
5     Xaml Schema Information Set
    A Xaml Schema is an abstract definition of a set of Xaml Instances. A Xaml Infoset is said to be an
    instance of a Xaml Schema if it conforms to all of the rules for well-formedness and validity in
    section (6), "Xaml Information Set".
    This specification does not mandate a representation or format for a Xaml Schema. Instead, it
    defines an abstract data model called the Xaml Schema Information Set, or 'Schema Infoset' for
    short, which defines the elements that make up a Xaml Schema.
A Xaml Schema Information Set can contain five kinds of items. These are listed in Table 2.
       Schema Information Item      Identifies a schema, and defines which information items constitute that
                                    schema's definition.
       XamlType Information         Describes a type of element that instances of this schema may contain.
       Item
       XamlMember Information       Describes a member that may be applied to elements in instances of this
       Item                         schema.
       Text Syntax Information      Describes the valid textual representations of the values of a particular
       Item                         member or type.
    The information items that make up the Xaml Schema Information Set have identity. For example,
    given two XamlMember Information Items, it is meaningful to ask if their [value type] properties
    each refer to the same XamlType Information Item (or more informally, whether the two members
    have the same type). Since this specification does not mandate any particular representation for
    schema infosets, implementations are free to represent this in any way. For example, a
    programming system might choose to represent item identity through object identity where such a
    concept is supported; a serialized representation might choose to add identifiers that do not
    correspond directly to infoset properties purely to handle item identity.
    The following sections describe the data properties that make up each of the information item types.
    These sections also define constraints a Xaml Schema must meet.
    In some cases, notes are provided to describe the purpose of certain data properties in more detail.
    This is done in situations where the normative interpretation of these properties is defined in other
    sections, but where the intended meaning of the properties would be hard to infer. These notes are
    provided purely as an aid to understanding, and are marked as 'non-normative' to indicate that they
    does not constitute a formal part of the Xaml Schema Infoset specification. The 'Purpose' column of
    each table defining an information item has a similar role, and is also non-normative.
    Each Xaml Schema MUST have one Schema Information Item. The Schema Information Item is the
    root of a schema's definition, defining which other items belong to this schema.
                                                                                                                14 / 86
    [MS-XAML-2017]
    XAML Object Mapping Specification 2017
    Copyright © 2017 Microsoft Corporation
 Table 3: Schema Information Item Properties
    [target               Namespace Uri          The target XML namespace for this schema.
    namespace]
    [types]               Set of XamlType        The object types that instances of this schema may
                          Information Items      contain.
    [assignable           Set of XamlType        Types that are not used directly as values in instances of
    types]                Information Items      this schema, but which are used by XamlMember
                                                 Information Items for assignability purposes.
    [directives]          Set of XamlMember      The directive attributes that may be applied to objects in
                          Information Items      instances of this schema.
    [compatible with      Set of Schema          The schemas with which this schema is considered
    schemas]              Information Items      compatible.
5.1.1 Constraints
 A Xaml Schema Information Set'sSchema Information Item MUST conform to the rules defined in
 this section.
 Each property of a Schema Information Item MUST have a value of the type specified for that
 property in Table 3.
For each XamlMember Information Item 'd' in [directives], d[is directive] MUST be True.
 For each XamlType Information Item 't' in [types] the value of t[name] MUST be different from the
 [name] of any other XamlType Information Item in [types].
 For each XamlMember Information Item 'd' in [directives] the value of d[name] MUST be different
 from the [name] of any other XamlMember Information Item in [directives].
 The [compatible with schemas] property addresses two scenarios. It is used when new versions of a
 vocabulary are developed that are compatible with older versions. It is also used to handle cases
 where multiple distinct namespaces may identify structurally identical schemas.
 The types in [types] can be used for assignability purposes as well as the types in [assignable
 types]. The significance of [assignable types] is that types in this property do not support the full
 range of features that types in [types] do.
                                                                                                        15 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
5.2   XamlType Information Item
 A XamlType Information Item defines a data type. For example, an Object Node Information Item
 (section 6.2) has a [type] property that refers to a XamlType Information Item.
[name] XamlName The name that represents this type. Case is significant.
      [types assignable     Set of XamlType     The types to which instances of this type are considered
      to]                   Information Items   assignable.
      [is default           Boolean             When True, this type may always be used as the type for
      constructible]                            an object node. When False, constraints apply, which are
                                                described later in this specification.
[is nullable] Boolean True if members of this type may have a Null value.
      [text syntax]         Null, or Text       The text syntax that defines how instances of this type can
                            Syntax              be represented as text.
                            Information Item
      [content property]    Null, or a          The member to which content of an element of this type
                            XamlMember          can be assigned. (Allows XML representations to omit the
                            Information Item    member element.)
      [dictionary key       Null, or a          The member that acts as the key if an element of this type
      property]             XamlMember          is added to a dictionary without a key being specified
                            Information Item    explicitly. The designated member is effectively an alias for
                                                the x:Key Directive (section 7.3.5).
      [name property]       Null, or a          The member that, if set, holds the name of an element of
                            XamlMember          this type. The designated member is effectively an alias for
                            Information Item    the x:Name Directive (section 7.3.4).
      [xml lang             Null, or a          The member that holds the value of the xml:lang attribute
      property]             XamlMember          (when present)--the designated member is effectively an
                            Information Item    alias for the xml:lang Directive (section 7.3.13).
      [trim surrounding     Boolean             True if whitespace immediately before and after elements
      whitespace]                               of this type in an XML representation should be removed.
      [is whitespace        Boolean             True if, when a Xaml processor reads an XML
      significant                               representation of an element of this type, whitespace
      collection]                               content should not be collapsed.
      [is list]             Boolean             True if elements of this type contain an ordered sequence
                                                of items.
      [is dictionary]       Boolean             True if elements of this type contain a set of items, each
                                                identified by a key.
                                                                                                        16 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
   Name                    Type                 Purpose (non-normative)
   [allowed types]         Set of XamlType      The types that can be added as items inside a list or
                           Information Items    dictionary. (Only used if [is list] or [is dictionary] is True.)
   [allowed key            Set of XamlType      The types that can be used as keys. (Only used if [is
   types]                  Information Items    dictionary] is True.)
[is xdata] Boolean True if elements of this type contain literal XML data.
   [is name scope]         Boolean              Used to determine the scope in which values of the x:Name
                                                Directive (section 7.3.4) must be unique.
   [constructors]          Set of Constructor   The constructors that can be used to create instances of
                           Information Items    this type.
   [return value type]     Null, or a           The type of value provided by this type. (Only used for
                           XamlType             markup extensions � see the x:MarkupExtension (section
                           Information Item     7.2.22) type.)
   [is generic]            Boolean              True if elements of this type can accept x:TypeArguments
                                                Directive (section 7.3.11).
The [types assignable to] property contains the complete set of types from this schema to which
instances of this type are assignable. If a vocabulary wishes to provide common object-oriented
semantics, such as having a type be assignable to all the types to which its base class is assignable,
it must make that explicit. However, there is an additional complexity regarding schemas that list
other schemas in their [compatible with schemas]. Types do not include types from the schemas
with which they are compatible with their [types assignable to]. Instead, this specification presumes
that equivalently named types in compatible schemas are compatible. To simplify the validity checks
that presume this, the following functions are defined:
Informally, a type tFrom is assignable to a type tTo if either tFrom and tTo are compatible, or if
tFrom [types assignable to] contains a type which is compatible with tTo; types are compatible with
types that have the same name and compatible schemas.
                                                                                                            17 / 86
[MS-XAML-2017]
XAML Object Mapping Specification 2017
Copyright © 2017 Microsoft Corporation
5.2.1   Constraints
 The XamlType Information Items in a Xaml Schema Information Set MUST conform to the rules
 defined in this section.
 Each property of a XamlType Information Item MUST have a value of the type specified for that
 property in Table 4.
 If a type's [content property] is not Null, that type's [members] MUST contain the member in
 [content property].
 If a type's [name property] is not Null, that type's [members] MUST contain the member in [name
 property].
If [content property] is not Null, [is list] and [is dictionary] MUST both be False.
 If [is list] is True, [is dictionary] MUST be False (from which the converse follows: if [is dictionary] is
 True, [is list] MUST be False.)
[allowed types] MUST be empty unless either [is list] or [is dictionary] is True.
 If [types assignable to] contains the intrinsic x:MarkupExtension (section 7.2.22) type, [return value
 type] MUST NOT be Null.
 If [types assignable to] does not contain the intrinsic x:MarkupExtension (section 7.2.22) type,
 [return value type] MUST be Null.
 If [types assignable to] does not contain the intrinsic x:MarkupExtension (section 7.2.22) type,
 [constructors] MUST be empty.
                                                                                                     18 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
5.2.1.11     No Two Constructors May Have the Same Number of Arguments
 For each Constructor Information Item ctor in [constructors], [constructors] MUST NOT contain any
 other Constructor Information Items that have the same number of items in their [arguments] as
 there are in ctor[arguments].
 Both [members] and [types assignable to] are comprehensive within a schema, i.e., types do not
 automatically inherit everything that types in [types assignable to] have. For example suppose type
 B has member BP, and a type D has a [types assignable to] containing B, if D wishes to make BP
 available, D[members] must contain BP. The reason for this is not to force Xaml vocabularies to use
 'normal' inheritance rules. Vocabularies that wish to offer a typical object-oriented style of
 inheritance are free to do so, they must simply be explicit.
 However, type assignability is honored in Xaml Instances. For example, consider [allowed types].
 Items in a list or dictionary may also be of types that are assignable to types in [allowed types], as
 determined by each item type's [types assignable to] property. Likewise, for [allowed key types],
 key values may also be of types that are assignable to types in this list.
 In short, Xaml Schemas are required to be explicit; validation of Xaml Instances does whatever the
 schema says.
 A XamlMember Information Item provides information about a member. Members are either defined
 by a particular XamlType Information Item, or they are directives.
      [owner type]         Null or XamlType    The type that defines this member, or Null if [is directive] is
                           Information Item    True.
      [value type]         XamlType            The type that values for this member must be assignable to.
                           Information Item
      [text syntax]        Null, or Text       A member-specific text syntax that defines how this
                           Syntax              member can be represented as text. (If present, this takes
                           Information Item    precedence over [value type][text syntax].)
      [is read only]       Boolean             True if the member cannot be set. (Only used for lists and
                                               dictionaries.)
      [is static]          Boolean             True if the member is associated directly with the defining
                                               type, and not with any particular element.
      [is attachable]      Boolean             True if this member may be applied to types other than
                                               those compatible with the owner type.
      [target type]        Null, or XamlType   The member may be attached to types compatible with this
                           Information Item    type. (Only used for attachable members.)
                                                                                                        19 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
    Name                    Type                  Purpose (non-normative)
[allowed location] Allowed Location Indicates how the member may be represented in XML.
    [is event]              Boolean               True if this member is used to define a response to some
                                                  event such as user input. (The interpretation of event
                                                  members is determined by individual Xaml processors.)
    [markup                 Set of Text Strings   The sets of bracket characters that should be treated
    extension bracket                             specially when used in a value for this XamlMember
    characters]                                   Information Item. (Only used for members on
                                                  MarkupExtensions.)
5.3.1 Constraints
 The XamlMember Information Items in a Xaml Schema Information Set MUST conform to the rules
 defined in this section.
 Each property of a XamlMember Information Item MUST have a value of the type specified for that
 property in Table 5.
 If [is directive] is False, the value of [name] MUST be different from the [name] of any other
 XamlMember Information Item in [owner type][members].
At most one of [is attachable], [is event], and [is directive] can be True.
 If [is directive] is False, [owner type] MUST NOT be Null. If [is directive] is True, [owner type] MUST
 be Null.
If [owner type] is not Null, this XamlMember Information Item MUST be in [owner type][members].
 If neither [value type][is list] nor [value type][is dictionary], nor [is static] is True, [is read only]
 MUST be False.
                                                                                                          20 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
5.3.1.8    Properties Unique to Attachable Members
If [is event] is True, [value type] MUST be the intrinsic x:XamlEvent (section 7.2.21).
 If [owner type] is NOT assignable to x:MarkupExtension (section 7.2.22), [markup extension bracket
 characters] MUST be Empty.
Each text string that is part of [markup extension bracket characters] must be two characters long.
[markup extension bracket characters] MUST NOT include any characters that are part of XamlName.
[markup extension bracket characters] MUST NOT include "{", "}", ",", "=".
 A member whose [value type] is a list or dictionary can be read-only, because it is still possible to
 modify the contents of the list or dictionary, even when the member that holds it cannot be
 changed. In this case, being read-only merely prevents us from supplying our own list or dictionary.
 Members for which [is attachable] is True can be applied in a non-attached manner on instances of
 the type that defines the member, as long as the member target is compatible with the member's
 [target type]. E.g., if a type Canvas defines an attachable Canvas.Left member, that member can be
 used in a non-attached fashion on a Canvas.
 Directives are similar to members - in the XML representation, they are set on object nodes using
 the same syntax as a member, and in the Xaml Information Set, directives are represented as
 member nodes. However, unlike normal members, a directive is not owned by any particular type.
 Directives are typically associated with special behaviors in the Xaml handling. For example, this
 specification defines some intrinsic directives in Intrinsic Schema Information Items, (section 7),
 such as x:Key (section 7.3.5), which determines how dictionary items are handled.
 Each text string that is part of [markup extension bracket characters] will generally be a matched
 set of bracket characters, i.e. "()", "[]", "<>", with the first character representing the open
 character, and the second character representing the closing character.
                                                                                                21 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
5.4   Text Syntax Information Item
 A Text Syntax Information Item describes the way in which the values for a particular type or
 member can be represented in a Xaml Instance (section 3.2).
[values] Set of Value Syntax Information Items Fixed textual values that are known to be valid.
[patterns] Set of Pattern Syntax Information Items Pattern-based expression of valid values.
5.4.1 Constraints
 The Text Syntax Information Items in a Xaml Schema Information Set MUST conform to the rules
 defined in this section.
 Each property of a Text Syntax Information Item MUST have a value of the type specified for that
 property in Table 6.
 Members and types can have Text Syntax Information Items associated with them. The [values]
 property contains a list of literal values the member may use. This could be used for a member that
 corresponded to an enumerated type in a programming system--[values] would contain one string
 for each enumeration member.
 The [patterns] property is used when the set of valid values is either not closed, or would be too
 large to enumerate. For example, it would not be practical to describe the valid values for a numeric
 field by putting every possible number representation into [values]. Instead, [patterns] would
 capture the valid values.
 A Text Syntax Information Item may contain multiple [values] and [patterns]. A text value is
 considered a match if it matches at least one value or pattern. (All of this is formalized in section
 (6), Xaml Information Set.)
 A Value Syntax Information Item describes a possible value. All members of the [values] collection
 in a Text Syntax Information Item are Value Syntax Information Items.
      [trim                Boolean      True if whitespace before and after the value can be ignored.
      whitespace]
                                                                                                           22 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
      Name               Type         Purpose (non-normative)
      [is case           Boolean      True if the value must match exactly, false if the value may be lower
      sensitive]                      case or capitals.
5.5.1 Constraints
 The Text Syntax Information Items in a Xaml Schema Information Set MUST conform to the rules
 defined in this section.
 Each property of a Text Syntax Information Item MUST have a value of the type specified for that
 property in Table 7.
      [trim              Boolean      True if whitespace before and after the value can be ignored.
      whitespace]
      [is case           Boolean      True if the value must match exactly, false if the value may be lower
      sensitive]                      case or capitals.
 The string in [pattern] is a regular expression. Xaml Schema Infoset regular expressions use the
 same formulation as those in XML Schema Definitions. See Appendix F of Part 2 of the XML Schema
 specification [XML Schema Part 2].
5.6.1 Constraints
 The Pattern Syntax Information Items (section 5.6) in an Xaml Schema Information Set (section 5)
 MUST conform to the rules defined in this section.
 Each property of a Pattern Syntax Information Item (section 5.6) MUST have a value of the type
 specified for that property in Table 8.
 A Constructor Information Item defines a parameter list that can be used to construct a particular
 type.
                                                                                                       23 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
    Name             Type                                    Purpose (non-normative)
    [arguments]      Ordered Collection of XamlType          The types of the parameters for this
                     Information Items                       constructor.
5.7.1 Constraints
 The Constructor Information Items in a Xaml Schema Information Set MUST conform to the rules
 defined in this section.
 Each property of a Constructor Information Item MUST have a value of the type specified for that
 property in Table 9.
                                                                                                    24 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
6     Xaml Information Set
    A Xaml Information Set represents the information contained in a Xaml Instance. A Xaml
    Information Set can contain four kinds of items. These are listed in Table 10.
       Member Node Information           Describes a member that has been set on a particular object in the
       Item                              Xaml Instance.
Text Node Information Item Describes textual or whitespace content in the Xaml Instance.
    The following sections describe the data properties that make up each of the information item types.
    These sections also define constraints that all Xaml Instances are required to meet, and further
    constraints that must be met for a Xaml Instance to be considered valid.
    In some cases, notes are provided to describe the purpose of certain data properties in more detail.
    This is done in situations where the normative interpretation of these properties is defined in other
    sections, but where the intended meaning of the properties would be hard to infer. These notes are
    provided purely as an aid to understanding, and are marked as 'non-normative' to indicate that they
    do not constitute a formal part of the Xaml infoset specification. The 'Purpose' column of each table
    defining an information item serves a similar role, and is also non-normative.
    Note that many of the properties in the Xaml Information Set information items refer to information
    items from the Xaml Schema Information Set.
    Each Xaml Instance has exactly one Document Information Item. It represents the document, and
    provides access to the document's root.
[document object] Object Node Information Item The root object of the Xaml Instance.
6.1.1 Constraints
A well-formed Xaml Information Set MUST conform to the rules defined in this section.
    Each property of a Document Information Item MUST have a value of the type specified for that
    property in Table 11.
                                                                                                           25 / 86
    [MS-XAML-2017]
    XAML Object Mapping Specification 2017
    Copyright © 2017 Microsoft Corporation
6.1.1.2    Xaml Must Have Tree Structure
 Consider a Xaml Information Set as a directed graph, where Object Node Information Items form
 nodes, and edges are described by the Member Node Information Items in each Object Node
 Information Item's [member nodes]. This graph MUST NOT contain cycles. Furthermore, any single
 Object Node Information Item MUST NOT be referred to by more than one Member Node
 Information Items.
 Object nodes are one of the three main forms of information in a Xaml Information Set (the others
 being member nodes and text nodes). Each object node is represented by an Object Node
 Information Item.
      [member nodes]     Set of Member Node    The members that have been set on this object.
                         Information Items
      [parent            Null, or Member       The member node for which this object is a value.
      member]            Node Information
                         Item
      [is retrieved]     Boolean               True if this object node does not represent a new object to
                                               be created - instead, the members in [member nodes] are
                                               to be set on an existing object instance
      [xml namespace     Set of XML            The XML namespace mappings in effect at this element.
      mappings]          namespace
                         mappings
 Some of the constraints that follow refer to a 'root' node. This is the node in the Document
 Information Item's [document object] property. Although Object Node Information Items do not
 contain a reference back to their containing Document Information Item, the root node can still be
 located with the following process:
Let 'current node' be the node for which the root is to be found.
 If the [parent member] of current node is Null, the current node is the root node; if not, continue to
 the next step.
 Take the [parent member][parent object] of the current node, make that the new current node,
 and then repeat from step 2.
6.2.1 Constraints
 The Object Node Information Items in a well-formed Xaml Information Set MUST conform to the
 rules defined in this section.
                                                                                                      26 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
6.2.1.1   Information Set Properties Must Be of Correct Type
 Each property of an Object Node Information Item MUST have a value of the type specified for that
 property in Table 12.
 [member nodes] MUST NOT contain any Member Node Information Items (section 6.3) whose [is
 event] is True unless the root node's [member nodes] contains a Member Node Information Item
 whose [member] is the x:Class directiveXamlMember Information Item (section 5.3).
The Member Node Information Items in [member nodes] MUST all have different [member] items.
 The Object Node Information Items in a valid Xaml Information Set MUST conform to the rules
 defined in this section.
 If [member nodes] contains a Member Node Information Item whose [member] is the intrinsic
 x:Name Directive (section 7.3.4), [member nodes] MUST NOT also contain an item whose [member]
 is this node's [type][name property].
 If [member nodes] contains an item whose [member] is the intrinsic xml:lang Directive (section
 7.3.13), [member nodes] MUST NOT also contain an item whose [member] is this node's [type][xml
 lang property].
 If the node's [type][is default constructible] is False, the node's [member nodes] MUST contain an
 item whose [member] is the intrinsic x:PositionalParameters7.3.2.
 If the node's [member nodes] contain an item whose [member] is the intrinsic
 x:PositionalParameters (section 7.3.2), call that item positionalParameters. The node's
 [type][constructors] MUST contain a Constructor Information Item for which the number of
 XamlType Information Items in constructorInfo[arguments] is the same as the number of items in
 positionalParameters[values]. Call that item constructorInfo.
 For each XamlType Information Item argType in constructorInfo[arguments], and for the item
 argValue at the same offset into the positionalParameters[values] sequence, the following apply:
If argValue is a Text Node Information Item, one of the following MUST be true:
                                                                                               27 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
    argType is the intrinsic x:String (section 7.2.7).
Otherwise, argValue is an Object Node Information Item, and one of the following MUST be true:
 If the node's [member nodes] contain an item whose [member] is the intrinsic x:Initialization
 (section 7.3.3), that item's [values] MUST contain a single Text Node Information Item. Let
 initializationText be the [text] of that text node.
If [parent member][member][text syntax] is not Null, then that is the value of textSyntax.
Otherwise, [type][text syntax] MUST NOT be Null, and that is the value of textSyntax.
 The text value in initializationText MUST either match one of the entries in textSyntax[values], or
 match one of the entries in textSyntax[patterns]. The initializationText value is determined to be a
 match for a Value Syntax Information Item 'valueSyntax' from textSyntax[values] with the
 following process:
 The initializationText value is determined to be a match for a Pattern Syntax Information Item
 'patternSyntax' from textSyntax[patterns] with the following process:
                                                                                                  28 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
 Let casedInput be a string defined as follows
 initializationText matches patternSyntax if and only if casedInput is a match for the regular
   expression in patternSyntax[pattern]; Xaml Schema Infoset regular expressions use the same
   formulation as those in XML Schema Definitions. See Appendix F of Part 2 of the XML Schema
   specification [XML Schema Part 2].
 If the node's [member nodes] contain an item whose [member] is the intrinsic x:Initialization
 (section 7.3.3) [member nodes] MUST NOT contain any other items other than the following three
 optional items: an item whose [member] is the intrinsic x:Key Directive (section 7.3.5); an item
 whose [member] is the intrinsic x:Uid Directive (section 7.3.6); an item whose [member] [is
 attachable] is true.
 If the node's [type] is the intrinsic x:XData (section 7.2.24), [parent member][value type][is xdata]
 MUST be True.
 If the node's [type] is the intrinsic x:TypeExtension (section 7.2.3), [member nodes] MUST contain
 exactly one Member Node Information Item whose [member] is one of the following:
[member nodes] MUST NOT contain more than one of the above.
 If the node's [type] is the intrinsic x:StaticExtension (section 7.2.2), then there MUST exist a Text
 Node Information Item memberTextNode defined as follows:
 If the node's [member nodes] contains a single Member Node Information Item whose [member]
   is the intrinsic x:PositionalParameters (section 7.3.2), and this Member Node Information Item
   contains a single Text Node Information Item, let memberTextNode be that Text Node
   Information Item.
 Otherwise, the node's [member nodes] MUST include a Member Node Information Item whose
   [member] is the intrinsic StaticExtension.Member (section 7.3.20), and this Member Node
   Information Item MUST contain a single Text Node Information Item; let memberTextNode be
   that Text Node Information Item.
                                                                                                  29 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
 Let memberText be memberTextNode[text]. MemberText MUST be a DottedXamlName (section
 8.5.1), and the DottedXamlName's typename part MUST be a valid QName (as defined in section 4
 of [XML Namespaces]).
If the typename part is a PrefixedName (as defined in section 4 of [XML Namespaces]) then:
      This node's [xml namespace mappings] MUST contain an XML namespace mapping whose
        [prefix] matches the typename's Prefix (as defined in section 4 of [XML Namespaces]); let
        nsUri be the [uri] of that XML namespace mapping.
      A schema MUST be available whose [target namespace] matches nsUri. Let memberSchema
        be that schema.
 Otherwise, [xml namespace mappings] MUST contain a mapping whose [prefix] is the empty
   string, an a schema MUST be available whose [target namespace] matches the [namespace
   name] of that mapping; let memberSchema be that schema.
 memberSchema[types] MUST contain a XamlType Information Item (section 5.2) whose [name]
 matches the DottedXamlName's typename part's LocalName (as defined in section 4 of [XML
 Namespaces]) in memberText. Call that XamlType Information Item memberType.
 memberType[members] MUST contain a XamlMember Information Item whose [name] matches the
 DottedXamlName's membername part in MemberText. Call that XamlMember Information Item
 (section 5.2) memberInfo.
 If an Object Node Information Item's [type] is the intrinsic x:ArrayExtension (section 7.2.1), and if
 its [member nodes] contains a member 'arrayItems' whose [member] is the intrinsic
 ArrayExtension.Items (section 7.3.18), and if its [member nodes] also contains a member
 'arrayType' whose [member] is the intrinsic ArrayExtension.Type (section 7.3.19), then for each
 Object Node Information Item 'item' in 'arrayItems' [values] isAssignableTo(item[type], arrayType)
 MUST be True.
 If the node's [type] is a member of one or more schemas' [assignable types] and is not a member
 of any schema's [types], the node's [is retrieved] MUST be True.
 Since Xaml does not need to be represented as XML, it may seem odd to have an [xml namespace
 mappings] property. The reason for this is to enable Xaml to use XML namespace prefixes as a
 shorthand for referring to schemas.
 A Member Node Information Item represents one of a number of features. Properties, directives,
 events, or initialization strings are all represented as Member Node Information Items.
                                                                                                30 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
 Table 13: Member Node Information Item Properties
    [parent object]      Object Node Information Item                         The object on which this
                                                                              member has been set.
    [values]             Ordered Collection of information items; each item   The value or values being set
                         may be either an Object Node Information Item, or    by this member node.
                         a Text Node Information Item
6.3.1 Constraints
 The Member Node Information Items in a well-formed Xaml Information Set MUST conform to the
 rules defined in this section.
 Each property of a Member Node Information Item MUST have a value of the type specified for that
 property in Table 13.
 If [member] is not one of the x:Items (section 7.3.1), x:DirectiveChildren (section 7.3.12), or
 x:PositionalParameters (section 7.3.2) intrinsic items, then [values] MUST contain exactly one item.
 (Otherwise, it can contain 0 or more such items.)
Note All members may contain any number of objects of intrinsic type x:Code (section 7.2.23).
 If [member] is the intrinsic x:Items (section 7.3.1) member type, then either [parent
 object][type][is dictionary] or [parent object][type][is list] MUST be True.
 If ([parent object][type][is dictionary] and [member] is the instrinsic x:Items (section 7.3.1)), the
 following rules apply:
 Each Object Node Information Item 'dictItem' in [values] MUST match at least one of the
   following (and let the first of these rules that matches define keyMemberNode for that dictItem):
                                                                                                      31 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
    dictItem[member nodes] contains a Member Node Information Item that is the x:Key directive
      (defined in section 7.3.5).
 For each Object Node Information Item 'dictItem' in [values], the corresponding keyMemberNode
   identified in the previous step MUST have a [values] that contains exactly one item. That item,
   referred to here as keyValue, MUST be assignable to [parent object][type][allowed key types],
   i.e., one of the following MUST be true:
    keyValue is a Text Node Information Item and [parent object][type][allowed key types]
      contains either the x:String XamlType Information Item (section 7.2.7), or the x:Object
      XamlType Information Item (section 7.2.6), or there is exactly one XamlMember Information
      Item in [parent object][type][allowed key types] with a non-Null [text syntax].
    keyValue is an Object Node Information Item, and [parent object][type][allowed key types]
      contains a keyType for which isAssignableTo(keyValue[type], keyType) is True
 Each keyValue identified in the previous step MUST be unique within the scope of the containing
   dictionary.
    The value of the text node MUST be well-formed XML, and any namespace prefixes used
      within the XML MUST either be declared within the nested XML text, or be in the [xml
      namespace mappings] of the containing Member Node Information Item.
 If [member] is the x:Class Directive (section 7.3.7), [parent object][parent member] MUST be Null
 (i.e., this attribute may only be applied to the root node).
 If [member] is the x:Subclass Directive (section 7.3.8), [parent object][member nodes] MUST
 contain a Member Node Information Item whose [member] is the x:Class Directive (section 7.3.7).
 If [member] is the x:ClassModifier Directive (section 7.3.9), [parent object][member nodes] MUST
 contain a Member Node Information Item whose [member] is the x:Class Directive (section 7.3.7).
                                                                                             32 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
6.3.1.9    x:TypeArguments Directive Rules
 If [member] is the x:FieldModifier Directive (section 7.3.10), the root node's [member nodes] MUST
 contain a Member Node Information Item whose [member] is the x:Class Directive (section 7.3.7).
 A Member Node Information Item in a Xaml Information Set cannot be valid with respect to some
 set of schemas unless it meets rules defined in this section.
For each item val in [values], one of the following MUST apply.
    Either [member] is x:Items (section 7.3.1) and [parent object][type][allowed types] contains
      either the x:String (section 7.2.7), or the x:Object (section 7.2.6)XamlType Information Items
    or [member][value type] is either the x:String (section 7.2.7), or the x:Object (section
      7.2.6)XamlType Information Item
 val is an Object Node Information Item and [member] is x:Items (section 7.3.1) and
   [member][value type][allowed types] contains an allowedType for which isAssignableTo
   (val[type], allowedType) is True.
 val is an Object Node Information Item where val[type][types assignable to] contains the
   intrinsic x:MarkupExtension (section 7.2.22), and [member] is x:Items (section 7.3.1) and
   [member][value type][allowed types] contains an allowedType for which
   isAssignableTo(val[type][return value type], allowedType) is True.
 val is an Object Node Information Item where val[type][types assignable to] contains the
   intrinsic x:MarkupExtension (section 7.2.22), and isAssignableTo(val[type][return value type],
   [member][value type]) is True.
                                                                                                 33 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
6.3.2.3   Attached Member Target Type Must Match
 If [member][text syntax] is not Null, let textSyntax be [member][text syntax]; otherwise let
 textSyntax be [member][value type][text syntax].
 If [values] contains a single Text Node Information Item, and textSyntax is not Null, the [text] value
 in the Text Node Information Item MUST either match one of the entries in textSyntax[values], or
 match one of the entries in textSyntax[patterns]. The rules for determining a match are defined in
 section 6.2.2.5 ("Initialization Text Must Match Text Syntax").
 If [member][is read only] is True, [values] MUST contain just a single object node where [is
 retrieved] is True.
 If that Object Node Information Item's [member nodes] contains an item whose [member] is the
   intrinsic x:Name Directive (section 7.3.4), nameMember is that item.
 If that Object Node Information Item's [member nodes] contains an item whose [member] is the
   Object Node Information Item's [parent object][type][name property], nameMember is that
   item.
 If an Object Node Information Item has a nameMember, it is a 'named object', and its name is the
 single value in nameMember[values]
 If an Object Node Information Item is a named object, its name MUST be different from the name of
 any other named object that shares the same namespace scope.
 A Xaml processor MUST determine whether two Object Node Information Items share the same
 namespace scope by walking up the tree by starting at [parent object] and then following [parent
 object][parent member] until reaching either the root node, or an Object Node Information Item
 whose [type][is name scope] is True. If this process ends at the same node for two different nodes,
 those two nodes share a namespace scope.
 If [member] is the x:FieldModifier Directive (section 7.3.10), [parent object][member nodes] MUST
 contain either a Member Node Information Item whose [member] is the x:Name Directive (section
 7.3.4), or a Member Node Information Item whose [member] is the same as this member's [parent
 object][type][name property].
                                                                                                34 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
6.3.2.9   Members of Type x:XamlType and Type Names Must Refer to Valid Type
 If [member][value type] is the intrinsic x:XamlType (section 7.2.20), or if [member] is the intrinsic
 TypeExtension.TypeName (section 7.3.22), or ([member] is the intrinsic x:PositionalParameters
 (section 7.3.2) AND [parent object][type] is the intrinsic x:TypeExtension (section 7.2.3)) then
 [values] MUST contain just a single text node. Let typeText be that text node's [text].
 This node's [xml namespace mappings] MUST contain an XML namespace mapping whose [prefix]
 matches the typeText's Prefix (as defined in section 4 of [XML Namespaces]); let nsUri be the [uri]
 of that XML namespace mapping.
 A schema whose [target namespace] matches nsUri MUST be available. Let memberSchema be
   the schema.
 Otherwise, [parent object][xml namespace mappings] MUST contain a mapping whose [prefix] is
   the empty string, and a schema MUST be available whose [target namespace] matches the
   [namespace name] of that mapping. let memberSchema be that schema.
Validation rule 6.3.2.5 ("Read-only Members") deals with the fact that this is meaningful:
   <MyElement>
     <MyElement.DictionaryMember>
       <AnotherElement x:Key="myKey" />
     </MyElement.DictionaryMember>
   </MyElement>
As is this:
   <MyElement>
     <MyElement.DictionaryMember>
       <DictionaryElement>
         <AnotherElement x:Key="myKey" />
       </DictionaryElement>
     </MyElement.DictionaryMember>
   </MyElement>
   <MyElement>
     <MyElement.DictionaryMember>
       <DictionaryElement>
         <AnotherElement x:Key="myKey" />
       </DictionaryElement>
                                                                                                35 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
          <AnotherElement x:Key="bar" />
        </MyElement.DictionaryMember>
      </MyElement>
 In summary, either you can bring your own dictionary, or you can add items directly to the member
 element as children to have them added to the dictionary, but you can't do both.
 A Text Node Information Item represents a value in a member node's [values] that contains text or
 an XML literal.
[parent member] Member Node Information Item The member of which this text is a value.
6.4.1 Constraints
 The Text Node Information Items in a well-formed Xaml Information Set MUST conform to the rules
 defined in this section.
 Each property of a Text Node Information Item MUST have a value of the type specified for that
 property in Table 14.
 Whitespace is represented as a text node. There are special processing rules for handling
 whitespace, because it is significant in some contexts, and ignorable in others. The Xaml
 Information Set is the output of the process described in section 8, "Creating a Xaml Information
 Set from XML", and all the rules for deciding whether to ignore white space are executed during that
 process. Consequently, there is no need to represent whitespace differently in the Xaml infoset -
 where whitespace is preserved, it simply ends up inside text nodes.
 XML literals (xData) are also represented as text nodes. It is possible to determine whether a
 particular text node represents text or an XML literal by examining the text node's [parent
 member][member][value type][is xdata] member. Note that XML literals are not self-contained XML
 documents: the literal can use the namespaces prefixes described in [parent member][xml
 namespace mappings], and they also inherit xml:space and xml:lang attributes where present.
 Note that the set of characters that may be used in [text] is not restricted to the subset defined for
 the Char production defined in Section 2.2 of the XML specification ([XML]). However, the use of
 characters outside the range acceptable in XML is discouraged.
                                                                                                    36 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
7     Intrinsic Schema Information Items
    This section defines an intrinsic set of schema information items that are implicitly available to all
    Xaml Schema Information Sets and Xaml Information Sets.
The following Schema Information Items are available when processing any XML document as Xaml.
    The 'x:' schema is so-called because its XML namespace is conventionally associated with the x:
    prefix. It contains directives and types available across all Xaml vocabularies.
Table 15: Schema Information Item Property Values for �x:� Schema
Property Value
       [target                "http://schemas.microsoft.com/winfx/2006/xaml"
       namespace]
       [types]                All of the XamlType Information Items defined in "Intrinsic XamlType Information
                              Items" (section 7.2) of this specification.
    The XML Namespace Schema contains directives corresponding to the xml:lang, xml:space, and
    xml:base attributes.
Table 16: Schema Information Item Property Values for �x:� Schema
Property Value
       [target               "http://www.w3.org/XML/1998/namespace"
       namespace]
[types] Empty
       [directives]          The following XamlMember Information Items: xml:lang Directive (section 7.3.13),
                             xml:space Directive (section 7.3.14), and xml:base Directive (section 7.3.15)
The following sections define special types used for processing Xaml Instances.
                                                                                                          37 / 86
    [MS-XAML-2017]
    XAML Object Mapping Specification 2017
    Copyright © 2017 Microsoft Corporation
 Many of the XamlType Information Item properties are somewhat specialized--the majority of types
 use the same values for most of the properties. To make it easy to see the distinguishing features of
 each type, only the properties that differ from the norm are listed. Table 17 shows the values that
 properties have in the case where their type definition does not specify a value.
Property Value
[constructors] Empty
7.2.1 x:ArrayExtension
 This XamlType Information Item signifies that a list of items is to be treated as an array, where the
 target programming system recognizes such a concept.
                                                                                                38 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
    Property                Value
[name] "ArrayExtension"
 Note the distinction between this and x:Array (section 7.2.19) is that x:ArrayExtension is
 concerned with how to represent arrays in Xaml, whereas x:Array is the type of an array itself.
7.2.2 x:StaticExtension
 This XamlType Information Item represents a markup extension type indicating that a static
 member belonging to some particular type should be read.
Property Value
[name] "StaticExtension"
7.2.3 x:TypeExtension
 This XamlType Information Item represents a markup extension type that evaluates to a
 x:XamlType (section 7.2.20) object representing a particular type.
Property Value
[name] "TypeExtension"
7.2.4 x:NullExtension
This XamlType Information Item represents a markup extension type that evaluates to a Null value.
                                                                                                      39 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
 Table 21: XamlType Information Item Property Values for x:NullExtension
Property Value
[name] "NullExtension"
[members] Empty
7.2.5 x:ReferenceExtension
 This XamlType Information Item represents a markup extension type that represents a reference to
 a named Object Node instance.
Property Value
[name] "ReferenceExtension"
7.2.6 x:Object
 Xaml vocabularies that wish to be able to define members that can accept values of any type can
 use x:Object as the [value type] of those members. Note that this specification does not assign any
 intrinsic meaning to x:Object--it only provides it as a common type for vocabularies that require this
 idea. Since Xaml does not require vocabularies to support a 'root type' or 'universal base class' idea,
 those that want this concept must opt in: a type will only be assignable to x:Object if the vocabulary
 explicitly includes x:Object in that type's [types assignable to].
Property Value
[name] "Object"
[members] Empty
                                                                                                  40 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
7.2.7    x:String
Property Value
[name] "String"
[members] Empty
7.2.8 x:Char
Property Value
[name] "Char"
[members] Empty
7.2.9 x:Single
 Type representing a single-precision floating point numeric value. This type is not used within this
 specification. It is provided because this type is widely used--by providing this one definition, Xaml
 vocabularies do not each need to define their own.
Property Value
[name] "Single"
[members] Empty
7.2.10 x:Double
 Type representing a double-precision floating point numeric value. This type is not used within this
 specification. It is provided because this type is widely used--by providing this one definition, Xaml
 vocabularies do not each need to define their own.
                                                                                                  41 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
    Property                        Value
[name] "Double"
[members] Empty
7.2.11 x:Byte
 Type representing an unsigned 8-bit byte. This type is not used within this specification. It is
 provided because this type is widely used - by providing this one definition, Xaml vocabularies do
 not each need to define their own.
Property Value
[name] "Byte"
[members] Empty
7.2.12 x:Int16
 Type representing a signed 16-bit number. This type is not used within this specification. It is
 provided because this type is widely used - by providing this one definition, Xaml vocabularies do
 not each need to define their own.
Property Value
[name] "Int16"
[members] Empty
7.2.13 x:Int32
 Type representing a signed 32-bit number. This type is not used within this specification. It is
 provided because this type is widely used - by providing this one definition, Xaml vocabularies do
 not each need to define their own.
                                                                                                42 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
    Property                         Value
[name] "Int32"
[members] Empty
7.2.14 x:Int64
 Type representing a signed 64-bit number. This type is not used within this specification. It is
 provided because this type is widely used - by providing this one definition, Xaml vocabularies do
 not each need to define their own.
Property Value
[name] "Int64"
[members] Empty
7.2.15 x:Decimal
 Type representing a decimal number. This type is not used within this specification. It is provided
 because this type is widely used - by providing this one definition, Xaml vocabularies do not each
 need to define their own.
Property Value
[name] "Decimal"
[members] Empty
7.2.16 x:Uri
 Type representing a URI. This type is not used within this specification. It is provided because this
 type is widely used - by providing this one definition, Xaml vocabularies do not each need to define
 their own.
                                                                                                 43 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
    Property                              Value
[name] "Uri"
[members] Empty
7.2.17 x:Timespan
 Type representing a time span. This type is not used within this specification. It is provided because
 this type is widely used - by providing this one definition, Xaml vocabularies do not each need to
 define their own.
Property Value
[name] "Timespan"
[members] Empty
7.2.18 x:Boolean
Type representing a Boolean value--a value which may be either true or false.
Property Value
[name] "Boolean"
[members] Empty
7.2.19 x:Array
Property Value
[name] "Array"
                                                                                                 44 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
    Property                                              Value
[members] Empty
7.2.20 x:XamlType
Property Value
[name] "XamlType"
[members] Empty
7.2.21 x:XamlEvent
Property Value
[name] "XamlEvent"
[members] Empty
7.2.22 x:MarkupExtension
 Well-known base type that indicates a type is a markup extension. Types indicate that they are
 markup extensions by including this in their [types assignable to].
Property Value
[name] "MarkupExtension"
                                                                                              45 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
      Property                                               Value
[members] Empty
7.2.23 x:Code
 Type of object nodes representing source code embedded in Xaml. (The meaning of this code is
 determined by the Xaml processor. This specification simply defines the mechanism by which plain
 text can be embedded in a Xaml Instance.)
Property Value
[name] "Code"
[members] Empty
7.2.24 x:XData
Property Value
[name] "XData"
[members] Empty
 This section defines the intrinsic members defined in the x: Schema and the XML Namespace
 Schema.
 Many of the XamlMember Information Item properties are somewhat specialized - the majority of
 members use the same values for some properties. To make it easy to see the distinguishing
 features of each member, only properties that differ from the norm are listed. Table 42 shows the
 values that properties have in the case where their type definition does not specify a value.
Property Value
                                                                                              46 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
    Property                                                               Value
7.3.1 x:Items
Property Value
[name] "Items"
7.3.2 x:PositionalParameters
 Pseudo member used to represent the constructor argument list for a markup extension. The
 markup extension's object node's [member nodes] will contain a member for each named
 parameter, and may also contain a member to represent the unnamed, ordered parameters. A
 member node serving that purpose is identified by having its [member] refer to this
 x:PositionalParameters intrinsic member.
Property Value
[name] "PositionalParameters"
                                                                                         47 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
7.3.3   x:Initialization
Pseudo member used to hold the text string used when an object is initialized using text.
Property Value
[name] "Initialization"
 Directive used to set the name of an element. The meaning of a 'name' is up to individual Xaml
 processors to describe - this specification simply provides a mechanism for associating a name with
 an object node, and a mechanism by which a schema can indicate that a particular member is
 equivalent to the x:Name directive.
Table 46: XamlMember Information Item Property Values for x:Name Directive
Property Value
[name] "Name"
Table 47: XamlMember Information Item Property Values for x:Key Directive
Property Value
[name] "Key"
                                                                                              48 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
7.3.6   x:Uid Directive
Table 48: XamlMember Information Item Property Values for x:Uid Directive
Property Value
[name] "Uid"
 Directive used to indicate the name of a class associated with a Xaml file. It is up to individual Xaml
 processors to define the interpretation of this directive.
Table 49: XamlMember Information Item Property Values for x:Class Directive
Property Value
[name] "Class"
 Directive used to indicate the name of a subclass associated with a Xaml file. It is up to individual
 Xaml processors to define the interpretation of this directive.
Table 50: XamlMember Information Item Property Values for x:Subclass Directive
Property Value
[name] "Subclass"
 Directive used to indicate the modifier of the class associated with a Xaml file. It is up to individual
 Xaml processors to define the interpretation of this directive.
                                                                                                    49 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
 Table 51: XamlMember Information Item Property Values for x:ClassModifier Directive
Property Value
[name] "ClassModifier"
 Directive used to indicate the modifier of the field associated with a named Xaml element. It is up to
 individual Xaml processors to define the interpretation of this directive.
Table 52: XamlMember Information Item Property Values for x:FieldModifier Directive
Property Value
[name] "FieldModifier"
 Directive used to indicate the type arguments for the class associated with a Xaml file. It is up to
 individual Xaml processors to define the interpretation of this directive.
Table 53: XamlMember Information Item Property Values for x:TypeArguments Directive
Property Value
[name] "TypeArguments"
7.3.12 x:DirectiveChildren
                                                                                                  50 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
 Table 54: XamlMember Information Item Property Values for x:DirectiveChildren
Property Value
[name] "DirectiveChildren"
Table 55: XamlMember Information Item Property Values for xml:lang Directive
Property Value
[name] "TypeArguments"
Table 56: XamlMember Information Item Property Values for xml:space Directive
Property Value
[name] "space"
                                                                                   51 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
 Table 57: XamlMember Information Item Property Values for xml:base Directive
Property Value
[name] "base"
Table 58: XamlMember Information Item Property Values for x:Arguments Directive
Property Value
[name] "Arguments"
Table 59: XamlMember Information Item Property Values for x:FactoryMethod Directive
Property Value
[name] "FactoryMethod"
7.3.18 ArrayExtension.Items
                                                                                       52 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
 Table 60: XamlMember Information Item Property Values for ArrayExtension.Items
Property Value
[name] "Items"
7.3.19 ArrayExtension.Type
Member of x:ArrayExtension (section 7.2.1) that indicates what type of elements the array contains.
Property Value
[name] "Type"
7.3.20 StaticExtension.Member
Property Value
[name] "Member"
7.3.21 TypeExtension.Type
Property Value
[name] "Type"
                                                                                             53 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
7.3.22    TypeExtension.TypeName
Property Value
[name] "TypeName"
7.3.23 ReferenceExtension.Name
 The name of the object this extension references. A reference should be treated as if the referenced
 object was in its place.
Property Value
[name] "Name"
 This section uses a notational convention for representing the Value Syntax Information Items and
 Pattern Syntax Information Items that make up a Text Syntax Information Item. They are listed as
 a semicolon delimited sequence, or the word Empty to indicate that the relevant set contains no
 items.
 Each entry in the sequence for the [values] of a Text Syntax Information Item represents a Value
 Syntax Information Item. The entry includes a string in double quotes representing the [text]
 member of the Value Syntax Information Item. The string may optionally be followed by [is case
 sensitive]=True, and/or [trim whitespace]=False. Where these values are not specified explicitly, [is
 case sensitive] is False, and [trim whitespace] is True.
 Each entry in the sequence for the [patterns] of a Text Syntax Information Item represents a
 Pattern Syntax Information Item. The entry includes a string in double quotes representing the
 [pattern] member of the Pattern Syntax Information Item. This string may optionall be followed by
 [is case sensitive]=False, and/or [trim whitespace]=False. Where these values are not specified
 explicitly, [is case sensitive] is True, and [trim whitespace] is True.
                                                                                                54 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
7.4.1   x:Char Text Syntax
This text syntax defines the acceptable representations of values of type x:Char (section 7.2.8).
Table 66: Text Syntax Information Item Property Values for x:Char Text Syntax
Property Value
[values] Empty
[patterns] "."
This text syntax defines the acceptable representations of values of type x:Single (section 7.2.9).
Table 67: Text Syntax Information Item Property Values for x:Single Text Syntax
Property Value
[patterns] "[+-]?(([\d,]+(\.\d*)?)|([\d,]*\.\d+))([eE][+-]?\d+)?"
 Informally, the [patterns] allows optional leading whitespace followed by an optional + or - sign,
 followed by a decimal number that takes one of two forms, optionally followed by an exponent. The
 first acceptable form for the decimal number is a sequence of one or more decimal digits, optionally
 followed by a decimal point which is followed by a sequence of zero or more decimal digits. (E.g. "1"
 or "1.01".) The second acceptable form for the decimal number is a sequence of zero or more
 decimal digits, followed by a decimal point which is followed by a sequence of one or more decimal
 digits. (E.g. ".1" or "1.01".) The optional exponent must start with either 'e' or 'E', it optionally
 followed by a + or - sign, and then followed by a sequence of one or more decimal digits. Finally,
 the number value may be followed by white space.
This text syntax defines the acceptable representations of values of type x:Double (section 7.2.10).
Table 68: Text Syntax Information Item Property Values for x:Double Text Syntax
Property Value
[patterns] "[+-]?(([\d,]+(\.\d*)?)|([\d,]*\.\d+))([eE][+-]?\d+)?"
 Informally, the [patterns] allows optional leading whitespace followed by an optional + or - sign,
 followed by a decimal number that takes one of two forms, optionally followed by an exponent. The
                                                                                                55 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
 first acceptable form for the decimal number is a sequence of one or more decimal digits, optionally
 followed by a decimal point which is followed by a sequence of zero or more decimal digits. (E.g. "1"
 or "1.01".) The second acceptable form for the decimal number is a sequence of zero or more
 decimal digits, followed by a decimal point which is followed by a sequence of one or more decimal
 digits. (E.g. ".1" or "1.01".) The optional exponent must start with either 'e' or 'E', it optionally
 followed by a + or - sign, and then followed by a sequence of one or more decimal digits. Finally,
 the number value may be followed by white space.
This text syntax defines the acceptable representations of values of type x:Byte (section 7.2.11).
Table 69: Text Syntax Information Item Property Values for x:Byte Text Syntax
Property Value
[values] Empty
[patterns] "\d+"
This text syntax defines the acceptable representations of values of type x:Int16 (section 7.2.12).
Table 70: Text Syntax Information Item Property Values for x:Int16 Text Syntax
Property Value
[values] Empty
[patterns] "[+-]?\d+"
This text syntax defines the acceptable representations of values of type x:Int32 (section 7.2.13).
Table 71: Text Syntax Information Item Property Values for x:Int32 Text Syntax
Property Value
[values] Empty
[patterns] "[+-]?\d+"
This text syntax defines the acceptable representations of values of type x:Int64 (section 7.2.14).
Table 72: Text Syntax Information Item Property Values for x:Int64 Text Syntax
                                                                                                56 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
    Property                                               Value
[values] Empty
[patterns] "[+-]?\d+"
This text syntax defines the acceptable representations of values of type x:Decimal (section 7.2.15).
Table 73: Text Syntax Information Item Property Values for x:Decimal Text Syntax
Property Value
[values] Empty
[patterns] "[+-]?\d+"
This text syntax defines the acceptable representations of values of type x:Uri (section 7.2.16).
Table 74: Text Syntax Information Item Property Values for x:Uri Text Syntax
Property Value
[values] Empty
[patterns] "*"
 This text syntax defines the acceptable representations of values of type x:Timespan (section
 7.2.17).
Table 75: Text Syntax Information Item Property Values for x:Timespan Text Syntax
Property Value
[values] Empty
    [patterns]              "-?(\d*\.)?\d\d?:\d\d?:((\d\d?)|(\d?\d?\.\d*))";
                            "-?\d+"
This text syntax defines the acceptable representations of values of type x:Boolean (section 7.2.18).
Table 76: Text Syntax Information Item Property Values for x:Boolean Text Syntax
                                                                                                 57 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
    Property                                          Value
[patterns] Empty
 Informally, the [patterns] allows either the string "true" or "false" (with any mixture of upper or
 lower case characters), optionally surrounded by whitespace.
 This text syntax defines the acceptable representations of values of type x:XamlType (section
 7.2.20).
Table 77: Text Syntax Information Item Property Values for x:XamlType Text Syntax
Property Value
[values] Empty
    [patterns]    "([_\p{L}][\.-
                  _\p{L}\p{Nd}\p{Mc}]*:)?[_\p{Lu}\p{Ll}\p{Lo}\p{Lt}\p{Nl}\p{Lm}][_\p{Lu}\p{Ll}\p{Lo}\p{Lt}\p{Nl}\p{Lm
                  [trim whitespace]=False
 Informally, the [patterns] allows an optional namespace prefix which, if present, must be followed
 by a colon, followed by a XamlName.
 This text syntax describes the acceptable representations of values of the xml:space Directive
 (section 7.3.14).
Table 78: Text Syntax Information Item Property Values for xml:space Text Syntax
Property Value
[patterns] Empty
Table 79: Text Syntax Information Item Property Values for x:XamlEvent Text Syntax
Property Value
[values] Empty
   [pattern    "[_\p{Lu}\p{Ll}\p{Lo}\p{Lt}\p{Nl}\p{Lm}][_\p{Lu}\p{Ll}\p{Lo}\p{Lt}\p{Nl}\p{Lm}\p{Nd}
   s]          \p{Mn}\p{Mc}]*" [trim whitespace]=False
                                                                                                  58 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
 Informally, the [patterns] allows any XamlName.
This text syntax describes the acceptable representations of values which are name references.
Table 80: Text Syntax Information Item Property Values for x:NameReference Text Syntax
Property Value
[values] Empty
   [pattern    "[_\p{Lu}\p{Ll}\p{Lo}\p{Lt}\p{Nl}\p{Lm}][_\p{Lu}\p{Ll}\p{Lo}\p{Lt}\p{Nl}\p{Lm}\p{Nd}
   s]          \p{Mn}\p{Mc}]*" [trim whitespace]=False
This text syntax describes the acceptable representations of values which are type arguments.
Table 81: Text Syntax Information Item Property Values for x:TypeArguments Text Syntax
   Prop
   erty    Value
   [val    Empty
   ues]
   [pat    "[[_\p{Lu}\p{Ll}\p{Lo}\p{Lt}\p{Nl}\p{Lm}][_\p{Lu}\p{Ll}\p{Lo}\p{Lt}\p{Nl}\p{Lm}\p{Nd}\p{
   tern    Mn}\p{Mc}]*[,[_\p{Lu}\p{Ll}\p{Lo}\p{Lt}\p{Nl}\p{Lm}][_\p{Lu}\p{Ll}\p{Lo}\p{Lt}\p{Nl}\p{L
   s]      m}\p{Nd}\p{Mn}\p{Mc}]*]" [trim whitespace]=False
 Informally, the [patterns] allows a comma delimited ordered collection of XamlTypes, any of which
 could be closed generic types with its type arguments specified inside of parenthesis.
This text syntax describes the acceptable representations of values which are factory methods.
Table 82: Text Syntax Information Item Property Values for x:FactoryMethod Text Syntax
   Prop
   erty    Value
   [val    Empty
   ues]
   [pat    "[[_\p{Lu}\p{Ll}\p{Lo}\p{Lt}\p{Nl}\p{Lm}][_\p{Lu}\p{Ll}\p{Lo}\p{Lt}\p{Nl}\p{Lm}\p{Nd}\p{
   tern    Mn}\p{Mc}].]?[_\p{Lu}\p{Ll}\p{Lo}\p{Lt}\p{Nl}\p{Lm}][_\p{Lu}\p{Ll}\p{Lo}\p{Lt}\p{Nl}\p{L
   s]      m}\p{Nd}\p{Mn}\p{Mc}]*" [trim whitespace]=False
 Informally, the [patterns] allows any method name, optionally preceded with a XamlType name and
 a period.
                                                                                               59 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
7.5   Intrinsic Constructor Information Items
 This section defines the Constructor Information Item used by the XamlType Information Items
 defined in section 7.2, "Intrinsic XamlType Information Items".
 This is the only Constructor Information Item for the x:StaticExtension type (section 7.2.2). It takes
 a single parameter, a string, which is logically equivalent to the StaticExtension.Member (section
 7.3.20) member.
Table 83: Constructor Information Item Property Values for Static Extension String Constructor
Property Value
 This is the only Constructor Information Item for the x:TypeExtension type (Note (non-normative)).
 It takes a single parameter, a string, which is logically equivalent to the TypeExtension.TypeName
 (section 7.3.22) member.
Property Value
 This is the only Constructor Information Item for the x:ReferenceExtension type (section 7.2.5). It
 takes a single parameter, a string, which is logically equivalent to the
 ReferenceExtension.NameTypeExtension.TypeName (section 7.3.23) member.
Property Value
                                                                                                 60 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
8     Creating a Xaml Information Set from XML
    An XML document is a Xaml Document if a well-formed Xaml Information Set can be created from
    the XML document's XML Infoset. The conversion process is performed with reference to a set of
    schemas that includes those defined in "Intrinsic Schema Information Items" (section 7). Additional
    vocabulary-specific schemas may (and usually will) also be used as part of the conversion process.
    In order to construct a Xaml Information Set from an XML document, that document's XML Infoset is
    processed with the rules defined in section 8.6. If the rules in section 8.6are successfully executed
    without error, the resulting Xaml Information Set must conform to the constraints in Xaml Schema
    Information Set (section 5) in order for the XML document to be said to be a Xaml Document.
    XML documents may contain features for which schema information items are not available. This
    makes it impossible to determine that the document is valid. Implementations MAY choose to
    process documents despite the absence of schemas, producing a well-formed but potentially invalid
    Xaml Information Set.
    Implementations that choose to handle Xaml in the absence of schema MUST generate placeholder
    Xaml Schema Information Set items to stand in for the missing schema. For example, a Member
    Node Information Item has a [member] property that refers to a XamlMember Information Item.
    Without this, there would be no way to know the member's name. Section 8.6 includes rules for
    generating suitable information items.
    Not all XML documents can be successfully converted to a Xaml Information Set. However, it may be
    useful for Xaml processors to continue processing in the face of an error. This specification does not
    define what Xaml processors should do in the face of an error - Xaml processors MAY terminate
    processing in the face of an error or they MAY attempt to continue processing.
    Where the rules in this section identify an error, they incorporate a description. For example, a
    particular scenario might be described as an "Unknown namespace" error. The error text is
    informative, and Xaml processors are not required to do anything with that text.
    XML documents containing Xaml may use the Markup Compatibility and Extensibility conventions
    defined in Part 5 of [ECMA-376]. Implementations that convert XML into a Xaml Information Set can
    process documents in two modes with respect to markup compatibility: raw, and preprocessed.
    Xaml processors that support XML MUST support at least one of these modes.
    In raw mode, elements and attributes in the XML document from the markup compatibility
    namespace are processed in exactly the same way as any other elements and attributes, forming
    object, member, and text nodes as normal.
    Raw mode is suitable for applications that need to preserve as much of the original document's
    structure as possible. A Xaml editor might use this mode.
                                                                                                    61 / 86
    [MS-XAML-2017]
    XAML Object Mapping Specification 2017
    Copyright © 2017 Microsoft Corporation
8.3.2   Preprocessed Mode
 In preprocessed mode, the input XML infoset is transformed by processing the content according to
 the rules defined in the ECMA Markup Compatibility Specification [ECMA-376]--content is ignored or
 substituted where appropriate. The markup compatibility elements and attributes are then removed.
 The resulting XML infoset becomes the input to the conversion process described in this section.
 Section 10.2 of the Markup Compatibility specification requires markup consumers to declare which
 subsumption behavior is used when processing an element from an older namespace that carries a
 prefixed attribute from a newer, subsuming namespace. In a Xaml Document, if the attribute name
 contains a "." then the expanded name refers to the new namespace, if not, it refers to no
 namespace.
 The XML processing rules take an XML Information Set [XML Infoset] as input. To indicate that a
 particular item is an XML Information Set information item, it is referred to as XML:type, where type
 is one of the XML Information Set information item types:
8.5 Definitions
8.5.1 DottedXamlName
 A DottedXamlName is a string that conforms to the following grammar (using the syntax defined in
 [RFC4234]):
 The first XamlName in a DottedXamlName is referred to as the typename. The second XamlName is
 referred to as the membername.
                                                                                               62 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
8.5.2   Collapsible Whitespace Characters
The characters subject to whitespace collapsing are the following three Unicode code points:
0020 Space
000A LineFeed
0009 Tab
 Note that it is intentional that this is not a complete list of all whitespace Unicode code points. There
 are other Unicode codepoints that represent forms of whitespace, but those do not get collapsed.
 The Unicode code points and surrogates in Table 88 and Table 89 are identified as 'Linefeed
 Collapsing characters', and are subject to special rules for whitespace collapsing:
A000 - A4CF Yi
                                                                                                   63 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
 Table 89: Linefeed Collapsing Surrogates
The special rules for these characters are defined later in this specification.
If attr[namespace name] has a value, one of the following two rules applies:
 if a schema is available whose [target namespace] matches the attribute's namespace, that
   schema is the authoritative schema.
 if no schema is available whose [target namespace] matches the attribute's namespace, this is
   an "Unknown namespace" error.
If attr[namespace name] does not have a value, one of the following rules applies:
 if the attr[local name] matches the XamlName production, the authoritative schema is the
   authoritative schema of the element to which the attribute has been applied.
      if a schema is available whose [target namespace] matches the default namespace in scope,
        that is the authoritative schema.
      If no schema is available whose [target namespace] matches the default namespace in scope,
        this is an "Unknown namespace" error.
 The rules in 8.6 use the syntax "schema(node)" where node is either an XML:element or an
 XML:attribute. This is shorthand meaning the authoritative schema for either an element or an
 attribute node.
 This section defines rules for processing an XML Infoset to generate a Xaml Information Set. Each
 rule takes inputs that determine the context in which the rule is executed. Each rule has a single
 output. Most rules return a Xaml Information Set item, except for a few utility rules used to avoid
 duplication of logic. (E.g., some rules return a Xaml Schema Information Set item.)
 Many of the rules involve several steps. These rules define variables to hold the intermediate
 results. For clarity, rule inputs and variables are shown with distinctive formatting, as shown in
 Table 90.
                                                                                                  64 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
 Table 90: Rule input and variable formatting
Example Meaning
 Rules often define some steps in terms of other rules. The following formatting convention is used to
 denote an invocation of a rule:
 This signifies that a rule variable called resultVar should be given the value returned by invoking the
 rule named "Member Node Creation from Content", passing various rule variables in as the inputs to
 the rule.
 Processing MUST begin by passing the XML:document information item of the information set of the
 XML document to be processed as the xmlDocument input to the 'XML:document Processing' rule
 defined in 8.6.1.
The output of this rule is a Xaml Information Set Document Information Item.
 If the document contains entity references other than lt, gt, amp, apos, or quot, it is a "Xaml
 documents must not contain entity references other than lt, gt, amp, apos, or quot" error. This rule
 also implies that xmlDocument[notations] and xmlDocument[unparsed entities] must be empty.
 A Xaml Document processor MUST support the following encodings in Xaml Documents: UTF-8 and
 UTF-16. (These encodings are defined in section 3.9 of The Unicode Standard [Unicode], in
 definitions D92 and D91 respectively.)
                                                                                                 65 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
 Let result be a Document Information Item initialized as follows:
The output of this rule is a Xaml Information Set Object Node Information Item.
 If objectType is either of the intrinsic types x:Code (section 7.2.23) or x:XData (section 7.2.24),
 then:
           literalResult[type] = objectType
           literalResult[member nodes] is set to a single text node, whose value
           is a string representation of xmlObjectElement[children]
           literalResult[parent member] is not determined by the rules in this section
           --it is set by the rule from which this rule was invoked, or in the case of
           the root element, it is Null.
           literalResult[is retrieved] is False
           literalResult[xml namespace mappings] is generated as follows:
               Invoke "Xml Namespace Mapping Conversion"
                                                                                                       66 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
                    (xmlNamespaces ::= xmlObjectElement[in-scope namespaces])
The nodes in childXmlNodes are processed in phases to produce a sequence of information items.
The following list shows a summary of the phases, which are described in detail below.
1. Conversion: childXmlNodes is converted into a sequence of items, where each item is either an
   object node, a member node, or a text node.
2. Whitespace removal: text nodes between member nodes, or before the first member node, or
   after the last member node, are stripped out.
3. Content wrapping: text or object nodes are wrapped in implicit member nodes; the sequence
   now contains only member nodes.
Conversion
   If convertedChildNodes ends in a Text Node Information Item, append the Unicode character
     identified by xmlChild[character code] to that node's [text].
                                                                                               67 / 86
[MS-XAML-2017]
XAML Object Mapping Specification 2017
Copyright © 2017 Microsoft Corporation
   Otherwise, append to convertedChildNodes a new Text Node Information Item with a [text]
     value containing the Unicode character identified by xmlChild[character code]. (The [parent
     member] will be set later.)
An XML node of any other type is ignored, and will not cause an item to be added to
  convertedChildNodes.
If convertedChildNodes contains any Object Node Information Item with a [type] of the intrinsic
x:Code (section 7.2.23), remove these from convertedChildNodes. If convertedChildNodes contains
an Member Node Information Items whose [values] contain any Object Node Information Items with
a [type] of the intrinsic x:Code (section 7.2.23), remove these from that [values].
Let codeItems be the Object Node Information Items removed by the steps in the previous
paragraph. If codeItems is not empty, add a new Member Node Information Item called
directiveChildren initialized as follows:
directiveChildren[values] contains the Object Node Information Items in codeItems, with the [parent
member] of each item set to directiveChildren
Whitespace Removal
Whitespace removal takes convertedChildNodes and strips out whitespace between member nodes
to form a new intermediate result, strippedChildNodes. For the purposes of this section, 'whitespace
characters' are those listed in section 8.5.2, "Collapsible Whitespace Characters". Removal proceeds
as follows:
If convertedChild is a Text Node Information Item, and if its [text] contains only whitespace, then
  ignore the node if any of the following is true:
                                                                                              68 / 86
[MS-XAML-2017]
XAML Object Mapping Specification 2017
Copyright © 2017 Microsoft Corporation
Content Wrapping
Content wrapping proceeds as follows. Define contentMember and contentMemberType with the first
of the following to match:
Otherwise, let contentMember be the intrinsic x:Items (7.3.1), and let contentMemberType be
  objectType.
Let attributeMembers be the set of Member Node Information Items generated by applying the
following invocation for each xmlAttribute in xmlObjectElement[attributes]:
Let members be a set of Member Node Information Items. If all of the following are True:
strippedChildNodes contains exactly one Text Node Information Item and strippedChildNodes
  either contains no other items, or contains only a Member Node Information Items whose
  [member] is the intrinsic x:DirectiveChildren (section 7.3.12).
attributeMembers is either empty, or contains only Member Node Information Items whose
  [member] is either the x:Key Directive (section 7.3.5) or the x:Uid Directive (section 7.3.6).
then let members contain just a single Member Node Information Item initTextMember initialized as
follows:
attributeMembers.
The set of Member Node Information Items generated by applying the following invocation for
  each consecutive sequence npChildren of non-member-node items in strippedChildNodes:
                                                                                              69 / 86
[MS-XAML-2017]
XAML Object Mapping Specification 2017
Copyright © 2017 Microsoft Corporation
 The set of items in strippedChildNodes that are Member Node Information Items.
result[type] = objectType
 result[member nodes] is set to members, with [parent object] of each Member Node Information
 Item set to result
 result[parent member] is not determined by the rules in this section - it is set by the rule from
 which this rule was invoked, or in the case of the root element, it is Null.
 The content wrapping process can end up producing more than one content member. For example,
 consider the following XML:
   <MyObject>
     Some content
     <MyObject.Prop>BarValue</MyObject.Prop>
     More content
   </MyObject>
 If <MyObject> represents an object node, its [member nodes] will contain two content nodes, one
 representing each piece of text. The well-formedness rules in section 6 require that Xaml processors
 identify this as an error--a Xaml Information Set is not well formed if an object node contains two
 member nodes with the same XamlMember Information Item. (See 6.2.1.3.) However, for some
 applications (e.g. Xaml editors) it may be useful to carry on document processing even when a
 document is known not to be valid. The example XML shown above is conceptually equivalent to
 this:
   <MyObject>
     <MyObject.Content>
       Some content
     </MyObject.Content>
     <MyObject.Prop>BarValue</MyObject.Prop>
     <MyObject.Content>
       More content
     </MyObject.Content>
   </MyObject >
                                                                                                 70 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
 Where 'Content' is MyObject's content member. This makes it more obvious why this is not
 considered well-formed Xaml. The error is the same in both cases - the same member appearing
 twice in one element. The only difference in the first example is that the content member has not
 been spelled out as a member element.
    objectType             XamlType Information    The type of object that the attribute's containing
                           Item                    element represents.
    namespacesInScope      Set of XML:namespaces   Namespaces in scope for the element that contains
                                                   this attribute
The output of this rule is a Xaml Information SetMember Node Information Item.
    If the previous step does not determine a value for member, if there exists a XamlMember
      Information Item in schema(xmlAttribute)[directives] for which the [name] property matches
      xmlAttribute[local name], let member be that XamlMember Information Item.
    If neither of the previous steps determines a value for member, it is an unknown member
      error.
                                                                                                        71 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
       If schema(xmlAttribute)[types] contains objectType and objectType[types assignable to]
         contains a XamlType Information Item where [name] matches typeName, let definingType
         be objectType.
The member will contain a single value, attributeValue, which is calculated as follows:
 If attributeValue is an Object Node Information Item, its [parent member] is set to result. If
 attributeValue is a Text Node Information Item, its [parent member] is set to result.
          result[member] = member
          result[parent object] is not set by this rule - it is set by the invoker of this rule
          result[values] = a collection containing a single item, attributeValue
 The rules in this section consider attributes that match the XamlName production, and that are not
 qualified with a namespace prefix to be equivalent to attributes explicitly placed in the same
 namespace as their containing element. For example, this:
                                                                                                  72 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
   <q:MyObject Prop="42" />
Is equivalent to this:
 In particular, note that this means an unqualified attribute is not necessarily considered to be in the
 default namespace. That will only be the case if the element happens to be in the default
 namespace in scope. So if d: is a prefix for the namespace that is also the default namespace in
 scope, the following are all equivalent:
 Attributes representing attached properties are handled differently. If they are not qualified with a
 namespace prefix, they are considered to be equivalent to attributes explicitly placed in the default
 namespace.
 The output of this rule will either be an Object Node Information Item or a Text Node Information
 Item.
 If valueText begins with '{' and does not begin with '{}', the value is an Object Node Information
   Item determined as follows:
        Let result = Invoke "Object Node Creation from a Markup Extension in an Attribute"
                        (attributeText ::= valueText,
                        namespacesInScope ::= namespacesInScope)
if valueText begins with '{}', unescapedValue is valueText with the leading '{}' removed.
                                                                                                        73 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
    Otherwise, unescapedValue is valueText.
 Let result be a new Text Node Information Item whose [text] is unescapedValue and whose
   [parent member] is set by the invoker of this rule.
    containingType               XamlType            The type of the object node to which this member
                                 Information Item    will belong.
 The output of this rule is a member node. This does not set the [parent object] property--the
 invoker of this rule must provide the value for that property.
 If xmlMemberElement[attributes] is not empty, it may only contain a single attribute, whose [local
 name] MUST be "Uid", and whose [namespace name] MUST be the [target namespace] of the x:
 Schema ("http://schemas.microsoft.com/winfx/2006/xaml"). If xmlMemberElement[attributes]
 contains anything other than this, it is a "member elements cannot contain attributes" error. Xaml
 processors MAY choose to continue processing by ignoring any attributes. (Note that in the case
 where the x:Uid (section 7.3.6) attribute is present, it is ignored--no Xaml Information Set elements
 are created to represent the attribute. The only difference between this and any other attribute is
 that the x:Uid's presence is not deemed to be an error.)
                                                                                                   74 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
                       memberName ::= elementMemberName)
Let convertedChildNodes be an ordered sequence that may contain Object Node Information Items
or Text Node Information Items. (Note: the following part is similar to the conversion process in the
Object Node Creation from an XML:element (section 8.6.2) rule. The difference is that here,
member elements are not permitted as children, since these elements are already inside a member
element.) It is generated by applying the first of the following steps that matches to each xmlChild
in childXmlNodes in document order.
   If convertedChildNodes ends in a Text Node Information Item, append the Unicode character
     identified by xmlChild[character code] to that node's [text].
   Otherwise, append to convertedChildNodes a new Text Node Information Item with a [text]
     value containing the Unicode character identified by xmlChild[character code]. (The [parent
     member] will be set later.
An XML node of any other type is ignored, and will not cause an item to be added to
  convertedChildNodes.
                                                                                               75 / 86
[MS-XAML-2017]
XAML Object Mapping Specification 2017
Copyright © 2017 Microsoft Corporation
8.6.6   Member Node Creation from Content
    memberType             XamlType Information Item      The type of the member. (This is not always the
                                                          same as containingMember[value type]. If this rule
                                                          is invoked for the implicit content of a list-like
                                                          object node, containingMember will be the intrinsic
                                                          x:Items (Constraints) member, while memberType
                                                          will be the containing object's type.)
    childNodes             Ordered Collection of items,   The text and object nodes to be processed and
                           where each item is either      wrapped
                           an Object Node Information
                           Item or a Text Node
                           Information Item
    namespacesInScope      Set of XML:namespaces          Namespaces in scope for the element that contains
                                                          this content.
 For the purposes of this section, 'whitespace characters' are those listed in section 8.5.2,
 "Collapsible Whitespace Characters". If preserveXmlSpace is False, apply the following steps:
 For each Text Node Information Item in childNodes, any linefeed character (LF--Unicode Code
   Point 000A) both preceded and followed by a character in the ranges defined in section 8.5.3,
   'Linefeed Collapsing Characters' is removed.
 For each Text Node Information Item in childNodes, replace any sequence of whitespace
   characters with a single space.
 If childNodes contains at least one Text Node Information Item, trim any leading whitespace from
   the first Text Node Information Item; if this leaves the node's [text] empty, remove the node
   from childNodes.
 If childNodes contains at least one Text Node Information Item, trim any trailing whitespace from
   the last text node; if this leaves the node's [text] empty, remove the node from childNodes.
 For each object node 'obn' in childNodes, if obn[type][trim surrounding whitespace] is True apply
   the following rules:
    If childNodes contains a text node as the item before obn, trim any trailing whitespace from
      that text node; if this leaves the text node empty, remove it from childNodes.
    If childNodes contains a text node as the item after obn, trim any leading whitespace from
      that text node; if this leaves the text node empty, remove it from childNodes.
                                                                                                        76 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
 If memberType [is whitespace significant collection] is False, then for each text node 'tn' in
 childNodes, trim leading and trailing whitespace; if this leaves the text node empty, remove it from
 childNodes.
 Let outputValues be an ordered collection of information items, where items are either Object Node
 Information Items, or Text Node Information Items, determined as follows:
 If either memberType[is list] or memberType[is dictionary] are True, and childNodes does not
   contain a single Object Node Information Item obj where [type][types assignable to] contains
   memberType then
Let result be a new Member Node Information Item prop, initialized as follows:
    containingElementSchema      Schema Information     The schema of the element that contains this
                                 Item                   attribute
                                                                                                       77 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
 The output of this rule is an object node.
 Handling of Markup Extension attribute values is performed in two steps. First, the value MUST be
 parsed. Then the resulting parse tree MUST be converted into Xaml Information Set nodes.
 The attributeText input MUST match the MarkupExtension production in the following grammar
 (using the syntax defined in [ RFC4234]):
 TYPENAME, MEMBERNAME and STRING above are special - they are not defined in the grammar
 because they are terminals as far as this ABNF grammar is concerned. This is because Markup
 Extensions have slightly unusual tokenization rules. With normal ABNF, the input to the grammar is
 a sequence of characters. But with Markup Extensions, a more complex tokenization process is
 performed, which presents attributeText as a sequence consisting of the tokens shown in Table 91.
"," Comma
TYPENAME String representing the name of a type. Follows a "{" token, space delimited.
    MEMBERNAME       String representing the name of a type. Precedes an "=" token. Delimited by any of "{"
                     "}" "," or "=" tokens.
STRING String representing the value of a member. Delimited by any of {},= tokens.
 The tokenizer treats as 'whitespace' the characters identified in section 8.5.2, "Collapsible
 Whitespace Characters" (i.e. the Unicode code points 0009, 000A, and 0020).
 The tokenizer starts by consuming the initial "{" (Unicode code point 007B) and generating a "{"
 token.
 The tokenizer consumes any whitespace characters that immediately follow the "{" character, and
 does not produce a token to represent these whitespace characters.
 Next, the tokenizer generates a TYPENAME token to represent the sequence of non-whitespace
 characters that immediately follows the "{" character. The tokenizer consumes all the characters up
                                                                                                       78 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
to, but not including the first character that is either whitespace or a "}" (Unicode code point 007D)
character, and those consumed characters are the TYPENAME's value.
Next, the tokenizer consumes all characters up to but not including the first non-whitespace
character, does not produce a token to represent these whitespace characters.
The tokenizer proceeds by executing the following rules until all the characters in attributeText have
been consumed:
If the next character is a "}" (Unicode code point 007D), consume the character and generate a "}"
token.
If the next character is an "=" (Unicode code point 003D), consume the character and generate an
"=" token.
If the next character is a "," (Unicode code point 002C), consume the character and generate a ","
token.
If the next character is not one of "{}=,"then it is the start of either a MEMBERNAME or a STRING,
To determine which kind of token to produce, the tokenizer MUST first read a text value (see
below), and then examine (but not consume) the character immediately following this text value. If
the character is "=", the token is a MEMBERNAME. Otherwise it is a STRING. If the token is a
MEMBERNAME, any leading and trailing whitespace is removed from the text value.
The text value of either a MEMBERNAME or STRING is read as follows. Leading whitespace
characters are consumed without being represented in the generated token. If the first non-
whitespace character is a quote (either Unicode code point 0022, Quotation Mark, or 0027,
Apostrophe), the tokenizer proceeds as follows:
The first quote is consumed and is not represented in the token's value.
The text value becomes the characters up to but not including the next matching quote (i.e. a
  character of the same code point as the opening quote) that is not preceded by a "\" character.
  All these characters and also the closing quote are consumed. Any "\" characters in the resulting
  text value are removed.
Whitespace characters following the closing quote are consumed, and are not represented in the
  token.
But if the first non-whitespace character of the text value is not a quote, then instead, the text value
is formed as follows. Initialize the running brace total to 0, then repeat the following rules until they
determine that the process is complete:
If the next character is a "\" (Unicode code point 005C), consume that "\" without adding it to
  the text value, then consume the following character and append that to the value.
If the next character is a "{", add one to the running brace total, and consume the character,
  appending it to the value.
If the next character is a "}", then the behavior depends on the running brace total:
   If the running brace total is zero, do not consume the "}", and do not append any more to the
     text value; the text value reading process is now complete.
   If the running brace total is non-zero, consume the "}", append it to the value, subtract one
     from the running brace total, and continue the text value reading process.
                                                                                                  79 / 86
[MS-XAML-2017]
XAML Object Mapping Specification 2017
Copyright © 2017 Microsoft Corporation
         If the next character is the first character of one of the text strings of [markup extension
     bracket characters] add one to the running brace total for that text string, and consume the
     character, appending it to the value.
 • If the next character is the second character of one of the text strings of [markup extension
   bracket characters], then the behavior depends on the running brace total for that text string:
        If the running brace total for that text string is zero, do not consume the character, do not
         append any more to the text value; the text value reading process is now complete. It is an
         "Invalid markup extension text value" error, since the closing character was encountered
         before the matching opening character.
         If the running brace total for that text string is non-zero, consume the character, append it to
         the value, subtract one from the running brace total for that text string, and continue the text
         value reading process.
         If the next character is a "," or "=" and if one or more running brace totals for all text
     strings in [markup extension bracket characters] is non-zero, consume that character; append it
     to the value.
 • If the next character is a "," or "=" and if each running brace total for all text strings in [markup
   extension bracket characters] is zero, do not consume that character; the text reading process is
   now complete.
 The resulting sequence of characters then has leading and trailing whitespace characters removed.
 The result is the value text.
 The parsing procedure described in the previous section will result in a parse tree with a
 MarkupExtension production at its root. This is converted into Xaml Information Set nodes as
 follows.
 Let typeName be the text value of the TYPENAME production of the root MarkupExtension
   production.
 If typeName is not a QName (as defined in section 4 of [XML Namespaces]), it is a 'bad type
   extension name' error.
     If typeName is a PrefixedName (as defined in section 4 of [XML Namespaces]); perform the
       following steps:
                                                                                                   80 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
      Let extensionSchema be the schema whose [target namespace] matches
        typeNamespaceUri. If no such schema is available, this is an "Unknown namespace" error.
Let typeLocalName be the typeName's LocalPart (as defined in section 4 of [XML Namespaces]).
Let namedMembers be a set of Member Node Information Items generated as follows. For each
namedArg in namedArgs perform the following steps:
If memberName is not a QName (as defined in section 4 of [XML Namespaces]), it is a 'bad
  member name' error; if it is a QName, let memberLocalName be the LocalPart of the QName
Let member be the Member Node Information Item this named argument represents, determined
  as follows:
                                                                                            81 / 86
[MS-XAML-2017]
XAML Object Mapping Specification 2017
Copyright © 2017 Microsoft Corporation
      If memberInfo is not Null, let member be memberInfo
Defined namedMember node as a new Member Node Information Item initialized as follows:
              namedMember[member]is member
              namedMember[values] contains just memberValue
              namedMember[parent object] is set later in this rule
Let positionalArgs be the set of STRING productions that are descendants of the PositionalArgs
production in the Arguments production in MarkupExtension production, ordered by increasing depth
in the parse tree.
Let positionalArgValues be an ordered sequence of Object Node Information Items and Text Node
Information Items generated as follows. Let constructorInfo be the Constructor Information Item for
                                                                                             82 / 86
[MS-XAML-2017]
XAML Object Mapping Specification 2017
Copyright © 2017 Microsoft Corporation
 the type whose [arguments] contains as many items as there are in positionalArgs. For each
 positionalArg in positionalArgs perform the following steps:
 Let allArgs be a set of Member Node Information Items that contains all the items in
 namedMembers, and, if positionalArgsMember is non-Null it also contains positionalArgsMember.
        result[type] is extensionType
        result[member nodes] is allArgs, where the [parent object] property of each item
            is set to result
        result[parent member] is
        result[is retrieved] is False
        result[xml namespace mappings] is namespacesInScope
definingType XamlType Information Item The type on which to look up the member.
                                                                                                 83 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
 The rule's output is a XamlMember Information Item.
xmlNamespaces Set of XML:namespace A set of XML namespace mappings from an XML Infoset
                                                                                               84 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation
9     References
    We conduct frequent surveys of the normative references to assure their continued availability. If
    you have any issue with finding a normative reference, please contact dochelp@microsoft.com. We
    will assist you in finding the relevant information.
    [ECMA-376] ECMA International, "Office Open XML File Formats", 1st edition, ECMA-376, December
    2006, http://www.ecma-international.org/publications/standards/Ecma-376.htm
    [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC
    2119, March 1997, http://www.rfc-editor.org/rfc/rfc2119.txt
    [RFC3986] Berners-Lee, T., Fielding, R., and Masinter, L., "Uniform Resource Identifier (URI):
    Generic Syntax", STD 66, RFC 3986, January 2005, http://www.ietf.org/rfc/rfc3986.txt
    [RFC4234] Crocker, D., Ed., and Overell, P., "Augmented BNF for Syntax Specifications: ABNF", RFC
    4234, October 2005, http://www.ietf.org/rfc/rfc4234.txt
    [XML] World Wide Web Consortium, "Extensible Markup Language (XML) 1.0 (Fourth Edition)", W3C
    Recommendation, August 2006, http://www.w3.org/TR/2006/REC-xml-20060816/
    [XML-INFOSET] Cowan, John, and Tobin, Richard, "XML Information Set (Second Edition)", W3C
    Recommendation, February 2004, http://www.w3.org/TR/2004/REC-xml-infoset-20040204
    [XML-Namespaces] Bray, T., Hollander, D., and Layman, A., "Namespaces in XML", W3C
    Recommendation, January 1999, http://www.w3.org/TR/1999/REC-xml-names-19990114/
    [XMLSCHEMA2/2] Biron, P.V., and Malhotra, A., Eds., "XML Schema Part 2: Datatypes Second
    Edition", W3C Recommendation, October 2004, http://www.w3.org/TR/2004/REC-xmlschema-2-
    20041028/
                                                                                                     85 / 86
    [MS-XAML-2017]
    XAML Object Mapping Specification 2017
    Copyright © 2017 Microsoft Corporation
10   Microsoft .NET Framework Behavior
 The information in this specification is applicable to the following versions of the Microsoft product:
 Exceptions, if any, are noted below. Unless otherwise specified, any statement of optional behavior
 in this specification prescribed using the terms SHOULD or SHOULD NOT implies .NET Framework
 behavior in accordance with the SHOULD or SHOULD NOT prescription. Unless otherwise specified,
 the term MAY implies that .NET Framework does not follow the prescription.
                                                                                                   86 / 86
 [MS-XAML-2017]
 XAML Object Mapping Specification 2017
 Copyright © 2017 Microsoft Corporation