APML

 

FrontPage

Page history last edited by Magnus Melin 4 days ago

 

 

This Wiki is designed as a living document for the APML Spec, FAQ and List of supported services.

 

  • Never heard of APML? Start on the APML.ORG site and check out the APML FAQ.
  • Join the conversation about APML on the Google Group.
  • Download the open source libraries for APML from Google Code.
  • Get a list of services that support APML. 
  • For updates, subscribe to the RSS feed

  • Please feel free to improve the content - password is profileme.

     

 

The APML Specification

 

Contributors 

 

Concept

Ashley Angell, Chris Saad

 

Editors

Ashley Angell, Chris Saad, Stephen Kelly, Paul Jones

 

Authors

Ashley Angell, Chris Saad, Paul Jones

 

Additional Contribution

APML Workgroup

 

Copyright

This specification is offered by the Faraday Media and the APML Workgroup under the terms of the Attribution/Share Alike Creative Commons licence. At the appropriate time it will be submitted to a standards body for liberal licensing. Anyone contributing to this document should understand that their work will be distributed in this manner.

 

Patents

Faraday Media does not hold, or intend to hold any patents on anything required to implement this specification.

 

Acknowledgements

Thanks to:

 

  • Nik Seirlis for his invaluable advice and assitance
  • Martin Wells (Tangler) for his valuable advice and assistance
  • Michael McNeil for his awesome work with the first APML Handler Library
  • Marjolein Hoekstra (CleverClogs)

 

APML 1.0

The agenda for APML 1.0. Join in!

 

APML-JSON

A proposal for an APML-JSON format has been contributed. Please leave feedback if you are a javascript developer.

 

Introduction

Attention Profiling Markup Language (APML) is an open standard that encapsulates a summary of your interests (across multiple profiles) in a simple, portable way.

 

Problem Statement

Attention Data comes in many forms. These include specifically designed, high-resolution file formats such as Attention.XML or more familiar forms of user data storage such as IM chat logs, browser history and cache, email inboxes, documents, OPML etc.

 

In some usage scenarios, however, it is necessary to analyze all available Attention Data to determine an Attention Profile - a compressed, portable and open-standard description of one’s ranked personal interests.

 

A portable Attention Profile would allow a user to own (and optionally submit) a meta view of their interests to create instant relationships with “attention aware” products and services. This creates an instantly customized user experience.

 

Known Exclusions

For this version of the spec we have left out:

 

  • Types - Types might include Books, Events, People, Movies etc.
  • Microformats - It has been suggested that Microformats might also be included in some way
  • Probably a few other things - let us know what you think!

 

We believe that while it may be important to describe interests as they relate to specific types (perhaps using Microformats as a basis), we feel the specific nature of types support might be better left for:

 

  1. Community discussion before inclusion.
  2. A second version of this specification (in keeping with the ‘less is better’ philosophy).

 

We shall leave it up to the community to help make this decision.

 

Definitions Of Elements

There are consistently questions raised about the meanings of various Elements found in an APML document. Particularly about when the "updated" and "from" attributes should be added. Here are some brief descriptions.

 

Explicit data is for items that are explicitly added by a user to represent something. So for example, a user could edit their own APML file and add items they know they're interested in. That's why the updated tag isn't needed on items in ExplicitData, because it's a manual process.

 

Whereas with Implicit data, it is added by machines/computers that try to make some informed guesses about the things that you are interested in. This stuff will change over time and are added with a certain degree of confidence that may have a decay in certain applications. That's why it is important to keep a track of when things were added/modified.

 

Concepts mean "ideas" basically. General "things" you may be interested in. Sources are specific sources of information that you are interested in. Like a particular website or rss feed or something. Authors can be authors of a source, or just plain old authors. It is worth noting that the idea of an author/people is under review for APML Version 1.0, please see v1_agenda.

 

Discovery

The APML document representing a particular page (or blog/feed) can be found in the header of the page. It is represented by a html element that looks like this:

 

<link rel="meta" type="application/apml+xml" title="APML 0.6" href="http://apml.pbwiki.com/apml"/>
 

This will allow APML aware browsers and tools to find the APML document representing a page.

 

HTTP Content Type Header

 

Content-Type: application/xml+apml

 

Format

 

Format Summary

