UserPreferences

AtomOWL


Note: an overview of my thinking on this subject is [WWW]available.

Abstract

Below is a full N3 OWL description of the closest possible Ontology consistent with the the latest [WWW]draft-ietf-atompub-format-04 spec.

Status

Work in progress. This is a continual synchronisation and feedback between developing the spec and developing the corresponding ontology.

Rationale

To fulfil the requirements that Atom also provide a model, not just a syntax of the feed format.

By describing the Atom format in machine readable terms, it is much easier to

Atom-OWL in N3

This is the OWL file describing the spec. Please use the [WWW]Atom-OWL mailing list to discuss problems and suggestions for improvements on this ontology.

Explanation

Many Models of Atom are in fact possible. This one attempts to model Atom in such a way as to be the ontology that backs the AtomRDF goal.

Another way to think of this is that xml is a tree of resources (uri/iris) and text. This is a model of the resources that appear in the atom document. Ie. it is *the* model of the atom document.

Problems

The N3

notes:

# Base: http://purl.org/atom/#
@prefix default:  <http://purl.org/atom/#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl:     <http://www.w3.org/2002/07/owl#> .

default:copyright
      a       owl:DatatypeProperty ;
      rdfs:comment """see section 4.2.11 for Head
and section 5.13 for Entry"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain
              [ a       owl:Class ;
                owl:unionOf (default:Head default:Entry)
              ] ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#string> .

default:author
      a       owl:ObjectProperty , owl:FunctionalProperty ;
      rdfs:comment """see section  4.2.6 for Head
and section 5.5 for Entry"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain
              [ a       owl:Class ;
                owl:unionOf (default:Head default:Entry)
              ] ;
      rdfs:range default:Person .

