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" version="0.4.0">
<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:anyURI" name="tenant" />
<xs:attribute type="xs:boolean" name="mention" />
<xs:attribute type="xs:boolean" name="sharealike" />
<xs:attribute type="xs:boolean" name="commercialuse" />
<xs:attribute type="xs:boolean" name="copright" />
<xs:attribute type="xs:string" name="template" />
<xs:attribute type="xs:anyURI" name="usageguide" />
</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" use="required">
<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" use="required" />
</xs:complexType>
<!-- RestrictionType -->
<xs:complexType name="RestrictionType" mixed="true">
<xs:attribute name="type" use="required">
<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="quality" />
<xs:enumeration value="agreement" />
</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="session" />
<xs:attribute type="xs:string" name="inside" />
<xs:attribute name="subnet">
<xs:simpleType>
<xs:restriction base="xs:string">
<!-- Regex for IPV4 incl. CDIR -->
<xs:pattern
value="((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])" />
<!-- 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:attribute>
<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>