relax-ng for pisi

This commit is contained in:
Barış Metin
2007-01-29 21:43:28 +00:00
parent 6d5be109d3
commit a2500eabe4
+442
View File
@@ -0,0 +1,442 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- RELAX NG schema file for PISI pspec.xml files -->
<!-- http://www.pardus.org.tr/projeler/pisi/ -->
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<!-- Start Document -->
<start>
<choice>
<ref name="PISI"/>
</choice>
</start>
<!-- PISI Section -->
<define name="PISI">
<element name="PISI">
<ref name="Source"/>
<oneOrMore>
<ref name="Package"/>
</oneOrMore>
<ref name="History"/>
</element>
</define>
<!-- Source Section -->
<define name="Source">
<element name="Source">
<ref name="Name"/>
<ref name="Homepage"/>
<ref name="Packager"/>
<oneOrMore>
<ref name="License"/>
</oneOrMore>
<optional>
<ref name="Icon"/>
</optional>
<oneOrMore>
<ref name="IsA"/>
</oneOrMore>
<optional>
<ref name="PartOf"/>
</optional>
<oneOrMore>
<ref name="Summary"/>
</oneOrMore>
<zeroOrMore>
<!-- FIXME: should be oneOrMore -->
<ref name="Description"/>
</zeroOrMore>
<ref name="Archive"/>
<optional>
<ref name="BuildDependencies"/>
</optional>
<optional>
<ref name="Patches"/>
</optional>
</element>
</define>
<!-- Package Section -->
<define name="Package">
<element name="Package">
<ref name="Name"/>
<optional>
<ref name="License"/>
</optional>
<optional>
<ref name="IsA"/>
</optional>
<optional>
<ref name="PartOf"/>
</optional>
<zeroOrMore>
<ref name="Summary"/>
</zeroOrMore>
<zeroOrMore>
<ref name="Description"/>
</zeroOrMore>
<optional>
<ref name="RuntimeDependencies"/>
</optional>
<optional>
<ref name="Conflicts"/>
</optional>
<ref name="Files"/>
<optional>
<ref name="AdditionalFiles"/>
</optional>
<optional>
<ref name="Provides"/>
</optional>
</element>
</define>
<!-- History Section -->
<define name="History">
<element name="History">
<oneOrMore>
<ref name="Update"/>
</oneOrMore>
</element>
</define>
<!-- Name -->
<define name="Name">
<element name="Name">
<text/>
</element>
</define>
<!-- Homepage -->
<define name="Homepage">
<element name="Homepage">
<text/>
</element>
</define>
<!-- Icon -->
<define name="Icon">
<element name="Icon">
<text/>
</element>
</define>
<!-- Packager -->
<define name="Packager">
<element name="Packager">
<ref name="Name"/>
<ref name="Email"/>
</element>
</define>
<!-- Email -->
<define name="Email">
<element name="Email">
<text/>
</element>
</define>
<!-- License -->
<define name="License">
<element name="License">
<text/>
</element>
</define>
<!-- IsA -->
<define name="IsA">
<element name="IsA">
<!-- TODO: Define available choices? -->
<text/>
</element>
</define>
<!-- PartOf -->
<define name="PartOf">
<element name="PartOf">
<text/>
</element>
</define>
<!-- Summary -->
<define name="Summary">
<element name="Summary">
<ref name="attlist.Summary"/>
<text/>
</element>
</define>
<!-- attlist.Summary -->
<define name="attlist.Summary" combine="interleave">
<optional>
<attribute name="xml:lang"/>
</optional>
</define>
<!-- Description -->
<define name="Description">
<element name="Description">
<ref name="attlist.Description"/>
<text/>
</element>
</define>
<!-- attlist.Description -->
<define name="attlist.Description" combine="interleave">
<optional>
<attribute name="xml:lang"/>
</optional>
</define>
<!-- Archive -->
<define name="Archive">
<element name="Archive">
<ref name="attlist.Archive"/>
<text/>
</element>
</define>
<!-- attlist.Archive -->
<define name="attlist.Archive" combine="interleave">
<group>
<attribute name="sha1sum"/>
<!-- NOTE: we can limit possible types here to the ones that pisi know -->
<attribute name="type"/>
</group>
</define>
<!-- BuildDependencies -->
<define name="BuildDependencies">
<element name="BuildDependencies">
<oneOrMore>
<ref name="Dependency"/>
</oneOrMore>
</element>
</define>
<!-- Dependency -->
<define name="Dependency">
<element name="Dependency">
<ref name="attlist.VersionReleaseToFrom"/>
<text/>
</element>
</define>
<!-- attlist.VersionReleaseToFrom -->
<define name="attlist.VersionReleaseToFrom">
<group>
<optional>
<attribute name="versionFrom"/>
</optional>
<optional>
<attribute name="versionTo"/>
</optional>
<optional>
<attribute name="version"/>
</optional>
<optional>
<attribute name="releaseFrom"/>
</optional>
<optional>
<attribute name="releaseTo"/>
</optional>
<optional>
<attribute name="release"/>
</optional>
</group>
</define>
<!-- Patches -->
<define name="Patches">
<element name="Patches">
<oneOrMore>
<ref name="Patch"/>
</oneOrMore>
</element>
</define>
<!-- Patch -->
<define name="Patch">
<element name="Patch">
<ref name="attlist.Patch"/>
<text/>
</element>
</define>
<!-- attlist.Patch -->
<define name="attlist.Patch" combine="interleave">
<group>
<optional>
<attribute name="compressionType"/>
</optional>
<optional>
<attribute name="level"/>
</optional>
<optional>
<attribute name="target"/>
</optional>
</group>
</define>
<!-- Provides -->
<define name="Provides">
<element name="Provides">
<oneOrMore>
<ref name="COMAR"/>
</oneOrMore>
</element>
</define>
<!-- COMAR -->
<define name="COMAR">
<element name="COMAR">
<ref name="attlist.COMAR"/>
<text/>
</element>
</define>
<!-- attlist.COMAR -->
<define name="attlist.COMAR">
<optional>
<attribute name="script"/>
</optional>
</define>
<!-- Conflicts -->
<define name="Conflicts">
<element name="Conflicts">
<oneOrMore>
<ref name="Conflicts.Package"/>
</oneOrMore>
</element>
</define>
<define name="Conflicts.Package">
<element name="Package">
<ref name="attlist.VersionReleaseToFrom"/>
<text />
</element>
</define>
<!-- AdditionalFiles -->
<define name="AdditionalFiles">
<element name="AdditionalFiles">
<oneOrMore>
<ref name="AdditionalFile"/>
</oneOrMore>
</element>
</define>
<!-- AdditionalFile -->
<define name="AdditionalFile">
<element name="AdditionalFile">
<ref name="attlist.AdditionalFile"/>
<text/>
</element>
</define>
<!-- attlist.AdditionalFile -->
<define name="attlist.AdditionalFile">
<attribute name="target"/>
<optional>
<attribute name="permission"/>
</optional>
<optional>
<attribute name="owner"/>
</optional>
</define>
<!-- RuntimeDependencies -->
<define name="RuntimeDependencies">
<element name="RuntimeDependencies">
<oneOrMore>
<ref name="Dependency"/>
</oneOrMore>
</element>
</define>
<!-- Files -->
<define name="Files">
<element name="Files">
<oneOrMore>
<ref name="Path"/>
</oneOrMore>
</element>
</define>
<!-- Path -->
<define name="Path">
<element name="Path">
<ref name="attlist.Path"/>
<text/>
</element>
</define>
<!-- attlist.Path -->
<define name="attlist.Path" combine="interleave">
<group>
<attribute name="fileType">
<choice>
<value>executable</value>
<value>library</value>
<value>data</value>
<value>config</value>
<value>doc</value>
<value>man</value>
<value>info</value>
<value>localedata</value>
<value>header</value>
</choice>
</attribute>
<optional>
<attribute name="permanent">
<choice>
<value>false</value>
<value>true</value>
</choice>
</attribute>
</optional>
</group>
</define>
<!-- Update -->
<define name="Update">
<element name="Update">
<ref name="attlist.Update"/>
<ref name="Date"/>
<ref name="Version"/>
<ref name="Comment"/>
<ref name="Name"/>
<ref name="Email"/>
</element>
</define>
<!-- attlist.Update -->
<define name="attlist.Update" combine="interleave">
<attribute name="release"/>
<optional>
<!-- FIXME: valid types must be used instead of CDATA (a.k.a choice)-->
<attribute name="type"/>
</optional>
</define>
<!-- Date -->
<define name="Date">
<!-- FIXME: Take a look at xmlschema data types at http://www.w3.org/TR/xmlschema-2/#dateTime -->
<element name="Date">
<text/>
</element>
</define>
<!-- Version -->
<define name="Version">
<element name="Version">
<text/>
</element>
</define>
<!-- Comment -->
<define name="Comment">
<element name="Comment">
<text/>
</element>
</define>
</grammar>