<?xml version="1.0" encoding="UTF-8"?>
<!--***********************************************************
 * 
 * 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
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 ***********************************************************-->



<!ELEMENT oor:component-data ((node | prop)*)>
<!ATTLIST oor:component-data
    oor:package CDATA #REQUIRED
    oor:name CDATA #REQUIRED
    oor:op (modify | replace | fuse | remove) #IMPLIED
    oor:finalized (false | true) #IMPLIED
    xmlns:oor CDATA #FIXED "http://openoffice.org/2001/registry"
    xmlns:xs CDATA #FIXED "http://www.w3.org/2001/XMLSchema"
    xmlns:xsi CDATA #FIXED "http://www.w3.org/2001/XMLSchema-instance"
    xmlns:install CDATA #FIXED "http://openoffice.org/2004/installation">

<!ELEMENT node ((node | prop)*)>
<!ATTLIST node
    oor:name CDATA #REQUIRED
    oor:op (modify | replace | fuse | remove) #IMPLIED
    oor:finalized (true | false) #IMPLIED
    oor:mandatory (true | false) #IMPLIED
    oor:node-type CDATA #IMPLIED
    oor:component CDATA #IMPLIED
    install:module CDATA #IMPLIED>

<!ELEMENT prop (value*)>
<!ATTLIST prop
    oor:name CDATA #REQUIRED
    oor:op (modify | replace | fuse | remove) #IMPLIED
    oor:finalized (true | false) #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)
        #IMPLIED
    install:module CDATA #IMPLIED>

<!ELEMENT value (#PCDATA | it | unicode)*>
    <!-- EMPTY  if oor:op="remove", xsi:nil="true", or oor:external is used
         #PCDATA  if the property type is a non-list type other than xs:string
         (#PCDATA | unicode)*  if the property type is xs:string
         #PCDATA  or  it*  if the property type is a list type other than
             oor:string-list
         (#PCDATA | unicode)*  or  it*  if the property type is
             oor:string-list -->
<!ATTLIST value
    xml:lang CDATA #IMPLIED
    oor:op (fuse | remove) #IMPLIED
    xsi:nil (true | false) #IMPLIED
    oor:type
        (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)
        #IMPLIED
    oor:separator CDATA #IMPLIED
    oor:external CDATA #IMPLIED
    install:module CDATA #IMPLIED>
    <!-- xml:lang  must only be used for localized properties; defaults to the
             empty string
         oor:op  defaults to "fuse"; "remove" must only be used for localized
             properties
         xsi:nil  defaults to "false"; "true" must only be used for nillable
             properties
         oor:type  is relevant for localized properties of type oor:any with
             different value types for different locales
         oor:separator  must only be used if the property type is a list type
             and the element content is #PCDATA or (#PCDATA | unicode)* (and not
             EMPTY or it*)
         oor:external  must only be used for non-localized properties and must
             not be used together with xsi:nil="true" -->

<!ELEMENT it (#PCDATA | unicode)*>
    <!-- #PCDATA  if the property type is a list type other than
             oor:string-list
         (#PCDATA | unicode)*  if the property type is oor:string-list -->
<!ATTLIST it>

<!ELEMENT unicode EMPTY>
<!ATTLIST unicode
    oor:scalar NMTOKEN #REQUIRED>
        <!-- must syntactically match xs:integer and have a value in {0, ..., 8,
             11, 12, 14, ..., 31, 65534, 65535} -->

<!-- oor:items is an alternative root element to oor:component-data (in plain
     .xcu files only; not when nested in an .xcd file), used for the user-layer
     registrymodifications.xcu: -->

<!ELEMENT oor:items (item*)>
<!ATTLIST oor:items>

<!ELEMENT item ((node | prop | value)*)>
<!ATTLIST item
    oor:path CDATA #REQUIRED>
        <!-- the absolute path representation of a localized property or a group
             or set node -->
