The following probably isn't even syntaxtically worthy. I fiddled around for a few yours converting the 02 draft RFC into this. I took all kinds of amusing short cuts. But I found it an interesting exercise and others may find it marginally interesting. Feel free to evolve, mutate, whatever! - BenHyde

#### A very rough rdf-schema of RDF vocabulary for atom

### This is based, sometimes quite recreationally upon these vocabularies.

@prefix :    <>.
@prefix dc:   <http:://>.
@prefix foaf: <http:://>.
@prefix owl:  <>.
@prefix rdf:  <>.
@prefix vs:   <>.
@prefix wot:  <>.
@prefix wn:   <>.
@prefix hmm:  <>.

#### We define the vocabulary as an ontology in OWL.

atom: a owl:Ontology ;
  dc:date "2004/10/11 19:37:00" ;
  dc:description "The Atom Syndication RDF vocabulary" ;
  dc:title "The Atom Syndication RDF vocabulary" ;
  hmm:comment "I wonder how I declare the mime type of the enclosing doc?";
  wot:assurance hmm:assurance ;
  wot:src_assurance hmm:assurance2 ;
  :seeAlso <>;
  :seeAlso <>.

#### Clases for Mixing In

atom:literal a :class ;
  :comment "A mixin used on all atom literals."
  :isDefinedBy atom:;
  vs:term_status "testing".

atom:element a :class ;
  :comment "A mixin used on all atom classes."
  :isDefinedBy atom:;
  vs:term_status "testing" .  

atom:document a :Class;
   :comment "A mixin used on the two atom classes that can be documents.";
   :subClassOf wn:Document, atom:element.

atom:top-level-element a :class;
   :comment "atom:head and atom:entity have some attribute inheritence action going on.";
   :subClassOf atom:element;

atom:title a rdf:property;
  :domain atom:top-level-element; 
  :range atom:title;
  :disjoint atom:simple-title;
  hmm:min 1;
  hmm:max 1.

atom:mode a ref:property;
  :comment "Indicates method used to encode the content, default xml."
  :domain atom:content;
  :range atom:mode-literal; 
  hmm:default "xml";
  hmm:max 1;

atom:link a rdf:property;
  :comment "Conveys a URI associated with the feed."
  hmm:constrant "The set of alternate links but not have overlapping type."
  hmm:constrant "Links on atom:header that resolve to resources of type 'text/html' must have an autodiscover back link to the enclosing atom:feed"
  hmm:min 1;
  :domain atom:top-level-element;
  :range atom:alternate-link.

atom:author a rdf:property;
  :comment "The agent that authored this."
  hmm:constrant "either appears, or all entities have one"
  hmm:inheritance "sets default for elements, which they may override."
  :domain atom:top-level-element;
  :range atom:person;
  hmm:max 1.

atom:contributor a rdf:property;
  :comment "Contributors to the feed."
  :domain atom:top-level-element;
  :range atom:person.

atom:id a rdf:property;
 :comment "A permanent, universally unique identifier for the feed."
 :domain atom:top-level-element;
 :range atom:identity;
 :seeAlso <>;
 hmm:max 1;

atom:copyright a rdf:property;
  :comment "Human-readable copyright statement for feed.  Not machine-readable."
  :domain atom:top-level-element;
  :range atom:content;
  hmm:inheritance "sets default for elements, which they may override."
  hmm:max 1;

xml:lang a rdf:property;
  :comment "All classes may have an xml:lang to override the default language.";
  hmm:comment "How do I spec defaulting/inheritance?";
  :isDefinedBy atom: ;
  :label "lang" ;
  :domain atom:element.

#### Now the literal classes.

atom:version a :class; 
 :comment "the version of the feed";
 :subClassOf atom:literal;
 hmm:constant "draft-ietf-atompub-format-02: do not deploy";

atom:mode-literal a :class;
  :comment "Kinds of content encoding.";
  hmm:comment "how do I declare an enumeration?";
  hmm:comment "'xml' 'escaped', and 'base64'";
  :subClassOf atom:literal.

atom:name a class;
  :comment "Human-readable non-unique name.";
  :subClassOf foaf:name.

atom:uri a class;
  :comment "An RFC2396 URI that has been xml:base processed."
  :seeAlso "...W3C.REC-xmlbase-20010627";
  :seeAlso "http://.../RFC2396";
  :subClassOf hmm:uri, foaf:homepage, atom:literal;

atom:identity a :class;
  :comment "An very constrained subclass of atom:uri."
  :comment "The Atom RFC has extensive details on this."
  :subClassOf atom:uri;

atom:email a class;
  :comment "A RFC2822 email adress";
  :subClassof foaf:mbox, atom:literal;

atom:simple-title a :class;
 :comment "A human-readable title."
 :subClassOf dc:title, 

atom:relation a class;
   :comment "Value drawn from those given in Atom protocol.";
   hmm:comment "What's that mean?";
   :subClassof atom:literal, hmm:do_better.

atom:media-type a class;
   :comment "An RFC2045 media type.".
   :subClass of atom:literal, hmm:do_better.

atom:date a class;
  :comment "A RFC3339 date";
  :subClassof atom:text-literal.

atom:language a :class;
  :comment "An RFC3066 language tag";
  :subClassof atom:literal;

### Now the classes that actually get instantiated.

atom:feed a :class; 
  :comment "A set of entries generated from a single source."
  :subClassOf atom:document, atom:top-level-element; 
  vs:term_status "unstable";
  :label "feed".

