spiegel-keyman/common/schemas/kps/kps.xsd
Marc Durdin 400444933c feat(developer): introduce WelcomeFile property to packages
Fixes #9478.

This adds a property WelcomeFile to .kps and kmp.json, which allows us
to move away from the hardcoded welcome.htm filename in the future, and
makes transform from Markdown (#9477) a simpler operation, and just
generally starts the cleanup of the messiness of hard-coded filenames.

The package compiler will fallback to injecting welcome.htm into this
property if (a) welcome.htm is present, and (b) the property does not
already have a value. This doesn't buy us much because we still need to
support welcome.htm for existing legacy packages, but does mean that
our .kmp package metadata will be more consistent for packages compiled
with 17.0+ compilers.
2023-10-08 07:22:57 +07:00

259 lines
No EOL
9.9 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!--
.kps file schema, version 7.0
Copyright (C) SIL International
Supports KPS files for Keyman Developer 7+
Expects FileVersion 7.0
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Package">
<xs:complexType>
<xs:all>
<xs:element minOccurs="1" maxOccurs="1" name="System">
<xs:complexType>
<xs:all>
<xs:element minOccurs="1" maxOccurs="1" name="KeymanDeveloperVersion" type="km-version" />
<xs:element minOccurs="1" maxOccurs="1" name="FileVersion" type="km-version" />
</xs:all>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="Options">
<xs:complexType>
<xs:all>
<xs:element minOccurs="0" maxOccurs="1" name="ExecuteProgram" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="ReadMeFile" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="GraphicFile" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="LicenseFile" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="WelcomeFile" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="MSIFileName" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="MSIOptions" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="FollowKeyboardVersion" type="km-empty" />
</xs:all>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="StartMenu">
<xs:complexType>
<xs:all>
<xs:element minOccurs="0" maxOccurs="1" name="Folder" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="AddUninstallEntry" type="km-empty" />
<xs:element minOccurs="0" maxOccurs="1" name="Items">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Item">
<xs:complexType>
<xs:all>
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="FileName" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="Arguments" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="Icon" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="Location" type="km-start-menu-location" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="Info">
<xs:complexType>
<xs:all>
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="km-info" />
<xs:element minOccurs="0" maxOccurs="1" name="Version" type="km-info" />
<xs:element minOccurs="0" maxOccurs="1" name="Copyright" type="km-info" />
<xs:element minOccurs="0" maxOccurs="1" name="Author" type="km-info" />
<xs:element minOccurs="0" maxOccurs="1" name="WebSite" type="km-info" />
<xs:element minOccurs="0" maxOccurs="1" name="Description" type="km-info" />
</xs:all>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="Files">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="File">
<xs:complexType>
<xs:all>
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="Description" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="CopyLocation" type="km-file-copy-location" />
<xs:element minOccurs="0" maxOccurs="1" name="FileType" type="xs:string" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="RelatedPackages">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="RelatedPackage">
<xs:complexType>
<xs:attribute name="ID" type="xs:string" />
<!-- "deprecates" is only valid value, if not present then means "related" -->
<xs:attribute name="Relationship" type="km-package-relationship" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="Keyboards">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Keyboard">
<xs:complexType>
<xs:all>
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="ID" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="Version" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="RTL" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="OSKFont" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="DisplayFont" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="Languages" type="km-keyboard-languages" />
<xs:element minOccurs="0" maxOccurs="1" name="Examples" type="km-keyboard-examples" />
<xs:element minOccurs="0" maxOccurs="1" name="WebOSKFonts" type="km-keyboard-fonts" />
<xs:element minOccurs="0" maxOccurs="1" name="WebDisplayFonts" type="km-keyboard-fonts" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="LexicalModels">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="LexicalModel">
<xs:complexType>
<xs:all>
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="ID" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="RTL" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="Languages" type="km-keyboard-languages" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Deprecated elements: we won't validate as processors ignore them -->
<xs:element minOccurs="0" maxOccurs="1" name="Strings">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="String">
<xs:complexType>
<xs:attribute name="Name" type="xs:string" />
<xs:attribute name="Value" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="Buttons" type="km-any" />
<xs:element minOccurs="0" maxOccurs="1" name="Registry" type="km-any" />
</xs:all>
</xs:complexType>
</xs:element>
<xs:complexType name="km-empty">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="km-any">
<xs:sequence>
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip" />
</xs:sequence>
</xs:complexType>
<xs:simpleType name="km-version">
<xs:restriction base="xs:string">
<xs:pattern value="(\d+\.)+(\d+)"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="km-info">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="URL" type="xs:anyURI" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="km-file-copy-location">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0" />
<xs:maxInclusive value="3"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="km-package-relationship">
<xs:restriction base="xs:string">
<xs:pattern value="deprecates" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="km-start-menu-location">
<xs:restriction base="xs:string">
<xs:pattern value="psmelStartMenu|psmelDesktop"></xs:pattern>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="km-keyboard-languages">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Language">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="ID" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="km-keyboard-examples">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Example">
<xs:complexType>
<xs:attribute name="ID" type="xs:string" />
<xs:attribute name="Keys" type="xs:string" />
<xs:attribute name="Text" type="xs:string" />
<xs:attribute name="Note" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="km-keyboard-fonts">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Font">
<xs:complexType>
<xs:attribute name="Filename" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>