A small Clojure library that makes writing XML schemas more bearable.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src/bearable
test/bearable/test
.gitignore
README.md
project.clj

README.md

Bearable

A small Clojure library that makes writing XML schemas slightly more bearable.

Usage

Bearable adds several new tags to prxml. A good explanation of prxml can be found here.

The new tags available through Bearable are:

  • :ordered-list! -- requires an element to contain an ordered list of elements
  • :unordered-list! -- requires an element to contain an unordered list of elements
  • :choice! -- requires an element to contain one element from a list of elements
  • :restricted! -- requires an elements to meet certain restrictions

Example

Suppose we want to validate the following:

<own3dReply>
  <liveEvent>
    <isLive>false</isLive>
    <liveViewers>4825</liveViewers>
  </liveEvent>
</own3dReply>

We would write the following code:

(use 'bearable.schema)

(def xsd 
 [:xs:schema {:xmlns:xs "http://www.w3.org/2001/XMLSchema"}
   [:ordered-list! {:name "own3dreply"}
     [:ordered-list! {:name "liveEvent"}
       [:restricted! {:name "isLive" :base "xs:string"} [:xs:pattern {:value "true|false"}]]
       [:xs:element {:name "liveViewers" :type "xs:integer"}]]]])

(schema xsd "xs" 2)

It would produce the following schema:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="own3dReply">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="liveEvent">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="isLive">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="true|false"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
              <xs:element name="liveViewers" type="xs:integer"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Installation

To use Bearable in your project add the following dependency to your project.clj file:

[bearable "0.0.1"]

License

Copyright (C) 2011 Jesse Howarth

Distributed under the Eclipse Public License, the same as Clojure.