RMX : RDF Message Exchange

Introduction

RMX is a new way to do push-style messaging. The concept is simple and based on the REST architectural style. Fundamentally, RMX works the following way:

That's it. With this simple pattern, one can implement "e-mail", "mailing" lists, forums, etc.

Examples

The following examples illustrate various "common" ways that RMX could be used.

NOTE: All URIs in these examples (except the RDF and DC namespace declarations) are ficticious!

Example 1: Sending an "E-mail"

  1. Message is created and stored at http://seairth.com/rmx/msg/1234.
  2. Notification is POSTed to http://myrmx.com/users/bob.
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    	xmlns:dc="http://purl.org/dc/elements/1.1/"
    	xmlns="http://purl.org/rmx/1.0/">
    
        <notification rdf:nodeID="bNodeNotification">
    		      <dc:creator rdf:resource="http://seairth.com/rmx" />
    	      	<dc:publisher>MyRMX Agent 1.0</dc:publisher>
          		<dc:title>All about RMX</dc:title>
          		<message rdf:resource="http://seairth.com/rmx/msg/1234" />
       	</notification>
    
       	<message rdf:about="http://seairth.com/rmx/msg/1234">
          		<dc:creator rdf:resource="http://seairth.com/rmx" />
          		<dc:format>text/html</dc:format>
          		<dc:format>text/xhtml+xml</dc:format>
       	</message>
    </rdf:RDF>
    
  3. Query is POSTed to http://seairth.com/rmx.
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    	xmlns:dc="http://purl.org/dc/elements/1.1/"
    	xmlns="http://purl.org/rmx/1.0/">
    
       	<query rdf:nodeID="bNodeQuery">
          		<dc:creator rdf:resource="http://myrmx.com/users/bob" />
          		<message rdf:resource="http://seairth.com/rmx/msg/1234" />
       	</query>
    </rdf:RDF>
    
  4. The sender server examines the RDF, determines that the query is true and returns a 200 with the original Notification RDF. This confirms to the recipient that the notification is authentic.
  5. A matching notification is created and stored at http://myrmx.com/users/bob/in/4534.
  6. Recipient server chooses to copy the actual message to http://myrmx.com/users/bob/in/4534/msg. The RDF at http://myrmx.com/users/bob/in/4534 is changed slighly.
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    	xmlns:dc="http://purl.org/dc/elements/1.1/"
    	xmlns="http://purl.org/rmx/1.0/">
    
       	<notification rdf:nodeID="bNodeNotification">
          		<dc:creator rdf:resource="http://seairth.com/rmx" />
          		<dc:publisher>MyRMX Agent 1.0</dc:publisher>
          		<dc:title>All about RMX</dc:title>
          		<message rdf:resource="http://seairth.com/rmx/msg/1234" />
       	</notification>
    
       	<message rdf:about="http://seairth.com/rmx/msg/1234">
          		<copy rdf:resource="http://myrmx.com/users/bob/in/4534/msg" />
          		<dc:creator rdf:resource="http://seairth.com/rmx" />
          		<dc:format>text/html</dc:format>
          		<dc:format>text/xhtml+xml</dc:format>
       	</message>
    </rdf:RDF>
    
  7. Recipient client then GETs http://myrmx.com/users/bob, which returns the list of RDF notification URIs (possibly as an RDF document itself). Client then uses the list to retrieve notifications, then messages. Notifications can be organized, deleted, etc as the recipient feels is appropriate.

Notes:

Example 2: Sending a link

The process could be as above, but the notification may look like:

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns="http://purl.org/rmx/1.0/">

   	<notification rdf:nodeID="bNodeNotification">
      		<dc:creator rdf:resource="http://seairth.com/rmx" />
      		<dc:publisher>MyRMX Agent 1.0</dc:publisher>
      		<dc:title>CNN War Headlines</dc:title>
      		<message rdf:resource="http://www.cnn.com/" />
   	</notification>
</rdf:RDF>

Notes:

Example 3: "Replying" to a notification

Suppose http://myrmx.com/users/bob wants to reply to the message from http://seairth.com/rmx.

  1. Message is created at http://myrmx.com/users/bob/msg/3395.
  2. Notification is sent to http://seairth.com/rmx.
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    	xmlns:dc="http://purl.org/dc/elements/1.1/"
    	xmlns:dcterms="http://purl.org/dc/terms/">
    	xmlns="http://purl.org/rmx/1.0/">
    
       	<notification rdf:nodeID="bNodeNotification">
          		<dc:creator rdf:resource="http://myrmx.com/users/bob" />
          		<dc:publisher>RMX+ 3.0</dc:publisher>
          		<dc:title>Re: All about RMX</dc:title>
          		<message rdf:resource="http://myrmx.com/users/bob/msg/3395" />
        </notification>
    
        <message rdf:about="http://myrmx.com/users/bob/msg/3395">
          		<dcterms:References rdf:resource="http://seairth.com/rmx/msg/1234" />
        </message>
    </rdf:RDF>
    
  3. (steps 3+ repeated from from Example 1)

Notes:

Example 4: "Mailing" list

Suppose http://seairth.com/rmx wants to post to a mailing list at http://rmxlists.com/rmx-dev.

  1. Message is created and stored at http://seairth.com/rmx/msg/4567.
  2. Notification is POSTed to http://rmxlists.com/rmx-dev.
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    	xmlns:dc="http://purl.org/dc/elements/1.1/"
    	xmlns="http://purl.org/rmx/1.0/">
    
    	   <notification rdf:nodeID="bNodeNotification">
    		      <dc:creator rdf:resource="http://seairth.com/rmx" />
    		      <dc:publisher>MyRMX Agent 1.0</dc:publisher>
    		      <dc:title>All about RMX</dc:title>
    		      <message rdf:resource="http://seairth.com/rmx/msg/4567" />
    	   </notification>
    
    	   <message rdf:about="http://seairth.com/rmx/msg/4567">
    		      <dc:creator rdf:resource="http://seairth.com/rmx" />
    	   </message>
    </rdf:RDF>
    
  3. Optional query process between the list and the sender may be taken.
  4. A copy of the message is created at http://rmxlists.com/rmx-dev/msg/43492.
  5. A notification is created sent to each recipient in the list.
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    	xmlns:dc="http://purl.org/dc/elements/1.1/"
    	xmlns="http://purl.org/rmx/1.0/">
    
    	   <notification rdf:nodeID="bNodeNotification">
    		      <dc:creator rdf:resource="http://rmxlists.com/rmx-dev" />
    		      <dc:publisher>RMX List Agent 1.1</dc:publisher>
    		      <dc:title>[rmx-dev]All about RMX</dc:title>
    		      <message rdf:resource="http://seairth.com/rmx/msg/4567" />
    	   </notification>
    
    	   <message rdf:about="http://seairth.com/rmx/msg/4567">
    		      <copy rdf:resource="http://rmxlists.com/rmx-dev/msg/43492" />
    		      <dc:creator rdf:resource="http://seairth.com/rmx" />
    	   </message>
    </rdf:RDF>
    
  6. From here on, recipients handle the notification like any other notification (including the optional query process).

Notes: