Clone wiki

BibSonomy / documentation / api / XML Schema

This page documents the XML schema which defines our data exchange format.

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <!--
      root element
  -->
  <xsd:element name="bibsonomy" type="bibsonomyXML"/>


  <!--
      root element type
  -->
  <xsd:complexType name="bibsonomyXML">
    <xsd:sequence>
      <xsd:choice>
    <!-- container -->
    <xsd:element name="users" type="UsersType"/>
    <xsd:element name="groups" type="GroupsType"/>
    <xsd:element name="tags" type="TagsType"/>
    <xsd:element name="posts" type="PostsType"/>
    <!-- single elements -->
    <xsd:element name="user" type="UserType"/>
    <xsd:element name="group" type="GroupType"/>
    <xsd:element name="post" type="PostType"/>
    <xsd:element name="tag" type="TagType"/>
    <xsd:element name="bookmark" type="BookmarkType"/>
    <xsd:element name="bibtex" type="BibtexType"/>
    <!-- error -->
    <xsd:element name="error" type="xsd:string"/>
    <!-- hashes to return when creating / updating resources -->
    <xsd:element name="resourcehash" type="hashType"/>
    <!-- user-/group-ids to return wehn creating / updating users / groups -->
    <xsd:element name="userid" type="xsd:string"/>
    <xsd:element name="groupid" type="xsd:string"/>
    <!-- uri to return (i.e. on uploading documents) -->
    <xsd:element name="uri" type="xsd:anyURI"/>
      </xsd:choice>
    </xsd:sequence>
    <!-- status flag: contains "ok" when request was successful, "fail" otherwise -->
    <xsd:attribute name="stat" type="statType"/>
  </xsd:complexType>

  <!--
      this type encapsulates a list of users
  -->
  <xsd:complexType name="UsersType">
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" minOccurs="0" name="user" type="UserType"/>
    </xsd:sequence>
    <xsd:attribute name="start" type="positiveIntegerIncludingZero" use="required"/>
    <xsd:attribute name="end" type="positiveIntegerIncludingZero" use="required"/>
    <xsd:attribute name="next" type="xsd:anyURI"/>
  </xsd:complexType>

  <!--
      a user
  -->
  <xsd:complexType name="UserType">
    <xsd:attribute name="name" type="xsd:string" use="required"/>
    <xsd:attribute name="realname" type="xsd:string"/>
    <xsd:attribute name="email" type="xsd:string"/>
    <xsd:attribute name="homepage" type="xsd:string"/>
    <!-- link to details page -->
    <xsd:attribute name="href" type="xsd:anyURI"/>
  </xsd:complexType>

  <!--
      this type encapsulates a list of groups
  -->
  <xsd:complexType name="GroupsType">
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" minOccurs="0" name="group" type="GroupType"/>
    </xsd:sequence>
    <xsd:attribute name="start" type="positiveIntegerIncludingZero" use="required"/>
    <xsd:attribute name="end" type="positiveIntegerIncludingZero" use="required"/>
    <xsd:attribute name="next" type="xsd:anyURI"/>
  </xsd:complexType>

  <!--
      a group
  -->
  <xsd:complexType name="GroupType">
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" minOccurs="0" name="user" type="UserType"/>
    </xsd:sequence>
    <xsd:attribute name="name" type="xsd:string" use="required"/>
    <xsd:attribute name="description" type="xsd:string"/>
    <!-- link to details page -->
    <xsd:attribute name="href" type="xsd:anyURI"/>
  </xsd:complexType>

  <!--
      this type encapsulated a list of tags
  -->
  <xsd:complexType name="TagsType">
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" minOccurs="0" name="tag" type="TagType"/>
    </xsd:sequence>
    <xsd:attribute name="start" type="positiveIntegerIncludingZero" use="required"/>
    <xsd:attribute name="end" type="positiveIntegerIncludingZero" use="required"/>
    <xsd:attribute name="next" type="xsd:anyURI"/>
  </xsd:complexType>

  <!--
      a tag
  -->
  <xsd:complexType name="TagType">
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" minOccurs="0" name="subTags" type="TagsType"/>
      <xsd:element maxOccurs="unbounded" minOccurs="0" name="superTags" type="TagsType"/>
    </xsd:sequence>
    <xsd:attribute name="name" type="xsd:string" use="required"/>
    <xsd:attribute name="globalcount" type="positiveIntegerIncludingZero"/>
    <xsd:attribute name="usercount" type="positiveIntegerIncludingZero"/>
    <!-- link to details page -->
    <xsd:attribute name="href" type="xsd:anyURI"/>
  </xsd:complexType>

  <!--
      this type encapsulated a list of posts
  -->
  <xsd:complexType name="PostsType">
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" minOccurs="0" name="post" type="PostType"/>
    </xsd:sequence>
    <xsd:attribute name="start" type="positiveIntegerIncludingZero" use="required"/>
    <xsd:attribute name="end" type="positiveIntegerIncludingZero" use="required"/>
    <xsd:attribute name="next" type="xsd:anyURI"/>
  </xsd:complexType>

  <!--
      a post
  -->
  <xsd:complexType name="PostType">
    <xsd:sequence>
      <xsd:element name="user" type="UserType"/>
      <xsd:element maxOccurs="unbounded" minOccurs="0" name="group" type="GroupType"/>
      <!-- Note: a post must have at least one tag -->
      <xsd:element maxOccurs="unbounded" name="tag" type="TagType"/>
      <xsd:choice>
    <xsd:element name="bookmark" maxOccurs="1" type="BookmarkType"/>
    <xsd:element name="bibtex" maxOccurs="1" type="BibtexType"/>
      </xsd:choice>
    </xsd:sequence>
    <xsd:attribute name="description" type="xsd:string"/>
    <xsd:attribute name="postingdate" type="xsd:dateTime"/>
  </xsd:complexType>

  <!--
      a bookmark
  -->
  <xsd:complexType name="BookmarkType">
    <xsd:attribute name="title" type="xsd:string" use="required"/>
    <xsd:attribute name="url" type="xsd:anyURI" use="required"/>

    <!-- hash value identifying this resource -->
    <xsd:attribute name="interhash" type="xsd:string"/>
    <xsd:attribute name="intrahash" type="xsd:string"/>
    <!-- link to all posts of this bookmark -->
    <xsd:attribute name="href" type="xsd:anyURI"/>
  </xsd:complexType>

  <!--
      a bibtex
  -->
  <xsd:complexType name="BibtexType">
    <xsd:attribute name="title" type="xsd:string" use="required"/>
    <xsd:attribute name="bibtexKey" type="xsd:string" use="required"/>
    <xsd:attribute name="bKey" type="xsd:string"/>
    <xsd:attribute name="misc" type="xsd:string"/>
    <xsd:attribute name="bibtexAbstract" type="xsd:string"/>
    <xsd:attribute name="entrytype" type="xsd:string" use="required"/>
    <xsd:attribute name="address" type="xsd:string"/>
    <xsd:attribute name="annote" type="xsd:string"/>
    <xsd:attribute name="author" type="xsd:string"/>
    <xsd:attribute name="booktitle" type="xsd:string"/>
    <xsd:attribute name="chapter" type="xsd:string"/>
    <xsd:attribute name="crossref" type="xsd:string"/>
    <xsd:attribute name="edition" type="xsd:string"/>
    <xsd:attribute name="editor" type="xsd:string"/>
    <xsd:attribute name="howpublished" type="xsd:string"/>
    <xsd:attribute name="institution" type="xsd:string"/>
    <xsd:attribute name="organization" type="xsd:string"/>
    <xsd:attribute name="journal" type="xsd:string"/>
    <xsd:attribute name="note" type="xsd:string"/>
    <xsd:attribute name="number" type="xsd:string"/>
    <xsd:attribute name="pages" type="xsd:string"/>
    <xsd:attribute name="publisher" type="xsd:string"/>
    <xsd:attribute name="school" type="xsd:string"/>
    <xsd:attribute name="series" type="xsd:string"/>
    <xsd:attribute name="volume" type="xsd:string"/>
    <xsd:attribute name="day" type="xsd:string"/>
    <xsd:attribute name="month" type="xsd:string"/>
    <xsd:attribute name="year" type="xsd:string" use="required"/>
    <xsd:attribute name="type" type="xsd:string"/>
    <!-- <xsd:attribute name="scraperId" type="xsd:positiveInteger"/>  -->
    <xsd:attribute name="url" type="xsd:string"/>
    <xsd:attribute name="privnote" type="xsd:string"/>

    <!-- hash value identifying this resource -->
    <xsd:attribute name="intrahash" type="xsd:string"/>
    <xsd:attribute name="interhash" type="xsd:string"/>
    <!-- link to all posts of this bibtex -->
    <xsd:attribute name="href" type="xsd:anyURI"/>
  </xsd:complexType>

  <!--
      helper type, as xsd:positiveInteger alone does not include zero
  -->
  <xsd:simpleType name="positiveIntegerIncludingZero">
    <xsd:restriction base="xsd:integer">
      <xsd:minInclusive value="0"/>
    </xsd:restriction>
  </xsd:simpleType>

  <!--
      type for resource hashes
  -->
  <xsd:simpleType name="hashType">
    <xsd:restriction base="xsd:string">
      <xsd:length value="32"/>
      <xsd:pattern value="([a-z]|[0-9])*"/>
    </xsd:restriction>
  </xsd:simpleType>

  <!--
      type for status message
  -->
  <xsd:simpleType name="statType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="ok"/>
      <xsd:enumeration value="fail"/>
    </xsd:restriction>
  </xsd:simpleType>

</xsd:schema>

Updated