Relax NG is way more readable than XSD. WAY more. The W3C may have been on the ball in the early 2000s, but lately they seem to be COMPLETELY off their rocker.
Relax NG is a perfect example of what XSD should have been. And since it's trivial to convert from one to the other, check out the Relax NG Compact syntax. It looks a little bit like a cross between regular expressions and CSS. It's extremely readable, extremely WRITEABLE, and can be converted automagically to the full Relax NG syntax. (I only know of the "Trang Converter" tool for conversion, but it does its job quite well. Check it out.)
Also, Relax NG can be converted to the more painful XSD format. It bothers me when the "official" standard for XML schemas is the more painful choice, but I'm glad we at least have an alternative.
Not sure what you mean by "will the schema fit". There's no fitting. You just reference it in whatever XML file uses it. But I can bet you that if the schema were written in XSD it would be WAAAAYYY longer. :)
This project seems to have been hibernating for some time. It would be nice to see some activity here again. I would join in a heartbeat, if there were an active user to add me!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xmlresume.sourceforge.net/resume/0.0"
xmlns:res="http://xmlresume.sourceforge.net/resume/0.0">
<xs:element name="resumes">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:resume" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="resume">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:docpath" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:header" minOccurs="0" maxOccurs="1"/>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:choice>
<xs:element ref="res:objective"/>
<xs:element ref="res:history"/>
<xs:element ref="res:academics"/>
<xs:element ref="res:skillareas"/>
<xs:element ref="res:skillarea"/>
<xs:element ref="res:pubs"/>
<xs:element ref="res:misc"/>
<xs:element ref="res:referees"/>
<xs:element ref="res:keywords"/>
<xs:element ref="res:memberships"/>
<xs:element ref="res:interests"/>
<xs:element ref="res:clearances"/>
<xs:element ref="res:awards"/>
</xs:choice>
</xs:sequence>
<xs:element ref="res:lastModified" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:copyright" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="docpath">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:head" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:node" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="res:tail"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="head">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:label"/>
<xs:element ref="res:uri"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="node">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:label"/>
<xs:element ref="res:uri"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="tail">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="label">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="uri">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="header">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:name"/>
<xs:element ref="res:address" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:birth" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:contact" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="name">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:title" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:firstname"/>
<xs:element ref="res:middlenames" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:surname"/>
<xs:element ref="res:suffix" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="firstname">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="middlenames">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="surname">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="suffix">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="birth">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:date"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="address">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="res:street"/>
<xs:element ref="res:street2"/>
<xs:element ref="res:suburb"/>
<xs:element ref="res:ward"/>
<xs:element ref="res:city"/>
<xs:element ref="res:state"/>
<xs:element ref="res:province"/>
<xs:element ref="res:county"/>
<xs:element ref="res:prefecture"/>
<xs:element ref="res:zip"/>
<xs:element ref="res:postalCode"/>
<xs:element ref="res:country"/>
<xs:element ref="res:break"/>
</xs:choice>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="location">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:city" minOccurs="0" maxOccurs="1"/>
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element ref="res:state"/>
<xs:element ref="res:province"/>
<xs:element ref="res:county"/>
</xs:choice>
<xs:element ref="res:country" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="street">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="street2">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="suburb">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="ward">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="city">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="state">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="province">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="county">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="prefecture">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="zip">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="postalCode">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="country">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="break">
<xs:complexType>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="contact">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="res:phone"/>
<xs:element ref="res:fax"/>
<xs:element ref="res:pager"/>
<xs:element ref="res:email"/>
<xs:element ref="res:url"/>
<xs:element ref="res:instantMessage"/>
</xs:choice>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="phone">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="fax">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="pager">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="email">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="url">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="instantMessage">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="link">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="objective">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:para" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="history">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:job" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="job">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:jobtitle"/>
<xs:element ref="res:employer"/>
<xs:element ref="res:location" minOccurs="0" maxOccurs="1"/>
<xs:choice>
<xs:element ref="res:date"/>
<xs:element ref="res:period"/>
</xs:choice>
<xs:element ref="res:description" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:projects" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:achievements" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="jobtitle">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="employer">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="res:emphasis"/>
<xs:element ref="res:citation"/>
<xs:element ref="res:url"/>
<xs:element ref="res:link"/>
</xs:choice>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="period">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:from"/>
<xs:element ref="res:to"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="from">
<xs:complexType>
<xs:choice>
<xs:element ref="res:date"/>
<xs:element ref="res:present"/>
</xs:choice>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="to">
<xs:complexType>
<xs:choice>
<xs:element ref="res:date"/>
<xs:element ref="res:present"/>
</xs:choice>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="description">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:para" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="projects">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:project" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="project">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="res:emphasis"/>
<xs:element ref="res:citation"/>
<xs:element ref="res:url"/>
<xs:element ref="res:link"/>
</xs:choice>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="achievements">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:achievement" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="achievement">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="res:emphasis"/>
<xs:element ref="res:citation"/>
<xs:element ref="res:url"/>
<xs:element ref="res:link"/>
</xs:choice>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="academics">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:degrees"/>
<xs:element ref="res:note" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="degrees">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:degree" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="degree">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:level"/>
<xs:element ref="res:annotation" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:major" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="res:minor" minOccurs="0" maxOccurs="unbounded"/>
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element ref="res:date"/>
<xs:element ref="res:period"/>
</xs:choice>
<xs:sequence minOccurs="0" maxOccurs="1">
<xs:element ref="res:institution"/>
<xs:element ref="res:location" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:element ref="res:gpa" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:subjects" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:projects" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="level">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="major">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="minor">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="institution">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="res:emphasis"/>
<xs:element ref="res:citation"/>
<xs:element ref="res:url"/>
<xs:element ref="res:link"/>
</xs:choice>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="gpa">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:score"/>
<xs:element ref="res:possible" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:note" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="score">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="possible">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="subjects">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:subject" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="subject">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:title"/>
<xs:element ref="res:result"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="result">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="annotation">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:para" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="skillareas">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:skillarea" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="skillarea">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:title"/>
<xs:element ref="res:skillset" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="skillset">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:title" minOccurs="0" maxOccurs="1"/>
<xs:choice>
<xs:element ref="res:skill"/>
<xs:element ref="res:+"/>
<xs:element ref="res:skills"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="skills">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:skill" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="skill">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="res:emphasis"/>
<xs:element ref="res:citation"/>
<xs:element ref="res:url"/>
<xs:element ref="res:link"/>
</xs:choice>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="pubs">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:pub" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="pub">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="res:para"/>
<xs:choice>
<xs:element ref="res:artTitle"/>
<xs:element ref="res:bookTitle"/>
<xs:element ref="res:author"/>
<xs:element ref="res:date"/>
<xs:element ref="res:pubDate"/>
<xs:element ref="res:publisher"/>
<xs:element ref="res:pageNums"/>
<xs:element ref="res:url"/>
</xs:choice>
</xs:choice>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="artTitle">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="res:link"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="bookTitle">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="res:link"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="author">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="pubDate">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:month" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:year"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="publisher">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="res:link"/>
<xs:element ref="res:url"/>
</xs:choice>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="pageNums">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="memberships">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:title"/>
<xs:element ref="res:membership" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="membership">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:title" minOccurs="0" maxOccurs="1"/>
<xs:sequence minOccurs="0" maxOccurs="1">
<xs:element ref="res:organization"/>
<xs:element ref="res:location" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element ref="res:date"/>
<xs:element ref="res:period"/>
</xs:choice>
<xs:element ref="res:description" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="organization">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="res:emphasis"/>
<xs:element ref="res:citation"/>
<xs:element ref="res:url"/>
<xs:element ref="res:link"/>
</xs:choice>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="interests">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:title" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:interest" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="interest">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:title"/>
<xs:element ref="res:description" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="awards">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:title" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:award" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="award">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:title"/>
<xs:element ref="res:organization" minOccurs="0" maxOccurs="1"/>
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element ref="res:date"/>
<xs:element ref="res:period"/>
</xs:choice>
<xs:element ref="res:description" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="clearances">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:title" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:clearance" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="clearance">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:level"/>
<xs:element ref="res:organization" minOccurs="0" maxOccurs="1"/>
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element ref="res:date"/>
<xs:element ref="res:period"/>
</xs:choice>
<xs:element ref="res:note" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="misc">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:para" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="lastModified">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:date"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="copyright">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:year"/>
<xs:element ref="res:name" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:legalnotice" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="company">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="legalnotice">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:para" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="keywords">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:keyword" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="keyword">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="referees">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:referee" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="referee">
<xs:complexType>
<xs:sequence>
<xs:element ref="res:name"/>
<xs:element ref="res:title" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:organization" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:address" minOccurs="0" maxOccurs="1"/>
<xs:element ref="res:contact" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="para">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="res:emphasis"/>
<xs:element ref="res:citation"/>
<xs:element ref="res:url"/>
<xs:element ref="res:link"/>
</xs:choice>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="emphasis">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="citation">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="date">
<xs:complexType>
<xs:sequence>
<xs:sequence minOccurs="0" maxOccurs="1">
<xs:sequence minOccurs="0" maxOccurs="1">
<xs:element ref="res:dayOfMonth"/>
</xs:sequence>
<xs:element ref="res:month"/>
</xs:sequence>
<xs:element ref="res:year"/>
</xs:sequence>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="month">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="year">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="dayOfMonth">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="present">
<xs:complexType>
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="title">
<xs:complexType mixed="true">
<xs:attribute name="targets" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
</xs:schema>
Will the schema fit?
Relax NG is way more readable than XSD. WAY more. The W3C may have been on the ball in the early 2000s, but lately they seem to be COMPLETELY off their rocker.
Relax NG is a perfect example of what XSD should have been. And since it's trivial to convert from one to the other, check out the Relax NG Compact syntax. It looks a little bit like a cross between regular expressions and CSS. It's extremely readable, extremely WRITEABLE, and can be converted automagically to the full Relax NG syntax. (I only know of the "Trang Converter" tool for conversion, but it does its job quite well. Check it out.)
Also, Relax NG can be converted to the more painful XSD format. It bothers me when the "official" standard for XML schemas is the more painful choice, but I'm glad we at least have an alternative.
Not sure what you mean by "will the schema fit". There's no fitting. You just reference it in whatever XML file uses it. But I can bet you that if the schema were written in XSD it would be WAAAAYYY longer. :)
This project seems to have been hibernating for some time. It would be nice to see some activity here again. I would join in a heartbeat, if there were an active user to add me!