APML is an XML file that contains an outline of Implicit and Explicit interests, Source and Author Rankings by Profile.

 

Example

 

<?xml version="1.0"?>

<APML xmlns="http://www.apml.org/apml-0.6" version="0.6" >

  <Head>

    <Title>Example APML file for apml.org</Title>

    <Generator>Written by Hand</Generator>

    <UserEmail>sample@apml.org</UserEmail>

    <DateCreated>2007-03-11T01:55:00Z</DateCreated>

  </Head>

 

  <Body defaultprofile="Work">

    <Profile name="Home">

      <ImplicitData>

        <Concepts>

          <Concept key="attention" value="0.99" from="GatheringTool.com" updated="2007-03-11T01:55:00Z" />

          <Concept key="content distribution" value="0.97" from="GatheringTool.com" updated="2007-03-11T01:55:00Z" />

          <Concept key="information" value="0.95" from="GatheringTool.com" updated="2007-03-11T01:55:00Z" />

          <Concept key="business" value="0.93" from="GatheringTool.com" updated="2007-03-11T01:55:00Z" />

          <Concept key="alerting" value="0.91" from="GatheringTool.com" updated="2007-03-11T01:55:00Z" />

          <Concept key="intelligent agents" value="0.89" from="GatheringTool.com" updated="2007-03-11T01:55:00Z" />

          <Concept key="development" value="0.87" from="GatheringTool.com" updated="2007-03-11T01:55:00Z" />

          <Concept key="service" value="0.85" from="GatheringTool.com" updated="2007-03-11T01:55:00Z" />

          <Concept key="user interface" value="0.83" from="GatheringTool.com" updated="2007-03-11T01:55:00Z" />

          <Concept key="experience design" value="0.81" from="GatheringTool.com" updated="2007-03-11T01:55:00Z" />

          <Concept key="site design" value="0.79" from="GatheringTool.com" updated="2007-03-11T01:55:00Z" />

          <Concept key="television" value="0.77" from="GatheringTool.com" updated="2007-03-11T01:55:00Z" />

          <Concept key="management" value="0.75" from="GatheringTool.com" updated="2007-03-11T01:55:00Z" />

          <Concept key="media" value="0.73" from="GatheringTool.com" updated="2007-03-11T01:55:00Z" />

        </Concepts>

        <Sources>

          <Source key="http://feeds.feedburner.com/apmlspec" name="APML.org" value="1.00" type="application/rss+xml" from="GatheringTool.com" updated="2007-03-11T01:55:00Z">

            <Author key="Sample" value="0.5" from="GatheringTool.com" updated="2007-03-11T01:55:00Z" />

          </Source>

        </Sources>

      </ImplicitData>

      <ExplicitData>

        <Concepts>

          <Concept key="direct attention" value="0.99" />

        </Concepts>

        <Sources>

          <Source key="http://feeds.feedburner.com/TechCrunch" name="Techcrunch" type="application/rss+xml" value="0.4">

            <Author key="ExplicitSample" value="0.5" />

          </Source>

        </Sources>

      </ExplicitData>

    </Profile>

 

    <Profile name="Work">

      <ImplicitData />

      <ExplicitData>

        <Concepts>

          <Concept key="Golf" value="0.2" />

        </Concepts>

        <Sources>

          <Source key="http://feeds.feedburner.com/TechCrunch" name="Techcrunch" type="application/atom+xml" value="0.4">

            <Author key="ProfessionalBlogger" value="0.5" />

          </Source>

        </Sources>

      </ExplicitData>

    </Profile>

 

    <Applications>

      <Application name="sample.com">

        <SampleAppEl />

      </Application>

    </Applications>

  </Body>

</APML>

 

 

 

Format Schema

