US20020138617A1 - Providing content from multiple services - Google Patents

Providing content from multiple services Download PDF

Info

Publication number
US20020138617A1
US20020138617A1 US09/947,910 US94791001A US2002138617A1 US 20020138617 A1 US20020138617 A1 US 20020138617A1 US 94791001 A US94791001 A US 94791001A US 2002138617 A1 US2002138617 A1 US 2002138617A1
Authority
US
United States
Prior art keywords
service
content
request
intermediary
output
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Abandoned
Application number
US09/947,910
Inventor
Jacob Christfort
Jeremy Chone
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Oracle International Corp
Original Assignee
Oracle Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Oracle Corp filed Critical Oracle Corp
Priority to US09/947,910 priority Critical patent/US20020138617A1/en
Priority to PCT/US2001/028157 priority patent/WO2002021338A2/en
Priority to PCT/US2001/042067 priority patent/WO2002021342A2/en
Priority to AU9502401A priority patent/AU9502401A/en
Priority to AU9130001A priority patent/AU9130001A/en
Priority to AU2001291300A priority patent/AU2001291300B2/en
Priority to AU9068601A priority patent/AU9068601A/en
Priority to EP01971410.4A priority patent/EP1330736B1/en
Priority to CA2420021A priority patent/CA2420021C/en
Priority to JP2002525482A priority patent/JP2004519756A/en
Assigned to ORACLE CORPORATION reassignment ORACLE CORPORATION ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: CHONE, JEREMY, CHRISTFORT, JACOB
Publication of US20020138617A1 publication Critical patent/US20020138617A1/en
Assigned to ORACLE INTERNATIONAL CORPORATION reassignment ORACLE INTERNATIONAL CORPORATION ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: ORACLE CORPORATION
Priority to US13/889,139 priority patent/US9167051B2/en
Abandoned legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/957Browsing optimisation, e.g. caching or content distillation
    • G06F16/9577Optimising the visualization of content, e.g. distillation of HTML documents
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/564Enhancement of application control based on intercepted application data
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/565Conversion or adaptation of application format or content

