XSD
(Dieser Entwurf wird kontinuierlich verändert. Eine finale Version wird erst mit Version 1.0 veröffentlicht.)
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified"
elementFormDefault="qualified">
<xs:element name="libRML" type="libRMLType"/>
<!-- libRMLType - Container for all -->
<xs:complexType name="libRMLType">
<!-- Contains only 1 subelement and a string 'version' -->
<xs:sequence>
<xs:element type="ItemType" name="item" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:attribute type="xs:string" name="version"/>
</xs:complexType>
<!-- itemType - has many actions and some attributes -->
<xs:complexType name="ItemType">
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element type="ActionType" name="action"/>
</xs:sequence>
<xs:attribute type="xs:string" name="id"/>
<xs:attribute type="xs:string" name="tenant"/>
<xs:attribute type="xs:string" name="usageguide"/>
<xs:attribute type="xs:string" name="template"/>
<xs:attribute type="xs:boolean" name="mention"/>
<xs:attribute type="xs:boolean" name="sharealike"/>
</xs:complexType>
<!-- ActionType - has many restrictions and some attributes -->
<xs:complexType name="ActionType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element type="RestrictionType" name="restriction"/>
</xs:sequence>
<xs:attribute name="type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="displaymetadata"/>
<xs:enumeration value="read"/>
<xs:enumeration value="run"/>
<xs:enumeration value="lend"/>
<xs:enumeration value="download"/>
<xs:enumeration value="print"/>
<xs:enumeration value="reproduce"/>
<xs:enumeration value="modify"/>
<xs:enumeration value="reuse"/>
<xs:enumeration value="distribute"/>
<xs:enumeration value="publish"/>
<xs:enumeration value="archive"/>
<xs:enumeration value="index"/>
<xs:enumeration value="move"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute type="xs:boolean" name="permission"/>
</xs:complexType>
<!-- RestrictionType - all-in-one-mess -->
<xs:complexType name="RestrictionType" mixed="true">
<xs:sequence>
<xs:element name="group" maxOccurs="unbounded" minOccurs="0" type="xs:string"/>
<xs:element name="subnet" maxOccurs="unbounded" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<!-- Regex for IPV4 incl. CDIR -->
<xs:pattern
value="^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(/(\d|[1-2]\d|3[0-2]))?$"/>
<!-- Regex for IPv6 -->
<xs:pattern
value="(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="machine" maxOccurs="unbounded" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<!-- Regex for MAC-48 values -->
<xs:pattern value="^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="part" maxOccurs="unbounded" minOccurs="0" type="xs:string"/>
</xs:sequence>
<xs:attribute name="type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="parts"/>
<xs:enumeration value="group"/>
<xs:enumeration value="age"/>
<xs:enumeration value="location"/>
<xs:enumeration value="date"/>
<xs:enumeration value="duration"/>
<xs:enumeration value="count"/>
<xs:enumeration value="concurrent"/>
<xs:enumeration value="watermark"/>
<xs:enumeration value="commercialuse"/>
<xs:enumeration value="quality"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute type="xs:date" name="fromdate"/>
<xs:attribute type="xs:date" name="todate"/>
<xs:attribute type="xs:nonNegativeInteger" name="maxresolution"/>
<xs:attribute type="xs:string" name="maxbitrate"/>
<xs:attribute type="xs:nonNegativeInteger" name="count"/>
<xs:attribute type="xs:nonNegativeInteger" name="sessions"/>
<xs:attribute type="xs:string" name="inside"/>
<xs:attribute type="xs:string" name="outside"/>
<xs:attribute type="xs:boolean" name="noncommercialuse"/>
<xs:attribute type="xs:boolean" name="commercialuse"/>
<xs:attribute type="xs:string" name="watermarkvalue"/>
<xs:attribute type="xs:nonNegativeInteger" name="duration"/>
<xs:attribute type="xs:nonNegativeInteger" name="minage"/>
</xs:complexType>
</xs:schema>