The XML Schema definition for APML follows:

 

 

 <xs:schema

    xmlns:xs="http://www.w3.org/2001/XMLSchema"

    targetNamespace="http://www.apml.org/apml-0.6"

    xmlns:apml="http://www.apml.org/apml-0.6"

    elementFormDefault="qualified"

    attributeFormDefault="unqualified">

 

  <!--

    The root document type - a chunk containing nodes and links.

 

    Basic outline:

      <APML>

        <Head />

        <Body />

      </APML>

  -->

  <xs:element name="APML">

    <xs:complexType>

      <xs:sequence>

        <xs:element name="Head" type="apml:HeadType"/>

        <xs:element name="Body" type="apml:BodyType"/>

      </xs:sequence>

 

      <!--

        Defines the specification version this APML document currently adheres to.

 

        Currently expected to be 0.6.

      -->

      <xs:attribute name="version" type="xs:string" use="required"/>

 

      <!-- Allow additional attributes -->

    <xs:anyAttribute/>

    </xs:complexType>

  </xs:element>

 

  <!--

    The document header. Provides basic administrative data about the APML document.

 

    Basic outline:

      <Head>

        <Title/>

        <Generator/>

        <UserEmail/>

        <DateCreated/>

      </Head>

  -->

  <xs:complexType name="HeadType">

    <xs:sequence>

      <xs:element name="Title" type="xs:string"/>

      <xs:element name="Generator" type="xs:string"/>

      <xs:element name="UserEmail" type="apml:EmailType"/>

      <xs:element name="DateCreated" type="apml:ISO8601DateType"/>

    </xs:sequence>

 

    <!-- Allow additional attributes -->

    <xs:anyAttribute/>

  </xs:complexType>

 

  <!--

    The document body. Contains the actual content of the user's APML data.

 

    Basic outline:

      <Body defaultprofile="">

        <Profile />

        <Profile />

 

        <Applications/>

      </Body>

  -->

  <xs:complexType name="BodyType">

    <xs:sequence>

      <!-- The list of profiles -->

      <xs:element name="Profile" type="apml:ProfileType" minOccurs="1" maxOccurs="unbounded"/>

 

      <!-- Provides application data storage -->

      <xs:element name="Applications" type="apml:ApplicationsBlockType" minOccurs="0" maxOccurs="1"/>

    </xs:sequence>

 

    <!--

      Specifies the default profile to use when either no user selection is made, or no user selection

      can be made.

    -->

    <xs:attribute name="defaultprofile" type="xs:string" use="required"/>

 

    <!-- Allow additional attributes -->

    <xs:anyAttribute/>

  </xs:complexType>

 

  <!--

    Details of a profile.

 

    Basic outline:

      <Profile name="">

        <ImplicitData />

        <ExplicitData />

      </Profile>

  -->

  <xs:complexType name="ProfileType">

    <xs:sequence>

      <!-- Provides the implicit data associated with this profile -->

      <xs:element name="ImplicitData" type="apml:ImplicitBlockType"/>

 

      <!-- Provides the explicit data associated with this profile -->

      <xs:element name="ExplicitData" type="apml:ExplicitBlockType"/>

    </xs:sequence>

 

    <!-- Provides the name of the profile -->

    <xs:attribute name="name" type="xs:string" use="required"/>

 

    <!-- Allow additional attributes -->

    <xs:anyAttribute/>

  </xs:complexType>

 

  <!--

    Details of implicit data - data that is automatically gathered.

 

    Basic outline:

      <ImplicitData>

        <Concepts/>

        <Sources/>

      </ImplicitData>

  -->

  <xs:complexType name="ImplicitBlockType">

    <xs:sequence>

      <xs:element name="Concepts" type="apml:ImplicitConceptsBlockType" minOccurs="0" maxOccurs="1"/>

      <xs:element name="Sources" type="apml:ImplicitSourcesBlockType" minOccurs="0" maxOccurs="1"/>

    </xs:sequence>

 

    <!-- Allow additional attributes -->

    <xs:anyAttribute/>

  </xs:complexType>

 

  <!--

    Details of explicit data - data that the user provides.

 

    Basic outline:

      <ExplicitData>

        <Concepts/>

        <Sources/>

      </ExplicitData>

  -->

  <xs:complexType name="ExplicitBlockType">

    <xs:sequence>

      <xs:element name="Concepts" type="apml:ExplicitConceptsBlockType" minOccurs="0" maxOccurs="1"/>

      <xs:element name="Sources" type="apml:ExplicitSourcesBlockType" minOccurs="0" maxOccurs="1"/>

    </xs:sequence>

 

    <!-- Allow additional attributes -->

    <xs:anyAttribute/>

  </xs:complexType>

 

  <!--

    Details of explit concepts and their scores

 

    Basic Outline:

      <Concepts>

        <Concept key="" value=""/>

      </Concepts>

  -->

  <xs:complexType name="ExplicitConceptsBlockType">

    <xs:sequence>

      <xs:element name="Concept" type="apml:ExplicitNodeType" minOccurs="0" maxOccurs="unbounded"/>

    </xs:sequence>

 

    <!-- Allow additional attributes -->

    <xs:anyAttribute/>

  </xs:complexType>

 

  <!--

    Details of explicit sources and their scores

 

    Basic Outline:

      <Sources>

        <Source key="" value=""/>

      </Sources>

  -->

  <xs:complexType name="ExplicitSourcesBlockType">

    <xs:sequence>

      <xs:element name="Source" type="apml:ExplicitSourceType" minOccurs="0" maxOccurs="unbounded"/>

    </xs:sequence>

 

    <!-- Allow additional attributes -->

    <xs:anyAttribute/>

  </xs:complexType>

 

  <!--

    Detail of explicit source and its authors.

 

    Basic Outline:

      <Source key="" name="" value="" type="">

      <Author key="" value=""/>

  -->

  <xs:complexType name="ExplicitSourceType">

    <xs:complexContent>

      <xs:extension base="apml:ExplicitNodeType">

        <xs:sequence>

          <xs:element name="Author" type="apml:ExplicitNodeType" minOccurs="0" maxOccurs="unbounded"/>

        </xs:sequence>

 

 

        <!-- The (not necessarily unique) friendly name of the source -->

        <xs:attribute name="name" type="xs:string" use="required" />

 

        <!-- The type of the source. This is specified as a mime-type -->

        <xs:attribute name="type" type="apml:MimeType" use="required" />

 

        <!-- Allow additional attributes -->

        <xs:anyAttribute/>

      </xs:extension>

    </xs:complexContent>

  </xs:complexType>

 

  <!--

    Details of implicit concepts and their scores

 

    Basic Outline:

      <Concepts>

        <Concept key="" value="" from="" updated=""/>

      </Concepts>

  -->

  <xs:complexType name="ImplicitConceptsBlockType">

    <xs:sequence>

      <xs:element name="Concept" type="apml:ImplicitNodeType" minOccurs="0" maxOccurs="unbounded"/>

    </xs:sequence>

 

    <!-- Allow additional attributes -->

    <xs:anyAttribute/>

  </xs:complexType>

 

  <!--

    Details of implicit sources and their scores

 

      <Sources>

        <Source key="" value="" from="" updated=""/>

      </Sources>

  -->

  <xs:complexType name="ImplicitSourcesBlockType">

    <xs:sequence>

      <xs:element name="Source" type="apml:ImplicitSourceType" minOccurs="0" maxOccurs="unbounded"/>

    </xs:sequence>

 

    <!-- Allow additional attributes -->

    <xs:anyAttribute/>

  </xs:complexType>

 

  <!--

    Detail of implicit source and its authors

      <Source key="" name="" value="" type="">

        <Author key="" value="" from="" updated=""/>

      </Source>

  -->

  <xs:complexType name="ImplicitSourceType">

    <xs:complexContent>

      <xs:extension base="apml:ImplicitNodeType">

        <xs:sequence>

          <xs:element name="Author" type="apml:ImplicitNodeType" minOccurs="0" maxOccurs="unbounded"/>

        </xs:sequence>

 

        <!-- The (not necessarily unique) friendly name of the source -->

        <xs:attribute name="name" type="xs:string" use="required" />

 

        <!-- The type of the source. This is specified as a mime-type -->

        <xs:attribute name="type" type="apml:MimeType" use="required" />

 

        <!-- Allow additional attributes -->

        <xs:anyAttribute/>

      </xs:extension>

    </xs:complexContent>

  </xs:complexType>

 

  <!--

    List of application specific data

 

    Basic Outline:

      <Applications>

        <Application name=""/>

      </Applications>

  -->

  <xs:complexType name="ApplicationsBlockType">

    <xs:sequence>

      <!-- List of application elements -->

      <xs:element name="Application" type="apml:ApplicationType" minOccurs="0" maxOccurs="unbounded"/>

    </xs:sequence>

 

    <!-- Allow additional attributes -->

    <xs:anyAttribute/>

  </xs:complexType>

 

  <!--

    Storage element for application data

 

      <Application name="">

          Application Data goes here

      </Application>

  -->

  <xs:complexType name="ApplicationType">

    <xs:sequence>

      <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="skip" />

    </xs:sequence>

 

    <!-- The unique name of the application -->

    <xs:attribute name="name" type="xs:string" use="required"/>

 

    <!-- Allow additional attributes -->

    <xs:anyAttribute/>

  </xs:complexType>

 

 

  <!--                   -->

  <!--    Base Types     -->

  <!--                   -->

 

  <!--

    Defines an Explicit Node - a node containing data explicitly specified by a user.

   -->

  <xs:complexType name="ExplicitNodeType">

    <!-- Provides the text or value of the node, such as a name or a term -->

    <xs:attribute name="key" type="xs:string" use="required"/>

 

    <!-- Provides the rank (or score) of the node -->

    <xs:attribute name="value" type="apml:NodeValueType" use="required"/>

 

    <!-- Allow additional attributes -->

    <xs:anyAttribute/>

  </xs:complexType>

 

  <!--

    Defines an Implicit Node - a node containing data automatically/programmatically discovered

    by an application

  -->

  <xs:complexType name="ImplicitNodeType">

    <xs:complexContent>

      <xs:extension base="apml:ExplicitNodeType">

        <!--

          Contains a unique application identifier that allows each application to determine

          the nodes that they have contributed. This, however, should not be used as a filter

          when reading the data.

        -->

        <xs:attribute name="from" type="xs:string" use="required"/>

 

        <!--

          A date indicating the last time this value was updated. Nodes older than 30 days

          should be considered deprecated by other applications, and thus ignored.

          This ensures that if an application that was contributing to an APML profile no longer

          continues being used, it data will not result in the profile being stale.

        -->

        <xs:attribute name="updated" type="apml:ISO8601DateType" use="required"/>

 

        <!-- Allow additional attributes -->

        <xs:anyAttribute/>

      </xs:extension>

    </xs:complexContent>

  </xs:complexType>

 

 

  <!--                          -->

  <!--    Simple Data Types     -->

  <!--                          -->

 

  <!--

    The ISO8601-style date type. Accepted examples include:

      2007-03-09T22:35:56Z

    NOTE: Only a subset of ISO8601 formats are accepted.  In

          particular, the time zone must be "Z"

  -->

  <xs:simpleType name="ISO8601DateType">

    <xs:restriction base="xs:dateTime">

      <!-- Restricts the dateTime format to only accept GMT times -->

      <xs:pattern value="[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z"/>

    </xs:restriction>

  </xs:simpleType>

 

  <!--

    Defines an email address. This accepts any address in the format that contains one or more

    non-@ characters, then an @, then two or more dot-seperated blocks not containing @ symbols.

  -->

  <xs:simpleType name="EmailType">

    <xs:restriction base="xs:string">

      <xs:pattern value="[^@]+[@][^@]+(\.[^.]+)+" />

    </xs:restriction>

  </xs:simpleType>

 

  <!--

    The Node Rank Type. Defines the ways in which a rank can be specified.

    Accepted examples include:

      -0.5, 0, 0.5 (Bounded between -1 and 1)

  -->

  <xs:simpleType name="NodeValueType">

    <xs:restriction base="xs:decimal">

      <xs:minInclusive value="-1"/>

      <xs:maxInclusive value="1"/>

    </xs:restriction>

  </xs:simpleType>

 

  <!--

    Defines a mime-type. This accepts a string containing two parts divided by a '/'.

  -->

  <xs:simpleType name="MimeType">

    <xs:restriction base="xs:string">

      <xs:pattern value="[^/]+/[^/]+" />

    </xs:restriction>

  </xs:simpleType>

</xs:schema>

 

 

References

 

Implementations

 

Refer to the 'Services' page for a list of Apps that support APML already.

 

Further Discussion

Please contribute questions, comments and suggestions for the specification. Ideas that are ratified by informal consensus will be included in the spec.

 

  • Never heard of APML? Start on the APML.ORG site and check out the APML FAQ.
  • Join the conversation about APML on the Google Group.
  • Download the open source libraries for APML from Google Code.
  • Get a list of services that support APML. 
  • For updates, subscribe to the RSS feed
  • Please feel free to improve the content - password is 'profileme'

     

    For membership to the APML Workgroup please contact us.

     

     

     

     

    Automotive forum

     

     

Comments (0)

You don't have permission to comment on this page.