Definitions

  • the present invention relates to providing services to clients and, more specifically, to providing content from multiple services.
  • the World Wide Web includes a network of servers on the Internet, each of which is associated with one or more HTML (Hypertext Markup Language) pages.
  • HTML pages associated with a server provide information and hypertext links to other documents on that and (usually) other servers.
  • Servers communicate with clients by using the Hypertext Transfer Protocol (HTTP).
  • HTTP Hypertext Transfer Protocol
  • the servers listen for requests from clients for their HTML pages, and are therefore often referred to as “listeners”.
  • a client program referred to as a browser
  • a browser to request, decode and display information from listeners.
  • the browser selects a link on an HTML page
  • the browser that is displaying the page sends a request over the Internet to the listener associated with the Universal Resource Locator (URL) specified in the link.
  • the listener transmits the requested information to the browser that issued the request.
  • the browser receives the information, presents the received information to the user, and awaits the next user request.
  • the information stored on listeners is in the form of static HTML pages.
  • Static HTML pages are created and stored at the listener prior to a request from a web browser.
  • a static HTML page is merely read from storage and transmitted to the requesting browser.
  • listeners that respond to browser requests by performing dynamic operations. For example, a listener may respond to a request by issuing a query to a database, dynamically constructing a web page containing the results of the query, and transmitting the dynamically constructed HTML page to the requesting browser.
  • Yet another trend is to offer services to clients via a server on a network.
  • the network is the Internet
  • the client is a user
  • the service is available from the server via a website.
  • the service may supply information such as restaurant reviews, weather reports, stock quotations, or news updates.
  • the service may also be more interactive, such as allowing the user to purchase goods, such as books or music, or to purchase services, such as booking travel arrangements.
  • the term “service” refers to providing information, functions, or capabilities to a client.
  • a desktop computer can connect to the Internet through a dial-up line, a digital subscriber line (DSL), a cable modem, an integrated services digital network (ISDN) connection, or many other available methods.
  • WAP Wireless application protocol
  • WAP-to-HTTP gateway Generally, the client logs in to the website and is presented with a list of available services, from which the client selects the desired service.
  • a service is provided in one of two ways: as a hosted application or as a portal application.
  • a hosted application a developer creates the application, but a host installs and maintains the application for access by end-users, or customers, on the host network of servers.
  • the developer both creates the application and deploys it for access by end users, or customers, via one or more servers controlled by the developer.
  • the “developer” referred to herein may be the individual, company, or other entity that provides the service (also referred to as a service provider), or the developer may be another entity providing software development services to the service provider.
  • devices will vary widely in their capabilities based on both the type of device and the particular capabilities of different models of devices of the same type or class of device. For example, a desktop computer will generally have a fully functional web browser, whereas a personal computing device will have a micro browser with limited functionality.
  • some mobile phones may have a limited display that only allows for a single word on each line of the display, while other mobile phones may have a larger display capable of showing several words on each line.
  • a service may involve the display of graphic images, such as those of products offered for sale, which may be easily viewed on the full function web browser of a desktop computer but which may be incapable of display on a mobile phone.
  • the differences in capabilities may be significant. For example, if the application programmer sends output containing multiple words describing several items of information, mobile phones with limited display screens may only be capable of showing the first word of each information item on each line of the display screen, or the output for a single information item will fill multiple lines on the phone display, precluding other information items from being shown simultaneously.
  • One approach to solving the problem of designing for devices of varying capabilities is to design for the “lowest common denominator.”
  • the lowest common denominator approach involves designing the application to work on the most limited device available. For example, if a menu of options is to be displayed on a client device, such as a mobile phone, an application programmer may select short, one-word labels for each of the options because all devices that will use the application can support one-word labels. For example, the application developer may employ the single word menu item “Return” for a mapping application for the option of generating return directions from a selected destination.
  • An alternative approach to solving the problem of designing for clients or devices of varying capabilities is to design for some intermediate level of capability, such as the most common type of mobile phone.
  • some intermediate level of capability such as the most common type of mobile phone.
  • an application using this intermediate approach may not function properly on devices with lesser capabilities, and the application will still fail to take advantage of the enhanced capabilities of other devices.
  • Another problem with providing services via applications is how to support additional devices that become available after the application is developed. For example, several months after release of an application by a service provider, a device manufacturer may release a new device.
  • the new device could be an evolutionary advance over current devices that improves existing features, or the new device could be a more significant advance in that class of device that adds significant new features, or the new device may be a new type of device that adds new capabilities or has a new combination of capabilities.
  • New devices with improved capabilities can be accommodated by using the lowest common denominator approach, but the enhanced features and capabilities of the new devices, such as larger displays, may go largely unused. For example, if the application only provides one-word menu options, the application will not be taking advantage of an improved device that is able to display multiple word options. Furthermore, with a later released device, the lowest common denominator approach may completely avoid using new capabilities, such as being able to handle voice data or graphics. Even if the application is designed for an intermediate level of capabilities, the application may still fail to fully utilize all of the advances and improvements in future devices that may be created.
  • SDK software development kit
  • An SDK will generally contain an application programming environment, some commonly used libraries for various features, application programming interfaces, utilities, documentation, a compiler for generating executable code from source code, and a debugger for diagnosing programming problems.
  • the developer obtains the software, documentation, and other materials from an SDK provider, and then the developer installs the software and other tools onto a local computer or network.
  • Individual service providers may want to offer other services that are related to their core services to enhance the overall experience of the customers of the service. For example, if a user seeks out driving directions to a particular destination from one service provider, the driving direction provider may also want to offer the user additional information about the weather or dining options at the particular destination.
  • One way for the driving direction provider to offer such additional information is to create the necessary additional services, which can entail significant additional development resources.
  • Another approach is for the service provider to make arrangements with another service provider to obtain the desired functionality.
  • making arrangements with other service providers may involve significant coordination, both in establishing the technical infrastructure to connect the two providers' services and also to establish a means for gauging the level of use by the first provider's customers for billing purposes.
  • Still another concern with providing services via applications is that the service provider may want to incorporate into the applications durably stored data that is available to the applications when executed. The service provider may then have to incur the burden of establishing and maintaining the stored data so that the data is available when required by the applications.
  • An intermediary receives a request from a client for content from a service.
  • the response from the service contains a reference to content from another service.
  • the intermediary retrieves the content from the other service and generates a response to the request that includes the content from both services.
  • the content retrieved from the other service may be generated by the other service based on parameters provided in the reference to the other service.
  • the intermediary may also store a record that indicates that content from the other service was incorporated with the content from the original service.
  • clients may access multiple services.
  • An intermediary receives a request from a client for content from a service.
  • the response from the service contains a reference to another service.
  • the intermediary generates a reply to the client request that includes an object, such as a link, to the other service.
  • the client may then select the object to obtain the content from the other service.
  • the content retrieved from the other service may be generated by the other service based on parameters provided in the reference to the other service.
  • the intermediary may also store a record that indicates that other service was accessed from the original service.
  • content from a previously accessed service is provided.
  • An end user is provided by an intermediary with content from a first service in response to a request.
  • the end user makes another request for content from a second service.
  • the intermediary stores a record that indicates that the end user received content from the first service.
  • the end user is provided with the requested content from the second service.
  • the end user makes yet another request for content from the service previously accessed by the end user.
  • the intermediary reads the stored record to determine that the end user had previously accessed the first service.
  • the end user is provided with the requested content from first service.
  • FIG. 1A is a block diagram that illustrates a high level overview of a system for providing services via applications accessed through an intermediary, according to one embodiment of the invention
  • FIG. 1B is a block diagram that illustrates an overview of a host server, according to one embodiment of the invention.
  • FIG. 2 is a block diagram illustrates a condition hierarchy, according to one embodiment of the invention.
  • FIG. 3 is a flow diagram that depicts an approach for selecting an alternative output segment, according to one embodiment of the invention.
  • FIG. 4 is a block diagram illustrating an example of producing output using a shared hosted application, according to one embodiment of the invention.
  • FIG. 5 is a block diagram that illustrates a computer system upon which an embodiment may be implemented.
  • Techniques are provided for facilitating the creation and deployment of applications that are used to provide services for access by devices such as mobile clients. These techniques include the development of applications that can be executed on a variety of devices by tailoring the output, after it has been generated by the application, based on the particular circumstances of the end user's use of the application, such as the capabilities of a mobile client or the network conditions existing at the time a customer requests service from the application. Also, these techniques include combining the output, capabilities, and features of services together, including techniques for allowing an end user to return to a previously accessed service. In addition, these techniques include storing data at an intermediary for access by the applications associated with a service using variables and a mapping of the variables to the stored data.
  • these techniques include providing an online software development kit (SDK) so that application developers can create, test, modify, and deploy applications without having any special client-side software. Developers enter code through an interface provided by the website of the SDK over the Internet. Because the website of the SDK is based on XML and HTTP standards, the developer can reuse existing code. For example, if the developer has a Microsoft Internet Information Services (IIS) server that serves “.asp” pages, the online SDK can access the developer's existing server and pages.
  • IIS Microsoft Internet Information Services
  • end user denotes any person, organization or other entity that may use a device to access a service or application.
  • the term “end user” encompasses the term “customer” although term “customer” does not necessarily imply a commercial relationship with a service provider.
  • the term “end user” is distinguished from the term “user”, which as discussed below, refers to developers and service providers that create and maintain the applications, or computer programs, that provide services to the end users.
  • FIG. 1A is a block diagram that illustrates a high level overview of a system for providing services via applications accessed through an intermediary, according to one embodiment of the invention.
  • FIG. 1 shows a network 100 that includes a host server 110 .
  • Network 100 may be any type of network, including but not limited to a private network, such as an intranet, a public network, such as the Internet, or a combination of different networks and network types.
  • Host server 110 may be implemented on one or more servers at an intermediary, such as a hosting service provider, also known as a host provider or simply as a host.
  • the function of the host is to install and maintain applications, such as on host server 110 , that are developed by either the host provider or other application developers.
  • the applications are typically part of a service, such as a web site, a paging service, or a telecommunications service.
  • the host may also provide “partial” or “shared” hosting of applications in which the applications are stored on servers associated with the application developer or service provider, but the applications may be accessed via the host. Partial or shared hosting of applications is distinguished from portal applications that are stored on servers associated with the application developer or service provider but which are not accessed via the host. End users access the services offered by other parties and companies via the host by interacting with the hosted and partially hosted applications.
  • Network 100 also includes users 120 , 122 , 124 that are interconnected with host server 110 and each other on network 100 as illustrated.
  • users 120 , 122 , 124 may be service providers that offer services for use by end users.
  • Users 120 , 122 , 124 may also be application developers, who may be part of or associated with the service providers. The service providers, application developers, and other parties create and maintain applications that are part of a service offered to end users.
  • the applications that are part of a service may be hosted by the hosting provider, such as on host server 110 .
  • the applications may also be partially hosted by being stored at a server associated with a user, as illustrated by an application 126 that is included with user 124 , and being accessed via the hosting provider, such as via host server 110 .
  • FIG. 1A also illustrates end users 130 , 132 , 134 that are connected to host server 110 by connections 140 , 142 , 144 .
  • end users 130 , 132 , 134 are shown external to network 100 in FIG. 1, end users 130 , 132 , 134 or other end users not shown may also be part of network 100 .
  • end user 130 may be a desktop computer that is connected to host server 110 through a variety of ways, such as via the Internet, a DSL connection, or an ISDN.
  • end user 132 may be a PDA that is connected to host server 110 via a cellular modem connection.
  • end user 134 may be a mobile phone that is connected to the Internet and thereby to host server 110 via a WAP-to-HTTP gateway.
  • FIG. 1A also shows a connection 150 between end user 130 and user 120 , and a connection 152 between end user 134 and a user 124 .
  • Connections 150 and 152 permit direct communication between the end users and the users, thus illustrating that not all communications between end users and users pass through host server 110 .
  • end user 130 may be a desktop computer and therefore is able to interact directly with user 120 when requesting a service.
  • the service that end user 130 requests from user 120 may be supplied by a hosted application located on host server 110 .
  • user 120 may send a request to host server 110 to provide end user 130 with output from the hosted application via connection that satisfies the request.
  • host server 110 may then execute the appropriate hosted application and send the resulting output to end user 130 over connection 140 .
  • end user 134 may be a mobile phone that is interacting with host server 110 .
  • End user 134 may request via host server 110 a service that is supplied by a shared hosted application, such as application 126 that is served from user 124 .
  • the host server 110 then passes along the request for service from end user 134 to user 124 .
  • User 124 then executes the appropriate application, such as application 126 , and sends the resulting output to end user 134 over connection 152 .
  • FIG. 1A illustrates a representative embodiment of a system for providing a network based operating system for mobile devices, while in practice much larger and more complex networks featuring a number of variations of the configuration shown in FIG. 1A may be used.
  • a network based operating system for mobile devices may involve more than one server associated with the host and virtually unlimited numbers of users and end users.
  • not all users may be included in a single network, such as network 100 . Instead, users may be located in many networks, including the Internet and intranets.
  • end users may be located within a network that also includes the host server and one or more users.
  • the host provider may offer services directly to end users, in addition to hosting applications by others. Further, the types of end users, users, and connections discussed above are only representative examples.
  • FIG. 1B is a block diagram that illustrates an overview of host server 110 , according to one embodiment of the invention.
  • Host server 110 includes applications 160 , 162 that may be hosted applications stored on host server 110 or links to shared hosted applications stored on other servers, similar to application 126 .
  • Host server 110 includes a middleware transformer 112 for transforming application output into output that is tailored or customized based on parameters or conditions associated with a service request.
  • a middleware transformer 112 for transforming application output into output that is tailored or customized based on parameters or conditions associated with a service request.
  • the capabilities of the client devices used by end users may vary widely.
  • the application developer designs the application to produce generic output that includes several output variations, also referred to as output segments, for presenting or displaying the output on the client device.
  • the generic output is received by middleware transformer 112 .
  • the middleware transformer 112 also receives or detects the parameters or conditions associated with the service request.
  • Middleware transformer 112 selects a particular output variation or option based on the parameters or conditions of the service request.
  • the client may be a mobile phone that is requesting driving directions from a map service provider.
  • the mobile phone may not be capable of displaying graphics, and therefore the map service provider need only supply a response to the request that includes text, not graphics, showing the desired route.
  • the map service provider may have other customers that use other devices, such as laptop computers, that are capable of displaying graphics in addition to text.
  • the application used by the map service provider may therefore generate generic output that includes several variations of the requested directions, such as one output segment with text only and one with text and graphics.
  • the application provides the generic output to middleware transformer 112 , which also receives parameters or information from the request, such as data that indicates that the client device is a mobile phone.
  • Middleware transformer 112 selects the output segment with text only from the generic output and generates customized output that contains the text only output segment from the application, and then middleware transformer sends the customized output to the end user.
  • the application produces a comprehensive set of output that is customized or formatted by middleware transformer 112 based on a style sheet selected based on the client device.
  • the approach of using a host to receive generic output and generate customized output provides several benefits.
  • the application developer does not have to write different applications, or different output routines, for each specific condition that may merit changes to the output.
  • the application developer does not even have to be able to test for those conditions. Rather, the application developer may write one application with output variations for each of the special conditions, which may include the specific model of the client device, the type of the client device, and broad or narrow class of the client device, the network conditions, etc.
  • the middleware transformer can select the output variation that best matches the capabilities of the new client devices.
  • the output segments may depend on conditions that exist at the time of the request, such as network congestion, the time of the request, or the location of the user, which allow the middleware transformer to select an output variation or to format the output by taking into account such conditions. Therefore, the application developer may design the application to provide generic output that includes output segments for each of a variety of conditions and then allow the host to select the particular output that is to be provided to the end user based on the particular conditions for the particular request.
  • Host server 110 also includes a service linker 114 for handling requests from end users for service and forwarding the requests to the appropriate service or application for a response.
  • service linker 114 can keep the session (or transaction) of other services active.
  • an end user may be a mobile phone that is communicating with the host.
  • the host provides the end user with a list of service options that may include a map service.
  • service linker 114 receives the request from the end user and forwards the request to the provider of the appropriate service. For example, if the service is supplied using a shared hosted application, the request may be forwarded to a server associated with the map service provider over the World Wide Web.
  • the response to the request from the shared hosted application may be received at the host in the form of generic output that is customized for the mobile phone, such as by using a middleware transformer as discussed above.
  • applications incorporate the features and output of other applications.
  • the applications may also be referred to as mobile modules or simply modules.
  • the map service provider may also want to include information regarding the weather at the destination location specified by the end user.
  • the map service provider may link to another hosted or shared hosted application provided by a weather information service provider that is associated with host server 110 .
  • application 162 may be a weather application or module provided by a different company than the company providing the map service.
  • both companies have modules associated with the host server, both may include links to the other company's modules in the output of each company's application.
  • the middleware transformer may incorporate output from one application into another, or a link may be presented to the end user to allow access to the features of another service.
  • the host server handles the interaction between the two services, the host can track which modules are called by each other to facilitate billing between the services. Furthermore, this tracking feature allows one module to call back to another module without being aware of the identity of the other module. For example, if a first module calls a second module, the tracking feature allows the second module to call back the first. As a result, any service can be used as a module, which may be described as providing a reusable web service to other services.
  • Host server 110 also includes a database 170 to support storage of data at the host by the services for use by the services' applications.
  • database 170 is shown as part of host server 110 , database 170 may also be supported by another server or other device suitable for providing database functions.
  • Database 170 may include a data structure for storing data and also a mapping of variables, or identifiers, to specific data, or information items. Services may use database 170 to durably store and maintain information at the host server, thereby freeing the services of the obligation to support such a database themselves. For example, an application may generate output with an identifier “%xyzlogo” that is identified in the mapping as corresponding to a particular graphical image of the XYZ Company stored in database 170 .
  • the application's output may include a variable “%date” to denote the current date when the application is accessed in response to a request from an end user.
  • the current date is substituted in the output for the variable %date.
  • Host server 110 also includes an online software development kit 116 that services and application that developers may use to create, edit, test, deploy, and otherwise manage applications or modules associated with the hosting service.
  • an application developer uses a browser to log into an online development website associated with the hosting service to access online software development kit 116 .
  • online software development kit 116 provides a user interface for display on the developer's web browser. The user interface presents the user with various options, such as creating a new application, modifying an existing application, testing an application, or deleting an existing application.
  • the developer enters or modifies program code using the user interface via the developer's browser and then saves the code at host server 110 under a module or application name, or identifier.
  • the developer wishes to establish a shared hosted application, the developer logs into the online development website and provides a URL of the application.
  • the hosted and shared hosted applications may then be made immediately available for use. For example, end users may log into the service provider via a website to access a list of available services.
  • a developer uses a browser running on a client to log on to a website through which the developer can access the tools necessary to develop an application without any special client-side SDK software.
  • the website may be referred to as a development website, or as an “SDK website” when, for example, the website provides, or hosts, an online software development kit (SDK).
  • SDK online software development kit
  • a “developer” is synonymous with both a “service provider” and a “user” (since the developer makes use of the online development website). Also, a “user” is distinguished from an end-user or a customer that uses the service provided by the developer.
  • the provider of the application development tools and host of the online development website may be referred to as the development provider, SDK provider, or simply as the host.
  • the development provider typically uses one or more servers to support the development website and the tools provided thereby.
  • Access to the development website may be controlled by requiring the user to have a name and password.
  • the user may be presented with a list of mobile applications (also referred to herein as services), that the developer or user has previously created.
  • the user may also have access to other services, such as samples provided by the development website provider.
  • the development website may present the user with several options, such as to add a new service, modify an existing service, or delete an existing service. For example, if the user selects the “add service” option, the user is presented with a user interface that allows the user to add a service.
  • a service may be either a hosted application or a portal application.
  • a hosted application is an application whose code is maintained at the development website, also referred to as the host website.
  • a portal application is an application whose code is maintained at another website associated with the portal application developer and may typically be accessed by customers or end users via the developer's website.
  • a portal application may also be accessed or served to clients through the development website, in which case the portal application may be referred to as a “shared hosted application” or a “partially hosted application.”
  • the deployment of a hosted application may involve several steps, such as initially creating the application, subsequently editing of the application, and testing of the application.
  • the development website provides the developer or user with an interface for writing and editing code for the application.
  • the interface may include an editing window or edit field that the user may use to type in the code for the application.
  • edit an existing application the user is presented with an interface that displays the existing application code to the user in an editing window that allows the user to edit the code of the selected application.
  • Application code can be written in an appropriate mark-up language (ML), such as the extensible markup language (XML).
  • ML mark-up language
  • XML extensible markup language
  • the code is written in a mark-up language referred to herein as “portal-to-go XML”.
  • “Portal-to-go” and “Portal-to-go XML” may also be referred to as Oracle9iASWireless and Oracle9iASWireless XML (or just IASWireless XML), respectively.
  • Portal-to-go XML consists of a set of XML tags that may be used to indicate boundaries between alternate output segments.
  • Each output segment in a set of output segments may be specifically designed for certain devices, such as mobile devices that typically have small screens, and others with voice capabilities.
  • Portal-to-go XML can be generated by any of the traditional means of generating dynamic HTML, such as JavaServer Pages, CGI, or Active Server Pages, such that instead of generating HTML, the code or script generates Portal-to-Go XML.
  • the details of such a markup language such as Portal-to-go XML may be defined in a Document Type Definition (DTD).
  • DTD Document Type Definition
  • a DTD of portal-to-go XML as implemented in one embodiment is described in U.S. provisional application Ser. No. 60/230,489, filed Sep. 6, 2000.
  • both the application code for a hosted application and the code that causes the generation of the user interface used to enter and edit the code are stored on one or more servers associated with the development provider. Consequently, the only client-side software required to develop and deploy a mobile application is a web browser, such as Netscape Navigator.
  • the “save” code function may be an object, such as a button, included in the interface. By clicking on the object, the code is submitted, or sent, to a server remote from the client, such as a server associated with the development provider. If a new application is being created, the user specifies a service name and the code is saved in association with the service name. After saving the new code, the new service name will be displayed in a list of existing services shown when users and end users log into the development website. If an existing application is being modified, the user may choose to save the code under the existing service name or under a new service name.
  • the user can access the application or service via the development website using a mobile device or a mobile device simulator. This is discussed in more detail below under “Accessing the New Application or Service.”
  • the hosted application that is deployed via the development website is immediately available to the user for testing and to end users for use via the host website.
  • the user writes either a portal-to-go XML document or an application program that generates a portal-to-go XML document as output.
  • the terms “partially hosted application” or the “shared hosted application” may be used to refer either to the XML document or the application that generates an XML document as output.
  • the shared hosted application may be saved, for example, at the application developer's own website.
  • the user then associates a URL with the shared hosted application using, for example, an HTTP listener/web server that services the application developer's web site.
  • the shared hosted application is then added as a “service” by logging into the development website, or the SDK website, and providing the name of the service and the URL associated with the shared hosted application.
  • a desktop computer can connect to the Internet through a dial-up line, a DSL connection, a cable modem, an ISDN connection or many other available methods.
  • WAP phones may connect to the Internet over a wireless connection using a synchronous protocol, such as through a WAP-to-HTTP gateway, or using an asynchronous protocol, such as the simple mail transfer protocol (SMTP) or the short message service (SMS) protocol.
  • SMTP simple mail transfer protocol
  • SMS short message service
  • the end user logs in to the development website and is presented with a list of available services.
  • the end user may select the service that was just created and/or modified.
  • the application associated with the service is obtained.
  • the application may be associated with a portal-to-go XML document or another document written in a suitable markup language.
  • the XML may be obtained by retrieving the portal-to-go XML that was saved at a server associated with the intermediary (e.g., the host).
  • a request may be sent to the URL that was specified by the developer for the service.
  • the web server that manages that URL may invoke the portal application and send the portal-to-go XML associated with the portal application back to the server associated with the intermediary.
  • the server associated with the intermediary uses the portal-to-go XML to provide the selected service to the client associated with the end user.
  • the mark-up language output such as portal-to-go XML
  • the mark-up language output is produced by a service without regard to the type of client device that is invoking the service.
  • one or more extensible stylesheet language (XSL) style sheets are selected based on the device type of the client.
  • XSL style sheets are discussed in more detail in U.S. application Ser. No. 09/631,884, filed Aug. 4, 2000, the entire disclosure of which is hereby incorporated by reference as if fully set forth herein.
  • the selected style sheets are applied to the XML output from the service to produce customized output that is specifically formatted for the client that requested the service.
  • the same XML output by a mobile application may ultimately be manifested in the following three ways, depending on the type of client that requested the service: (1) a list of options on the display of a mobile phone, (2) a pull-down menu on a browser, and (3) an orally presented list of options on the voice interface of a telephone.
  • the application developer achieves any-device support without having to do any special programming because the applications are designed to produce the same XML output regardless of the device used to request the service and since the device-specific formatting takes place outside the applications, such as by an intermediary applying device-specific XSL style sheets.
  • Another problem with providing services via applications is that the applications function the same regardless of the specific circumstances existing at the time when the applications are used. For example, it may be desirable to modify the application's output based on the congestion of the network at the time a user accesses the application. If the network is heavily congested, it may be better to limit the amount of detail provided in the output being provided during such times of heavy congestion. Again, the application programmer can take the lowest common denominator approach and design the application for the worst-case conditions. However, this approach fails to take advantage of improved conditions when they exist at other times. If the programmer selects a higher level of detail, then the ability of the application to deliver output to the client device will suffer during periods of heavy network congestion.
  • Request-conditions may include, for example, information about the type of client that is requesting the service, such as a device type, or environmental conditions, such as the time at which the service request is made or responded to, or the congestion on the network over which the service is requested or supplied.
  • an application program continues to generate the same output regardless of the request-conditions. Because the output of the application is the same regardless of request-conditions, it is referred to herein as “condition-independent output”.
  • condition-independent output produced by an application contains “hints” (or criteria, conditions or other guidance) as to how the output should be processed under certain request-conditions.
  • a middleware transformer is provided that receives the condition-independent output and uses the hints contained therein, along with knowledge of the client and request-conditions, to transform the condition-independent output into “condition-specific output,” which may also be referred to as “condition-dependent output.”
  • condition-specific output is then provided to the client that requested the service that produced the output.
  • the middleware transformer typically is associated with the host and may be provided by a server associated with a host, but the middleware transformer is not limited to implementations associated with the host.
  • application programmers design applications to generate output that contains “hints” about how the output should be transformed based on request-conditions.
  • the application programmer designs the application to generate output that designates several variations of the output that satisfies a request to the application that resulted in the generation of the output.
  • the variations of the output may also be referred to as alternative output segments.
  • the output from the application also includes one or more particular criteria or conditions that are associated with each of the alternative output segments.
  • a middleware transformer is used to select the alternative output segment that best matches the request conditions to the criteria or conditions that are associated with each alternative output segment. A match may be determined based on whether the condition or conditions associated with a particular alternative output segment are satisfied or not satisfied (or whether the conditions are true or false).
  • the application output is in the form of a mark-up language, such as XML
  • the output may include a section of code that has the form: ⁇ section> ⁇ condition 1> Use this when Condition 1 is true ⁇ /condition 1> ⁇ condition 2> Use this when Condition 2 is true and Condition 3 is not true ⁇ condition 3> use this when Condition 3 is true ⁇ /condition 3> ⁇ /condition 2> Use this for Every Other Condition ⁇ /section>
  • the application generates the output above without regard to the request-conditions that will exist at the time a request for a service is made by an end-user.
  • the middleware transformer determines whether any of conditions 1, 2 and 3 are true after receiving the condition-independent output from the application. For this example, if condition 1 is true, then the middleware transformer transforms the condition-independent output to produce the following condition-dependent output: ⁇ section> Use this when Condition 1 is true ⁇ /section>
  • condition 2 is true but condition 3 is not true, then the middleware transformer transforms the condition-independent output to produce the following condition-dependent output: ⁇ section> Use this when Condition 2 is true and Condition 3 is not true ⁇ /section>
  • condition 2 and 3 are true, then the middleware transformer transforms the condition-independent output to produce the following condition-dependent output: ⁇ section> use this when Condition 3 is true ⁇ /section>
  • the middleware transformer transforms the condition-independent output to produce the following condition-dependent output: ⁇ section> Use this for Every Other Condition ⁇ /section>
  • conditions 2 and 3 are related to each other. Specifically, the output segment associated with condition 3 is not executed unless both conditions 2 and 3 are true.
  • condition 2 may be that the network is experiencing an unusual amount of traffic (e.g., network congestion) as compared to a threshold amount
  • condition 3 may be that the network traffic is extremely heavy as evidenced by exceeding a specified limit. Therefore, for normal network congestion, when condition 2 is true but not condition 3, the actual instruction or statement corresponding to “use this when Condition 2 is true and Condition 3 is not true” may specify that no unusually detailed graphics should be transmitted. And if condition 3 is true, such as might be the case for extreme network congestion, the actual instruction or statement corresponding to “use this when Condition 3 is true” may specify that no graphics should be transmitted.
  • condition-independent output with embedded hints allows the application developer to design flexibility into the service application to handle variables that may only be known at the time a client requests service from the application. Incorporating flexibility into the application output avoids the drawbacks of the lowest common denominator approach by allowing the application to adjust the output for optimal performance based on the circumstances existing at the time of the client's request to the application. Furthermore, the application itself need not have the ability to detect the conditions upon which alternative output segments are selected, since the host will handle that function.
  • condition-independent output generated by an application may have the form: ⁇ section> ⁇ desktop> Use this when the client is a desktop computer ⁇ /desktop> ⁇ phone> Use this when the client is a phone ⁇ WAP> use this when the client is a WAP phone ⁇ /WAP> ⁇ /phone> Use this for Every Other Device ⁇ /section>
  • the application generates this output without regard to the request-conditions.
  • the middleware transformer determines whether the client corresponds to any of the alternative-segment tags. For example, using the XML output above, if the client is a desktop computer, then the client matches the ⁇ desktop> tag and the middleware transformer transforms the condition-independent output to produce the following condition-dependent output: ⁇ section> Use this when the client is a desktop computer ⁇ /section>
  • the client is a phone, but is not a WAP phone, then the client matches the ⁇ phone> tag and the middleware transformer transforms the condition-independent output to produce the following condition-dependent output: ⁇ section> Use this when the client is a phone ⁇ /section>
  • the client is a WAP phone
  • the client matches both the ⁇ phone> tag and the ⁇ WAP> tag.
  • the ⁇ WAP> tag is more specific than the ⁇ phone> tag, so the middleware transformer transforms the condition-independent output to produce the following condition-dependent output: ⁇ section> use this when the client is a WAP phone ⁇ /section>
  • a default configuration for the output can be used (e.g., the “Use this for Every Other Device” alternative segment tag above).
  • a default condition may specify output based on the lowest common denominator approach so that any client can handle the output.
  • the application developer need not rely on such a default configuration if the device happens to be one of the types specifically provided for, such as a desktop device, a phone, or a WAP phone.
  • client devices that are created after the application is complete can still receive output that takes advantage of their increased capabilities if they fall into one of the specified device types, such as a desktop computer or phone in the above example. Therefore, future devices need not be forced to use the most basic or default output just because the future device was unknown to the application developer when writing the code for that service.
  • a programming language that supports alternative-segment tags that correspond to nodes in a condition hierarchy.
  • the most general (“highest”) node in the condition hierarchy is the default node.
  • the other nodes correspond to specific conditions.
  • the most specific nodes in the condition hierarchy may correspond, for example, to specific models of a device, or even specific versions of specific models.
  • Other intermediate nodes may correspond to classes or types of devices, such as mobile phones or pagers.
  • the nodes in the condition hierarchy are associated with each other according to parent-child relationships, where all child nodes of a given parent correspond to subcategories of the category associated with the parent.
  • FIG. 2 illustrates one such condition hierarchy.
  • an “all devices” node 200 in the illustrated hierarchy is the highest or default node. All devices node 200 has below it several child nodes, specifically a “voice” node 210 , a “desktop” node 212 , a “PDA” node 214 , a “pager” node 216 , and a “phone” node 218 , which correspond to broad classifications of the types of devices that may access a service.
  • Desktop node 212 also has its own child nodes, specifically a “Unix” node 220 and a “windows” node 222 , that correspond to two examples of desktop operating systems.
  • Unix node 220 has two child nodes, a “Solaris” node 224 and a “Linux” node 226 , which correspond to two versions of the Unix operating system.
  • phone node 218 has several child nodes, specifically a “WML” node 230 , an “HDML” node 232 , and a “CHTML” node 234 , which correspond, respectively, to phones using the wireless markup language (WML), the handheld device markup language (HDML), and the compact hypertext markup language (CHTML).
  • WML node 230 has three child nodes: a “Nokia 7110” node 240 , a “TC 4411 V1” node 242 , and a TC 4411 V2 node 244 , which correspond, respectively, to a Nokia model 7110 mobile phone, and versions 1 and 2 of the TC model 4411 phone.
  • an application programmer can design a program that generates the following output for a menu item: ⁇ menu item> Return ⁇ desktop> Generate Return Directions ⁇ /desktop> ⁇ voice> Generate Return Directions ⁇ /voice> ⁇ phone> Rtrn. Dir. ⁇ TC 441 V2> Generate Return Directions ⁇ /TC 441 V2> ⁇ /phone> ⁇ /menu item>
  • the middleware transformer determines the type of client to which the output is to be sent and generates condition-specific output. Specifically, for all clients other than desktop clients, voice clients, and phone clients, the menu item is “Return”. For desktop clients, voice clients and the specific phone model TC 441 V2, the menu item is “Generate Return Directions”. Finally, for phone models other than TC 441 V2, the menu item is “Rtm. Dir.” The special treatment of model TC 441 V2 may be desired, for example, if the TC 441 V2 is able to display longer menu items than conventional mobile phones.
  • an XSL style sheet may be applied to format the output according to the needs of the client to which the output is to be sent.
  • the middleware transformer formats the output for the specific device, either by applying one or more XSL style sheets or by any other means.
  • the party that controls the middleware transformer also known as the “middleware host” maintains data that indicates (1) the condition hierarchy, (2) the tags associated with the nodes of the condition hierarchy, and (3) the correlation between the nodes of the condition hierarchy and request-conditions.
  • the middleware host may maintain data that indicates various types of information, such as the association of the tags in the XML to the nodes of the condition hierarchy and the relationship of the nodes to each other.
  • data indicates various types of information, such as the association of the tags in the XML to the nodes of the condition hierarchy and the relationship of the nodes to each other.
  • phone node 218 is a child of all devices node 200 ;
  • WML node 230 is a child of phone node 218 ;
  • tags ⁇ WML> and ⁇ /WML> are associated with WML node 230 ;
  • TC 441 V1 node 242 is a child of WML node 230 ;
  • tags ⁇ TC 441 V1> and ⁇ /TC 441 V1> 0 are associated with TC 441 V1 node 242 ;
  • the condition hierarchy may be developed by the service provider or development provider.
  • the service provider may support either broad classes of devices, such as PDA's, more narrow classes of devices, such as Unix desktop computers, or specific devices, such as Nokia model 7110 phone.
  • the application developer may then customize the output for the service based on the capabilities of the devices based upon the broad class, narrow class, or specific device.
  • the middleware transformer When the middleware transformer receives condition-independent output that is to be delivered to a client and the condition-independent output includes a set of alternative output segments, the middleware transformer inspects the relevant request-conditions. For example, if the alternative output segments are associated with different types of client devices, the middleware transformer determines the device type of the client to which the output is to be sent. Based on the applicable request-condition(s), the middleware transformer selects the output segment that most specifically matches the request-condition(s).
  • the middleware transformer when the middleware transformer receives output that includes alternative output segments, the middleware transformer selects the output segment that most specifically matches the request-conditions via the process outlined in the flowchart of FIG. 3.
  • the highest node in the condition hierarchy e.g. “all devices” node 200 of FIG. 2 is set as the current node.
  • step 310 the alternative output segments that correspond to the children of the current node are identified.
  • the middleware transformer identifies the children as follows: voice node 210 , desktop node 212 , PDA node 214 , pager node 216 , and phone node 218 .
  • step 320 a determination is made about whether any of the conditions associated with the identified children of the current node are true. For example, if the device making the service request is a pager, then the condition associated with pager node 216 would be true, but the condition associated with phone node 218 , as well as the other child nodes of “all devices” node 200 , would not be true. Conversely, if the device was a phone, then the condition associated with phone node 218 would be true and the remaining conditions associated with the remaining childe nodes of “all devices” node 200 would not be true.
  • step 330 sets that child node as the new current node and the process loops back to step 310 . For example, if the current node is “all devices” node 200 and the device is a pager, then the condition associated with pager node 216 is true. According to step 330 , pager node 216 is set as the current node and the process returns to step 310 .
  • step 340 selects the output segment associated with the current node. For example, if the current node is “all devices” node 200 and the device requesting the service is a brand new type of futuristic device unknown when the condition hierarchy was created, then perhaps none of the conditions associated with any the child nodes of “all devices” node 200 would be true. Therefore, according to step 340 , the output segment associated with the current node, which is “all devices” node 200 in this example, is selected. For example, the output associated with “all devices” node 200 may be capable of display on any device (e.g., the lowest common denominator approach), or the output may be capable of display on devices with a higher minimum capability level.
  • condition-independent output of an application is as follows, wherein the alternative segment tags correspond to the nodes shown in FIG. 2: ⁇ menu item> Return ⁇ desktop> Generate Return Directions ⁇ /desktop> ⁇ voice> Generate Return Directions ⁇ /voice> ⁇ phone> Rtrn. Dir. ⁇ WML> Return Directions ⁇ TC 441 V2> Generate Return Directions ⁇ /TC 441 V2> ⁇ /WML> ⁇ /phone> ⁇ /menu item>
  • the client to which the output is to be sent is a device identified by the nomenclature “TC 441 V1”.
  • the middleware transformer To determine which of the alternative output segments to use in the XML given above, the middleware transformer initially establishes “all devices” node 200 as the current node, according to step 300 of FIG. 3.
  • the middleware transformer identifies the alternative output segments that correspond to the children of the current node.
  • the alternative output segments that correspond to the children of “all devices” node 200 are the output segments associated with voice node 210 , desktop node 212 , and phone node 218 .
  • the application developer may only support some of the classes, types or specific devices included in the condition hierarchy.
  • the middleware transformer determines whether any of the conditions associated with the identified children of the current node are true, as specified by step 310 .
  • the condition associated with phone node 218 is true. Consequently, phone node 218 is established as the new current node per step 330 .
  • the middleware transformer identifies the alternative output segments that correspond to the children of phone node 218 , namely WML node 230 , since there are no alternative output segments provided in the XML above that correspond to the other child nodes of phone node 218 shown in FIG. 2.
  • the middleware transformer determines whether any of the conditions associated with the identified child nodes are true.
  • the only alternative output segment with a condition that is true is the alternative output segment associated with WML node 230 . Consequently, WML node 230 is established as the new current node per step 330 .
  • the middleware transformer identifies the alternative output segments that correspond to the children of WML node 230 .
  • the only alternative output segment that corresponds to a child of WML node 23 is the output segment associated with the TC 441 V2 node 244 .
  • No alternative output segments are provided in the XML above for the other child nodes of WML node 230 shown in FIG. 2 (i.e., Nokia 7110 node 240 and TC 441 V1 node 242 ).
  • the middleware transformer determines whether any of the conditions associated with the identified children of the current node are true.
  • the condition associated with TC 441 V2 node 244 is not true because the client to which the output was assumed to be sent to is a TC 441 V1, not a TC 441 V2. Consequently, the output segment associated with WML node 230 is selected.
  • the condition-independent output may thus be transformed into: ⁇ menu item> Return Directions ⁇ /menu item>
  • the example above illustrates how the best match can be identified for a particular device, even if there is no exact match.
  • the lack of an exact match may be due to a number of reasons, such as that device-specific output is not required and/or desired.
  • the lack of an exact match may also be due to the device being new and thus the developer did not know of the new device and the capabilities of the new device when designing the application.
  • the new device can still receive output that is suitable for a phone in the example above instead of default output or output that is for another class of device, such as desktop computers.
  • each tag may be assigned a number that corresponds to the level within the condition hierarchy of its corresponding node.
  • ⁇ WML> could be assigned 3 and ⁇ phone> could be assigned 2.
  • the appropriate output segment of a set of alternative output segments may then be chosen by (1) identifying, within the condition-independent output, the tags that correspond to true conditions, and (2) selecting, from among those tags, the tag that has been assigned the highest value.
  • the request-condition used to select the appropriate output segment is the device type of the client to which the output is to be supplied.
  • the request-condition used to select between alternative output segments may vary from implementation to implementation.
  • the alternative output segments in a set may each be associated with a different congestion level of the network.
  • the alternative output segments in a set may each be associated with a different class of end-user.
  • the alternative output segments may be associated with combinations of factors. For example, a particular output segment may be specified for use when (1) a particular class of user is using (2) a particular type of client device, and (3) has a connection that supports a particular transfer rate.
  • the output is in the form of a mark-up language, such as XML.
  • the nature of the output may vary from implementation to implementation.
  • the techniques described herein may be used with any form of condition-independent output that includes (1) alternative output segments, and (2) some form of hints that may be used to select between the alternative output segments based on request-conditions.
  • an alternative output segment associated with a “supported-programming-language” request condition may include, partially or entirely, code written in the supported programming language.
  • the output segment placed between the ⁇ WML> and ⁇ /WML> tags may consist entirely of WML code. Consequently, when the client device supports the WML language, the output sent to the client is in the WML language. While the WML language is used in this example, the technique may be used for any programming language, including but not limited to “C++”, HTML, Visual Basic, or Java.
  • a middleware transformer hosted by the middleware host to transform the condition-independent output prior to supplying the output to a client.
  • the mobile application enjoys every-device support by virtue of the middleware host providing device-specific format and protocol transformations for new devices as the new devices are developed.
  • the mobile application developer is able to provide users with output in which the content is based on conditions associated with the request, without designing applications that are able to detect those conditions.
  • the content of the output received by a client may be tailored to the device type of the client without the mobile application being aware of the device type of the client to which the output is sent.
  • the client device may be a pager.
  • the middleware transformer can generate device-specific formatting for the pager.
  • the content of the output received by a client may be automatically tailored to new types of clients, based on the categories to which those new clients have been assigned, without the application developer even being aware of the new types of clients. For example, when a new type of WAP phone is developed, the middleware host will classify the new WAP phone at the appropriate location in the condition hierarchy. Consequently, the new WAP phone will automatically receive those alternative output segments associated with WAP phones, if any are specified in the output from the service application.
  • FIG. 4 is a block diagram illustrating an example of producing output using a shared hosted application, according to one embodiment of the invention.
  • FIG. 4 illustrates a client device 410 , such as a laptop computer or mobile phone, that is connected to an HTTP listener 420 , such as a web server that provides web pages in response to requests.
  • HTTP listener 420 may provide client device 410 with a web page containing a list of services associated with a hosting service 430 .
  • HTTP listener 420 Upon selection of a particular service by client device 410 , HTTP listener 420 sends a request for the particular service to a service linker 432 that is part of hosting service 430 .
  • Service linker 432 may be implemented on one or more servers associated with hosting service 430 .
  • service linker 432 identifies the service or application that is the subject of the request and forwards the request from client device 410 to a service provider 440 .
  • Service provider 440 includes an HTTP server 442 for handling communications between service provider 440 and other servers, such as service linker 432 or servers linked together as part of the Internet.
  • Service provider 440 also includes an application server 446 for directing requests received by HTTP server 442 to the appropriate application.
  • Service provider 4420 also includes an application 450 that is the subject of the request from client device 410 in this example.
  • application 450 may be a dining directory module that provides a listing of restaurants in a city specified by an end user via a client, such as client device 410 .
  • Application 450 may be capable of generating several sets of output, such as output 452 and output 454 , depending on the request.
  • output 452 may be a prompt for the end user to supply the name of a city for which a listing of restaurants is desired.
  • Service provider 440 also includes a database 470 .
  • database 470 may include information about restaurants in a number of cities. Upon selection of a particular city by the end user, application 450 may generate output 454 that includes a listing of restaurants in the chosen city.
  • Service provider 440 responds to the request received from client device 410 via service linker 432 with a generic output 480 .
  • generic output may be an electronic document containing portal-to-go XML.
  • Generic output 480 is sent from service provider 440 to hosting service 430 , where the generic output is processed by a device transformer 436 .
  • Device transformer 436 may be a server that functions as a middleware transformer by applying style sheets to generic XML output to a customized output 490 , as described above. Customized output is then sent to client device 410 for display to the end user.
  • Service providers and application developers can build hosted or portal applications that are accessed by service requests sent to the intermediary, such as a host, that manages middleware transformer.
  • the services or applications also referred to herein as “mobile modules,” can generate output that results in calls to other mobile modules.
  • the output may, for example, use a particular set of tags, such as ⁇ substitute> ⁇ /substitute> to indicate a substitute command that makes reference to another mobile module, and include within the tags an identifier for the mobile module.
  • the output generated by the mobile module of a first party may refer to another mobile module of second party (party2) by including the following set of statements: ⁇ substitute> party2-module-identifier ⁇ /substitute >
  • the middleware transformer may invoke the mobile module of the second party identified by “party2-module-identifier”, embed the output of that module into the output from the mobile module of the first party, and deliver the combined output to the client.
  • This feature allows the designer of one mobile module to take advantage of the functionality of all other mobile modules that may be available on the intermediary (e.g., the host).
  • This feature also allows the transaction with the previous service to be kept active, as well as allowing the services to be used without having to know who is using the services.
  • this feature is different from linking of objects among web pages where the browser running on a client. For example, if a browser receives a web page that has a link to an object, the browser sends a request to the address specified by the link, receives an object in response, and then incorporates the object into the web page that is displayed by the browser. Thus, it is the browser running on the client that requests, receives, and incorporates the object into the web page.
  • the intermediary receives output (e.g., at the middleware transformer) from one module, makes a request to another module, receives output from the other module, and then incorporates the output of both modules together and then sends the combined output to the client.
  • output e.g., at the middleware transformer
  • the output of one mobile module referred to as the “calling” mobile module
  • the calling mobile module may also pass parameters to the called mobile module.
  • the output of the calling mobile module may include code of the following form: ⁇ link> called-module-identifier param1 param2 param3 ⁇ /link>
  • the designer of the calling module may simply want to present to the user a link that, if selected, causes invocation of the programming routine of the called mobile module.
  • a link may be used, such as ⁇ action> ⁇ /action>, to denote that an action command is to be executed based on the statements between the ⁇ action> and ⁇ /action> tags.
  • the intermediary knows when a first mobile module of a first party is being called by a second mobile module of a second party because it is the intermediary's responsibility to perform the invocation required by the substitute command or to perform the invocation required by the action command, such as the selection of a link.
  • the intermediary stores information about which modules invoked which other modules.
  • the information may be used as the basis for business relationships between mobile module designers. For example, the designer of a calling module may negotiate to pay the designer of a called module a certain amount of money every time the calling module invokes the called module.
  • the party providing the intermediary e.g., hosting services) records the inter-module calls and provides them to the various module owners.
  • a first party may design a first web page that includes a link to a URL associated with a second web page provided by a second party. It is extremely difficult (if not impossible) for the second party to determine whether the second web page is requested in response to users selecting the link on the first web page or whether the second page is requested by other means. Consequently, it is difficult for the second party negotiate a per-use agreement with the first party.
  • the host maintains state information at an intermediary about the services accessed by an end user.
  • the intermediary may store an information stack for each session by an end user.
  • the information stack indicates the sequence in which services or mobile modules have called other mobile modules during the session, as well as the identities of the module modules.
  • the mobile modules associated with the services may take advantage of the state information stored at the intermediary using a callback mechanism.
  • the calling module may include callback information.
  • the callback information is stored in a record at the intermediary, such as by placing the callback information on the stack associated with the session.
  • the called module may provide a “done” or “exit” option, control, or object on the content provided by the called module.
  • the end user can select the “done” or “exit” option when the end user is finished with the service provided by the called module.
  • the called module need not have any information or knowledge about the identity of the calling module. Instead, the called module need only identify the “previously” accessed service (i.e., the previously used mobile module) and the intermediary will then identify the previously accessed service based on the stack information.
  • a message is sent to the host to cause the host to perform the action specified on the top of the information stack.
  • the action specified at the top of the information stack is the callback information that was placed there at the time the called module was called.
  • the callback information will cause the calling module to be invoked once again, and content or output from the called module will be delivered to the end user. From the perspective of the end user, it appears as if the end user is returning to calling module when the end user is done with the called module.
  • data may be stored at an intermediary for use by services that are accessed through the intermediary, and when the applications or mobile modules for the service are executed, the intermediary includes the stored data in the application output in place of variables in the output based on a mapping of those variables to the stored data.
  • the intermediary which may be a host, stores both the data, or values or information items, and a mapping between the information items and the variables, or identifiers.
  • a service may store or update data for an existing variable or store data for a new variable to be added to the mapping.
  • the content or output generated by a mobile module may include one or more of the identifiers.
  • the intermediary supplies the corresponding information item before providing the output to the client requesting the output.
  • the host may store the data item “Mike” mapped to the identifier “name”.
  • a module may generate the output: ⁇ SimpleText> Hello %name ⁇ /SimpleText>
  • the service providers and developers of the mobile modules can register with the host the data and identifiers to be maintained by the host.
  • the designers of those modules may thereby free themselves of the burden of durably maintaining information, and yet get the benefit of durably maintained information by merely including the appropriate identifiers in their output.
  • a calling mobile module can set a data item or reference to allow the end user to return to the calling mobile module when the end user is done with the called mobile module. For example, for a particular session, the host may associate the data item “href” to a calling module identifier. A module may generate output to create a link to the called mobile module using this data item as the first parameter as follows: ⁇ action> called-module-identifier %href ⁇ /action>
  • the calling module identifier is passed to the called module as a parameter.
  • the called module may use the calling module identifier to send the client back to the calling module when the client is done with the called module.
  • a data item prior to executing a link to another service or called mobile module, can be stored at the intermediary that contains a reference to the previous service or calling mobile module.
  • the other service or called mobile module may then provide an object, such as a “done” or “exit” control or button on a web page, that includes a label or variable such as “%previous.”
  • the intermediary encounters the “% previous” variable in the output from the other service, the intermediary substitutes a reference to the previous service or calling mobile module, thus allowing the end user to return to the previous service by selection the object on the web page from the called mobile module.
  • variables, or identifiers such as “%name” to denote a name of an end user and “%href” to pass the calling module identifier to the called module, respectively
  • other variables may be used to refer to other data that will only be set or known when the application is executed. For example, labels can be used to get the date or time when the application is run or a specific request by a client is made.
  • FIG. 5 is a block diagram that illustrates a computer system 500 upon which an embodiment of the invention may be implemented.
  • Computer system 500 includes a bus 502 or other communication mechanism for communicating information, and a processor 504 coupled with bus 502 for processing information.
  • Computer system 500 also includes a main memory 506 , such as a random access memory (RAM) or other dynamic storage device, coupled to bus 502 for storing information and instructions to be executed by processor 504 .
  • Main memory 506 also may be used for storing temporary variables or other intermediate information during execution of instructions to be executed by processor 504 .
  • Computer system 500 further includes a read only memory (ROM) 508 or other static storage device coupled to bus 502 for storing static information and instructions for processor 504 .
  • ROM read only memory
  • a storage device 510 such as a magnetic disk or optical disk, is provided and coupled to bus 502 for storing information and instructions.
  • Computer system 500 may be coupled via bus 502 to a display 512 , such as a cathode ray tube (CRT), for displaying information to a computer user.
  • a display 512 such as a cathode ray tube (CRT)
  • An input device 514 is coupled to bus 502 for communicating information and command selections to processor 504 .
  • cursor control 516 is Another type of user input device
  • cursor control 516 such as a mouse, a trackball, or cursor direction keys for communicating direction information and command selections to processor 504 and for controlling cursor movement on display 512 .
  • This input device typically has two degrees of freedom in two axes, a first axis (e.g., x) and a second axis (e.g., y), that allows the device to specify positions in a plane.
  • the invention is related to the use of computer system 500 for implementing the techniques described herein. According to one embodiment of the invention, those techniques are performed by computer system 500 in response to processor 504 executing one or more sequences of one or more instructions contained in main memory 506 . Such instructions may be read into main memory 506 from another computer-readable medium, such as storage device 510 . Execution of the sequences of instructions contained in main memory 506 causes processor 504 to perform the process steps described herein. In alternative embodiments, hard-wired circuitry may be used in place of or in combination with software instructions to implement the invention. Thus, embodiments of the invention are not limited to any specific combination of hardware circuitry and software.
  • Non-volatile media includes, for example, optical or magnetic disks, such as storage device 510 .
  • Volatile media includes dynamic memory, such as main memory 506 .
  • Transmission media includes coaxial cables, copper wire and fiber optics, including the wires that comprise bus 502 . Transmission media can also take the form of acoustic or light waves, such as those generated during radio-wave and infra-red data communications.
  • Computer-readable media include, for example, a floppy disk, a flexible disk, hard disk, magnetic tape, or any other magnetic medium, a CD-ROM, any other optical medium, punchcards, papertape, any other physical medium with patterns of holes, a RAM, a PROM, and EPROM, a FLASH-EPROM, any other memory chip or cartridge, a carrier wave as described hereinafter, or any other medium from which a computer can read.
  • Various forms of computer readable media may be involved in carrying one or more sequences of one or more instructions to processor 504 for execution.
  • the instructions may initially be carried on a magnetic disk of a remote computer.
  • the remote computer can load the instructions into its dynamic memory and send the instructions over a telephone line using a modem.
  • a modem local to computer system 500 can receive the data on the telephone line and use an infra-red transmitter to convert the data to an infra-red signal.
  • An infra-red detector can receive the data carried in the infra-red signal and appropriate circuitry can place the data on bus 502 .
  • Bus 502 carries the data to main memory 506 , from which processor 504 retrieves and executes the instructions.
  • the instructions received by main memory 506 may optionally be stored on storage device 510 either before or after execution by processor 504 .
  • Computer system 500 also includes a communication interface 518 coupled to bus 502 .
  • Communication interface 518 provides a two-way data communication coupling to a network link 520 that is connected to a local network 522 .
  • communication interface 518 may be an integrated services digital network (ISDN) card or a modem to provide a data communication connection to a corresponding type of telephone line.
  • ISDN integrated services digital network
  • communication interface 518 may be a local area network (LAN) card to provide a data communication connection to a compatible LAN.
  • LAN local area network
  • Wireless links may also be implemented.
  • communication interface 518 sends and receives electrical, electromagnetic or optical signals that carry digital data streams representing various types of information.
  • Network link 520 typically provides data communication through one or more networks to other data devices.
  • network link 520 may provide a connection through local network 522 to a host computer 524 or to data equipment operated by an Internet Service Provider (ISP) 526 .
  • ISP 526 in turn provides data communication services through the world wide packet data communication network now commonly referred to as the “Internet” 528 .
  • Internet 528 uses electrical, electromagnetic or optical signals that carry digital data streams.
  • the signals through the various networks and the signals on network link 520 and through communication interface 518 which carry the digital data to and from computer system 500 , are exemplary forms of carrier waves transporting the information.
  • Computer system 500 can send messages and receive data, including program code, through the network(s), network link 520 and communication interface 518 .
  • a server 530 might transmit a requested code for an application program through Internet 528 , ISP 526 , local network 522 and communication interface 518 .
  • the received code may be executed by processor 504 as it is received, and/or stored in storage device 510 , or other non-volatile storage for later execution. In this manner, computer system 500 may obtain application code in the form of a carrier wave.

