# This property file is used by com.lotus.xsl.server.DefaultApplyXSL.
#
# Each line below specifies a mapping rule between a value contained in the HTTP request's user-Agent 
# field and a value to be scanned for in XSL stylesheet(s) associated with the XML data. This mapping 
# enables relationships to be defined between client capabilities and stylesheets capable of acting 
# on these capabilities.
#
# The rules defined below are order-significant.  In other words, if the first rule is unsuccessful,
# the second rule will be tried, etc.  The media value "unknown" will be used when no rules are
# satisfied.
#
# Example: 
#
# Mapping rules of...
#
#   MSIE=explorer
#   MSPIE=pocketexplorer
#
# ...and XML data that contains XSL stylesheet associations of...
#
# <?xml-stylesheet                 media="explorer"       href="alldata.xsl"  type="text/xsl"?>
# <?xml-stylesheet alternate="yes" media="pocketexplorer" href="somedata.xsl" type="text/xsl"?>
#
# ...and an HTTP request that contains a user-Agent value of...
#    
#   foo MSPIE bar
#
# ...will apply the XSL stylesheet somedata.xsl.
#
MSIE=explorer
MSPIE=pocketexplorer
HandHTTP=handweb
Mozilla=netscape
Lynx=lynx
Opera=opera
Java=java
AvantGo=avantgo
Nokia=nokia
UP.Browser=up
DoCoMo=imode