atom:head a rdf:property; 
  :comment "Clump feed's the metadata into a header."
  :domain atom:feed; 
  :range atom:head;
  hmm:min 1;
  hmm:max 1.

atom:entries a rdf:property; 
  :domain atom:feed; 
  :range atom:entry .

atom:version a rdf:property; 
  :comment "TBD";
  :domain atom:feed;
  :range hmm:tbd;
  hmm:min 1;
  hmm:max 1;

atom:head a :class; :subClassOf atom:top-level-element
  :comment "Analagous to an email or HTML header."
  hmm:maybe-extended "yes".

atom:tagline a rdf:property
  :comment "Human-readable description or tagline for the feed";
  :domain atom:head;
  :range atom:content
  hmm:max 1 .

atom:generator a rdf:property;
  :comment "For debuggin and other purposes the agent that generated the feed.";
  :domain atom:head;
  :range atom:generator;
  hmm:inheritance "who knows?"
  :max 1;

atom:info a rdf:property;
  :comment "A human-readable explanation of the feed format itself."
  :comment "Intended audience is publishers, not processors."
  hmm:comment "feed format?"
  :domain atom:head;
  :range atom:content;
  hmm:max 1.

atom:modified a rdf:property;
  :comment "A date indicating the time the state of the feed was last modified, including changes to entries therein.";
  hmm:constrant "date's timezone SHOULD appear, and MUST be UTC";
  :domain atom:head;
  :range atom:date;
  hmm:min 1; hmm:max 1.

atom:entry a :class;
  :comment "A single entry generated from the feed source."
  :subClassOf atom:document;
  vs:term_status "unstable";
  hmm:maybe-extended "yes";
  :label "entity".

atom:version a rdf:property; 
  :comment "A version is MUST appear on an atom:entry when it is an atom:document.";
  :domain atom:entry.

atom:updated a rdf:property;
  :comment "Indicates the most recent instant when a change was made that the publisher wishes to bring to the attention of subscribers."
  hmm:comment "Since the instant maybe in the future it shouldn't say 'most recent'."
  :comment "Publishers MAY change the value over time.";
  :comment "Processors MAY sorts entries based on this value.";
  :comment "Processors MAY embargo entries prior to this instant.";
  :domain atom:entry;
  :range atom:date;
  hmm:min 1; hmm:max 1.

atom:summary a rdf:property;
  :comment "Contains a short summary, abstract, or excerpt of the entry."
  :domain atom:entry;
  :range atom:content;
  hmm:max 1;
  hmm:comment "Multiple summaries, say for different audiences, are not allowed.".

atom:content a rdf:property;
  :comment "Conveys the content of the entry."
  :domain atom:entry;
  :range atom:content;
  hmm:min 1;
  hmm:constraint "content of type multipart/alternative may appear only at top level.";
  hmm:constraint "content of type multipart/alternative must have contain at least on alternative";
  hmm:consumer-constraint "You SHOULD, present the best alternative.";
  hmm:consumer-constraint "You SHOULD,Present only one alternative.".

atom:content a rdf:property;
  :comment "The where the entry was first published."
  :comment "This maybe but is not required to resolve to an atom:feed."
  :domain atom:entry;
  :range atom:uri, atom:identifier;
  hmm:max 1.

atom:person a :class ;
  :comment "Describes a person, corporation, or similar entity."
  hmm:comment "person? - agent!";
  hmm:maybe-extended "true";
  :subClassOf foaf:agent .

atom:name a rdf:property; :domain atom:person; :range atom:name.
atom:name a rdf:property; :domain atom:person; :range atom:uri.
atom:name a rdf:property; :domain atom:person; :range atom:email.

atom:generator a :class;
  :comment "Description of the generating agent."

atom:content a ref:property 
  :comment "Human-readable name for generating agent."
  :domain atom:generator 
  :range atom:text-literal;

atom:uri a :rdf:property;
  :comment "The associated resource must be relevant to this agent."
  :domain atom:generator;
  :range atom:uri
  :max 1;

atom:version a rdf:property; 
  :domain atom:generator;
  :range atom:simple-text;

atom:link a class;
  :comment "Analagous to the link found in HTML heads.";
  hm:comment "How do I say \"Must not have child content\"";
  hm:comment "Surely this must be defined in some other vocabulary.";
  :subClassof atom:element.

atom:rel a rdf:property; :domain atom:link;
 :comment "How the linked resource relates to the enclosing element."
 :range atom:relation;
 hmm:min 1; 
 hmm:max 1;

atom:type a rdf:property; :domain atom:link;
  :comment "A hint as to the media type of the link."
  :range atom:media-type;
  hmm:min 1; 
  hmm:max 1;

atom:href a rdf:property; :domain atom:link; 
  :comment "The URI of the link."
  :range atom:uri;
  hmm:min 1; 
  hmm:max 1.

atom:hreflang a rdf:property; :domain atom:link; 
  :comment "Hint reguarding language of linked resource."
  :comment "The link denotes a translated version of the linked resource into this langauge when the link's rel is 'alternate'."
  :range atom:language;
  hmm:max 1;

atom:title a rdf:property; :domain atom:link; 
  :range atom:simple-title; 
  hmm:max 1;

atom:title a :class
  :disjoint atom:simple-title;
  :subClassOf atom:content;

atom:content a :class ; 
  :comment "Atom Content is analagous to the multipart structure of mimi encoded email.";