Abstract

A method and apparatus for providing a network based operating system for mobile clients is disclosed. Services may be developed that can be used to support different client devices with different capabilities. The services provide output with multiple variations based on different devices, and an intermediary selects the variation best suited for the requesting device. An online software development system is provided to allow services to create, edit, test, and deploy applications at an intermediary using only a browser at the client end. Services may also be provided that can be accessed and referred to by other services, thereby facilitating the combining of different services. Services may also store and access data at an intermediary using variables and a mapping of the stored data to the variables. Data stored at the intermediary may be used to allow an end user to return to a previously accessed service.

Description

    RELATED APPLICATION
  • This application claims domestic priority from prior U.S. provisional application Ser. No. 60/230,489 filed Sep. 6, 2000, the entire disclosure of which is hereby incorporated by reference as if fully set forth herein.[0001]
  • FIELD OF THE INVENTION
  • The present invention relates to providing services to clients and, more specifically, to providing content from multiple services. [0002]
  • BACKGROUND OF THE INVENTION
  • The World Wide Web includes a network of servers on the Internet, each of which is associated with one or more HTML (Hypertext Markup Language) pages. The HTML pages associated with a server provide information and hypertext links to other documents on that and (usually) other servers. Servers communicate with clients by using the Hypertext Transfer Protocol (HTTP). The servers listen for requests from clients for their HTML pages, and are therefore often referred to as “listeners”. [0003]
  • Users of the World Wide Web use a client program, referred to as a browser, to request, decode and display information from listeners. When the user of a browser selects a link on an HTML page, the browser that is displaying the page sends a request over the Internet to the listener associated with the Universal Resource Locator (URL) specified in the link. In response to the request, the listener transmits the requested information to the browser that issued the request. The browser receives the information, presents the received information to the user, and awaits the next user request. [0004]
  • Traditionally, the information stored on listeners is in the form of static HTML pages. Static HTML pages are created and stored at the listener prior to a request from a web browser. In response to a request, a static HTML page is merely read from storage and transmitted to the requesting browser. Currently, there is a trend to develop listeners that respond to browser requests by performing dynamic operations. For example, a listener may respond to a request by issuing a query to a database, dynamically constructing a web page containing the results of the query, and transmitting the dynamically constructed HTML page to the requesting browser. [0005]
  • Another trend is to expand Internet access to devices other than conventional computer systems. For example, many mobile clients (or mobile devices), such as wireless phones, have been developed that include embedded web browsers. Due to size and cost constraints, the “micro browsers” contained in these devices have very limited functionality relative to the browsers that have been developed for full-fledged computer systems. However, devices with embedded micro browsers are usable in circumstances under which using a conventional computer system is impractical. [0006]
  • The number of device types that are able to display web content, in one form or another, continues to increase. For example, there are desktop, laptop and pocket computers, mobile phones, pagers, and personal digital assistants (PDAs) that can be described as “web-enabled” because they are able display web content. As the number of web-enabled device types increases, so does the variation in the capabilities of the devices. For example, general purpose computer systems compensate for their immobility by providing large color screens, sophisticated sound output, significant processing power, ergonomic keyboard input, and an easy-to-use selection device such as a mouse, track ball, or track pad. Conversely, small mobile devices achieve their portability at the expense of screen size and user-input ease-of-use. [0007]
  • Yet another trend is to offer services to clients via a server on a network. Typically the network is the Internet, the client is a user, and the service is available from the server via a website. The service may supply information such as restaurant reviews, weather reports, stock quotations, or news updates. The service may also be more interactive, such as allowing the user to purchase goods, such as books or music, or to purchase services, such as booking travel arrangements. As used herein, the term “service” refers to providing information, functions, or capabilities to a client. [0008]
  • The process by which the user accesses the service depends on the type of client the user has. For example, a desktop computer can connect to the Internet through a dial-up line, a digital subscriber line (DSL), a cable modem, an integrated services digital network (ISDN) connection, or many other available methods. Wireless application protocol (WAP) phones may connect to the Internet over a wireless connection through a WAP-to-HTTP gateway. Generally, the client logs in to the website and is presented with a list of available services, from which the client selects the desired service. [0009]
  • Generally, a service is provided in one of two ways: as a hosted application or as a portal application. With a typical hosted application, a developer creates the application, but a host installs and maintains the application for access by end-users, or customers, on the host network of servers. In contrast, with a typical portal application, the developer both creates the application and deploys it for access by end users, or customers, via one or more servers controlled by the developer. The “developer” referred to herein may be the individual, company, or other entity that provides the service (also referred to as a service provider), or the developer may be another entity providing software development services to the service provider. [0010]
  • A common problem with providing services via applications, whether they are hosted applications or portal applications, is that the application must be designed to work with all devices. However, devices will vary widely in their capabilities based on both the type of device and the particular capabilities of different models of devices of the same type or class of device. For example, a desktop computer will generally have a fully functional web browser, whereas a personal computing device will have a micro browser with limited functionality. Also, some mobile phones may have a limited display that only allows for a single word on each line of the display, while other mobile phones may have a larger display capable of showing several words on each line. [0011]
  • The variation of capabilities can make it difficult for an application developer to support all possible devices. For example, a service may involve the display of graphic images, such as those of products offered for sale, which may be easily viewed on the full function web browser of a desktop computer but which may be incapable of display on a mobile phone. Also, even if the developer is only concerned with a certain type or class of device, the differences in capabilities may be significant. For example, if the application programmer sends output containing multiple words describing several items of information, mobile phones with limited display screens may only be capable of showing the first word of each information item on each line of the display screen, or the output for a single information item will fill multiple lines on the phone display, precluding other information items from being shown simultaneously. [0012]
  • One approach to solving the problem of designing for devices of varying capabilities is to design for the “lowest common denominator.” The lowest common denominator approach involves designing the application to work on the most limited device available. For example, if a menu of options is to be displayed on a client device, such as a mobile phone, an application programmer may select short, one-word labels for each of the options because all devices that will use the application can support one-word labels. For example, the application developer may employ the single word menu item “Return” for a mapping application for the option of generating return directions from a selected destination. [0013]
  • However, a drawback of the lowest common denominator approach is that the output does not take advantage of the superior capabilities of other devices. For example, if a client device is capable of displaying a longer label, such as “Generate Return Directions,” the longer label would be preferred, since “Return” is ambiguous and may be incorrectly interpreted by the user as meaning “Return to Previous Menu.” In addition, the capabilities incorporated into new devices would go largely unused if all applications were targeted to the minimal capabilities of older devices. [0014]
  • An alternative approach to solving the problem of designing for clients or devices of varying capabilities is to design for some intermediate level of capability, such as the most common type of mobile phone. However, an application using this intermediate approach may not function properly on devices with lesser capabilities, and the application will still fail to take advantage of the enhanced capabilities of other devices. [0015]
  • Another problem with providing services via applications is how to support additional devices that become available after the application is developed. For example, several months after release of an application by a service provider, a device manufacturer may release a new device. The new device could be an evolutionary advance over current devices that improves existing features, or the new device could be a more significant advance in that class of device that adds significant new features, or the new device may be a new type of device that adds new capabilities or has a new combination of capabilities. [0016]
  • New devices with improved capabilities can be accommodated by using the lowest common denominator approach, but the enhanced features and capabilities of the new devices, such as larger displays, may go largely unused. For example, if the application only provides one-word menu options, the application will not be taking advantage of an improved device that is able to display multiple word options. Furthermore, with a later released device, the lowest common denominator approach may completely avoid using new capabilities, such as being able to handle voice data or graphics. Even if the application is designed for an intermediate level of capabilities, the application may still fail to fully utilize all of the advances and improvements in future devices that may be created. [0017]
  • Yet another problem with application development is having easy access to the tools available to the developer to create the application. Typically, a developer designing an application for a particular platform (e.g., a combination of hardware, operating system and/or protocols) will utilize a software development kit (SDK). An SDK will generally contain an application programming environment, some commonly used libraries for various features, application programming interfaces, utilities, documentation, a compiler for generating executable code from source code, and a debugger for diagnosing programming problems. To use these tools, the developer obtains the software, documentation, and other materials from an SDK provider, and then the developer installs the software and other tools onto a local computer or network. Later, as the SDK provider makes improvements and upgrades, the developer incorporates such changes into the local installation of the SDK package. Thus, the application developers may have to expend significant resources to install and maintain the SDK. In addition, conventional SDK's typically require significant resources not only for the SDK itself, but also for application development and the infrastructure for the setup, testing, and deployment of the runtime applications. [0018]
  • Individual service providers may want to offer other services that are related to their core services to enhance the overall experience of the customers of the service. For example, if a user seeks out driving directions to a particular destination from one service provider, the driving direction provider may also want to offer the user additional information about the weather or dining options at the particular destination. One way for the driving direction provider to offer such additional information is to create the necessary additional services, which can entail significant additional development resources. Another approach is for the service provider to make arrangements with another service provider to obtain the desired functionality. However, making arrangements with other service providers may involve significant coordination, both in establishing the technical infrastructure to connect the two providers' services and also to establish a means for gauging the level of use by the first provider's customers for billing purposes. [0019]
  • Still another concern with providing services via applications is that the service provider may want to incorporate into the applications durably stored data that is available to the applications when executed. The service provider may then have to incur the burden of establishing and maintaining the stored data so that the data is available when required by the applications. [0020]
  • Based on the foregoing, it is desirable to provide improved techniques for designing applications that more effectively work with all devices. It is also desirable to have improved techniques for creating applications. Further, it is desirable to have improved techniques that allow service providers to offer additional services. Also, it is desirable to have improved techniques for incorporating stored data into an application. [0021]
  • SUMMARY OF THE INVENTION
  • Techniques are provided for providing content from multiple services. According to one aspect, content from difference services is combined. An intermediary receives a request from a client for content from a service. The response from the service contains a reference to content from another service. The intermediary retrieves the content from the other service and generates a response to the request that includes the content from both services. The content retrieved from the other service may be generated by the other service based on parameters provided in the reference to the other service. The intermediary may also store a record that indicates that content from the other service was incorporated with the content from the original service. [0022]
  • In yet another aspect, clients may access multiple services. An intermediary receives a request from a client for content from a service. The response from the service contains a reference to another service. The intermediary generates a reply to the client request that includes an object, such as a link, to the other service. The client may then select the object to obtain the content from the other service. The content retrieved from the other service may be generated by the other service based on parameters provided in the reference to the other service. The intermediary may also store a record that indicates that other service was accessed from the original service. [0023]
  • In another aspect, content from a previously accessed service is provided. An end user is provided by an intermediary with content from a first service in response to a request. The end user makes another request for content from a second service. The intermediary stores a record that indicates that the end user received content from the first service. The end user is provided with the requested content from the second service. The end user makes yet another request for content from the service previously accessed by the end user. The intermediary reads the stored record to determine that the end user had previously accessed the first service. The end user is provided with the requested content from first service. [0024]
  • BRIEF DESCRIPTION OF THE DRAWINGS
  • The present invention is illustrated by way of example, and not by way of limitation, in the figures of the accompanying drawings and in which like reference numerals refer to similar elements and in which: [0025]
  • FIG. 1A is a block diagram that illustrates a high level overview of a system for providing services via applications accessed through an intermediary, according to one embodiment of the invention; [0026]
  • FIG. 1B is a block diagram that illustrates an overview of a host server, according to one embodiment of the invention; [0027]
  • FIG. 2 is a block diagram illustrates a condition hierarchy, according to one embodiment of the invention; [0028]
  • FIG. 3 is a flow diagram that depicts an approach for selecting an alternative output segment, according to one embodiment of the invention; [0029]
  • FIG. 4 is a block diagram illustrating an example of producing output using a shared hosted application, according to one embodiment of the invention; and [0030]
  • FIG. 5 is a block diagram that illustrates a computer system upon which an embodiment may be implemented. [0031]
  • DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT
  • A network based operating system for mobile devices is described. In the following description, for the purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the present invention. It will be apparent, however, to one skilled in the art that the present invention may be practiced without these specific details. In other instances, well-known structures and devices are shown in block diagram form in order to avoid unnecessarily obscuring the present invention. [0032]
  • In the following description, the various functions shall be discussed under topic headings that appear in the following order: [0033]
  • I. Structural And Functional Overview [0034]
  • A. Hosting Applications [0035]
  • B. Customizing Content Provided by a Service [0036]
  • C. Providing Content from Multiple Services [0037]
  • D. Accessing Data Stored at an Intermediary from a Service [0038]
  • E. Developing Applications Online [0039]
  • II. Developing Applications Online [0040]
  • A. Creating Applications and Services—General [0041]
  • B. Deploying a Hosted Application [0042]
  • C. Deploying a Shared Hosted Application [0043]
  • D. Accessing the New Application or Service [0044]
  • III. Generation of Device-Specific Mark-Up Code [0045]
  • A. Generation of Device-Specific Formatting [0046]
  • B. Producing Output that Takes into Account Request Conditions [0047]
  • C. Condition-Independent Output with Embedded Hints [0048]
  • D. Example of Using Embedded Hints to Identify a Type of Device [0049]
  • E. Producing Output Based Upon a Condition Hierarchy [0050]
  • F. Producing Output by Matching Request Conditions [0051]
  • G. Selecting Output Based on the Language Supported by the Client Device [0052]
  • H. Using a Middleware Transformer to Transform Condition-Independent Output [0053]
  • I. Example of Producing Output Using a Shared Hosted Application [0054]
  • IV. Accessing Other Applications and Services [0055]
  • A. Mobile Modules [0056]
  • B. Storing Data at an Intermediary [0057]
  • V. Hardware Overview [0058]
  • I. Structural and Functional Overview
  • Techniques are provided for facilitating the creation and deployment of applications that are used to provide services for access by devices such as mobile clients. These techniques include the development of applications that can be executed on a variety of devices by tailoring the output, after it has been generated by the application, based on the particular circumstances of the end user's use of the application, such as the capabilities of a mobile client or the network conditions existing at the time a customer requests service from the application. Also, these techniques include combining the output, capabilities, and features of services together, including techniques for allowing an end user to return to a previously accessed service. In addition, these techniques include storing data at an intermediary for access by the applications associated with a service using variables and a mapping of the variables to the stored data. [0059]
  • Further, these techniques include providing an online software development kit (SDK) so that application developers can create, test, modify, and deploy applications without having any special client-side software. Developers enter code through an interface provided by the website of the SDK over the Internet. Because the website of the SDK is based on XML and HTTP standards, the developer can reuse existing code. For example, if the developer has a Microsoft Internet Information Services (IIS) server that serves “.asp” pages, the online SDK can access the developer's existing server and pages. [0060]
  • As used herein, the term “end user” denotes any person, organization or other entity that may use a device to access a service or application. The term “end user” encompasses the term “customer” although term “customer” does not necessarily imply a commercial relationship with a service provider. Also, the term “end user” is distinguished from the term “user”, which as discussed below, refers to developers and service providers that create and maintain the applications, or computer programs, that provide services to the end users. [0061]
  • A. Hosting Applications
  • FIG. 1A is a block diagram that illustrates a high level overview of a system for providing services via applications accessed through an intermediary, according to one embodiment of the invention. FIG. 1 shows a [0062] network 100 that includes a host server 110. Network 100 may be any type of network, including but not limited to a private network, such as an intranet, a public network, such as the Internet, or a combination of different networks and network types.
  • [0063] Host server 110 may be implemented on one or more servers at an intermediary, such as a hosting service provider, also known as a host provider or simply as a host. The function of the host is to install and maintain applications, such as on host server 110, that are developed by either the host provider or other application developers. The applications are typically part of a service, such as a web site, a paging service, or a telecommunications service. The host may also provide “partial” or “shared” hosting of applications in which the applications are stored on servers associated with the application developer or service provider, but the applications may be accessed via the host. Partial or shared hosting of applications is distinguished from portal applications that are stored on servers associated with the application developer or service provider but which are not accessed via the host. End users access the services offered by other parties and companies via the host by interacting with the hosted and partially hosted applications.
  • [0064] Network 100 also includes users 120, 122, 124 that are interconnected with host server 110 and each other on network 100 as illustrated. In FIG. 1A, users 120, 122, 124 may be service providers that offer services for use by end users. Users 120, 122, 124 may also be application developers, who may be part of or associated with the service providers. The service providers, application developers, and other parties create and maintain applications that are part of a service offered to end users.
  • The applications that are part of a service may be hosted by the hosting provider, such as on [0065] host server 110. The applications may also be partially hosted by being stored at a server associated with a user, as illustrated by an application 126 that is included with user 124, and being accessed via the hosting provider, such as via host server 110.
  • B. Customizing Content Provided by a Service
  • FIG. 1A also illustrates [0066] end users 130, 132, 134 that are connected to host server 110 by connections 140, 142, 144. Although end users 130, 132, 134 are shown external to network 100 in FIG. 1, end users 130, 132, 134 or other end users not shown may also be part of network 100. There are a number of different types of end users and connections. For example, end user 130 may be a desktop computer that is connected to host server 110 through a variety of ways, such as via the Internet, a DSL connection, or an ISDN. Also, end user 132 may be a PDA that is connected to host server 110 via a cellular modem connection. Further, end user 134 may be a mobile phone that is connected to the Internet and thereby to host server 110 via a WAP-to-HTTP gateway.
  • FIG. 1A also shows a [0067] connection 150 between end user 130 and user 120, and a connection 152 between end user 134 and a user 124. Connections 150 and 152 permit direct communication between the end users and the users, thus illustrating that not all communications between end users and users pass through host server 110. For example, end user 130 may be a desktop computer and therefore is able to interact directly with user 120 when requesting a service. However, the service that end user 130 requests from user 120 may be supplied by a hosted application located on host server 110. In response to the service request from end user 130, user 120 may send a request to host server 110 to provide end user 130 with output from the hosted application via connection that satisfies the request. In response to the request from user 120, host server 110 may then execute the appropriate hosted application and send the resulting output to end user 130 over connection 140.
  • As another example, [0068] end user 134 may be a mobile phone that is interacting with host server 110. End user 134 may request via host server 110 a service that is supplied by a shared hosted application, such as application 126 that is served from user 124. The host server 110 then passes along the request for service from end user 134 to user 124. User 124 then executes the appropriate application, such as application 126, and sends the resulting output to end user 134 over connection 152.
  • FIG. 1A illustrates a representative embodiment of a system for providing a network based operating system for mobile devices, while in practice much larger and more complex networks featuring a number of variations of the configuration shown in FIG. 1A may be used. For example, a network based operating system for mobile devices may involve more than one server associated with the host and virtually unlimited numbers of users and end users. Also, not all users may be included in a single network, such as [0069] network 100. Instead, users may be located in many networks, including the Internet and intranets. Similarly, end users may be located within a network that also includes the host server and one or more users. In addition, the host provider may offer services directly to end users, in addition to hosting applications by others. Further, the types of end users, users, and connections discussed above are only representative examples.
  • FIG. 1B is a block diagram that illustrates an overview of [0070] host server 110, according to one embodiment of the invention. Host server 110 includes applications 160, 162 that may be hosted applications stored on host server 110 or links to shared hosted applications stored on other servers, similar to application 126.
  • [0071] Host server 110 includes a middleware transformer 112 for transforming application output into output that is tailored or customized based on parameters or conditions associated with a service request. For example, the capabilities of the client devices used by end users may vary widely. According to one embodiment, the application developer designs the application to produce generic output that includes several output variations, also referred to as output segments, for presenting or displaying the output on the client device. The generic output is received by middleware transformer 112. The middleware transformer 112 also receives or detects the parameters or conditions associated with the service request. Middleware transformer 112 then selects a particular output variation or option based on the parameters or conditions of the service request.
  • For example, the client, or end user, may be a mobile phone that is requesting driving directions from a map service provider. The mobile phone may not be capable of displaying graphics, and therefore the map service provider need only supply a response to the request that includes text, not graphics, showing the desired route. However, the map service provider may have other customers that use other devices, such as laptop computers, that are capable of displaying graphics in addition to text. [0072]
  • The application used by the map service provider may therefore generate generic output that includes several variations of the requested directions, such as one output segment with text only and one with text and graphics. The application provides the generic output to [0073] middleware transformer 112, which also receives parameters or information from the request, such as data that indicates that the client device is a mobile phone. Middleware transformer 112 then selects the output segment with text only from the generic output and generates customized output that contains the text only output segment from the application, and then middleware transformer sends the customized output to the end user. In another embodiment, the application produces a comprehensive set of output that is customized or formatted by middleware transformer 112 based on a style sheet selected based on the client device.
  • The approach of using a host to receive generic output and generate customized output provides several benefits. For example, the application developer does not have to write different applications, or different output routines, for each specific condition that may merit changes to the output. In fact, the application developer does not even have to be able to test for those conditions. Rather, the application developer may write one application with output variations for each of the special conditions, which may include the specific model of the client device, the type of the client device, and broad or narrow class of the client device, the network conditions, etc. As new devices and capabilities are introduced, the middleware transformer can select the output variation that best matches the capabilities of the new client devices. [0074]
  • As another example, the output segments may depend on conditions that exist at the time of the request, such as network congestion, the time of the request, or the location of the user, which allow the middleware transformer to select an output variation or to format the output by taking into account such conditions. Therefore, the application developer may design the application to provide generic output that includes output segments for each of a variety of conditions and then allow the host to select the particular output that is to be provided to the end user based on the particular conditions for the particular request. [0075]
  • C. Providing Content from Multiple Services
  • [0076] Host server 110 also includes a service linker 114 for handling requests from end users for service and forwarding the requests to the appropriate service or application for a response. In addition, service linker 114 can keep the session (or transaction) of other services active. For example, an end user may be a mobile phone that is communicating with the host. The host provides the end user with a list of service options that may include a map service. When the end user selects the map service using the mobile phone, service linker 114 receives the request from the end user and forwards the request to the provider of the appropriate service. For example, if the service is supplied using a shared hosted application, the request may be forwarded to a server associated with the map service provider over the World Wide Web. The response to the request from the shared hosted application may be received at the host in the form of generic output that is customized for the mobile phone, such as by using a middleware transformer as discussed above.
  • In another embodiment, applications incorporate the features and output of other applications. The applications may also be referred to as mobile modules or simply modules. For example, if [0077] application 160 in FIG. 1B provides map directions, the map service provider may also want to include information regarding the weather at the destination location specified by the end user. Instead of developing a separate weather application, the map service provider may link to another hosted or shared hosted application provided by a weather information service provider that is associated with host server 110. For example, application 162 may be a weather application or module provided by a different company than the company providing the map service. However, because both companies have modules associated with the host server, both may include links to the other company's modules in the output of each company's application. Based on the links, the middleware transformer may incorporate output from one application into another, or a link may be presented to the end user to allow access to the features of another service.
  • In addition, because the host server handles the interaction between the two services, the host can track which modules are called by each other to facilitate billing between the services. Furthermore, this tracking feature allows one module to call back to another module without being aware of the identity of the other module. For example, if a first module calls a second module, the tracking feature allows the second module to call back the first. As a result, any service can be used as a module, which may be described as providing a reusable web service to other services. [0078]
  • D. Accessing Data Stored at an Intermediary from a Service
  • [0079] Host server 110 also includes a database 170 to support storage of data at the host by the services for use by the services' applications. Although database 170 is shown as part of host server 110, database 170 may also be supported by another server or other device suitable for providing database functions. Database 170 may include a data structure for storing data and also a mapping of variables, or identifiers, to specific data, or information items. Services may use database 170 to durably store and maintain information at the host server, thereby freeing the services of the obligation to support such a database themselves. For example, an application may generate output with an identifier “%xyzlogo” that is identified in the mapping as corresponding to a particular graphical image of the XYZ Company stored in database 170. As another example, the application's output may include a variable “%date” to denote the current date when the application is accessed in response to a request from an end user. Upon receipt of the output at the middleware transformer, the current date is substituted in the output for the variable %date.
  • E. Developing Applications Online
  • [0080] Host server 110 also includes an online software development kit 116 that services and application that developers may use to create, edit, test, deploy, and otherwise manage applications or modules associated with the hosting service. According to one embodiment, an application developer uses a browser to log into an online development website associated with the hosting service to access online software development kit 116. After logging in, online software development kit 116 provides a user interface for display on the developer's web browser. The user interface presents the user with various options, such as creating a new application, modifying an existing application, testing an application, or deleting an existing application. For example, to create a hosted application, the developer enters or modifies program code using the user interface via the developer's browser and then saves the code at host server 110 under a module or application name, or identifier. If the developer wishes to establish a shared hosted application, the developer logs into the online development website and provides a URL of the application. The hosted and shared hosted applications may then be made immediately available for use. For example, end users may log into the service provider via a website to access a list of available services.
  • II. DEVELOPING APPLICATIONS ONLINE A. Creating Applications and Services—General
  • According to one embodiment, a developer uses a browser running on a client to log on to a website through which the developer can access the tools necessary to develop an application without any special client-side SDK software. The website may be referred to as a development website, or as an “SDK website” when, for example, the website provides, or hosts, an online software development kit (SDK). [0081]
  • As used herein, a “developer” is synonymous with both a “service provider” and a “user” (since the developer makes use of the online development website). Also, a “user” is distinguished from an end-user or a customer that uses the service provided by the developer. [0082]
  • The provider of the application development tools and host of the online development website may be referred to as the development provider, SDK provider, or simply as the host. [0083]
  • The development provider typically uses one or more servers to support the development website and the tools provided thereby. [0084]
  • Access to the development website may be controlled by requiring the user to have a name and password. After the user has gained access to the website, the user may be presented with a list of mobile applications (also referred to herein as services), that the developer or user has previously created. The user may also have access to other services, such as samples provided by the development website provider. The development website may present the user with several options, such as to add a new service, modify an existing service, or delete an existing service. For example, if the user selects the “add service” option, the user is presented with a user interface that allows the user to add a service. [0085]
  • According to one embodiment, a service may be either a hosted application or a portal application. A hosted application is an application whose code is maintained at the development website, also referred to as the host website. A portal application is an application whose code is maintained at another website associated with the portal application developer and may typically be accessed by customers or end users via the developer's website. However, according to another embodiment, a portal application may also be accessed or served to clients through the development website, in which case the portal application may be referred to as a “shared hosted application” or a “partially hosted application.”[0086]
  • B. Deploying a Hosted Application
  • The deployment of a hosted application may involve several steps, such as initially creating the application, subsequently editing of the application, and testing of the application. In one embodiment, to create a hosted application, the development website provides the developer or user with an interface for writing and editing code for the application. The interface may include an editing window or edit field that the user may use to type in the code for the application. Similarly, to edit an existing application, the user is presented with an interface that displays the existing application code to the user in an editing window that allows the user to edit the code of the selected application. [0087]
  • Application code can be written in an appropriate mark-up language (ML), such as the extensible markup language (XML). According to one embodiment, the code is written in a mark-up language referred to herein as “portal-to-go XML”. “Portal-to-go” and “Portal-to-go XML” may also be referred to as Oracle9iASWireless and Oracle9iASWireless XML (or just IASWireless XML), respectively. [0088]
  • Portal-to-go XML consists of a set of XML tags that may be used to indicate boundaries between alternate output segments. Each output segment in a set of output segments may be specifically designed for certain devices, such as mobile devices that typically have small screens, and others with voice capabilities. [0089]
  • Portal-to-go XML can be generated by any of the traditional means of generating dynamic HTML, such as JavaServer Pages, CGI, or Active Server Pages, such that instead of generating HTML, the code or script generates Portal-to-Go XML. The details of such a markup language such as Portal-to-go XML may be defined in a Document Type Definition (DTD). For example, a DTD of portal-to-go XML as implemented in one embodiment is described in U.S. provisional application Ser. No. 60/230,489, filed Sep. 6, 2000. [0090]
  • Accorded to another embodiment, both the application code for a hosted application and the code that causes the generation of the user interface used to enter and edit the code are stored on one or more servers associated with the development provider. Consequently, the only client-side software required to develop and deploy a mobile application is a web browser, such as Netscape Navigator. [0091]
  • When the user finishes inputting the code for a new application or editing the code for an existing application, the user can save the code shown in the interface. The “save” code function may be an object, such as a button, included in the interface. By clicking on the object, the code is submitted, or sent, to a server remote from the client, such as a server associated with the development provider. If a new application is being created, the user specifies a service name and the code is saved in association with the service name. After saving the new code, the new service name will be displayed in a list of existing services shown when users and end users log into the development website. If an existing application is being modified, the user may choose to save the code under the existing service name or under a new service name. [0092]
  • To test the application, the user can access the application or service via the development website using a mobile device or a mobile device simulator. This is discussed in more detail below under “Accessing the New Application or Service.” The hosted application that is deployed via the development website is immediately available to the user for testing and to end users for use via the host website. [0093]
  • C. Deploying a Shared Hosted Application
  • In another embodiment, to create a shared hosted application, the user writes either a portal-to-go XML document or an application program that generates a portal-to-go XML document as output. The terms “partially hosted application” or the “shared hosted application” may be used to refer either to the XML document or the application that generates an XML document as output. The shared hosted application may be saved, for example, at the application developer's own website. The user then associates a URL with the shared hosted application using, for example, an HTTP listener/web server that services the application developer's web site. The shared hosted application is then added as a “service” by logging into the development website, or the SDK website, and providing the name of the service and the URL associated with the shared hosted application. [0094]
  • D. Accessing the New Application or Service
  • As soon as a service has been created and/or revised, end users or customers that can connect to the network on which the server resides (e.g., the Internet) can access the service. The process by which the service is accessed may vary based on the type of end user. For example, a desktop computer can connect to the Internet through a dial-up line, a DSL connection, a cable modem, an ISDN connection or many other available methods. WAP phones may connect to the Internet over a wireless connection using a synchronous protocol, such as through a WAP-to-HTTP gateway, or using an asynchronous protocol, such as the simple mail transfer protocol (SMTP) or the short message service (SMS) protocol. [0095]
  • In general, the end user logs in to the development website and is presented with a list of available services. The end user may select the service that was just created and/or modified. In response to the selection of a service, the application associated with the service is obtained. The application may be associated with a portal-to-go XML document or another document written in a suitable markup language. For example, with hosted applications, the XML may be obtained by retrieving the portal-to-go XML that was saved at a server associated with the intermediary (e.g., the host). For portal applications, a request may be sent to the URL that was specified by the developer for the service. The web server that manages that URL may invoke the portal application and send the portal-to-go XML associated with the portal application back to the server associated with the intermediary. Once the portal-to-go XML for the service is obtained for either a hosted or portal application, the server associated with the intermediary uses the portal-to-go XML to provide the selected service to the client associated with the end user. [0096]
  • III. Generation of Device-Specific Mark-Up Code A. Generation of Device-Specific Formatting
  • According to one embodiment, the mark-up language output, such as portal-to-go XML, is produced by a service without regard to the type of client device that is invoking the service. According to one embodiment, prior to providing the output to a client, one or more extensible stylesheet language (XSL) style sheets are selected based on the device type of the client. XSL style sheets are discussed in more detail in U.S. application Ser. No. 09/631,884, filed Aug. 4, 2000, the entire disclosure of which is hereby incorporated by reference as if fully set forth herein. [0097]
  • The selected style sheets are applied to the XML output from the service to produce customized output that is specifically formatted for the client that requested the service. For example, the same XML output by a mobile application may ultimately be manifested in the following three ways, depending on the type of client that requested the service: (1) a list of options on the display of a mobile phone, (2) a pull-down menu on a browser, and (3) an orally presented list of options on the voice interface of a telephone. The application developer achieves any-device support without having to do any special programming because the applications are designed to produce the same XML output regardless of the device used to request the service and since the device-specific formatting takes place outside the applications, such as by an intermediary applying device-specific XSL style sheets. [0098]
  • Further, because the execution of the code and the application of XSL style sheets to the output thereof occur via the host, all hosted and portal applications automatically gain device-specific support for new devices whenever the host installs XSL style sheets for the new devices. The application developer need not make any changes to the application code to support any additional or newly developed client devices. Of course, if the developer wants to take advantage of improved or added capabilities, the developer may update the application to provide addition output segments or variations for such capabilities. [0099]
  • B. Producing Output that Takes into Account Request Conditions
  • Another problem with providing services via applications is that the applications function the same regardless of the specific circumstances existing at the time when the applications are used. For example, it may be desirable to modify the application's output based on the congestion of the network at the time a user accesses the application. If the network is heavily congested, it may be better to limit the amount of detail provided in the output being provided during such times of heavy congestion. Again, the application programmer can take the lowest common denominator approach and design the application for the worst-case conditions. However, this approach fails to take advantage of improved conditions when they exist at other times. If the programmer selects a higher level of detail, then the ability of the application to deliver output to the client device will suffer during periods of heavy network congestion. [0100]
  • Techniques are provided for producing output that takes into account conditions, parameters, and characteristics associated with a service request (which are also referred to as “request-conditions”). Request-conditions may include, for example, information about the type of client that is requesting the service, such as a device type, or environmental conditions, such as the time at which the service request is made or responded to, or the congestion on the network over which the service is requested or supplied. [0101]
  • According to one embodiment, an application program continues to generate the same output regardless of the request-conditions. Because the output of the application is the same regardless of request-conditions, it is referred to herein as “condition-independent output”. [0102]
  • According to another embodiment, the condition-independent output produced by an application contains “hints” (or criteria, conditions or other guidance) as to how the output should be processed under certain request-conditions. A middleware transformer is provided that receives the condition-independent output and uses the hints contained therein, along with knowledge of the client and request-conditions, to transform the condition-independent output into “condition-specific output,” which may also be referred to as “condition-dependent output.” The condition-specific output is then provided to the client that requested the service that produced the output. The middleware transformer typically is associated with the host and may be provided by a server associated with a host, but the middleware transformer is not limited to implementations associated with the host. [0103]
  • C. Condition-Independent Output with Embedded Hints
  • According to one embodiment, application programmers design applications to generate output that contains “hints” about how the output should be transformed based on request-conditions. According to one implementation, the application programmer designs the application to generate output that designates several variations of the output that satisfies a request to the application that resulted in the generation of the output. The variations of the output may also be referred to as alternative output segments. [0104]
  • The output from the application also includes one or more particular criteria or conditions that are associated with each of the alternative output segments. A middleware transformer is used to select the alternative output segment that best matches the request conditions to the criteria or conditions that are associated with each alternative output segment. A match may be determined based on whether the condition or conditions associated with a particular alternative output segment are satisfied or not satisfied (or whether the conditions are true or false). [0105]
  • For example, if the application output is in the form of a mark-up language, such as XML, the output may include a section of code that has the form: [0106]
    <section>
    <condition 1>
    Use this when Condition 1 is true
    </condition 1>
    <condition 2>
    Use this when Condition 2 is true and
    Condition 3 is not true
    <condition 3>
    use this when Condition 3 is true
    </condition 3>
    </condition 2>
    Use this for Every Other Condition
    </section>
  • The application generates the output above without regard to the request-conditions that will exist at the time a request for a service is made by an end-user. The middleware transformer determines whether any of conditions 1, 2 and 3 are true after receiving the condition-independent output from the application. For this example, if condition 1 is true, then the middleware transformer transforms the condition-independent output to produce the following condition-dependent output: [0107]
    <section>
    Use this when Condition 1 is true
    </section>
  • If condition 2 is true but condition 3 is not true, then the middleware transformer transforms the condition-independent output to produce the following condition-dependent output: [0108]
    <section>
    Use this when Condition 2 is true and Condition
    3 is not true
    </section>
  • If condition 2 and 3 are true, then the middleware transformer transforms the condition-independent output to produce the following condition-dependent output: [0109]
    <section>
    use this when Condition 3 is true
    </section>
  • If conditions 1 and 2 are not true, then the middleware transformer transforms the condition-independent output to produce the following condition-dependent output: [0110]
    <section>
    Use this for Every Other Condition
    </section>
  • In this example, conditions 2 and 3 are related to each other. Specifically, the output segment associated with condition 3 is not executed unless both conditions 2 and 3 are true. [0111]
  • The technique of specifying a hierarchy between conditions may be used, for example, when one condition is a subset of another condition. For example, condition 2 may be that the network is experiencing an unusual amount of traffic (e.g., network congestion) as compared to a threshold amount, and condition 3 may be that the network traffic is extremely heavy as evidenced by exceeding a specified limit. Therefore, for normal network congestion, when condition 2 is true but not condition 3, the actual instruction or statement corresponding to “use this when Condition 2 is true and Condition 3 is not true” may specify that no unusually detailed graphics should be transmitted. And if condition 3 is true, such as might be the case for extreme network congestion, the actual instruction or statement corresponding to “use this when Condition 3 is true” may specify that no graphics should be transmitted. [0112]
  • The use of condition-independent output with embedded hints allows the application developer to design flexibility into the service application to handle variables that may only be known at the time a client requests service from the application. Incorporating flexibility into the application output avoids the drawbacks of the lowest common denominator approach by allowing the application to adjust the output for optimal performance based on the circumstances existing at the time of the client's request to the application. Furthermore, the application itself need not have the ability to detect the conditions upon which alternative output segments are selected, since the host will handle that function. [0113]
  • D. Example of Using Embedded Hints to Identify a Type of Device
  • For the purpose of explanation, an implementation shall be described in which the conditions associated with the alternative output segments are the device type of the requesting client. In such an implementation, the condition-independent output generated by an application may have the form: [0114]
    <section>
    <desktop>
    Use this when the client is a desktop computer
    </desktop>
    <phone>
    Use this when the client is a phone
    <WAP>
    use this when the client is a WAP phone
    </WAP>
    </phone>
    Use this for Every Other Device
    </section>
  • The application generates this output without regard to the request-conditions. Upon receiving the condition-independent output from the application, the middleware transformer determines whether the client corresponds to any of the alternative-segment tags. For example, using the XML output above, if the client is a desktop computer, then the client matches the <desktop> tag and the middleware transformer transforms the condition-independent output to produce the following condition-dependent output: [0115]
    <section>
    Use this when the client is a desktop computer
    </section>
  • If the client is a phone, but is not a WAP phone, then the client matches the <phone> tag and the middleware transformer transforms the condition-independent output to produce the following condition-dependent output: [0116]
    <section>
    Use this when the client is a phone
    </section>
  • If the client is a WAP phone, then the client matches both the <phone> tag and the <WAP> tag. The <WAP> tag is more specific than the <phone> tag, so the middleware transformer transforms the condition-independent output to produce the following condition-dependent output: [0117]
    <section>
    use this when the client is a WAP phone
    </section>
  • If the client is neither a desktop computer nor a phone, then the client does not match any of the alternative-segment tags and the middleware transformer transforms the condition-independent output to produce the following condition-dependent output: [0118]
    <section>
    Use this for Every Other Device
    </section>
  • The approach of using embedded hints to identify a type of device allows the application developer to write one set of code that can be used with all devices, yet the application code may contain alternative segment tags to customize the application's output for different devices that have varying capabilities. In the example above, if the client device is a desktop computer, full text, graphics, and sound content can be sent since a desktop computer can easily handle all three types of content. But if the client device is a mobile phone, then perhaps no graphics will be sent since a mobile phone is unlikely to be capable of showing such graphics on its display. Further, if the phone happens to be a WAP phone in the above example, the application can produce output specific to the WAP protocol. [0119]
  • Furthermore, if the client device is not one of those listed, a default configuration for the output can be used (e.g., the “Use this for Every Other Device” alternative segment tag above). A default condition may specify output based on the lowest common denominator approach so that any client can handle the output. However, the application developer need not rely on such a default configuration if the device happens to be one of the types specifically provided for, such as a desktop device, a phone, or a WAP phone. Finally, client devices that are created after the application is complete can still receive output that takes advantage of their increased capabilities if they fall into one of the specified device types, such as a desktop computer or phone in the above example. Therefore, future devices need not be forced to use the most basic or default output just because the future device was unknown to the application developer when writing the code for that service. [0120]
  • E. Producing Output Based Upon a Condition Hierarchy
  • According to one embodiment, a programming language is provided that supports alternative-segment tags that correspond to nodes in a condition hierarchy. The most general (“highest”) node in the condition hierarchy is the default node. The other nodes correspond to specific conditions. The most specific nodes in the condition hierarchy may correspond, for example, to specific models of a device, or even specific versions of specific models. Other intermediate nodes may correspond to classes or types of devices, such as mobile phones or pagers. [0121]
  • According to one embodiment, the nodes in the condition hierarchy are associated with each other according to parent-child relationships, where all child nodes of a given parent correspond to subcategories of the category associated with the parent. [0122]
  • FIG. 2 illustrates one such condition hierarchy. In FIG. 2, an “all devices” [0123] node 200 in the illustrated hierarchy is the highest or default node. All devices node 200 has below it several child nodes, specifically a “voice” node 210, a “desktop” node 212, a “PDA” node 214, a “pager” node 216, and a “phone” node 218, which correspond to broad classifications of the types of devices that may access a service.
  • [0124] Desktop node 212 also has its own child nodes, specifically a “Unix” node 220 and a “windows” node 222, that correspond to two examples of desktop operating systems. Similarly, Unix node 220 has two child nodes, a “Solaris” node 224 and a “Linux” node 226, which correspond to two versions of the Unix operating system. Likewise, phone node 218 has several child nodes, specifically a “WML” node 230, an “HDML” node 232, and a “CHTML” node 234, which correspond, respectively, to phones using the wireless markup language (WML), the handheld device markup language (HDML), and the compact hypertext markup language (CHTML). Similarly, WML node 230 has three child nodes: a “Nokia 7110” node 240, a “TC 4411 V1” node 242, and a TC 4411 V2 node 244, which correspond, respectively, to a Nokia model 7110 mobile phone, and versions 1 and 2 of the TC model 4411 phone.
  • Given the example of a condition hierarchy shown in FIG. 2, an application programmer can design a program that generates the following output for a menu item: [0125]
    <menu item>
    Return
    <desktop>
    Generate Return Directions
    </desktop>
    <voice>
    Generate Return Directions
    </voice>
    <phone>
    Rtrn. Dir.
    <TC 441 V2>
    Generate Return Directions
    </TC 441 V2>
    </phone>
    </menu item>
  • When the middleware transformer receives this condition-independent output, the transformer determines the type of client to which the output is to be sent and generates condition-specific output. Specifically, for all clients other than desktop clients, voice clients, and phone clients, the menu item is “Return”. For desktop clients, voice clients and the specific [0126] phone model TC 441 V2, the menu item is “Generate Return Directions”. Finally, for phone models other than TC 441 V2, the menu item is “Rtm. Dir.” The special treatment of model TC 441 V2 may be desired, for example, if the TC 441 V2 is able to display longer menu items than conventional mobile phones.
  • In one embodiment, after the condition-specific output has been created, an XSL style sheet may be applied to format the output according to the needs of the client to which the output is to be sent. In an alternative embodiment, in addition to the output processing described above, the middleware transformer formats the output for the specific device, either by applying one or more XSL style sheets or by any other means. [0127]
  • In order for the middleware transformer to perform the appropriate output transformation, the party that controls the middleware transformer, also known as the “middleware host”, maintains data that indicates (1) the condition hierarchy, (2) the tags associated with the nodes of the condition hierarchy, and (3) the correlation between the nodes of the condition hierarchy and request-conditions. [0128]
  • For example, assume that the middleware transformer supports the condition hierarchy illustrated in FIG. 2. The middleware host may maintain data that indicates various types of information, such as the association of the tags in the XML to the nodes of the condition hierarchy and the relationship of the nodes to each other. Below are representative examples of the data that may be maintained by the middleware host: [0129]
  • (a) [0130] phone node 218 is a child of all devices node 200;
  • (b) tags <phone> and </phone> are associated with [0131] phone node 218;
  • (c) [0132] WML node 230 is a child of phone node 218;
  • (d) tags <WML> and </WML> are associated with [0133] WML node 230;
  • (e) [0134] TC 441 V1 node 242 is a child of WML node 230;
  • (f) tags <[0135] TC 441 V1> and </TC 441 V1>0 are associated with TC 441 V1 node 242; and
  • (g) request-condition “client device=[0136] TC 441 V1” is associated with TC 441 V1 node 242.
  • The condition hierarchy may be developed by the service provider or development provider. By incorporating the use of a condition hierarchy in an application, the service provider may support either broad classes of devices, such as PDA's, more narrow classes of devices, such as Unix desktop computers, or specific devices, such as [0137] Nokia model 7110 phone. The application developer may then customize the output for the service based on the capabilities of the devices based upon the broad class, narrow class, or specific device.
  • F. Producing Output by Matching Request Conditions
  • When the middleware transformer receives condition-independent output that is to be delivered to a client and the condition-independent output includes a set of alternative output segments, the middleware transformer inspects the relevant request-conditions. For example, if the alternative output segments are associated with different types of client devices, the middleware transformer determines the device type of the client to which the output is to be sent. Based on the applicable request-condition(s), the middleware transformer selects the output segment that most specifically matches the request-condition(s). [0138]
  • According to one embodiment, when the middleware transformer receives output that includes alternative output segments, the middleware transformer selects the output segment that most specifically matches the request-conditions via the process outlined in the flowchart of FIG. 3. In [0139] step 300, the highest node in the condition hierarchy (e.g. “all devices” node 200 of FIG. 2) is set as the current node.
  • Next, in [0140] step 310, the alternative output segments that correspond to the children of the current node are identified. Referring back to FIG. 2, if the current node is the “all devices” node 200, then the middleware transformer identifies the children as follows: voice node 210, desktop node 212, PDA node 214, pager node 216, and phone node 218.
  • In [0141] step 320, a determination is made about whether any of the conditions associated with the identified children of the current node are true. For example, if the device making the service request is a pager, then the condition associated with pager node 216 would be true, but the condition associated with phone node 218, as well as the other child nodes of “all devices” node 200, would not be true. Conversely, if the device was a phone, then the condition associated with phone node 218 would be true and the remaining conditions associated with the remaining childe nodes of “all devices” node 200 would not be true.
  • If a condition associated with a child of the current node is true, then step [0142] 330 sets that child node as the new current node and the process loops back to step 310. For example, if the current node is “all devices” node 200 and the device is a pager, then the condition associated with pager node 216 is true. According to step 330, pager node 216 is set as the current node and the process returns to step 310.
  • If no condition associated with any child of the current node is true, then step [0143] 340 selects the output segment associated with the current node. For example, if the current node is “all devices” node 200 and the device requesting the service is a brand new type of futuristic device unknown when the condition hierarchy was created, then perhaps none of the conditions associated with any the child nodes of “all devices” node 200 would be true. Therefore, according to step 340, the output segment associated with the current node, which is “all devices” node 200 in this example, is selected. For example, the output associated with “all devices” node 200 may be capable of display on any device (e.g., the lowest common denominator approach), or the output may be capable of display on devices with a higher minimum capability level.
  • For example, assume that the condition-independent output of an application is as follows, wherein the alternative segment tags correspond to the nodes shown in FIG. 2: [0144]
    <menu item>
    Return
    <desktop>
    Generate Return Directions
    </desktop>
    <voice>
    Generate Return Directions
    </voice>
    <phone>
    Rtrn. Dir.
    <WML>
    Return Directions
    <TC 441 V2>
    Generate Return Directions
    </TC 441 V2>
    </WML>
    </phone>
    </menu item>
  • Further assume that the client to which the output is to be sent is a device identified by the nomenclature “[0145] TC 441 V1”. The condition associated with TC 441 V1 node 242 in FIG. 2, as well as the conditions associated with all nodes from which the TC 441 V1 node descends (i.e., phone node 218 and WML node 230), are TRUE.
  • To determine which of the alternative output segments to use in the XML given above, the middleware transformer initially establishes “all devices” [0146] node 200 as the current node, according to step 300 of FIG. 3.
  • The middleware transformer then identifies the alternative output segments that correspond to the children of the current node. In the present example, the alternative output segments that correspond to the children of “all devices” [0147] node 200 are the output segments associated with voice node 210, desktop node 212, and phone node 218. As shown in the condition-independent output above, not all of the child nodes shown in FIG. 2 for “all devices” node 2000 have a corresponding alternative output segment. Thus, the application developer may only support some of the classes, types or specific devices included in the condition hierarchy.
  • The middleware transformer then determines whether any of the conditions associated with the identified children of the current node are true, as specified by [0148] step 310. In the present example in which it is assumed that the device is a TC 441 V1, the condition associated with phone node 218 is true. Consequently, phone node 218 is established as the new current node per step 330.
  • Returning to step [0149] 310 with phone node 218 set as the current node, the middleware transformer identifies the alternative output segments that correspond to the children of phone node 218, namely WML node 230, since there are no alternative output segments provided in the XML above that correspond to the other child nodes of phone node 218 shown in FIG. 2.
  • Per [0150] step 320, the middleware transformer determines whether any of the conditions associated with the identified child nodes are true. In the present example, the only alternative output segment with a condition that is true is the alternative output segment associated with WML node 230. Consequently, WML node 230 is established as the new current node per step 330.
  • Returning to step [0151] 310 with WML node 230 set as the current node, the middleware transformer identifies the alternative output segments that correspond to the children of WML node 230. In the present example, the only alternative output segment that corresponds to a child of WML node 23—is the output segment associated with the TC 441 V2 node 244. No alternative output segments are provided in the XML above for the other child nodes of WML node 230 shown in FIG. 2 (i.e., Nokia 7110 node 240 and TC 441 V1 node 242).
  • Per [0152] step 320, the middleware transformer then determines whether any of the conditions associated with the identified children of the current node are true. In the present example, the condition associated with TC 441 V2 node 244 is not true because the client to which the output was assumed to be sent to is a TC 441 V1, not a TC 441 V2. Consequently, the output segment associated with WML node 230 is selected. The condition-independent output may thus be transformed into:
    <menu item>
    Return Directions
    </menu item>
  • The example above illustrates how the best match can be identified for a particular device, even if there is no exact match. The lack of an exact match may be due to a number of reasons, such as that device-specific output is not required and/or desired. The lack of an exact match may also be due to the device being new and thus the developer did not know of the new device and the capabilities of the new device when designing the application. Yet the new device can still receive output that is suitable for a phone in the example above instead of default output or output that is for another class of device, such as desktop computers. [0153]
  • The foregoing example is merely one technique that may be used by the middleware transformer to select the output segment that most specifically matches the request-conditions. Various alternative techniques may be used. For example, in one alternative technique, each tag may be assigned a number that corresponds to the level within the condition hierarchy of its corresponding node. Thus, <WML> could be assigned 3 and <phone> could be assigned 2. The appropriate output segment of a set of alternative output segments may then be chosen by (1) identifying, within the condition-independent output, the tags that correspond to true conditions, and (2) selecting, from among those tags, the tag that has been assigned the highest value. [0154]
  • In the foregoing description, the request-condition used to select the appropriate output segment is the device type of the client to which the output is to be supplied. However, the request-condition used to select between alternative output segments may vary from implementation to implementation. For example, in one implementation, the alternative output segments in a set may each be associated with a different congestion level of the network. In another implementation, the alternative output segments in a set may each be associated with a different class of end-user. In yet other implementations, the alternative output segments may be associated with combinations of factors. For example, a particular output segment may be specified for use when (1) a particular class of user is using (2) a particular type of client device, and (3) has a connection that supports a particular transfer rate. [0155]
  • Further, the foregoing description gives examples in which the output is in the form of a mark-up language, such as XML. However, the nature of the output may vary from implementation to implementation. The techniques described herein may be used with any form of condition-independent output that includes (1) alternative output segments, and (2) some form of hints that may be used to select between the alternative output segments based on request-conditions. [0156]
  • G. Selecting Output Based on the Language Supported by the Client Device
  • Use of the <WML> tag in the example above illustrates a situation in which the request condition used to select an alternative output segment relates to the markup or programming language supported by the client device to which the output is to be sent. According to one embodiment, an alternative output segment associated with a “supported-programming-language” request condition may include, partially or entirely, code written in the supported programming language. [0157]
  • For example, the output segment placed between the <WML> and </WML> tags may consist entirely of WML code. Consequently, when the client device supports the WML language, the output sent to the client is in the WML language. While the WML language is used in this example, the technique may be used for any programming language, including but not limited to “C++”, HTML, Visual Basic, or Java. [0158]
  • H. Using a Middleware Transformer to Transform Condition-independent Output
  • Numerous benefits are realized by using a middleware transformer hosted by the middleware host to transform the condition-independent output prior to supplying the output to a client. For example, through this technique, the mobile application enjoys every-device support by virtue of the middleware host providing device-specific format and protocol transformations for new devices as the new devices are developed. Further, when the mobile application uses the alternative output segment techniques described above, the mobile application developer is able to provide users with output in which the content is based on conditions associated with the request, without designing applications that are able to detect those conditions. [0159]
  • In one embodiment, the content of the output received by a client may be tailored to the device type of the client without the mobile application being aware of the device type of the client to which the output is sent. For example, the client device may be a pager. By using an XSL style sheet as discussed above to transform the application output, such as output in portal-to-go XML, the middleware transformer can generate device-specific formatting for the pager. [0160]
  • Furthermore, the content of the output received by a client may be automatically tailored to new types of clients, based on the categories to which those new clients have been assigned, without the application developer even being aware of the new types of clients. For example, when a new type of WAP phone is developed, the middleware host will classify the new WAP phone at the appropriate location in the condition hierarchy. Consequently, the new WAP phone will automatically receive those alternative output segments associated with WAP phones, if any are specified in the output from the service application. [0161]
  • If a particular set of alternative output segments does not have an output segment associated with WAP phones, but does have an output segment associated with mobile phones, then the new phone will automatically receive the alternative output segment associated with mobile phones. In this manner, the content of the output delivered to new devices is device-specific, with the level of specificity determined by the application developer, even for newly developed devices that the application developer knows nothing about when creating the application. [0162]
  • I. Example of Producing Output Using a Shared Hosted Application
  • FIG. 4 is a block diagram illustrating an example of producing output using a shared hosted application, according to one embodiment of the invention. FIG. 4 illustrates a [0163] client device 410, such as a laptop computer or mobile phone, that is connected to an HTTP listener 420, such as a web server that provides web pages in response to requests. HTTP listener 420 may provide client device 410 with a web page containing a list of services associated with a hosting service 430. Upon selection of a particular service by client device 410, HTTP listener 420 sends a request for the particular service to a service linker 432 that is part of hosting service 430. Service linker 432 may be implemented on one or more servers associated with hosting service 430. Upon receipt of the request, service linker 432 identifies the service or application that is the subject of the request and forwards the request from client device 410 to a service provider 440.
  • [0164] Service provider 440 includes an HTTP server 442 for handling communications between service provider 440 and other servers, such as service linker 432 or servers linked together as part of the Internet. Service provider 440 also includes an application server 446 for directing requests received by HTTP server 442 to the appropriate application.
  • Service provider [0165] 4420 also includes an application 450 that is the subject of the request from client device 410 in this example. For example, application 450 may be a dining directory module that provides a listing of restaurants in a city specified by an end user via a client, such as client device 410. Application 450 may be capable of generating several sets of output, such as output 452 and output 454, depending on the request. For example, output 452 may be a prompt for the end user to supply the name of a city for which a listing of restaurants is desired.
  • [0166] Service provider 440 also includes a database 470. For example, if application 450 is a dining directory module, database 470 may include information about restaurants in a number of cities. Upon selection of a particular city by the end user, application 450 may generate output 454 that includes a listing of restaurants in the chosen city.
  • [0167] Service provider 440 responds to the request received from client device 410 via service linker 432 with a generic output 480. For example, generic output may be an electronic document containing portal-to-go XML.
  • [0168] Generic output 480 is sent from service provider 440 to hosting service 430, where the generic output is processed by a device transformer 436. Device transformer 436 may be a server that functions as a middleware transformer by applying style sheets to generic XML output to a customized output 490, as described above. Customized output is then sent to client device 410 for display to the end user.
  • IV. Accessing Other Applications and Services A. Mobile Modules
  • Service providers and application developers can build hosted or portal applications that are accessed by service requests sent to the intermediary, such as a host, that manages middleware transformer. According to one embodiment, the services or applications, also referred to herein as “mobile modules,” can generate output that results in calls to other mobile modules. The output may, for example, use a particular set of tags, such as <substitute> </substitute> to indicate a substitute command that makes reference to another mobile module, and include within the tags an identifier for the mobile module. [0169]
  • For example, the output generated by the mobile module of a first party (party1) may refer to another mobile module of second party (party2) by including the following set of statements: [0170]
    <substitute>
    party2-module-identifier
    </substitute >
  • In response to receiving the output immediately above, the middleware transformer may invoke the mobile module of the second party identified by “party2-module-identifier”, embed the output of that module into the output from the mobile module of the first party, and deliver the combined output to the client. This feature allows the designer of one mobile module to take advantage of the functionality of all other mobile modules that may be available on the intermediary (e.g., the host). This feature also allows the transaction with the previous service to be kept active, as well as allowing the services to be used without having to know who is using the services. [0171]
  • Also, this feature is different from linking of objects among web pages where the browser running on a client. For example, if a browser receives a web page that has a link to an object, the browser sends a request to the address specified by the link, receives an object in response, and then incorporates the object into the web page that is displayed by the browser. Thus, it is the browser running on the client that requests, receives, and incorporates the object into the web page. [0172]
  • In contrast, in the embodiment above, the intermediary receives output (e.g., at the middleware transformer) from one module, makes a request to another module, receives output from the other module, and then incorporates the output of both modules together and then sends the combined output to the client. Thus, it is the intermediary, not the client, that requests, receives, and incorporates the output of the second service into that of the first service. [0173]
  • According to another embodiment, not only can the output of one mobile module, referred to as the “calling” mobile module, cause the invocation of another mobile module, referred to as the “called” mobile module, but the calling mobile module may also pass parameters to the called mobile module. For example, the output of the calling mobile module may include code of the following form: [0174]
    <link>
    called-module-identifier param1 param2 param3
    </link>
  • The example immediately above would pass parameters “param1”, “param2”, and “param3” from the calling mobile module to the called mobile module identified by “called-module-identifier.”[0175]
  • According to another embodiment, rather than automatically embed output from the called mobile module in its output, the designer of the calling module may simply want to present to the user a link that, if selected, causes invocation of the programming routine of the called mobile module. To indicate that a link is desired, a different set of tags may be used, such as <action> </action>, to denote that an action command is to be executed based on the statements between the <action> and </action> tags. [0176]
  • The intermediary knows when a first mobile module of a first party is being called by a second mobile module of a second party because it is the intermediary's responsibility to perform the invocation required by the substitute command or to perform the invocation required by the action command, such as the selection of a link. [0177]
  • According to one embodiment, the intermediary stores information about which modules invoked which other modules. The information may be used as the basis for business relationships between mobile module designers. For example, the designer of a calling module may negotiate to pay the designer of a called module a certain amount of money every time the calling module invokes the called module. The party providing the intermediary (e.g., hosting services) records the inter-module calls and provides them to the various module owners. [0178]
  • The tracking and management of the business relationships among application providers, or module owners, are not easily implemented outside the hosting framework described herein. For example, on the World Wide Web, a first party may design a first web page that includes a link to a URL associated with a second web page provided by a second party. It is extremely difficult (if not impossible) for the second party to determine whether the second web page is requested in response to users selecting the link on the first web page or whether the second page is requested by other means. Consequently, it is difficult for the second party negotiate a per-use agreement with the first party. [0179]
  • According to yet another embodiment, the host maintains state information at an intermediary about the services accessed by an end user. For example, the intermediary may store an information stack for each session by an end user. The information stack indicates the sequence in which services or mobile modules have called other mobile modules during the session, as well as the identities of the module modules. [0180]
  • According to one embodiment, the mobile modules associated with the services may take advantage of the state information stored at the intermediary using a callback mechanism. For example, along with a link for invoking a called module, the calling module may include callback information. When the host invokes the called module in response to selection of the link, the callback information is stored in a record at the intermediary, such as by placing the callback information on the stack associated with the session. The called module may provide a “done” or “exit” option, control, or object on the content provided by the called module. The end user can select the “done” or “exit” option when the end user is finished with the service provided by the called module. The called module need not have any information or knowledge about the identity of the calling module. Instead, the called module need only identify the “previously” accessed service (i.e., the previously used mobile module) and the intermediary will then identify the previously accessed service based on the stack information. [0181]
  • In response to selection of the “done” option, a message is sent to the host to cause the host to perform the action specified on the top of the information stack. In the above example, the action specified at the top of the information stack is the callback information that was placed there at the time the called module was called. Typically, the callback information will cause the calling module to be invoked once again, and content or output from the called module will be delivered to the end user. From the perspective of the end user, it appears as if the end user is returning to calling module when the end user is done with the called module. [0182]
  • B. Storing Data at an Intermediary
  • According to one embodiment, data may be stored at an intermediary for use by services that are accessed through the intermediary, and when the applications or mobile modules for the service are executed, the intermediary includes the stored data in the application output in place of variables in the output based on a mapping of those variables to the stored data. The intermediary, which may be a host, stores both the data, or values or information items, and a mapping between the information items and the variables, or identifiers. A service may store or update data for an existing variable or store data for a new variable to be added to the mapping. [0183]
  • The content or output generated by a mobile module may include one or more of the identifiers. In response to encountering output that refers to one of the identifiers, the intermediary supplies the corresponding information item before providing the output to the client requesting the output. [0184]
  • For example, for a particular session, the host may store the data item “Mike” mapped to the identifier “name”. A module may generate the output: [0185]
    <SimpleText>
    Hello %name
    </SimpleText>
  • When the host encounters such output in a particular session, the host substitutes the “%name” reference with the corresponding data item “Mike”, resulting in the output: [0186]
    <SimpleText>
    Hello Mike
    </SimpleText>
  • According to one embodiment, the service providers and developers of the mobile modules can register with the host the data and identifiers to be maintained by the host. The designers of those modules may thereby free themselves of the burden of durably maintaining information, and yet get the benefit of durably maintained information by merely including the appropriate identifiers in their output. [0187]
  • In another embodiment, a calling mobile module can set a data item or reference to allow the end user to return to the calling mobile module when the end user is done with the called mobile module. For example, for a particular session, the host may associate the data item “href” to a calling module identifier. A module may generate output to create a link to the called mobile module using this data item as the first parameter as follows: [0188]
    <action>
    called-module-identifier %href
    </action>
  • When the host encounters this output in that particular session, the host substitutes the “%href” reference with the calling module identifier resulting in the following output: [0189]
    <action>
    called-module-identifier calling-module-identifier
    </action>
  • As a result, when the client uses the link to the called module, the calling module identifier is passed to the called module as a parameter. The called module may use the calling module identifier to send the client back to the calling module when the client is done with the called module. [0190]
  • In another embodiment, prior to executing a link to another service or called mobile module, a data item can be stored at the intermediary that contains a reference to the previous service or calling mobile module. The other service or called mobile module may then provide an object, such as a “done” or “exit” control or button on a web page, that includes a label or variable such as “%previous.” When the intermediary encounters the “% previous” variable in the output from the other service, the intermediary substitutes a reference to the previous service or calling mobile module, thus allowing the end user to return to the previous service by selection the object on the web page from the called mobile module. [0191]
  • While the above examples uses variables, or identifiers, such as “%name” to denote a name of an end user and “%href” to pass the calling module identifier to the called module, respectively, other variables may be used to refer to other data that will only be set or known when the application is executed. For example, labels can be used to get the date or time when the application is run or a specific request by a client is made. [0192]
  • V. Hardware Overview
  • FIG. 5 is a block diagram that illustrates a [0193] computer system 500 upon which an embodiment of the invention may be implemented. Computer system 500 includes a bus 502 or other communication mechanism for communicating information, and a processor 504 coupled with bus 502 for processing information. Computer system 500 also includes a main memory 506, such as a random access memory (RAM) or other dynamic storage device, coupled to bus 502 for storing information and instructions to be executed by processor 504. Main memory 506 also may be used for storing temporary variables or other intermediate information during execution of instructions to be executed by processor 504. Computer system 500 further includes a read only memory (ROM) 508 or other static storage device coupled to bus 502 for storing static information and instructions for processor 504. A storage device 510, such as a magnetic disk or optical disk, is provided and coupled to bus 502 for storing information and instructions.
  • [0194] Computer system 500 may be coupled via bus 502 to a display 512, such as a cathode ray tube (CRT), for displaying information to a computer user. An input device 514, including alphanumeric and other keys, is coupled to bus 502 for communicating information and command selections to processor 504. Another type of user input device is cursor control 516, such as a mouse, a trackball, or cursor direction keys for communicating direction information and command selections to processor 504 and for controlling cursor movement on display 512. This input device typically has two degrees of freedom in two axes, a first axis (e.g., x) and a second axis (e.g., y), that allows the device to specify positions in a plane.
  • The invention is related to the use of [0195] computer system 500 for implementing the techniques described herein. According to one embodiment of the invention, those techniques are performed by computer system 500 in response to processor 504 executing one or more sequences of one or more instructions contained in main memory 506. Such instructions may be read into main memory 506 from another computer-readable medium, such as storage device 510. Execution of the sequences of instructions contained in main memory 506 causes processor 504 to perform the process steps described herein. In alternative embodiments, hard-wired circuitry may be used in place of or in combination with software instructions to implement the invention. Thus, embodiments of the invention are not limited to any specific combination of hardware circuitry and software.
  • The term “computer-readable medium” as used herein refers to any medium that participates in providing instructions to [0196] processor 504 for execution. Such a medium may take many forms, including but not limited to, non-volatile media, volatile media, and transmission media. Non-volatile media includes, for example, optical or magnetic disks, such as storage device 510. Volatile media includes dynamic memory, such as main memory 506. Transmission media includes coaxial cables, copper wire and fiber optics, including the wires that comprise bus 502. Transmission media can also take the form of acoustic or light waves, such as those generated during radio-wave and infra-red data communications.
  • Common forms of computer-readable media include, for example, a floppy disk, a flexible disk, hard disk, magnetic tape, or any other magnetic medium, a CD-ROM, any other optical medium, punchcards, papertape, any other physical medium with patterns of holes, a RAM, a PROM, and EPROM, a FLASH-EPROM, any other memory chip or cartridge, a carrier wave as described hereinafter, or any other medium from which a computer can read. [0197]
  • Various forms of computer readable media may be involved in carrying one or more sequences of one or more instructions to [0198] processor 504 for execution. For example, the instructions may initially be carried on a magnetic disk of a remote computer. The remote computer can load the instructions into its dynamic memory and send the instructions over a telephone line using a modem. A modem local to computer system 500 can receive the data on the telephone line and use an infra-red transmitter to convert the data to an infra-red signal. An infra-red detector can receive the data carried in the infra-red signal and appropriate circuitry can place the data on bus 502. Bus 502 carries the data to main memory 506, from which processor 504 retrieves and executes the instructions. The instructions received by main memory 506 may optionally be stored on storage device 510 either before or after execution by processor 504.
  • [0199] Computer system 500 also includes a communication interface 518 coupled to bus 502. Communication interface 518 provides a two-way data communication coupling to a network link 520 that is connected to a local network 522. For example, communication interface 518 may be an integrated services digital network (ISDN) card or a modem to provide a data communication connection to a corresponding type of telephone line. As another example, communication interface 518 may be a local area network (LAN) card to provide a data communication connection to a compatible LAN. Wireless links may also be implemented. In any such implementation, communication interface 518 sends and receives electrical, electromagnetic or optical signals that carry digital data streams representing various types of information.
  • Network link [0200] 520 typically provides data communication through one or more networks to other data devices. For example, network link 520 may provide a connection through local network 522 to a host computer 524 or to data equipment operated by an Internet Service Provider (ISP) 526. ISP 526 in turn provides data communication services through the world wide packet data communication network now commonly referred to as the “Internet” 528. Local network 522 and Internet 528 both use electrical, electromagnetic or optical signals that carry digital data streams. The signals through the various networks and the signals on network link 520 and through communication interface 518, which carry the digital data to and from computer system 500, are exemplary forms of carrier waves transporting the information.
  • [0201] Computer system 500 can send messages and receive data, including program code, through the network(s), network link 520 and communication interface 518. In the Internet example, a server 530 might transmit a requested code for an application program through Internet 528, ISP 526, local network 522 and communication interface 518.
  • The received code may be executed by [0202] processor 504 as it is received, and/or stored in storage device 510, or other non-volatile storage for later execution. In this manner, computer system 500 may obtain application code in the form of a carrier wave.
  • In the foregoing specification, the invention has been described with reference to specific embodiments thereof. It will, however, be evident that various modifications and changes may be made thereto without departing from the broader spirit and scope of the invention. The specification and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense. [0203]

