aif-ng/aif.xsd

162 lines
5.6 KiB
XML
Raw Normal View History

2017-03-06 07:32:34 -05:00
<?xml version="1.0" encoding="UTF-8" ?>
2017-03-07 18:36:56 -05:00
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://aif.square-r00t.net"
xmlns="https://aif.square-r00t.net"
elementFormDefault="qualified">
2017-03-08 05:04:21 -05:00
<!-- GLOBAL CUSTOM DATA TYPES -->
2017-03-08 03:41:34 -05:00
<xs:simpleType name="diskdev">
<xs:restriction base="xs:string">
2017-03-08 07:48:29 -05:00
<xs:pattern value="/dev/([A-Za-z0-9_]+/)?[A-Za-z0-9_]+[0-9]?" />
2017-03-08 03:41:34 -05:00
</xs:restriction>
</xs:simpleType>
2017-03-08 05:04:21 -05:00
<xs:simpleType name="diskfmt">
<xs:restriction base="xs:string">
<xs:pattern value="(gpt|bios)" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="disksize">
<xs:restriction base="xs:string">
2017-03-08 07:48:29 -05:00
<xs:pattern value="(\+|\-)?[0-9]+([KMGTP]|%)" />
2017-03-08 05:04:21 -05:00
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="fstype">
<xs:restriction base="xs:token">
2017-03-08 07:48:29 -05:00
<xs:pattern value="[a-z0-9]+" />
2017-03-08 05:04:21 -05:00
</xs:restriction>
</xs:simpleType>
2017-03-08 07:48:29 -05:00
<xs:simpleType name="mntopts">
<xs:restriction base="xs:token">
<xs:pattern value="[A-Za-z0-9_\.\-]+(,[A-Za-z0-9_\.\-]+)*" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="iface">
<xs:restriction base="xs:token">
<!-- https://github.com/systemd/systemd/blob/master/src/udev/udev-builtin-net_id.c#L20 lines 30-47. i have no idea if this will work. TODO: simplify, validate in-code. -->
<xs:pattern value="(auto|((en|sl|wl|ww)(b[0-9]+|c[a-z0-9]|o[0-9]+(n.*(d.*)?)?|s[0-9]+(f.*)?((n|d).*)?|x([A-Fa-f0-9]:){5}[A-Fa-f0-9]|(P.*)?p[0-9]+s[0-9]+(((f|n|d).*)|u.*)?)))" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="netaddress">
<xs:restriction base="xs:string">
<!-- this is a REALLY LAZY regex. matching IPv4 and IPv6 in regex is ugly as heck, so we do that in-code. this is just a gatekeeper. -->
<xs:pattern value="(auto|[0-9\.]+/[0-9]{,2}|([A-Za-z0-9:]+)/[0-9]+)" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="netproto">
<xs:restriction base="xs:token">
<xs:pattern value="(both|ipv4|ipv6)" />
</xs:restriction>
</xs:simpleType>
2017-03-08 05:04:21 -05:00
<!-- ROOT -->
2017-03-07 22:56:37 -05:00
<xs:element name="aif">
<xs:complexType>
2017-03-08 03:41:34 -05:00
<xs:all>
2017-03-08 05:04:21 -05:00
<!-- BEGIN STORAGE -->
2017-03-08 03:41:34 -05:00
<xs:element name="storage" minOccurs="1">
2017-03-07 22:56:37 -05:00
<xs:complexType>
<xs:sequence>
2017-03-08 07:48:29 -05:00
<!-- BEGIN DISK -->
2017-03-08 03:41:34 -05:00
<xs:element name="disk" maxOccurs="unbounded" minOccurs="1">
2017-03-07 22:56:37 -05:00
<xs:complexType>
2017-03-08 05:04:21 -05:00
<xs:sequence>
2017-03-08 07:48:29 -05:00
<xs:element name="part" minOccurs="1" maxOccurs="unbounded">
2017-03-08 05:04:21 -05:00
<xs:complexType>
2017-03-08 07:48:29 -05:00
<xs:attribute name="num" type="xs:positiveInteger" use="required" />
2017-03-08 05:04:21 -05:00
<xs:attribute name="name" type="xs:token" />
2017-03-08 07:48:29 -05:00
<xs:attribute name="size" type="disksize" use="required" />
<xs:attribute name="fstype" type="fstype" use="required" />
2017-03-08 05:04:21 -05:00
</xs:complexType>
<xs:unique name="unique-partnum">
2017-03-08 07:48:29 -05:00
<xs:selector xpath="part" />
<xs:field xpath="@num" />
2017-03-08 05:04:21 -05:00
</xs:unique>
</xs:element>
</xs:sequence>
2017-03-08 07:48:29 -05:00
<xs:attribute name="device" type="diskdev" use="required" />
<xs:attribute name="diskfmt" type="diskfmt" use="required" />
2017-03-07 22:56:37 -05:00
</xs:complexType>
2017-03-08 05:04:21 -05:00
<xs:unique name="unique-diskdev">
2017-03-08 07:48:29 -05:00
<xs:selector xpath="disk" />
<xs:field xpath="@device" />
2017-03-08 05:04:21 -05:00
</xs:unique>
2017-03-07 22:56:37 -05:00
</xs:element>
2017-03-08 07:48:29 -05:00
<!-- BEGIN MOUNT -->
<xs:element name="mount" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="order" type="xs:integer" use="required" />
<xs:attribute name="source" type="diskdev" use="required" />
<xs:attribute name="target" type="xs:token" use="required" />
<xs:attribute name="fstype" type="fstype" />
<xs:attribute name="opts" type="mntopts" />
</xs:complexType>
<xs:unique name="unique-mnts">
<xs:selector xpath="mount" />
<xs:field xpath="@order" />
<xs:field xpath="@source" />
<xs:field xpath="@target" />
</xs:unique>
</xs:element>
2017-03-07 22:56:37 -05:00
</xs:sequence>
</xs:complexType>
2017-03-08 07:48:29 -05:00
</xs:element>
<!-- END MOUNT -->
2017-03-08 05:04:21 -05:00
<!-- END STORAGE -->
2017-03-08 07:48:29 -05:00
<!-- BEGIN NETWORK -->
<xs:element name="network" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="iface" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="device" type="iface" use="required" />
<xs:attribute name="address" type="netaddress" use="required" />
<xs:attribute name="netproto" type="netproto" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="hostname" type="xs:token" use="required" />
</xs:complexType>
<xs:unique name="unique-iface">
<xs:selector xpath="iface" />
<xs:field xpath="@address" />
<xs:field xpath="@netproto" />
</xs:unique>
</xs:element>
<!-- END NETWORK -->
<!--- BEGIN SCRIPTS -->
<xs:element name="scripts" maxOccurs="1" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="script" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="uri" type="scripturi" use="required" />
<xs:attribute name="lang" type="devlang" />
<xs:attribute name="order" type="xs:integer" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="unique-script">
<xs:selector xpath="script" />
<xs:field xpath="@order" />
</xs:unique>
</xs:element>
<!-- END SCRIPTS -->
2017-03-08 03:41:34 -05:00
</xs:all>
2017-03-08 07:48:29 -05:00
</xs:complexType>
2017-03-08 03:41:34 -05:00
<xs:complexType>
<xs:sequence>
<xs:element ref="system" maxOccurs="1" minOccurs="1" />
<xs:element ref="user" maxOccurs="1" minOccurs="1" />
<xs:element ref="pacman" maxOccurs="1" minOccurs="1" />
<xs:element ref="bootloader" maxOccurs="1" minOccurs="1" />
</xs:sequence>
2017-03-08 07:48:29 -05:00
</xs:complexType>
2017-03-07 22:56:37 -05:00
</xs:element>
</xs:schema>