Konzept

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>