Claims (18)

What is claimed is:
1. A method for combining content from different services, the method comprising the computer-implemented steps of:
in response to a request received at an intermediary from a client for first content from a first service, retrieving the first content from said first service;
locating within the first content a reference to second content from a second service;
retrieving, based on said reference, the second content from said second service;
generating combined content at the intermediary based on the first content from said first service and the second content from said second service; and
providing the combined content from the intermediary to the client in response to said request.
2. The method of claim 1, wherein said reference includes one or more parameters, and wherein said second content is generated by said second service based on said one or more parameters.
3. The method of claim 1, further comprising the computer-implemented step of:
storing at the intermediary a record that indicates that the second content from said second service was combined with the first content from said first service.
4. A method for allowing clients to access multiple services, the method comprising the computer-implemented steps of:
in response to a first request received at an intermediary from a client for first content from a first service, retrieving the first content from said first service;
locating within the first content a reference to a second service;
generating a first reply at the intermediary based on the first content from said first service, wherein said first reply includes, based on said reference, an object associated with said second service;
providing said first reply from the intermediary to said client in response to said first request;
retrieving, in response to a selection of said object by said client, second content from said second service; and
providing a second reply, based on the second content, from said intermediary to said client in response to said selection of said object by said client.
5. The method of claim 4, wherein said reference includes one or more parameters that are incorporated into said object, and wherein said second content is generated by said second service based on said one or more parameters.
6. The method of claim 4, further comprising the computer-implemented steps of:
storing at the intermediary a record that indicates that the second content from said second service was retrieved in response to said selection of said object included in said first reply provided in response to said request for the first content from said first service.
7. A method for providing content from a previously accessed service, the method comprising the computer-implemented steps of:
receiving, at an intermediary from an end user, a first request for first content from a first service;
providing to said end user, in response to said first request, a first electronic document from said first service;
receiving, at said intermediary from said end user, a second request for second content from a second service;
storing, at said intermediary, a record that indicates that said end user requested said first content from said first service;
providing to said end user, in response to said second request, a second electronic document from said second service;
receiving, at said intermediary from said end user, a third request for content from a service from which content was requested by said end user before said second electronic document was provided from said second service to said end user;
reading said record to determine that said first service is said service from which content was requested by said end user before said second electronic document was provided from said second service to said end user; and
providing to said end user, in response to said third request, a third electronic document from said first service.
8. The method of claim 7, wherein said second request is received in response to said end user selecting an object included in said first electronic document, wherein said object is associated with said second service.
9. The method of claim 7, wherein said third request is received in response to said end user selecting an object included in said second electronic document, wherein said object is not associated with said first service.
10. A computer-readable medium carrying one or more sequences of instructions for combining content from different services, wherein execution of the one or more sequences of instructions by one or more processors causes the one or more processors to perform the steps of:
in response to a request received at an intermediary from a client for first content from a first service, retrieving the first content from said first service;
locating within the first content a reference to second content from a second service;
retrieving, based on said reference, the second content from said second service;
generating combined content at the intermediary based on the first content from said first service and the second content from said second service; and
providing the combined content from the intermediary to the client in response to said request.
11. The computer-readable medium of claim 10, wherein said reference includes one or more parameters, and wherein said second content is generated by said second service based on said one or more parameters.
12. The computer-readable medium of claim 10, further comprising instructions which, when executed by the one or more processors, cause the one or more processors to carry out the step of:
storing at the intermediary a record that indicates that the second content from said second service was combined with the first content from said first service.
13. A computer-readable medium carrying one or more sequences of instructions for allowing clients to access multiple services, wherein execution of the one or more sequences of instructions by one or more processors causes the one or more processors to perform the steps of:
in response to a first request received at an intermediary from a client for first content from a first service, retrieving the first content from said first service;
locating within the first content a reference to a second service;
generating a first reply at the intermediary based on the first content from said first service, wherein said first reply includes, based on said reference, an object associated with said second service;
providing said first reply from the intermediary to said client in response to said first request;
retrieving, in response to a selection of said object by said client, second content from said second service; and
providing a second reply, based on the second content, from said intermediary to said client in response to said selection of said object by said client.
14. The computer-readable medium of claim 13, wherein said reference includes one or more parameters that are incorporated into said object, and wherein said second content is generated by said second service based on said one or more parameters.
15. The computer-readable medium of claim 13, further comprising instructions which, when executed by the one or more processors, cause the one or more processors to carry out the step of:
storing at the intermediary a record that indicates that the second content from said second service was retrieved in response to said selection of said object included in said first reply provided in response to said request for the first content from said first service.
16. A computer-readable medium carrying one or more sequences of instructions for providing content from a previously accessed service, wherein execution of the one or more sequences of instructions by one or more processors causes the one or more processors to perform the steps of:
receiving, at an intermediary from an end user, a first request for first content from a first service;
providing to said end user, in response to said first request, a first electronic document from said first service;
receiving, at said intermediary from said end user, a second request for second content from a second service;
storing, at said intermediary, a record that indicates that said end user requested said first content from said first service;
providing to said end user, in response to said second request, a second electronic document from said second service;
receiving, at said intermediary from said end user, a third request for content from a service from which content was requested by said end user before said second electronic document was provided from said second service to said end user;
reading said record to determine that said first service is said service from which content was requested by said end user before said second electronic document was provided from said second service to said end user; and
providing to said end user, in response to said third request, a third electronic document from said first service.
17. The computer-readable medium of claim 16, wherein said second request is received in response to said end user selecting an object included in said first electronic document, wherein said object is associated with said second service.
18. The computer-readable medium of claim 16, wherein said third request is received in response to said end user selecting an object included in said second electronic document, wherein said object is not associated with said first service.
US09/947,910 2000-09-06 2001-09-05 Providing content from multiple services Abandoned US20020138617A1 (en)

