XML file format
From Apache OpenOffice Wiki
Tasks
- Study DTD: very helpful XML in a Nutshell - Chapter 3. Document Type Definitions (DTDs)
- Study XLink: XML Linking Language (XLink) Version 1.0
- Design the DTD: based on menubar.dtd
- Check the validity: all context menus should pass xmllint --valid
ContextMenu DTD
<?xml version="1.0" encoding="UTF-8"?>
<!--
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
Copyright 2000, 2010 Oracle and/or its affiliates.
OpenOffice.org - a multi-platform office productivity suite
This file is part of OpenOffice.org.
OpenOffice.org is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License version 3
only, as published by the Free Software Foundation.
OpenOffice.org is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License version 3 for more details
(a copy is included in the LICENSE file that accompanied this code).
You should have received a copy of the GNU Lesser General Public License
version 3 along with OpenOffice.org. If not, see
<http://www.openoffice.org/license.html>
for a copy of the LGPLv3 License.
-->
<!ELEMENT contextmenu:contextmenu (contextmenu:popupmenu)>
<!ATTLIST contextmenu:contextmenu
xmlns:contextmenu CDATA #FIXED "http://openoffice.org/2001/contextmenu"
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink">
<!ELEMENT contextmenu:popupmenu (contextmenu:menuitem | contextmenu:menuseparator | contextmenu:menu)*>
<!ELEMENT contextmenu:menu (contextmenu:popupmenu)>
<!ATTLIST contextmenu:menu
xlink:href CDATA #REQUIRED
contextmenu:helpid CDATA #IMPLIED
contextmenu:label CDATA #IMPLIED
contextmenu:style CDATA #IMPLIED>
<!ELEMENT contextmenu:menuitem EMPTY>
<!ATTLIST contextmenu:menuitem
xlink:href CDATA #REQUIRED
contextmenu:helpid CDATA #IMPLIED
contextmenu:label CDATA #IMPLIED
contextmenu:style CDATA #IMPLIED>
<!ELEMENT contextmenu:menuseparator EMPTY>
- for the attribute holding the command URL we do not follow menubar.dtd (it uses menu:id), we follow the toolbar.dtd and statusbar.dtd where the UNO command URL is stored in a locator attribute (xlink:href)
- while validating the XML files against the DTD, we found that OOo statusbars and menubars do not pass the test:
- in statusbar.dtd, the attribute statusbar:helpid is missing
- in menubar.dtd
- the attribute menu:style is missing
- the element menu:menu is defined to have only one child element of type menu:menupopup, but this fails, for example, in Writer's menubar.xml with <menu:menu menu:id=".uno:ScriptOrganizer"/>
Menu Item Style
The attribute contextmenu:style is defined as unparsed character data. It may contain one or more of the following styles:
- text (corresponds to <idlml>com.sun.star.ui.ItemStyle:TEXT</idlml>)
- image (corresponds to <idlml>com.sun.star.ui.ItemStyle:ICON</idlml>)
- radio (corresponds to <idlml>com.sun.star.ui.ItemStyle:RADIO_CHECK</idlml>)
Two ore more styles must be combined with a plus sign, like "text+image+radio" (although the MenuBar reader handles this, it does not seem to be used in any XML file; the only style explicitly indicated is "radio".
Examples
sc
RID_POPUP_EDIT
The following is the XML version of the Menu structure described in the resource file sc/source/ui/src/popup.src.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE contextmenu:contextmenu SYSTEM "contextmenu.dtd">
<contextmenu:contextmenu xmlns:contextmenu="http://openoffice.org/2001/contextmenu" xmlns:xlink="http://www.w3.org/1999/xlink">
<contextmenu:popupmenu>
<contextmenu:menuitem xlink:href=".uno:ResetAttributes"/>
<contextmenu:menuseparator/>
<!-- Menu item controlled by PopupMenuController are NOT treated special
see in Writer menubar:
<menu:menuitem menu:id=".uno:SetLanguageSelectionMenu"/>
<menu:menuitem menu:id=".uno:SetLanguageParagraphMenu"/>
<menu:menuitem menu:id=".uno:SetLanguageAllTextMenu"/>
-->
<contextmenu:menuitem xlink:href=".uno:CharFontName"/>
<contextmenu:menuitem xlink:href=".uno:FontHeight"/>
<!-- PROBLEM: submenus usually have no command URL
RID_MN_FORMAT_STYLE has no UNO command URL of course
-->
<contextmenu:menu xlink:href=".uno:CellTextStyleMenu" > <!-- fictitious, but à la Writer -->
<contextmenu:popupmenu>
<contextmenu:menuitem xlink:href=".uno:Bold"/>
<contextmenu:menuitem xlink:href=".uno:Italic"/>
<contextmenu:menuitem xlink:href=".uno:Overline"/>
<contextmenu:menuitem xlink:href=".uno:Underline"/>
<contextmenu:menuitem xlink:href=".uno:UnderlineDouble"/>
<contextmenu:menuitem xlink:href=".uno:Strikeout"/>
<contextmenu:menuitem xlink:href=".uno:Shadowed"/>
<contextmenu:menuitem xlink:href=".uno:OutlineFont"/>
<contextmenu:menuseparator/>
<contextmenu:menuitem xlink:href=".uno:SuperScript"/>
<contextmenu:menuitem xlink:href=".uno:SubScript"/>
</contextmenu:popupmenu>
</contextmenu:menu>
<contextmenu:menuseparator/>
<contextmenu:menuitem xlink:href=".uno:FontDialog"/>
<contextmenu:menuseparator/>
<contextmenu:menuitem xlink:href=".uno:OpenHyperlinkOnCursor"/>
<contextmenu:menuseparator/>
<!-- clipboard functions were added by the SfxPopupMenuManager -->
<contextmenu:menuitem xlink:href=".uno:Cut"/>
<contextmenu:menuitem xlink:href=".uno:Copy"/>
<contextmenu:menuitem xlink:href=".uno:Paste"/>
</contextmenu:popupmenu>
</contextmenu:contextmenu>
RID_POPUP_CELLS
The following is the XLM version of the Menu structure defined in the resource file sc/source/ui/src/popup.src.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE contextmenu:contextmenu SYSTEM "contextmenu.dtd">
<contextmenu:contextmenu xmlns:contextmenu="http://openoffice.org/2001/contextmenu" xmlns:xlink="http://www.w3.org/1999/xlink">
<contextmenu:popupmenu>
<contextmenu:menuitem xlink:href=".uno:ResetAttributes"/>
<contextmenu:menuseparator/>
<contextmenu:menuitem xlink:href=".uno:FormatCellDialog"/>
<contextmenu:menuseparator/>
<contextmenu:menuitem xlink:href=".uno:InsertCellsRight"/>
<contextmenu:menuitem xlink:href=".uno:DeleteCell"/>
<contextmenu:menuitem xlink:href=".uno:Delete"/>
<contextmenu:menuseparator/>
<contextmenu:menuitem xlink:href=".uno:InsertAnnotation"/>
<contextmenu:menuitem xlink:href=".uno:DeleteNote"/>
<contextmenu:menuitem xlink:href=".uno:NoteVisible"/>
<contextmenu:menuseparator/>
<contextmenu:menuitem xlink:href=".uno:Cut"/>
<contextmenu:menuitem xlink:href=".uno:Copy"/>
<contextmenu:menuitem xlink:href=".uno:Paste"/>
<contextmenu:menuitem xlink:href=".uno:PasteSpecial"/>
<contextmenu:menuseparator/>
<contextmenu:menuitem xlink:href=".uno:DataSelect"/>
</contextmenu:popupmenu>
</contextmenu:contextmenu>
sw
MN_TEXT_POPUPMENU
The following is the XML version of the Menu structure defined in the resource file sw/source/ui/app/mn.src (and many other files it includes).
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE contextmenu:contextmenu SYSTEM "contextmenu.dtd">
<contextmenu:contextmenu xmlns:contextmenu="http://openoffice.org/2001/contextmenu" xmlns:xlink="http://www.w3.org/1999/xlink">
<contextmenu:popupmenu>
<contextmenu:menuitem xlink:href=".uno:ResetAttributes"/>
<contextmenu:menuseparator/>
<contextmenu:menuitem xlink:href=".uno:NumberingStart"/>
<contextmenu:menuitem xlink:href=".uno:ContinueNumbering"/>
<contextmenu:menuitem xlink:href=".uno:IncrementLevel"/>
<contextmenu:menuitem xlink:href=".uno:DecrementLevel"/>
<contextmenu:menuseparator/>
<contextmenu:menuitem xlink:href=".uno:CharFontName"/>
<contextmenu:menuitem xlink:href=".uno:FontHeight"/>
<contextmenu:menu xlink:href=".uno:StyleMenu">
<contextmenu:popupmenu>
<contextmenu:menuitem xlink:href=".uno:Bold"/>
<contextmenu:menuitem xlink:href=".uno:Italic"/>
<contextmenu:menuitem xlink:href=".uno:Overline"/>
<contextmenu:menuitem xlink:href=".uno:Underline"/>
<contextmenu:menuitem xlink:href=".uno:Strikeout"/>
<contextmenu:menuitem xlink:href=".uno:Shadowed"/>
<contextmenu:menuitem xlink:href=".uno:OutlineFont"/>
<contextmenu:menuseparator/>
<contextmenu:menuitem xlink:href=".uno:SuperScript"/>
<contextmenu:menuitem xlink:href=".uno:SubScript"/>
</contextmenu:popupmenu>
</contextmenu:menu>
<contextmenu:menu xlink:href=".uno:AlignTextMenu">
<contextmenu:popupmenu>
<contextmenu:menuitem xlink:href=".uno:LeftPara" contextmenu:style="radio"/>
<contextmenu:menuitem xlink:href=".uno:RightPara" contextmenu:style="radio"/>
<contextmenu:menuitem xlink:href=".uno:CenterPara" contextmenu:style="radio"/>
<contextmenu:menuitem xlink:href=".uno:JustifyPara" contextmenu:style="radio"/>
</contextmenu:popupmenu>
</contextmenu:menu>
<contextmenu:menu xlink:href=".uno:LineSpacingMenu">
<contextmenu:popupmenu>
<contextmenu:menuitem xlink:href=".uno:SpacePara1" contextmenu:style="radio"/>
<contextmenu:menuitem xlink:href=".uno:SpacePara15" contextmenu:style="radio"/>
<contextmenu:menuitem xlink:href=".uno:SpacePara2" contextmenu:style="radio"/>
</contextmenu:popupmenu>
</contextmenu:menu>
<contextmenu:menuseparator/>
<contextmenu:menuitem xlink:href=".uno:FontDialog"/>
<contextmenu:menuitem xlink:href=".uno:ParagraphDialog"/>
<contextmenu:menuitem xlink:href=".uno:PageDialog"/>
<contextmenu:menuitem xlink:href=".uno:BulletsAndNumberingDialog"/>
<contextmenu:menu xlink:href=".uno:TransliterateMenu">
<contextmenu:popupmenu>
<contextmenu:menuitem xlink:href=".uno:ChangeCaseToSentenceCase"/>
<contextmenu:menuitem xlink:href=".uno:ChangeCaseToLower"/>
<contextmenu:menuitem xlink:href=".uno:ChangeCaseToUpper"/>
<contextmenu:menuitem xlink:href=".uno:ChangeCaseToTitleCase"/>
<contextmenu:menuitem xlink:href=".uno:ChangeCaseToToggleCase"/>
<contextmenu:menuitem xlink:href=".uno:ChangeCaseToHalfWidth"/>
<contextmenu:menuitem xlink:href=".uno:ChangeCaseToFullWidth"/>
<contextmenu:menuitem xlink:href=".uno:ChangeCaseToHiragana"/>
<contextmenu:menuitem xlink:href=".uno:ChangeCaseToKatakana"/>
</contextmenu:popupmenu>
</contextmenu:menu>
<contextmenu:menuseparator/>
<contextmenu:menuitem xlink:href=".uno:UpdateCurIndex"/>
<contextmenu:menuitem xlink:href=".uno:EditCurIndex"/>
<contextmenu:menuitem xlink:href=".uno:RemoveTableOf"/>
<contextmenu:menuseparator/>
<contextmenu:menuitem xlink:href=".uno:FieldDialog"/>
<contextmenu:menuitem xlink:href=".uno:EditFootnote"/>
<contextmenu:menuitem xlink:href=".uno:IndexEntryDialog"/>
<contextmenu:menuitem xlink:href=".uno:AuthoritiesEntryDialog"/>
<contextmenu:menuseparator/>
<contextmenu:menuitem xlink:href=".uno:AcceptTracedChange"/>
<contextmenu:menuitem xlink:href=".uno:RejectTracedChange"/>
<contextmenu:menuseparator/>
<contextmenu:menuitem xlink:href=".uno:EditStyle"/>
<contextmenu:menuseparator/>
<contextmenu:menuitem xlink:href=".uno:OpenHyperlinkOnCursor"/>
<contextmenu:menuitem xlink:href=".uno:EditHyperlink"/>
<contextmenu:menuitem xlink:href=".uno:CopyHyperlinkLocation"/>
<contextmenu:menuitem xlink:href=".uno:RemoveHyperlink"/>
<contextmenu:menuitem xlink:href=".uno:OpenSmartTagMenuOnCursor"/>
<contextmenu:menuseparator/>
<!-- Thesaurus should have its own controller -->
<contextmenu:menuitem xlink:href=".uno:ThesaurusFromContext"/>
<contextmenu:menuseparator/>
<!-- clipboard functions were added by the SfxPopupMenuManager -->
<contextmenu:menuitem xlink:href=".uno:Cut"/>
<contextmenu:menuitem xlink:href=".uno:Copy"/>
<contextmenu:menuitem xlink:href=".uno:Paste"/>
</contextmenu:popupmenu>
</contextmenu:contextmenu>