Here's an example file for c3 and a 'schema' in the form of an xsd file
for it. This is the original stuff. I'm about half of the way modifying
this schema to take out the namespace stuff, and i'll do likewise on the
individual config.xml files.
At any rate, comments and suggestions are welcome.
-- John
<?xml version="1.0" ?>
<!--OSCAR config.xml grammar
Authors:
The members of ETSU's Spring 2005 Special Topics Class on XML:
Josh Banks, James Cross, Jason Estep, Matt Joseph, Bimbi Koduru,
Morgan Montagnari, Matt Morrell, Matt Trent;
Phil Pfeiffer, Dept. of CSCI, East TN State University
Date:
April 2005
-->
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://sourceforge.net/oscar/2005/config.xml"
elementFormDefault="qualified"
>
<!--
********************
TYPE DEFINITIONS
********************
-->
<!-- **** top-level type definitions **** -->
<!-- top-level type definition: an OSCAR configuration -->
<xs:complexType name="oscar-configuration-type">
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="version" type="version-type" />
<xs:element name="class" type="class-type" />
<xs:element name="summary" type="xs:string" />
<xs:element name="license" type="xs:string" minOccurs="0" />
<xs:element name="copyright" type="copyright-type" minOccurs="0" />
<xs:element name="group" type="group-type" minOccurs="0" />
<xs:element name="uri" type="xs:anyURI" minOccurs="0" />
<xs:element name="maintainer" type="support-person-type"
minOccurs="0" maxOccurs="unbounded" />
<xs:element name="packager" type="support-person-type"
minOccurs="0" maxOccurs="unbounded" />
<xs:element name="vendor" type="xs:string" minOccurs="0"
maxOccurs="unbounded" />
<xs:element name="description" type="xs:string" />
<xs:element name="provides" type="package-descriptor-type"
minOccurs="0" maxOccurs="unbounded" />
<xs:element name="requires" type="package-descriptor-type"
minOccurs="0" maxOccurs="unbounded" />
<xs:element name="conflicts" type="package-descriptor-type"
minOccurs="0" maxOccurs="unbounded" />
<xs:element name="rpmlist" type="rpmlist-type" minOccurs="0"
maxOccurs="unbounded" />
<xs:element name="package-specific-attributes"
type="package-specific-attributes-type" minOccurs="0" />
<xs:element name="servicelist" type="servicelist-type"
minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="download" type="package-download-type"
minOccurs="0" />
<xs:element name="oda" type="validate-if-known-accept-if-not"
minOccurs="0" />
</xs:sequence>
</xs:complexType>
<!-- **** second-level type definitions **** -->
<!-- second-level type definition: OSCAR package version -->
<xs:complexType name="version-type">
<xs:sequence>
<xs:element name="major" type="xs:nonNegativeInteger" />
<xs:element name="minor" type="xs:nonNegativeInteger" />
<xs:element name="subversion" type="xs:token" minOccurs="0" />
<xs:element name="release" type="xs:nonNegativeInteger" />
<xs:element name="epoch" type="xs:nonNegativeInteger" minOccurs="0"
/>
</xs:sequence>
</xs:complexType>
<!-- second-level type definition: class of OSCAR application (core,
included, third-party, selected) -->
<xs:simpleType name="class-type">
<xs:restriction base="xs:token">
<xs:enumeration value="core" />
<xs:enumeration value="included" />
<xs:enumeration value="third-party" />
<xs:enumeration value="selected" />
</xs:restriction>
</xs:simpleType>
<!-- second-level type definition: OSCAR package version (1980-2099) -->
<xs:simpleType name="copyright-type">
<xs:restriction base="xs:token">
<xs:pattern value="(198\d)|(199\d)|(20\d\d)" />
</xs:restriction>
</xs:simpleType>
<!-- second-level type definition: OSCAR package version -->
<xs:simpleType name="group-type">
<xs:restriction base="xs:token">
<xs:enumeration value="Application/batch" />
<xs:enumeration value="Application/Environment" />
<xs:enumeration value="Application/System" />
<xs:enumeration value="Applications/batch" />
<xs:enumeration value="Applications/System" />
<xs:enumeration value="Development/Libraries" />
<xs:enumeration value="Documentation" />
<xs:enumeration value="System Environment/base" />
<xs:enumeration value="System Environment/Base" />
<xs:enumeration value="System Environment/Security" />
</xs:restriction>
</xs:simpleType>
<!-- second-level type definition: support-person-type -->
<xs:complexType name="support-person-type">
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="email" type="email-address-type" minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<!-- second-level type definition: package-descriptor-type -->
<xs:complexType name="package-descriptor-type">
<xs:all>
<xs:element name="type" type="xs:token" minOccurs="0" />
<xs:element name="name" type="xs:NCName" />
</xs:all>
</xs:complexType>
<!-- second-level type definition: rpmlist-type -->
<xs:complexType name="rpmlist-type">
<xs:sequence>
<xs:element name="filter" type="rpmlist-filter-type" minOccurs="0"
/>
<xs:element name="rpm" type="xs:NCName" minOccurs="1"
maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<!-- second-level type definition: package-specific-attributes-type -->
<!-- use Schematron to validate switcher elements inside this type -->
<xs:complexType name="package-specific-attributes-type">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:any processContents="lax" namespace="##targetNamespace" />
</xs:sequence>
</xs:complexType>
<!-- second-level type definition: filter-group-type -->
<xs:complexType name="servicelist-type">
<xs:sequence>
<xs:element name="filter" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="group" type="filter-group-type" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="service" type="xs:NCName" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<!-- Second-level definition: package-download-type -->
<xs:complexType name="package-download-type">
<xs:sequence>
<xs:element name="uri" type="xs:anyURI" />
<xs:element name="size" type="xs:nonNegativeInteger" />
<xs:element name="digital-signature" type="digital-signature-type"
minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<!-- **** third-level type definitions **** -->
<!-- Third-level definition: email-address-type -->
<xs:simpleType name="email-address-type">
<xs:restriction base="xs:string">
<xs:pattern
value="([0-9_a-z\-\.]+)@([0-9_a-z\-\.]+).([0-9_a-z\-\.]+)"/>
</xs:restriction>
</xs:simpleType>
<!-- Third-level definition: filter-group-type -->
<xs:simpleType name="filter-group-type">
<xs:restriction base="xs:token">
<xs:enumeration value="oscar_server" />
<xs:enumeration value="oscar_clients" />
</xs:restriction>
</xs:simpleType>
<!-- Third-level type definition: rpmlist-filter-type -->
<xs:complexType name="rpmlist-filter-type">
<xs:sequence>
<xs:element name="group" type="filter-group-type" minOccurs="0" />
<xs:element name="distribution" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:NCName" minOccurs="0"
maxOccurs="unbounded" />
<xs:element name="version" type="xs:string" minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="architecture" type="xs:string" minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<!-- Third-level definition: digital-signature-type -->
<xs:complexType name="digital-signature-type">
<xs:choice>
<xs:element name="md5" type="md5sum-type" />
<xs:element name="sha1" type="sha1sum-type" />
<xs:element name="other" >
<xs:complexType>
<xs:all>
<xs:element name="type" type="xs:token" />
<xs:element name="value" type="xs:string" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<!-- **** other supporting type definitions **** -->
<!-- Support the inclusion of any object, but validate if type is defined
-->
<xs:complexType name="validate-if-known-accept-if-not">
<xs:sequence>
<xs:any processContents="lax" />
</xs:sequence>
</xs:complexType>
<!-- Digital signature types: MD5, SHA1 -->
<xs:simpleType name="md5sum-type">
<xs:restriction base="xs:token">
<xs:pattern value="[0-9a-fA-F]{32}" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="sha1sum-type">
<xs:restriction base="xs:token">
<xs:pattern value="[0-9a-fA-F]{40}" />
</xs:restriction>
</xs:simpleType>
<!--
********************
ELEMENT DEFINITIONS
********************
-->
<xs:element name="oscar" type="oscar-configuration-type"/>
</xs:schema>
<?xml version="1.0" encoding="ISO-8859-1"?>
<oscar-config:oscar
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:oscar-config="http://sourceforge.net/oscar/2005/config.xml"
xsi:schemaLocation="http://sourceforge.net/oscar/2005/config.xml oscar-config.xsd"
>
<!--
Copyright (c) 2002 The Trustees of Indiana University.
All rights reserved.
This file is part of the OSCAR software package. For license
information, see the COPYING file in the top level directory of the
OSCAR source distribution.
$Id: config.xml,v 1.13 2003/11/12 20:57:02 naughtont Exp $
-->
<oscar-config:name>c3</oscar-config:name>
<oscar-config:version>
<oscar-config:major>4</oscar-config:major>
<oscar-config:minor>0</oscar-config:minor>
<oscar-config:subversion>1</oscar-config:subversion>
<oscar-config:release>2</oscar-config:release>
<oscar-config:epoch>1</oscar-config:epoch>
</oscar-config:version>
<oscar-config:class>core</oscar-config:class>
<oscar-config:summary>Cluster Command and Control (C3) - command line tool suite</oscar-config:summary>
<oscar-config:license>freely distributable</oscar-config:license>
<oscar-config:group>Application/System</oscar-config:group>
<oscar-config:uri>http://www.csm.ornl.gov/torc/C3/</oscar-config:uri>
<oscar-config:packager>
<oscar-config:name>Thomas Naughton</oscar-config:name>
<oscar-config:email>[EMAIL PROTECTED]</oscar-config:email>
</oscar-config:packager>
<oscar-config:description>The Cluster Command and Control (C3) tool suite
offers a command line interface for system and user administration
tasks on a cluster.</oscar-config:description>
<oscar-config:rpmlist>
<oscar-config:filter>
<oscar-config:group>oscar_server</oscar-config:group>
</oscar-config:filter>
<oscar-config:rpm>c3</oscar-config:rpm>
<oscar-config:rpm>c3-profiled</oscar-config:rpm>
</oscar-config:rpmlist>
<oscar-config:rpmlist>
<oscar-config:filter>
<oscar-config:group>oscar_clients</oscar-config:group>
</oscar-config:filter>
<oscar-config:rpm>c3-ckillnode</oscar-config:rpm>
<oscar-config:rpm>c3-c3cmd-filter</oscar-config:rpm>
</oscar-config:rpmlist>
<!--
Removing the following (comment out for now) b/c I believe
all currently supported version of MDK have the '/usr/bin/python2'
file/link in the RPM MANIFEST to satisfy the c3 'Requires:' line.
-->
<!--
<oscar-config:rpmlist>
<oscar-config:filter>
<oscar-config:group>oscar_server</oscar-config:group>
<oscar-config:distribution>mandrake</oscar-config:distribution>
<oscar-config:rpm>python2-compat</oscar-config:rpm>
</oscar-config:rpmlist>
-->
</oscar-config:oscar>