Priority Applications (11)

Application Number Priority Date Filing Date Title
US09/947,910 US20020138617A1 (en) 2000-09-06 2001-09-05 Providing content from multiple services
EP01971410.4A EP1330736B1 (en) 2000-09-06 2001-09-06 Providing content from multiple services
CA2420021A CA2420021C (en) 2000-09-06 2001-09-06 Providing content from multiple services
AU9502401A AU9502401A (en) 2000-09-06 2001-09-06 Developing applications online
AU9130001A AU9130001A (en) 2000-09-06 2001-09-06 Providing content from multiple services
AU2001291300A AU2001291300B2 (en) 2000-09-06 2001-09-06 Providing content from multiple services
AU9068601A AU9068601A (en) 2000-09-06 2001-09-06 Customizing content provided by a service
PCT/US2001/028157 WO2002021338A2 (en) 2000-09-06 2001-09-06 Customizing content provided by a service
PCT/US2001/042067 WO2002021342A2 (en) 2000-09-06 2001-09-06 Providing content from multiple services
JP2002525482A JP2004519756A (en) 2000-09-06 2001-09-06 How to serve content from many services
US13/889,139 US9167051B2 (en) 2000-09-06 2013-05-07 Transforming condition-independent output into condition-dependent output

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US23048900P 2000-09-06 2000-09-06
US09/947,910 US20020138617A1 (en) 2000-09-06 2001-09-05 Providing content from multiple services