default:feed
      a       owl:Class ;
      rdfs:comment """see section 4. of Atom Spec
{note: it would be more in sync with convention of class names for feed to be capitalised to \"Feed\"}"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:subClassOf owl:Thing ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:cardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ;
                owl:onProperty default:head
              ] ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:cardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ;
                owl:onProperty default:version
              ] .

default:label
      a       owl:DatatypeProperty ;
      rdfs:comment """see section 3.7.3
{  The \"label\" attribute provides a human-readable label that may be
   displayed in end-user applications.  Category constructs MAY have a
   \"label\" attribute. }
{note: should this be a string or a TEXT thing?}"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Category ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#string> .

default:agent
      a       owl:DatatypeProperty ;
      rdfs:comment """see section 4.2.10

{ this represents the software agent string
I can't find a way to get this to work out quite right. The content of this element is meant to be the content of the agent }
"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Generator ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#string> .

default:scheme
      a       owl:ObjectProperty ;
      rdfs:comment """see section3.7.2  

 {  The is a URI that identifies a categorization scheme.  Category constructs MAY have a \"scheme\" attribute. }
"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Category .

default:contributor
      a       owl:ObjectProperty ;
      rdfs:comment """see section 4.2.7 for Head
ans section 5.6 for Element"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain
              [ a       owl:Class ;
                owl:unionOf (default:Head default:Entry)
              ] ;
      rdfs:range default:Person .

default:Category
      a       owl:Class ;
      rdfs:comment "see section 3.7"^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:subClassOf owl:Thing ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:maxCardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ;
                owl:onProperty default:label
              ] ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:minCardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ;
                owl:onProperty default:term
              ] .

default:origin
      a       owl:DatatypeProperty ;
      rdfs:comment "see section 5.12"^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Entry ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#anyURI> .

default:term
      a       owl:DatatypeProperty ;
      rdfs:comment """see section 3.7.1:
{The \"term\" attribute will be a string which identifies the category
   within the categorization scheme to which the entry or feed belongs.  Category constructs MUST have a \"term\" attribute.}
"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Category ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#string> .

default:post
      a       owl:ObjectProperty , owl:FunctionalProperty ;
      rdfs:comment "see section 4.2.5"^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Head ;
      rdfs:range default:Service .

default:link
      a       owl:ObjectProperty ;
      rdfs:comment """see section 4.2.2

{ The \"atom:link\" element is a Link construct that conveys a URI
   associated with the feed.  The nature of the relationship is
   determined by the construct's rel attribute.

   atom:head elements MUST contain at least one atom:link element with a
   rel attribute value of \"alternate\".

   atom:head elements MUST NOT contain more than one atom:link element
   with a rel attribute value of \"alternate\" that has the same type
   attribute value.

If a feed's atom:link element with type=\"alternate\" resolves to an
   HTML document, then that document SHOULD have a autodiscovery link
   element [Atom-autodiscovery] that reflects back to the feed.

   atom:head elements MAY contain additional atom:link elements beyond
   those described above.
}"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain
              [ a       owl:Class ;
                owl:unionOf (default:Head default:Entry)
              ] ;
      rdfs:range default:Link .

default:uri
      a       owl:DatatypeProperty , owl:FunctionalProperty ;
      rdfs:comment """see section 3.2.2 for Person
and section 4.2.9 for Generator

{ note that it may be much more interesting to associate an inverse funtional uri with a person. This means that the person is identified exactly by that uri. One can then use the URI to find other information on the web corresponding to that uri. But then perhaps it would be better if uri were defined a little more presicely}"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain
              [ a       owl:Class ;
                owl:unionOf (default:Person default:Generator)
              ] ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#anyURI> .

default:head
      a       owl:ObjectProperty , owl:FunctionalProperty ;
      rdfs:comment """see section 4 for Feed
and 5.14 for Entry Construct"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain
              [ a       owl:Class ;
                owl:unionOf (default:feed default:Entry)
              ] ;
      rdfs:range default:Head .

default:host
      a       owl:DatatypeProperty ;
      rdfs:comment """see section 5.7
{The \"atom:host\" element's content conveys a domain name or network
   address associated with the entry's origin.  atom:entry elements MAY
   contain a single atom:host element.  Its content MUST be a domain
   name [RFC1035], a dotted-decimal IPv4 address [RFC0791], or a
   colon-delimited IPv6 address [RFC2460].
}"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Entry ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#string> .

default:Content
      a       owl:Class ;
      rdfs:comment """see section 5.10
"""^^<http://www.w3.org/2001/XMLSchema#string> .

default:src
      a       owl:DatatypeProperty ;
      rdfs:comment """see section 5.12.2

{should this be inverse functional? don't know yet }"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Content ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#anyURI> .

default:href
      a       owl:FunctionalProperty , owl:DatatypeProperty ;
      rdfs:comment """see section 3.5.3 for link href
{ The \"href\" attribute contains the link's URI.  Link constructs MUST  have a href attribute, whose value MUST be a URI reference [RFC2396bis].
   xml:base [W3C.REC-xmlbase-20010627] processing MUST be applied to the href attribute's content.
}
 {note: is there an rdf construct that deals with xml:base processing?}


and section 3.4.1 for Service href"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain
              [ a       owl:Class ;
                owl:unionOf (default:Link default:Service)
              ] ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#anyURI> .

default:Atom_ObjectProperty_33
      a       owl:ObjectProperty .

default:name
      a       owl:DatatypeProperty , owl:FunctionalProperty ;
      rdfs:comment """see section 3.2.1

{The \"atom:name\" element's content conveys a human-readable name for
   the person.  Person constructs MUST contain exactly one \"atom:name\"
   element.
}
{it is not clear why one should reduce the number of names a person has to one}"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Person ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#string> .

default:title2
      a       owl:FunctionalProperty , owl:DatatypeProperty ;
      rdfs:comment """see section 4.2.1
{The \"atom:title\" element is a Text construct that conveys a
   human-readable title for the feed.  atom:head elements MUST contain
   exactly one atom:title element.
}

{ This should point to a new TEXT literal type, which I can't create easily in Prot?©g?©, but which might be possible in RDF }

{ There is a clash with title from the link construct which can only be of type string }"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain
              [ a       owl:Class ;
                owl:unionOf (default:Head default:Entry)
              ] ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#string> .

default:hreflang
      a       owl:DatatypeProperty , owl:FunctionalProperty ;
      rdfs:comment """see section 3.5.4

{The \"hreflang\" attribute's content describes the language of the resource pointed to by the href attribute.  When used together with the rel=\"alternate\", it implies a translated version of the entry.
   Link constructs MAY have an hreflang attribute, whose value MUST be a  language tag [RFC3066].
}
"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Link ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#language> .

default:length
      a       owl:FunctionalProperty , owl:DatatypeProperty ;
      rdfs:comment """see section 3.5.5:

{The \"length\" attribute indicates an advisory length of the linked
   content in octets; it MAY be used as a hint to determine the content
   length of the representation returned when the URI in the href
   attribute is dereferenced.  Note that the length attribute does not
   override the actual content length of the representation as reported
   by the underlying protocol.

   Link constructs MAY have a length attribute.}"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Link ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#int> .

default:id
      a       owl:ObjectProperty , owl:FunctionalProperty ;
      rdfs:comment """see section 4.2.9 for Head
and section 5.8 for Entry"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain
              [ a       owl:Class ;
                owl:unionOf (default:Head default:Entry)
              ] .

default:info
      a       owl:DatatypeProperty ;
      rdfs:comment """see section 4.2.12

{ the range of this property should be a TEXT thing which sounds like a union of 3 different types of literals }"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Head ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#string> .

default:title
      a       owl:DatatypeProperty , owl:FunctionalProperty ;
      rdfs:comment """see section 3.5.5
{ The \"title\" attribute conveys human-readable information about the
   link.  Link constructs MAY have a title attribute.}"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Link ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#string> .

default:email
      a       owl:DatatypeProperty , owl:FunctionalProperty ;
      rdfs:comment """see section 3.2.3

{this definitively would be better associated with a mailto:.. uri and be inverse functional. IE one should conclude that if two atom person constructs are related to the same mailto uri, thery are the same person} 
{ it also seems a pitty to restrict the number of emails a person can have to one}"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Person ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#string> .

default:content
      a       owl:ObjectProperty , owl:FunctionalProperty ;
      rdfs:comment "see section 5.12"^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Entry ;
      rdfs:range default:Content .

default:introspection
      a       owl:ObjectProperty , owl:FunctionalProperty ;
      rdfs:comment """see section 4.2.4
"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Head ;
      rdfs:range default:Service .

default:Entry
      a       owl:Class ;
      rdfs:comment "see section 5 of the Atom spec"^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:subClassOf owl:Thing ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:maxCardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ;
                owl:onProperty default:published
              ] ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:cardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ;
                owl:onProperty default:author
              ] ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:maxCardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ;
                owl:onProperty default:content
              ] ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:cardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ;
                owl:onProperty default:updated
              ] ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:maxCardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ;
                owl:onProperty default:summary
              ] .

default:Service
      a       owl:Class ;
      rdfs:comment """See section 3.4
"""^^<http://www.w3.org/2001/XMLSchema#string> .

default:Person
      a       owl:Class ;
      rdfs:comment """see section 3.2

{ A Person construct is an element that describes a person,
   corporation, or similar entity.

   Person constructs MAY be extended by namespace-qualified element   children.

   This specification assigns no significance to the order of appearance of the child elements of a Person construct. }
"""^^<http://www.w3.org/2001/XMLSchema#string> .

default:Link
      a       owl:Class ;
      rdfs:comment """see section 3.5.1
{A Link construct is an empty element that describes a connection from
   an Atom Document to another Web resource.}"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:subClassOf owl:Thing ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:cardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ;
                owl:onProperty default:href
              ] ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:cardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ;
                owl:onProperty default:rel
              ] .

default:published
      a       owl:DatatypeProperty , owl:FunctionalProperty ;
      rdfs:comment "see section 5.8"^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Entry ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#dateTime> .

default:updated
      a       owl:FunctionalProperty , owl:DatatypeProperty ;
      rdfs:comment """see section 4.2.13 for Head
and section 5.7 for Entry"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain
              [ a       owl:Class ;
                owl:unionOf (default:Head default:Entry)
              ] ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#dateTime> .

default:generator
      a       owl:ObjectProperty , owl:FunctionalProperty ;
      rdfs:comment "see section 4.2.10"^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Head ;
      rdfs:range default:Generator .

default:edit
      a       owl:ObjectProperty , owl:FunctionalProperty ;
      rdfs:comment "see section 5.4"^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Entry ;
      rdfs:range default:Service .

default:rel
      a       owl:FunctionalProperty , owl:DatatypeProperty ;
      rdfs:comment """see 3.5.1
{  Link constructs MAY have an optional \"rel\" attribute that indicates
   the link relation type.  If the \"rel\" attribute is not present, the
   link construct MUST be interpreted as if the link relation type is
   \"alternate\".

   rel_attribute = segment-nz-nc / URI

   The value of \"rel\" MUST be either a name, which is non-empty and does
   not contain any colon (\":\") characters, or a URI [RFC2396bis].  Note
   that use of a relative reference to the \"rel\" value URI is not
   allowed.  If a name is given, implementations MUST consider the link
   relation type to be equivalent to the same name registered within the
   IANA Registry of Link Relations Section 10, and thus the URI that
   would be obtained by appending the value of the rel attribute to the
   string \"http://www.iana.org/assignments/relation/\".  The value of
   \"rel\" describes the meaning of the link, but does not impose any
   behavioral requirements on implementations.

   This document defines two initial values for the Registry of Link
   Relations:

   The value \"alternate\" signifies that the URI in the value of the href
   attribute identifies an alternate version of the resource described
   by the containing element.

   The value \"related\" signifies that the URI in the value of the href
   attribute identifies a resource to which the resource described by
   the containing atom:feed or atom:entry element is related.  For
   example, the feed for a site which discusses the performance of the
   search engine at \"http://search.example.com\" might contain, as a
   child of atom:head:
   <link rel=\"related\" href=\"http://search.example.com/
An identical link might appear as a child of any atom:entry whose  content contains a discussion of that same search engine.
}
"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Link ;
      rdfs:range
              [ a       owl:DataRange ;
                owl:oneOf ("alternate"^^<http://www.w3.org/2001/XMLSchema#string> "related"^^<http://www.w3.org/2001/XMLSchema#string>)
              ] .

default:category
      a       owl:ObjectProperty ;
      rdfs:comment """see section 4.2.3 for Head construct
and section 5.3 for Entry construct"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain
              [ a       owl:Class ;
                owl:unionOf (default:Head default:Entry)
              ] ;
      rdfs:range default:Category .

default:version
      a       owl:FunctionalProperty , owl:DatatypeProperty ;
      rdfs:comment """see section 4.1for feed
and section 4.2.9 for Generator"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain
              [ a       owl:Class ;
                owl:unionOf (default:feed default:Generator)
              ] ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#string> .

default:tagline
      a       owl:DatatypeProperty , owl:FunctionalProperty ;
      rdfs:comment "see section 4.2.8"^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Head ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#string> .

<http://purl.org/atom/>
      a       owl:Ontology .

default:type
      a       owl:DatatypeProperty , owl:FunctionalProperty ;
      rdfs:comment """see 3.5.2 for Link
 {Link constructs MAY have a type attribute, whose value MUST conform
   to the syntax of a MIME media type [RFC2045].

   The type attribute's value is an advisory media type; it MAY be used
   as a hint to determine the type of the representation which is
   expected to be returned when the value of the href attribute is
   dereferenced.  Note that the type attribute does not override the
   actual media type returned with the representation.}



and 5.12.1 for Content.

{I am not absolutely sure these are the same properties, though they are very similar }
"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain
              [ a       owl:Class ;
                owl:unionOf (default:Link default:Content)
              ] ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#string> .

default:Head
      a       owl:Class ;
      rdfs:comment """see section 4.2

{ The atom:head element acts as a container for metadata about the feed
   itself.

   The atom:head element MAY contain any namespace-qualified
   [W3C.REC-xml-names-19990114] elements as children.  This
   specification assigns no significance to the order of appearance of
   the child elements of atom:head. }"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:subClassOf owl:Thing ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:maxCardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ;
                owl:onProperty default:tagline
              ] ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:minCardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ;
                owl:onProperty default:link
              ] ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:cardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ;
                owl:onProperty default:id
              ] ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:maxCardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ;
                owl:onProperty default:post
              ] ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:cardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ;
                owl:onProperty default:title2
              ] ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:maxCardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ;
                owl:onProperty default:introspection
              ] .

default:Generator
      a       owl:Class ;
      rdfs:comment """see section 4.2.10

{ The \"atom:generator\" element's content identifies the software agent
   used to generate the feed, for debugging and other purposes.
   atom:head elements MAY contain an atom:generator element, but MUST
   NOT contain more than one.

   The content of this element, when present, MUST be a string that is a
   human-readable name for the generating agent.

   The atom:generator element MAY have a \"uri\" attribute whose value
   MUST be a URI reference [RFC2396bis].  When dereferenced, that URI
   SHOULD produce a representation that is relevant to that agent.

   The atom:generator element MAY have a \"version\" attribute that
   indicates the version of the generating agent.  When present, its
   value is unstructured text.
}
{ note: This looks like a new type of literal. For some ideas see
http://www.w3.org/2001/sw/BestPractices/XSCH/xsch-sw-20041216/ }"""^^<http://www.w3.org/2001/XMLSchema#string> .

default:summary
      a       owl:DatatypeProperty ;
      rdfs:comment """see section 5.9 
{This is a TEXT construct, need to find the literal that goes with this }"""^^<http://www.w3.org/2001/XMLSchema#string> ;
      rdfs:domain default:Entry ;
      rdfs:range <http://www.w3.org/2001/XMLSchema#string> .