1<?xml version="1.0"?>
2<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
3    xmlns:tns="http://www.blackperl.com/XML/ChangeLog"
4    targetNamespace="http://www.blackperl.com/XML/ChangeLog"
5    elementFormDefault="qualified" attributeFormDefault="unqualified"
6    version="0.93" id="changelog0.93">
7  <!--
8      Refer to this schema using the following namespace:
9      http://www.blackperl.com/XML/ChangeLog
10  -->
11  <xsd:annotation>
12    <xsd:documentation>
13      A description of an XML application which itemizes changes over the
14      life-span of a software project. Changes are tracked by releases, with a
15      granularity of individual items made up of files that were affected.
16    </xsd:documentation>
17    <xsd:appinfo xmlns:dc="http://purl.org/dc/elements/1.1/">
18      <dc:creator>Randy J. Ray (rjray@blackperl.com)</dc:creator>
19      <dc:date>2004-11-22</dc:date>
20      <dc:subject>changelog,xml,schema</dc:subject>
21      <dc:description>
22        An XML Schema declaration describing an XML expression of software
23        project change-logs.
24      </dc:description>
25    </xsd:appinfo>
26    <xsd:appinfo>
27      <rdf:RDF xmlns:cc="http://web.resource.org/cc/"
28               xmlns:dc="http://purl.org/dc/elements/1.1/"
29               xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
30        <cc:Work rdf:about="">
31          <dc:title>XML Schema for Changelogs</dc:title>
32          <dc:description>
33            An XML Schema declaration describing an XML expression of software
34            project change-logs.
35          </dc:description>
36          <dc:creator>
37            <cc:Agent>
38              <dc:title>Randy J. Ray</dc:title>
39            </cc:Agent>
40          </dc:creator>
41          <dc:rights>
42            <cc:Agent>
43              <dc:title>Randy J. Ray</dc:title>
44            </cc:Agent>
45          </dc:rights>
46          <dc:type rdf:resource="http://purl.org/dc/dcmitype/Text" />
47          <cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
48        </cc:Work>
49        <cc:License rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
50          <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" />
51          <cc:permits rdf:resource="http://web.resource.org/cc/Distribution" />
52          <cc:requires rdf:resource="http://web.resource.org/cc/Notice" />
53          <cc:requires rdf:resource="http://web.resource.org/cc/Attribution" />
54          <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
55          <cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" />
56        </cc:License>
57      </rdf:RDF>
58    </xsd:appinfo>
59  </xsd:annotation>
60
61  <xsd:complexType id="informationType" name="informationType"
62                   mixed="true">
63    <xsd:annotation>
64      <xsd:documentation>
65        An open-ended container type for including version-control information
66        at various levels within the changelog structure. This is the only
67        type which explicitly permits content from foreign namespaces.
68      </xsd:documentation>
69    </xsd:annotation>
70    <xsd:sequence maxOccurs="unbounded" minOccurs="0">
71      <xsd:any processContents="lax" />
72    </xsd:sequence>
73    <xsd:attribute name="source" type="xsd:anyURI" />
74    <xsd:anyAttribute namespace="##other" processContents="lax" />
75  </xsd:complexType>
76
77  <xsd:complexType id="descriptionType" name="descriptionType">
78    <xsd:annotation>
79      <xsd:documentation>
80        A description block is used to document everything from specific change
81        items to the release as a whole.
82      </xsd:documentation>
83    </xsd:annotation>
84    <xsd:simpleContent>
85      <xsd:extension base="xsd:string">
86        <xsd:attribute default="en-US" name="lang" type="xsd:language" />
87      </xsd:extension>
88    </xsd:simpleContent>
89  </xsd:complexType>
90
91  <xsd:simpleType id="versionString" name="versionString">
92    <xsd:annotation>
93      <xsd:documentation>
94        The versionString type is applied to attributes that describe simple
95        revision-number strings. It only supports CVS (RCS) styled version
96        numbers.
97      </xsd:documentation>
98    </xsd:annotation>
99    <xsd:restriction base="xsd:string">
100      <xsd:pattern value="\d+(\.\d+)*" />
101    </xsd:restriction>
102  </xsd:simpleType>
103
104  <xsd:complexType id="fileType" name="fileType">
105    <xsd:annotation>
106      <xsd:documentation>
107        The fileType definition is used for the file element, a part of the
108        itemType declaration. It is defined separately so that it can be
109        referred to from multiple places.
110      </xsd:documentation>
111    </xsd:annotation>
112    <xsd:sequence maxOccurs="1" minOccurs="0">
113      <xsd:element name="description" type="tns:descriptionType"
114                   minOccurs="0" maxOccurs="unbounded" />
115      <xsd:element maxOccurs="1" minOccurs="0" name="vc-information"
116                   type="tns:informationType" nillable="true" />
117    </xsd:sequence>
118    <xsd:attribute name="path" type="xsd:string" use="required" />
119    <xsd:attribute name="revision" type="tns:versionString" use="optional"/>
120    <xsd:attribute name="author" type="xsd:NMTOKEN" use="optional" />
121    <xsd:attribute name="action" use="optional">
122      <xsd:simpleType>
123        <xsd:restriction base="xsd:NMTOKEN">
124          <xsd:enumeration value="ADD" />
125          <xsd:enumeration value="DELETE" />
126          <xsd:enumeration value="RESTORE" />
127          <xsd:enumeration value="MOVE" />
128        </xsd:restriction>
129      </xsd:simpleType>
130    </xsd:attribute>
131    <xsd:attribute name="note" type="xsd:string" use="optional" />
132  </xsd:complexType>
133
134  <xsd:element id="file" name="file" nillable="true" type="tns:fileType">
135    <xsd:annotation>
136      <xsd:documentation>
137        A file element contains a single block representing a fileType.
138      </xsd:documentation>
139    </xsd:annotation>
140    <xsd:unique name="fileDescriptionLangConstraint">
141      <xsd:selector xpath="tns:description" />
142      <xsd:field xpath="@lang" />
143    </xsd:unique>
144  </xsd:element>
145
146  <xsd:complexType id="itemType" name="itemType">
147    <xsd:annotation>
148      <xsd:documentation>
149        These element blocks define a single change-item within the scope of a
150        given release. A change-item consists of one or more files that were
151        affected, and a description of the change itself.
152      </xsd:documentation>
153    </xsd:annotation>
154    <xsd:sequence>
155      <xsd:element maxOccurs="1" minOccurs="0" name="vc-information"
156                   type="tns:informationType" nillable="true" />
157      <xsd:choice minOccurs="1" maxOccurs="1">
158        <xsd:element ref="tns:file" />
159        <xsd:element name="fileset" nillable="false">
160          <xsd:complexType>
161            <xsd:sequence>
162              <xsd:element maxOccurs="1" minOccurs="0" name="vc-information"
163                           type="tns:informationType" nillable="true" />
164              <xsd:element maxOccurs="unbounded" minOccurs="1" ref="tns:file" />
165            </xsd:sequence>
166          </xsd:complexType>
167        </xsd:element>
168      </xsd:choice>
169      <xsd:element name="description" type="tns:descriptionType"
170                   minOccurs="1" maxOccurs="unbounded" />
171    </xsd:sequence>
172    <xsd:attribute name="id" type="xsd:ID" />
173  </xsd:complexType>
174
175  <xsd:element id="item" name="item" nillable="false" type="tns:itemType">
176    <xsd:annotation>
177      <xsd:documentation>
178        An item element contains a single block representing an itemType.
179      </xsd:documentation>
180    </xsd:annotation>
181    <xsd:unique name="itemDescriptionLangConstraint">
182      <xsd:selector xpath="tns:description" />
183      <xsd:field xpath="@lang" />
184    </xsd:unique>
185  </xsd:element>
186
187  <xsd:complexType id="releaseType" name="releaseType">
188    <xsd:annotation>
189      <xsd:documentation>
190        The release is the primary piece of information that a changelog
191        collects and organizes. A release contains an optional description,
192        followed by one or more item blocks. The release element is also the
193        greatest user of attributes besides the file element. A release element
194        must have at least a "version" attribute, uniquely identifying the
195        release itself. Additionally, it may have "tag" to associate it with
196        a release-system tag and "date" to specify the date the release was
197        created.
198      </xsd:documentation>
199    </xsd:annotation>
200    <xsd:sequence>
201      <xsd:element name="description" type="tns:descriptionType"
202                   minOccurs="0" maxOccurs="unbounded" />
203      <xsd:element maxOccurs="unbounded" minOccurs="0" name="information"
204                   type="tns:informationType" nillable="true" />
205      <xsd:element maxOccurs="1" minOccurs="0" name="vc-information"
206                   type="tns:informationType" nillable="true" />
207      <xsd:element maxOccurs="unbounded" minOccurs="1" ref="tns:item" />
208    </xsd:sequence>
209    <xsd:attribute name="version" type="xsd:token" use="required" />
210    <xsd:attribute name="tag" type="xsd:NMTOKEN" />
211    <xsd:attribute name="date" type="xsd:token" use="required" /> <!-- type="xsd:dateTime"  -->
212  </xsd:complexType>
213
214  <xsd:element id="release" name="release" nillable="false"
215               type="tns:releaseType">
216    <xsd:annotation>
217      <xsd:documentation>
218      </xsd:documentation>
219    </xsd:annotation>
220    <xsd:unique name="releaseDescriptionLangConstraint">
221      <xsd:selector xpath="tns:description" />
222      <xsd:field xpath="@lang" />
223    </xsd:unique>
224  </xsd:element>
225
226  <xsd:element id="changelog" name="changelog" nillable="false">
227    <xsd:annotation>
228      <xsd:documentation>
229        The changelog element is intended as the document root element. It
230        contains an overview element (identical in structure to the description
231        element, but named differently to prevent collision in XPath queries)
232        and one or more release blocks.
233      </xsd:documentation>
234    </xsd:annotation>
235    <xsd:complexType>
236      <xsd:sequence>
237        <xsd:element maxOccurs="unbounded" minOccurs="1" name="description"
238                     nillable="false" type="tns:descriptionType" />
239        <xsd:element maxOccurs="unbounded" minOccurs="0" name="information"
240                   type="tns:informationType" nillable="true" />
241        <xsd:element maxOccurs="1" minOccurs="0" name="vc-information"
242                     type="tns:informationType" nillable="true" />
243        <xsd:element maxOccurs="unbounded" minOccurs="1" ref="tns:release" />
244      </xsd:sequence>
245    </xsd:complexType>
246    <xsd:unique name="changelogDescriptionLangConstraint">
247      <xsd:selector xpath="tns:description" />
248      <xsd:field xpath="@lang" />
249    </xsd:unique>
250  </xsd:element>
251
252</xsd:schema>
253
254