Related Child Applications (1)

Application Number Title Priority Date Filing Date
US13/889,139 Continuation US9167051B2 (en) 2000-09-06 2013-05-07 Transforming condition-independent output into condition-dependent output

Publications (1)

Publication Number Publication Date
US20020138617A1 true US20020138617A1 (en) 2002-09-26

Family

ID=26924286

Family Applications (2)

Application Number Title Priority Date Filing Date
US09/947,910 Abandoned US20020138617A1 (en) 2000-09-06 2001-09-05 Providing content from multiple services
US13/889,139 Expired - Fee Related US9167051B2 (en) 2000-09-06 2013-05-07 Transforming condition-independent output into condition-dependent output

Family Applications After (1)

Application Number Title Priority Date Filing Date
US13/889,139 Expired - Fee Related US9167051B2 (en) 2000-09-06 2013-05-07 Transforming condition-independent output into condition-dependent output

Country Status (6)

Country Link
US (2) US20020138617A1 (en)
EP (1) EP1330736B1 (en)
JP (1) JP2004519756A (en)
AU (4) AU2001291300B2 (en)
CA (1) CA2420021C (en)
WO (2) WO2002021342A2 (en)

Cited By (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020144233A1 (en) * 2001-01-22 2002-10-03 Kelvin Chong Efficient system and method for running and analyzing multi-channel, multi-modal applications
US20040267811A1 (en) * 2003-06-27 2004-12-30 International Business Machines Corporation Host initiated display, host initiated display application program interface, and host initiated display method
US20050097134A1 (en) * 2003-10-31 2005-05-05 Smiley Karen J. Method for evaluating a transformer design
US20050097441A1 (en) * 2003-10-31 2005-05-05 Herbach Jonathan D. Distributed document version control
US20050097061A1 (en) * 2003-10-31 2005-05-05 Shapiro William M. Offline access in a document control system
US20050209002A1 (en) * 2004-03-16 2005-09-22 Garrett Blythe System and method for facilitating multiplayer online gaming
US6986135B2 (en) * 2001-09-06 2006-01-10 Cognos Incorporated Deployment manager for organizing and deploying an application in a distributed computing environment
US20060277209A1 (en) * 2005-06-06 2006-12-07 Javaground Usa, Inc. Efficient and automatic software application development system for wireless devices
US20060277231A1 (en) * 2005-06-06 2006-12-07 Javaground Usa, Inc. Integrated software development and porting system for wireless devices
WO2006132931A2 (en) * 2005-06-06 2006-12-14 Javaground Usa, Inc. Efficient software development and porting system and method for wireless devices
US20070006120A1 (en) * 2005-05-16 2007-01-04 Microsoft Corporation Storing results related to requests for software development services
US20070156727A1 (en) * 2005-12-29 2007-07-05 Blue Jungle Associating Code To a Target Through Code Inspection
US20080066150A1 (en) * 2005-12-29 2008-03-13 Blue Jungle Techniques of Transforming Policies to Enforce Control in an Information Management System
US20080160969A1 (en) * 2004-12-28 2008-07-03 Achim Tromm System and method for delivery data between a data provider and a mobil telephone network subscriber
US20080215528A1 (en) * 1999-08-05 2008-09-04 Eric Sedlar Multi-Model Access To Data
US20090004974A1 (en) * 2007-06-28 2009-01-01 Seppo Pyhalammi System, apparatus and method for associating an anticipated success indication with data delivery
US20090240728A1 (en) * 2008-03-20 2009-09-24 Microsoft Corporation Computing environment representation
US20090241104A1 (en) * 2008-03-20 2009-09-24 Microsoft Corporation Application management within deployable object hierarchy
US20090240698A1 (en) * 2008-03-20 2009-09-24 Microsoft Corporation Computing environment platform
US20090240935A1 (en) * 2008-03-20 2009-09-24 Microsoft Corporation Computing environment configuration
US20090248737A1 (en) * 2008-03-27 2009-10-01 Microsoft Corporation Computing environment representation
US7716240B2 (en) 2005-12-29 2010-05-11 Nextlabs, Inc. Techniques and system to deploy policies intelligently
US20110040850A1 (en) * 2007-05-04 2011-02-17 Microsoft Corporation Mesh-managing data across a distributed set of devices
US7921076B2 (en) * 2004-12-15 2011-04-05 Oracle International Corporation Performing an action in response to a file system event
US7958238B1 (en) * 2003-02-07 2011-06-07 Cisco Technology, Inc. System and method for managing network access for an end user
US7995758B1 (en) 2004-11-30 2011-08-09 Adobe Systems Incorporated Family of encryption keys
US8108672B1 (en) 2003-10-31 2012-01-31 Adobe Systems Incorporated Transparent authentication process integration
US8131766B2 (en) 2004-12-15 2012-03-06 Oracle International Corporation Comprehensive framework to integrate business logic into a repository
US20120150882A1 (en) * 2010-11-23 2012-06-14 Larry Deutsch Method and apparatus to search data and notify and update a user
WO2012148425A1 (en) * 2011-04-29 2012-11-01 Frequency Networks, Inc. Creation and presentation of selective digital content feeds
US8566722B2 (en) 2011-04-29 2013-10-22 Frequency Ip Holdings, Llc Multiple-carousel selective digital service feeds
US20140214919A1 (en) * 2013-01-28 2014-07-31 Amazon Technologies, Inc. Architecture for sharing browsing session histories
US8832047B2 (en) 2005-07-27 2014-09-09 Adobe Systems Incorporated Distributed document version control
US20150277860A1 (en) * 2014-03-25 2015-10-01 Electronics And Telecommunications Research Institute System and method for code recommendation and share
US9483780B2 (en) 2014-03-27 2016-11-01 Google Inc. Providing content using integrated objects
US11212571B2 (en) 2011-11-14 2021-12-28 Frequency Ip Holdings, Llc Aggregation and presentation of video content items with search service integration
US11758212B2 (en) 2011-04-29 2023-09-12 Frequency Ip Holdings, Llc Aggregation and presentation of video content items with feed item customization

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7469381B2 (en) 2007-01-07 2008-12-23 Apple Inc. List scrolling and document translation, scaling, and rotation on a touch-screen display
US7296243B2 (en) 2002-03-19 2007-11-13 Aol Llc Animating display motion
DE10229879A1 (en) 2002-04-29 2003-11-13 Siemens Ag Data processing system with services for the provision of functionalities
JP4096651B2 (en) * 2002-07-24 2008-06-04 日本電気株式会社 Mobile communication terminal device, control method thereof, and program
US20080168402A1 (en) 2007-01-07 2008-07-10 Christopher Blumenberg Application Programming Interfaces for Gesture Operations
US20080168478A1 (en) 2007-01-07 2008-07-10 Andrew Platzer Application Programming Interfaces for Scrolling
US7844915B2 (en) 2007-01-07 2010-11-30 Apple Inc. Application programming interfaces for scrolling operations
US8717305B2 (en) 2008-03-04 2014-05-06 Apple Inc. Touch event model for web pages
US8645827B2 (en) 2008-03-04 2014-02-04 Apple Inc. Touch event model
US8416196B2 (en) 2008-03-04 2013-04-09 Apple Inc. Touch event model programming interface
US8566045B2 (en) 2009-03-16 2013-10-22 Apple Inc. Event recognition
US8285499B2 (en) 2009-03-16 2012-10-09 Apple Inc. Event recognition
US9684521B2 (en) 2010-01-26 2017-06-20 Apple Inc. Systems having discrete and continuous gesture recognizers
US9311112B2 (en) 2009-03-16 2016-04-12 Apple Inc. Event recognition
US10216408B2 (en) 2010-06-14 2019-02-26 Apple Inc. Devices and methods for identifying user interface objects based on view hierarchy
US9298363B2 (en) 2011-04-11 2016-03-29 Apple Inc. Region activation for touch sensitive surface
US9733716B2 (en) 2013-06-09 2017-08-15 Apple Inc. Proxy gesture recognizer

Citations (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5572643A (en) * 1995-10-19 1996-11-05 Judson; David H. Web browser with dynamic display of information objects during linking
US5603034A (en) * 1992-09-08 1997-02-11 International Business Machines Corporation Graphical resource editor for software customization
US5835724A (en) * 1996-07-03 1998-11-10 Electronic Data Systems Corporation System and method for communication information using the internet that receives and maintains information concerning the client and generates and conveys the session data to the client
US5850433A (en) * 1996-05-01 1998-12-15 Sprint Communication Co. L.P. System and method for providing an on-line directory service
US5850548A (en) * 1994-11-14 1998-12-15 Borland International, Inc. System and methods for visual programming based on a high-level hierarchical data flow model
US5887172A (en) * 1996-01-10 1999-03-23 Sun Microsystems, Inc. Remote procedure call system and method for RPC mechanism independent client and server interfaces interoperable with any of a plurality of remote procedure call backends
US5933811A (en) * 1996-08-20 1999-08-03 Paul D. Angles System and method for delivering customized advertisements within interactive communication systems
US5937163A (en) * 1996-03-26 1999-08-10 Industrial Technology Research Institute Method and system at a host node for hierarchically organizing the links visited by a world wide web browser executing at the host node
US5960432A (en) * 1996-12-31 1999-09-28 Intel Corporation Multi-level captioning for enhanced data display
US5991535A (en) * 1996-07-03 1999-11-23 Sun Microsystems, Inc. Visual composition tool for constructing application programs using distributed objects on a distributed object network
US6009464A (en) * 1995-09-20 1999-12-28 Sun Microsystems, Inc. Method and apparatus for enabling application programs to communicate with network clients and servers
US6073163A (en) * 1997-06-10 2000-06-06 Oracle Corporation Method and apparatus for enabling web-based execution of an application
US6128655A (en) * 1998-07-10 2000-10-03 International Business Machines Corporation Distribution mechanism for filtering, formatting and reuse of web based content
US6286029B1 (en) * 1997-04-28 2001-09-04 Sabre Inc. Kiosk controller that retrieves content from servers and then pushes the retrieved content to a kiosk in the order specified in a run list
US20010029523A1 (en) * 2000-01-21 2001-10-11 Mcternan Brennan J. System and method for accounting for variations in client capabilities in the distribution of a media presentation
US6313835B1 (en) * 1999-04-09 2001-11-06 Zapa Digital Arts Ltd. Simplified on-line preparation of dynamic web sites
US6324681B1 (en) * 1998-10-01 2001-11-27 Unisys Corporation Automated development system for developing applications that interface with both distributed component object model (DCOM) and enterprise server environments
US20010047517A1 (en) * 2000-02-10 2001-11-29 Charilaos Christopoulos Method and apparatus for intelligent transcoding of multimedia data
US20020002569A1 (en) * 1998-12-09 2002-01-03 Binh Nguyen Systems, methods and computer program products for associating dynamically generated web page content with web site visitors
US6345279B1 (en) * 1999-04-23 2002-02-05 International Business Machines Corporation Methods and apparatus for adapting multimedia content for client devices
US20020037709A1 (en) * 2000-09-22 2002-03-28 Ranjit Bhatia System, method and apparatus for facilitating the receipt of realtime information from telecommunications nodes
US20020055351A1 (en) * 1999-11-12 2002-05-09 Elsey Nicholas J. Technique for providing personalized information and communications services
US6408360B1 (en) * 1999-01-25 2002-06-18 International Business Machines Corporation Cache override control in an apparatus for caching dynamic content
US6430624B1 (en) * 1999-10-21 2002-08-06 Air2Web, Inc. Intelligent harvesting and navigation system and method
US20020112082A1 (en) * 2000-12-07 2002-08-15 Ko John D. System and method for delivery of documents over a computer network
US20020124055A1 (en) * 1994-05-31 2002-09-05 Reisman Richard R. Software and method for automatically pre-fetching additional data objects referenced by a first data object
US6477565B1 (en) * 1999-06-01 2002-11-05 Yodlee.Com, Inc. Method and apparatus for restructuring of personalized data for transmission from a data network to connected and portable network appliances
US6510469B1 (en) * 1998-05-13 2003-01-21 Compaq Information Technologies Group,L.P. Method and apparatus for providing accelerated content delivery over a network
US6578073B1 (en) * 1998-05-13 2003-06-10 Hewlett-Packard Development Company, L.P. Accelerated content delivery over a network using reduced size objects
US6584548B1 (en) * 1999-07-22 2003-06-24 International Business Machines Corporation Method and apparatus for invalidating data in a cache
US6704776B1 (en) * 2000-06-30 2004-03-09 Webtv Networks, Inc. Selecting attribute based content for server applications
US6735741B1 (en) * 1999-07-30 2004-05-11 International Business Machines Corporation Method system, and program for dynamic resource linking when copies are maintained at different storage locations
US6757709B1 (en) * 2000-04-05 2004-06-29 Hewlett-Packard Development Company, L.P. Method and apparatus for providing a client system with information via a network
US6892226B1 (en) * 1997-03-27 2005-05-10 Intel Corporation System for delivery of dynamic content to a client device

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5115501A (en) * 1988-11-04 1992-05-19 International Business Machines Corporation Procedure for automatically customizing the user interface of application programs
US6141447A (en) * 1996-11-21 2000-10-31 C-Cube Microsystems, Inc. Compressed video transcoder
CA2209265A1 (en) * 1997-02-27 1998-08-27 The Computer Group, Inc. Apparatus and method for information retrieval via internet
US6311215B1 (en) * 1997-03-25 2001-10-30 Intel Corporation System for dynamic determination of client communications capabilities
JPH10307780A (en) * 1997-05-09 1998-11-17 Yazaki Corp Internet terminal equipment
DE69820391D1 (en) * 1997-10-31 2004-01-22 Sun Microsystems Inc Prepaid links to network servers
JP3061604B2 (en) * 1998-04-15 2000-07-10 株式会社ディジタル・ビジョン・ラボラトリーズ Data management system and data management method
AUPP347398A0 (en) * 1998-05-11 1998-06-04 Creative Edge Internet Services Pty Ltd Internet advertising system
US6138156A (en) * 1998-10-05 2000-10-24 International Business Machines Corporation Selecting and applying content-reducing filters based on dynamic environmental factors
JP3912464B2 (en) * 1998-11-13 2007-05-09 セイコーエプソン株式会社 Screen display data reading device
CN1108578C (en) * 1999-01-28 2003-05-14 国际商业机器公司 Method and apparatus of invoking and providing response for off-line customer
US6535896B2 (en) 1999-01-29 2003-03-18 International Business Machines Corporation Systems, methods and computer program products for tailoring web page content in hypertext markup language format for display within pervasive computing devices using extensible markup language tools
US6715129B1 (en) * 1999-10-13 2004-03-30 International Business Machines Corporation Achieving application-specific document content by transcoding using Java Server Pages
US7134073B1 (en) * 2000-06-15 2006-11-07 International Business Machines Corporation Apparatus and method for enabling composite style sheet application to multi-part electronic documents
JP4319331B2 (en) * 2000-06-23 2009-08-26 富士通株式会社 Service linkage system and information diversion device

Patent Citations (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5603034A (en) * 1992-09-08 1997-02-11 International Business Machines Corporation Graphical resource editor for software customization
US20020124055A1 (en) * 1994-05-31 2002-09-05 Reisman Richard R. Software and method for automatically pre-fetching additional data objects referenced by a first data object
US5850548A (en) * 1994-11-14 1998-12-15 Borland International, Inc. System and methods for visual programming based on a high-level hierarchical data flow model
US6009464A (en) * 1995-09-20 1999-12-28 Sun Microsystems, Inc. Method and apparatus for enabling application programs to communicate with network clients and servers
US5572643A (en) * 1995-10-19 1996-11-05 Judson; David H. Web browser with dynamic display of information objects during linking
US5887172A (en) * 1996-01-10 1999-03-23 Sun Microsystems, Inc. Remote procedure call system and method for RPC mechanism independent client and server interfaces interoperable with any of a plurality of remote procedure call backends
US5937163A (en) * 1996-03-26 1999-08-10 Industrial Technology Research Institute Method and system at a host node for hierarchically organizing the links visited by a world wide web browser executing at the host node
US5850433A (en) * 1996-05-01 1998-12-15 Sprint Communication Co. L.P. System and method for providing an on-line directory service
US5835724A (en) * 1996-07-03 1998-11-10 Electronic Data Systems Corporation System and method for communication information using the internet that receives and maintains information concerning the client and generates and conveys the session data to the client
US5991535A (en) * 1996-07-03 1999-11-23 Sun Microsystems, Inc. Visual composition tool for constructing application programs using distributed objects on a distributed object network
US5933811A (en) * 1996-08-20 1999-08-03 Paul D. Angles System and method for delivering customized advertisements within interactive communication systems
US5960432A (en) * 1996-12-31 1999-09-28 Intel Corporation Multi-level captioning for enhanced data display
US6892226B1 (en) * 1997-03-27 2005-05-10 Intel Corporation System for delivery of dynamic content to a client device
US6286029B1 (en) * 1997-04-28 2001-09-04 Sabre Inc. Kiosk controller that retrieves content from servers and then pushes the retrieved content to a kiosk in the order specified in a run list
US6073163A (en) * 1997-06-10 2000-06-06 Oracle Corporation Method and apparatus for enabling web-based execution of an application
US6578073B1 (en) * 1998-05-13 2003-06-10 Hewlett-Packard Development Company, L.P. Accelerated content delivery over a network using reduced size objects
US6510469B1 (en) * 1998-05-13 2003-01-21 Compaq Information Technologies Group,L.P. Method and apparatus for providing accelerated content delivery over a network
US6128655A (en) * 1998-07-10 2000-10-03 International Business Machines Corporation Distribution mechanism for filtering, formatting and reuse of web based content
US6324681B1 (en) * 1998-10-01 2001-11-27 Unisys Corporation Automated development system for developing applications that interface with both distributed component object model (DCOM) and enterprise server environments
US20020002569A1 (en) * 1998-12-09 2002-01-03 Binh Nguyen Systems, methods and computer program products for associating dynamically generated web page content with web site visitors
US6408360B1 (en) * 1999-01-25 2002-06-18 International Business Machines Corporation Cache override control in an apparatus for caching dynamic content
US6313835B1 (en) * 1999-04-09 2001-11-06 Zapa Digital Arts Ltd. Simplified on-line preparation of dynamic web sites
US6345279B1 (en) * 1999-04-23 2002-02-05 International Business Machines Corporation Methods and apparatus for adapting multimedia content for client devices
US6477565B1 (en) * 1999-06-01 2002-11-05 Yodlee.Com, Inc. Method and apparatus for restructuring of personalized data for transmission from a data network to connected and portable network appliances
US6584548B1 (en) * 1999-07-22 2003-06-24 International Business Machines Corporation Method and apparatus for invalidating data in a cache
US6735741B1 (en) * 1999-07-30 2004-05-11 International Business Machines Corporation Method system, and program for dynamic resource linking when copies are maintained at different storage locations
US6430624B1 (en) * 1999-10-21 2002-08-06 Air2Web, Inc. Intelligent harvesting and navigation system and method
US20020055351A1 (en) * 1999-11-12 2002-05-09 Elsey Nicholas J. Technique for providing personalized information and communications services
US20010029523A1 (en) * 2000-01-21 2001-10-11 Mcternan Brennan J. System and method for accounting for variations in client capabilities in the distribution of a media presentation
US20010047517A1 (en) * 2000-02-10 2001-11-29 Charilaos Christopoulos Method and apparatus for intelligent transcoding of multimedia data
US6757709B1 (en) * 2000-04-05 2004-06-29 Hewlett-Packard Development Company, L.P. Method and apparatus for providing a client system with information via a network
US6704776B1 (en) * 2000-06-30 2004-03-09 Webtv Networks, Inc. Selecting attribute based content for server applications
US20020037709A1 (en) * 2000-09-22 2002-03-28 Ranjit Bhatia System, method and apparatus for facilitating the receipt of realtime information from telecommunications nodes
US20020112082A1 (en) * 2000-12-07 2002-08-15 Ko John D. System and method for delivery of documents over a computer network

Cited By (95)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8335775B1 (en) 1999-08-05 2012-12-18 Oracle International Corporation Versioning in internet file system
US20080215528A1 (en) * 1999-08-05 2008-09-04 Eric Sedlar Multi-Model Access To Data
US8065320B2 (en) 1999-08-05 2011-11-22 Oracle International Corporation Multi-model access to data
US20020184610A1 (en) * 2001-01-22 2002-12-05 Kelvin Chong System and method for building multi-modal and multi-channel applications
US7917888B2 (en) * 2001-01-22 2011-03-29 Symbol Technologies, Inc. System and method for building multi-modal and multi-channel applications
US7174534B2 (en) * 2001-01-22 2007-02-06 Symbol Technologies, Inc. Efficient system and method for running and analyzing multi-channel, multi-modal applications
US20020144233A1 (en) * 2001-01-22 2002-10-03 Kelvin Chong Efficient system and method for running and analyzing multi-channel, multi-modal applications
US6986135B2 (en) * 2001-09-06 2006-01-10 Cognos Incorporated Deployment manager for organizing and deploying an application in a distributed computing environment
US7958238B1 (en) * 2003-02-07 2011-06-07 Cisco Technology, Inc. System and method for managing network access for an end user
US20040267811A1 (en) * 2003-06-27 2004-12-30 International Business Machines Corporation Host initiated display, host initiated display application program interface, and host initiated display method
US20050097441A1 (en) * 2003-10-31 2005-05-05 Herbach Jonathan D. Distributed document version control
US8479301B2 (en) 2003-10-31 2013-07-02 Adobe Systems Incorporated Offline access in a document control system
US8627489B2 (en) * 2003-10-31 2014-01-07 Adobe Systems Incorporated Distributed document version control
US8108672B1 (en) 2003-10-31 2012-01-31 Adobe Systems Incorporated Transparent authentication process integration
US8627077B2 (en) 2003-10-31 2014-01-07 Adobe Systems Incorporated Transparent authentication process integration
US20050097061A1 (en) * 2003-10-31 2005-05-05 Shapiro William M. Offline access in a document control system
US7930757B2 (en) 2003-10-31 2011-04-19 Adobe Systems Incorporated Offline access in a document control system
US7376664B2 (en) * 2003-10-31 2008-05-20 Abb Research Ltd. Method for evaluating a transformer design
US20050097134A1 (en) * 2003-10-31 2005-05-05 Smiley Karen J. Method for evaluating a transformer design
US7914381B2 (en) * 2004-03-16 2011-03-29 Xfire, Inc. System and method for facilitating multiplayer online gaming
US20050209002A1 (en) * 2004-03-16 2005-09-22 Garrett Blythe System and method for facilitating multiplayer online gaming
US7995758B1 (en) 2004-11-30 2011-08-09 Adobe Systems Incorporated Family of encryption keys
US7921076B2 (en) * 2004-12-15 2011-04-05 Oracle International Corporation Performing an action in response to a file system event
US8131766B2 (en) 2004-12-15 2012-03-06 Oracle International Corporation Comprehensive framework to integrate business logic into a repository
US8176007B2 (en) 2004-12-15 2012-05-08 Oracle International Corporation Performing an action in response to a file system event
US8792870B2 (en) * 2004-12-28 2014-07-29 Vodafone Holding Gmbh System and method for delivery of data between a data provider and a mobile telephone network subscriber
US20080160969A1 (en) * 2004-12-28 2008-07-03 Achim Tromm System and method for delivery data between a data provider and a mobil telephone network subscriber
US20070006120A1 (en) * 2005-05-16 2007-01-04 Microsoft Corporation Storing results related to requests for software development services
US8407206B2 (en) * 2005-05-16 2013-03-26 Microsoft Corporation Storing results related to requests for software development services
WO2006132931A2 (en) * 2005-06-06 2006-12-14 Javaground Usa, Inc. Efficient software development and porting system and method for wireless devices
WO2006132931A3 (en) * 2005-06-06 2007-05-24 Javaground Usa Inc Efficient software development and porting system and method for wireless devices
US20060277231A1 (en) * 2005-06-06 2006-12-07 Javaground Usa, Inc. Integrated software development and porting system for wireless devices
US20060277209A1 (en) * 2005-06-06 2006-12-07 Javaground Usa, Inc. Efficient and automatic software application development system for wireless devices
US8832047B2 (en) 2005-07-27 2014-09-09 Adobe Systems Incorporated Distributed document version control
US9531595B2 (en) 2005-12-29 2016-12-27 Nextlabs, Inc. Intelligent policy deployment
US20100223287A1 (en) * 2005-12-29 2010-09-02 Blue Jungle, Inc. Techniques and System to Deploy Policies Intelligently
US20070156670A1 (en) * 2005-12-29 2007-07-05 Blue Jungle Techniques of optimizing policies in an information management system
US8762412B2 (en) 2005-12-29 2014-06-24 Nextlabs, Inc. Preventing conflicts of interests between two or more groups using applications
US20070156727A1 (en) * 2005-12-29 2007-07-05 Blue Jungle Associating Code To a Target Through Code Inspection
US20080066150A1 (en) * 2005-12-29 2008-03-13 Blue Jungle Techniques of Transforming Policies to Enforce Control in an Information Management System
US9298895B2 (en) 2005-12-29 2016-03-29 Nextlabs, Inc. Preventing conflicts of interests between two or more groups using applications
US20080091682A1 (en) * 2005-12-29 2008-04-17 Blue Jungle Preventing Conflicts of Interests Between Two or More Groups Using Applications
US8150816B2 (en) 2005-12-29 2012-04-03 Nextlabs, Inc. Techniques of optimizing policies in an information management system
US8156566B2 (en) 2005-12-29 2012-04-10 Nextlabs, Inc. Associating code to a target through code inspection
US7877409B2 (en) 2005-12-29 2011-01-25 Nextlabs, Inc. Preventing conflicts of interests between two or more groups using applications
US8185548B2 (en) 2005-12-29 2012-05-22 Nextlabs, Inc. Techniques and system to deploy policies intelligently
US9253216B2 (en) 2005-12-29 2016-02-02 Nextlabs, Inc. Techniques of transforming policies to enforce control in an information management system
US20070157288A1 (en) * 2005-12-29 2007-07-05 Blue Jungle Deploying Policies and Allowing Off-Line Policy Evaluations
US9203868B2 (en) 2005-12-29 2015-12-01 Nextlabs, Inc. Inspecting code and reducing code size associated to a target
US7716240B2 (en) 2005-12-29 2010-05-11 Nextlabs, Inc. Techniques and system to deploy policies intelligently
US8661003B2 (en) 2005-12-29 2014-02-25 Nextlabs, Inc. Policy performance in an information management system
US9384363B2 (en) 2005-12-29 2016-07-05 Nextlabs, Inc. Deploying policies and allowing off-line policy evaluations
US9684795B2 (en) 2005-12-29 2017-06-20 Nextlabs, Inc. Inspecting code and reducing code size associated to a target
US8640191B2 (en) 2005-12-29 2014-01-28 Nextlabs, Inc. Inspecting code and reducing code size associated to a target
US8544058B2 (en) 2005-12-29 2013-09-24 Nextlabs, Inc. Techniques of transforming policies to enforce control in an information management system
US8990886B2 (en) 2005-12-29 2015-03-24 Nextlabs, Inc. Techniques of transforming policies to enforce control in an information management system
US8904478B2 (en) 2005-12-29 2014-12-02 Nextlabs, Inc. Inspecting code and reducing code size associated to a target
US8875218B2 (en) 2005-12-29 2014-10-28 Nextlabs, Inc. Deploying policies and allowing off-line policy evaluations
US9703978B2 (en) 2005-12-29 2017-07-11 Nextlabs, Inc. Transforming policies to enforce control in an information management system
US9740703B2 (en) 2005-12-29 2017-08-22 Nextlabs, Inc. Deploying policies and allowing offline policy evaluation
US10380363B2 (en) 2005-12-29 2019-08-13 Nextlabs, Inc. Preventing conflicts of interests between two or more groups using applications
US20110040850A1 (en) * 2007-05-04 2011-02-17 Microsoft Corporation Mesh-managing data across a distributed set of devices
US9135279B2 (en) 2007-05-04 2015-09-15 Microsoft Technology Licensing, Llc Mesh-managing data across a distributed set of devices
US8364759B2 (en) 2007-05-04 2013-01-29 Microsoft Corporation Mesh-managing data across a distributed set of devices
US8285846B2 (en) 2007-06-28 2012-10-09 Nokia Corporation System, apparatus and method for associating an anticipated success indication with data delivery
US8065429B2 (en) * 2007-06-28 2011-11-22 Nokia Corporation System, apparatus and method for associating an anticipated success indication with data delivery
US20090004974A1 (en) * 2007-06-28 2009-01-01 Seppo Pyhalammi System, apparatus and method for associating an anticipated success indication with data delivery
US20090240698A1 (en) * 2008-03-20 2009-09-24 Microsoft Corporation Computing environment platform
US8484174B2 (en) 2008-03-20 2013-07-09 Microsoft Corporation Computing environment representation
US20090241104A1 (en) * 2008-03-20 2009-09-24 Microsoft Corporation Application management within deployable object hierarchy
US9298747B2 (en) 2008-03-20 2016-03-29 Microsoft Technology Licensing, Llc Deployable, consistent, and extensible computing environment platform
US8572033B2 (en) 2008-03-20 2013-10-29 Microsoft Corporation Computing environment configuration
US9332063B2 (en) 2008-03-20 2016-05-03 Microsoft Technology Licensing, Llc Versatile application configuration for deployable computing environments
US10514901B2 (en) 2008-03-20 2019-12-24 Microsoft Technology Licensing, Llc Application management within deployable object hierarchy
US20090240935A1 (en) * 2008-03-20 2009-09-24 Microsoft Corporation Computing environment configuration
US9753712B2 (en) 2008-03-20 2017-09-05 Microsoft Technology Licensing, Llc Application management within deployable object hierarchy
US20090240728A1 (en) * 2008-03-20 2009-09-24 Microsoft Corporation Computing environment representation
US20090248737A1 (en) * 2008-03-27 2009-10-01 Microsoft Corporation Computing environment representation
US20120150882A1 (en) * 2010-11-23 2012-06-14 Larry Deutsch Method and apparatus to search data and notify and update a user
US20140317075A1 (en) * 2010-11-23 2014-10-23 Larry Maurice Deutsch Method and Apparatus to Search Data and Notify and Update a User
US8589376B2 (en) * 2010-11-23 2013-11-19 Larry Deutsch Method and apparatus to search data and notify and update a user
US10555020B2 (en) 2011-04-29 2020-02-04 Frequency Ip Holdings, Llc Aggregation and presentation of video content items for multiple users
WO2012148425A1 (en) * 2011-04-29 2012-11-01 Frequency Networks, Inc. Creation and presentation of selective digital content feeds
US8583759B2 (en) 2011-04-29 2013-11-12 Frequency Ip Holdings, Llc Creation and presentation of selective digital content feeds
US8566722B2 (en) 2011-04-29 2013-10-22 Frequency Ip Holdings, Llc Multiple-carousel selective digital service feeds
US11758212B2 (en) 2011-04-29 2023-09-12 Frequency Ip Holdings, Llc Aggregation and presentation of video content items with feed item customization
US8706841B2 (en) 2011-04-29 2014-04-22 Frequency Ip Holdings, Llc Automatic selection of digital service feed
US9003438B2 (en) 2011-04-29 2015-04-07 Frequency Ip Holdings, Llc Integrated advertising in video link aggregation system
US8613015B2 (en) 2011-04-29 2013-12-17 Frequency Ip Holdings, Llc Two-stage processed video link aggregation system
US11212571B2 (en) 2011-11-14 2021-12-28 Frequency Ip Holdings, Llc Aggregation and presentation of video content items with search service integration
US9413840B2 (en) * 2013-01-28 2016-08-09 Amazon Technologies, Inc. Architecture for sharing browsing session histories
US20140214919A1 (en) * 2013-01-28 2014-07-31 Amazon Technologies, Inc. Architecture for sharing browsing session histories
US20150277860A1 (en) * 2014-03-25 2015-10-01 Electronics And Telecommunications Research Institute System and method for code recommendation and share
US9557972B2 (en) * 2014-03-25 2017-01-31 Electronics And Telecommunications Research Institute System and method for code recommendation and share
US9483780B2 (en) 2014-03-27 2016-11-01 Google Inc. Providing content using integrated objects

Also Published As

Publication number Publication date
CA2420021A1 (en) 2002-03-14
AU9502401A (en) 2002-03-22
WO2002021338A2 (en) 2002-03-14
AU9130001A (en) 2002-03-22
WO2002021338A3 (en) 2003-04-24
WO2002021342A2 (en) 2002-03-14
WO2002021342A3 (en) 2003-05-15
JP2004519756A (en) 2004-07-02
AU9068601A (en) 2002-03-22
EP1330736A2 (en) 2003-07-30
US9167051B2 (en) 2015-10-20
US20130246572A1 (en) 2013-09-19
WO2002021338A9 (en) 2003-12-11
CA2420021C (en) 2013-02-12
EP1330736B1 (en) 2016-04-13
AU2001291300B2 (en) 2007-08-23

Similar Documents

Publication Publication Date Title
US9167051B2 (en) Transforming condition-independent output into condition-dependent output
US6954751B2 (en) Accessing data stored at an intermediary from a service
US7784030B2 (en) Developing applications online
US7089295B2 (en) Customizing content provided by a service
AU2001293254A1 (en) Accessing data stored at an intermediary from a service
AU2001291300A1 (en) Providing content from multiple services
AU2001290686A1 (en) Customizing content provided by a service
AU2001295024A1 (en) Developing applications online
US7281060B2 (en) Computer-based presentation manager and method for individual user-device data representation
US7546576B2 (en) Software framework for web-based applications
US20120331044A1 (en) Information Messaging and Collaboration System
JP2004334866A (en) Conversion of web site summary through tag rib
JPH11167584A (en) Page shift method and its execution device and medium recording page shift processing program and data

Legal Events

Date Code Title Description
AS Assignment

Owner name: ORACLE CORPORATION, CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:CHRISTFORT, JACOB;CHONE, JEREMY;REEL/FRAME:012556/0471

Effective date: 20011107

AS Assignment

Owner name: ORACLE INTERNATIONAL CORPORATION, CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:ORACLE CORPORATION;REEL/FRAME:013944/0938

Effective date: 20030411

Owner name: ORACLE INTERNATIONAL CORPORATION,CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:ORACLE CORPORATION;REEL/FRAME:013944/0938

Effective date: 20030411

STCB Information on status: application discontinuation

Free format text: ABANDONED -- AFTER EXAMINER'S ANSWER OR BOARD OF APPEALS DECISION