XML file format
From Apache OpenOffice Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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>