Appendix A: Keywords and properties parsing

The resource enumeration XML return by the resource enumeration service contains keywords and properties elements. For resources derived from XenApp, XenDesktop, or VDI-in-a-box, these values are generated from the mark-up in the description field of the corresponding resource. The description field is then ‘tidied up’ to remove this mark-up.

The keyword/property parser looks for the string KEYWORDS: (case-insensitive). If found, all text after that string is treated as keyword/property mark-up. The mark-up is made up of the following tokens separated by one or more spaces:

  • <property>=<value>
  • <property>="<quoted-value>"
  • <keyword>

Where:

  • <property>, <value> and <keyword> are strings made up of any characters other than space, = or ".
  • <quoted-value> is a string made up of any character other than ".

The keywords are collected into a single list.

All property entries with the same property name are collected together to give a multiple-valued property.

Some concrete examples:

Original description in XenApp and XenDesktop (plus comment) Description as returned by StoreFront Services Keywords Properties                                        
“My description” (Basic description without mark-up) “My description”                                        
“My description KEYWORDS: kw1 kw2 (Description with keyword mark-up) “My description” kw1 kw2                                        
“My description keywords: name1=a name2=b name1=”the rain in Spain” (Description with keyword and property mark-up) “My description” a “My description keywords: name1=a name2=b name1=”the rain in Spain” (Description with keyword and property mark-up) “My description” <property propertyId=”name1”> a\\The rain in Spain\ \</property><property propertyId=”name2”> b</property> </properties> lt;/value> “My description keywords: name1=a name2=b name1=”the rain in Spain” (Description with keyword and property mark-up) “My description” <property propertyId=”name1”> a\\The rain in Spain\ \</property><property propertyId=”name2”> b</property> </properties> lt;value>The rain in Spain “My description keywords: name1=a name2=b name1=”the rain in Spain” (Description with keyword and property mark-up) “My description” <property propertyId=”name1”> a\\The rain in Spain\ \</property><property propertyId=”name2”> b</property> </properties> lt;/value> “My description keywords: name1=a name2=b name1=”the rain in Spain” (Description with keyword and property mark-up) “My description” <property propertyId=”name1”> a\\The rain in Spain\ \</property><property propertyId=”name2”> b</property> </properties> lt;/property> b</property> </properties>
“My description keywords: name1=a name2=b” (Description with misformatted mark-up - a misspelled KEYWORDS: token) “My description keywords: name1=a name2=b “                                        
“My description KEYWORDS: kw1 name1=a kw2 name2=b kw3” (Description with interspersed keywords and properties.) “My description” kw1 kw2 kw3 a “My description KEYWORDS: kw1 name1=a kw2 name2=b kw3” (Description with interspersed keywords and properties.) “My description” kw1 kw2 kw3 <property propertyId=”name1”> a \</property> <property propertyId=”name2”> b </property> lt;/property> b </properties>                              
“My description KEYWORDS: name1=a Name1=b “(Property names are case- sensitive.) “My description” a b

</properties>

                                       
Appendix A: Keywords and properties parsing

In this article