<?xml version="1.0" encoding="UTF-8"?>
<!--
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 -->

<!ELEMENT oor:component-schema (info?, import*, uses*, templates?, component)>
<!ATTLIST oor:component-schema
    oor:package CDATA #REQUIRED
    oor:name CDATA #REQUIRED
    oor:version NMTOKEN #IMPLIED
    xml:lang CDATA #IMPLIED
    xmlns:oor CDATA #FIXED "http://openoffice.org/2001/registry"
    xmlns:xs CDATA #FIXED "http://www.w3.org/2001/XMLSchema">

<!ELEMENT import EMPTY>
<!ATTLIST import
    oor:component CDATA #REQUIRED>

<!ELEMENT uses EMPTY>
<!ATTLIST uses
    oor:component CDATA #REQUIRED>

<!ELEMENT templates (info?, (set | group)*)>
<!ATTLIST templates>

<!ELEMENT info (deprecated?, author*, desc*, label*)>
<!ATTLIST info>

<!ELEMENT deprecated (#PCDATA)>
<!ATTLIST deprecated>

<!ELEMENT author (#PCDATA)>
<!ATTLIST author>

<!ELEMENT desc (#PCDATA)>
<!ATTLIST desc
    xml:lang CDATA #IMPLIED>

<!ELEMENT label (#PCDATA)>
<!ATTLIST label
    xml:lang CDATA #IMPLIED>

<!ELEMENT component (info?, (set | group | prop | node-ref)*)>
<!ATTLIST component>

<!ELEMENT set (info?, item*)>
<!ATTLIST set
    oor:name CDATA #REQUIRED
    oor:node-type CDATA #REQUIRED
    oor:component CDATA #IMPLIED>

<!ELEMENT item EMPTY>
<!ATTLIST item
    oor:node-type CDATA #REQUIRED
    oor:component CDATA #IMPLIED>

<!ELEMENT group (info?, (set | group | prop | node-ref)*)>
<!ATTLIST group
    oor:name CDATA #REQUIRED
    oor:extensible (false | true) #IMPLIED>

<!ELEMENT prop (info?, constraints?, value?)>
<!ATTLIST prop
    oor:name CDATA #REQUIRED
    oor:localized (false | true) #IMPLIED
    oor:type
        (oor:any | xs:boolean | xs:short | xs:int | xs:long | xs:double |
         xs:string | xs:hexBinary | oor:boolean-list | oor:short-list |
         oor:int-list | oor:long-list | oor:double-list | oor:string-list |
         oor:hexBinary-list)
        #REQUIRED
    oor:nillable (false | true) #IMPLIED>

<!ELEMENT constraints
    (enumeration*, length?, minLength?, maxLength?, minInclusive?,
     maxInclusive?, minExclusive?, maxExclusive?, whiteSpace?)>

<!ELEMENT enumeration (info?)>
<!ATTLIST enumeration
    oor:value CDATA #REQUIRED>

<!ELEMENT length (info?)>
<!ATTLIST length
    oor:value CDATA #REQUIRED>

<!ELEMENT minLength (info?)>
<!ATTLIST minLength
    oor:value CDATA #REQUIRED>

<!ELEMENT maxLength (info?)>
<!ATTLIST maxLength
    oor:value CDATA #REQUIRED>

<!ELEMENT minInclusive (info?)>
<!ATTLIST minInclusive
    oor:value CDATA #REQUIRED>

<!ELEMENT maxInclusive (info?)>
<!ATTLIST maxInclusive
    oor:value CDATA #REQUIRED>

<!ELEMENT minExclusive (info?)>
<!ATTLIST minExclusive
    oor:value CDATA #REQUIRED>

<!ELEMENT maxExclusive (info?)>
<!ATTLIST maxExclusive
    oor:value CDATA #REQUIRED>

<!ELEMENT whiteSpace (info?)>
<!ATTLIST whiteSpace
    oor:value CDATA #REQUIRED>

<!ELEMENT value (#PCDATA | it | unicode)*>
<!ATTLIST value
    oor:separator CDATA #IMPLIED>

<!ELEMENT it (#PCDATA | unicode)*>
<!ATTLIST it>

<!ELEMENT unicode EMPTY>
<!ATTLIST unicode
    oor:scalar NMTOKEN #REQUIRED>

<!ELEMENT node-ref (info?)>
<!ATTLIST node-ref
    oor:name CDATA #REQUIRED
    oor:node-type CDATA #REQUIRED
    oor:component CDATA #IMPLIED>
