Skip to content

Commit 251f639

Browse files
authored
Merge pull request #275 from keymanapp/chore/kps-schema-18.0
chore: add v18.0 kps schema
2 parents c3dddb0 + 53e6367 commit 251f639

2 files changed

Lines changed: 274 additions & 4 deletions

File tree

schemas/kps/18.0/kps.xsd

Lines changed: 259 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,259 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
.kps file schema, version 18.0
4+
5+
Copyright (C) SIL International
6+
7+
Supports KPS files for Keyman Developer 7+
8+
9+
Expects FileVersion '7.0' or '12.0'
10+
-->
11+
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
12+
13+
<xs:element name="Package">
14+
<xs:complexType>
15+
<xs:all>
16+
17+
18+
<xs:element minOccurs="1" maxOccurs="1" name="System">
19+
<xs:complexType>
20+
<xs:all>
21+
<xs:element minOccurs="1" maxOccurs="1" name="KeymanDeveloperVersion" type="km-version" />
22+
<xs:element minOccurs="1" maxOccurs="1" name="FileVersion" type="km-version" />
23+
</xs:all>
24+
</xs:complexType>
25+
</xs:element>
26+
27+
28+
<xs:element minOccurs="0" maxOccurs="1" name="Options">
29+
<xs:complexType>
30+
<xs:all>
31+
<xs:element minOccurs="0" maxOccurs="1" name="ExecuteProgram" type="xs:string" />
32+
<xs:element minOccurs="0" maxOccurs="1" name="ReadMeFile" type="xs:string" />
33+
<xs:element minOccurs="0" maxOccurs="1" name="GraphicFile" type="xs:string" />
34+
<xs:element minOccurs="0" maxOccurs="1" name="LicenseFile" type="xs:string" />
35+
<xs:element minOccurs="0" maxOccurs="1" name="WelcomeFile" type="xs:string" />
36+
<xs:element minOccurs="0" maxOccurs="1" name="MSIFileName" type="xs:string" />
37+
<xs:element minOccurs="0" maxOccurs="1" name="MSIOptions" type="xs:string" />
38+
<xs:element minOccurs="0" maxOccurs="1" name="FollowKeyboardVersion" type="km-empty" />
39+
</xs:all>
40+
</xs:complexType>
41+
</xs:element>
42+
43+
44+
<xs:element minOccurs="0" maxOccurs="1" name="StartMenu">
45+
<xs:complexType>
46+
<xs:all>
47+
<xs:element minOccurs="0" maxOccurs="1" name="Folder" type="xs:string" />
48+
<xs:element minOccurs="0" maxOccurs="1" name="AddUninstallEntry" type="km-empty" />
49+
<xs:element minOccurs="0" maxOccurs="1" name="Items">
50+
<xs:complexType>
51+
<xs:sequence>
52+
<xs:element minOccurs="0" maxOccurs="unbounded" name="Item">
53+
<xs:complexType>
54+
<xs:all>
55+
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
56+
<xs:element minOccurs="0" maxOccurs="1" name="FileName" type="xs:string" />
57+
<xs:element minOccurs="0" maxOccurs="1" name="Arguments" type="xs:string" />
58+
<xs:element minOccurs="0" maxOccurs="1" name="Icon" type="xs:string" />
59+
<xs:element minOccurs="0" maxOccurs="1" name="Location" type="km-start-menu-location" />
60+
</xs:all>
61+
</xs:complexType>
62+
</xs:element>
63+
</xs:sequence>
64+
</xs:complexType>
65+
</xs:element>
66+
</xs:all>
67+
</xs:complexType>
68+
</xs:element>
69+
70+
71+
<xs:element minOccurs="0" maxOccurs="1" name="Info">
72+
<xs:complexType>
73+
<xs:all>
74+
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="km-info" />
75+
<xs:element minOccurs="0" maxOccurs="1" name="Version" type="km-info" />
76+
<xs:element minOccurs="0" maxOccurs="1" name="Copyright" type="km-info" />
77+
<xs:element minOccurs="0" maxOccurs="1" name="Author" type="km-info" />
78+
<xs:element minOccurs="0" maxOccurs="1" name="WebSite" type="km-info" />
79+
<xs:element minOccurs="0" maxOccurs="1" name="Description" type="km-info" />
80+
</xs:all>
81+
</xs:complexType>
82+
</xs:element>
83+
84+
85+
<xs:element minOccurs="0" maxOccurs="1" name="Files">
86+
<xs:complexType>
87+
<xs:sequence>
88+
<xs:element minOccurs="0" maxOccurs="unbounded" name="File">
89+
<xs:complexType>
90+
<xs:all>
91+
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
92+
<xs:element minOccurs="0" maxOccurs="1" name="Description" type="xs:string" />
93+
<xs:element minOccurs="0" maxOccurs="1" name="CopyLocation" type="km-file-copy-location" />
94+
<xs:element minOccurs="0" maxOccurs="1" name="FileType" type="xs:string" />
95+
</xs:all>
96+
</xs:complexType>
97+
</xs:element>
98+
</xs:sequence>
99+
</xs:complexType>
100+
</xs:element>
101+
102+
<xs:element minOccurs="0" maxOccurs="1" name="RelatedPackages">
103+
<xs:complexType>
104+
<xs:sequence>
105+
<xs:element minOccurs="0" maxOccurs="unbounded" name="RelatedPackage">
106+
<xs:complexType>
107+
<xs:attribute name="ID" type="xs:string" />
108+
<!-- "deprecates" is only valid value, if not present then means "related" -->
109+
<xs:attribute name="Relationship" type="km-package-relationship" />
110+
</xs:complexType>
111+
</xs:element>
112+
</xs:sequence>
113+
</xs:complexType>
114+
</xs:element>
115+
116+
<xs:element minOccurs="0" maxOccurs="1" name="Keyboards">
117+
<xs:complexType>
118+
<xs:sequence>
119+
<xs:element minOccurs="0" maxOccurs="unbounded" name="Keyboard">
120+
<xs:complexType>
121+
<xs:all>
122+
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" /> <!-- deprecated: 18.0 -->
123+
<xs:element minOccurs="0" maxOccurs="1" name="ID" type="xs:string" />
124+
<xs:element minOccurs="0" maxOccurs="1" name="Version" type="xs:string" /> <!-- deprecated: 18.0 -->
125+
<xs:element minOccurs="0" maxOccurs="1" name="RTL" type="xs:string" /> <!-- deprecated: 18.0 -->
126+
<xs:element minOccurs="0" maxOccurs="1" name="OSKFont" type="xs:string" />
127+
<xs:element minOccurs="0" maxOccurs="1" name="DisplayFont" type="xs:string" />
128+
<xs:element minOccurs="0" maxOccurs="1" name="Languages" type="km-keyboard-languages" />
129+
<xs:element minOccurs="0" maxOccurs="1" name="Examples" type="km-keyboard-examples" />
130+
<xs:element minOccurs="0" maxOccurs="1" name="WebOSKFonts" type="km-keyboard-fonts" />
131+
<xs:element minOccurs="0" maxOccurs="1" name="WebDisplayFonts" type="km-keyboard-fonts" />
132+
</xs:all>
133+
</xs:complexType>
134+
</xs:element>
135+
</xs:sequence>
136+
</xs:complexType>
137+
</xs:element>
138+
139+
140+
<xs:element minOccurs="0" maxOccurs="1" name="LexicalModels">
141+
<xs:complexType>
142+
<xs:sequence>
143+
<xs:element minOccurs="0" maxOccurs="unbounded" name="LexicalModel">
144+
<xs:complexType>
145+
<xs:all>
146+
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" /> <!-- deprecated: 18.0 -->
147+
<xs:element minOccurs="0" maxOccurs="1" name="ID" type="xs:string" />
148+
<xs:element minOccurs="0" maxOccurs="1" name="RTL" type="xs:string" /> <!-- deprecated: 18.0 -->
149+
<xs:element minOccurs="0" maxOccurs="1" name="Languages" type="km-keyboard-languages" />
150+
</xs:all>
151+
</xs:complexType>
152+
</xs:element>
153+
</xs:sequence>
154+
</xs:complexType>
155+
</xs:element>
156+
157+
<!-- Deprecated elements: we won't validate as processors ignore them -->
158+
159+
<xs:element minOccurs="0" maxOccurs="1" name="Strings">
160+
<xs:complexType>
161+
<xs:sequence>
162+
<xs:element minOccurs="0" maxOccurs="unbounded" name="String">
163+
<xs:complexType>
164+
<xs:attribute name="Name" type="xs:string" />
165+
<xs:attribute name="Value" type="xs:string" />
166+
</xs:complexType>
167+
</xs:element>
168+
</xs:sequence>
169+
</xs:complexType>
170+
</xs:element>
171+
172+
<xs:element minOccurs="0" maxOccurs="1" name="Buttons" type="km-any" />
173+
<xs:element minOccurs="0" maxOccurs="1" name="Registry" type="km-any" />
174+
175+
</xs:all>
176+
</xs:complexType>
177+
</xs:element>
178+
179+
<xs:complexType name="km-empty">
180+
<xs:sequence/>
181+
</xs:complexType>
182+
183+
<xs:complexType name="km-any">
184+
<xs:sequence>
185+
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip" />
186+
</xs:sequence>
187+
</xs:complexType>
188+
189+
<xs:simpleType name="km-version">
190+
<xs:restriction base="xs:string">
191+
<xs:pattern value="(\d+\.)+(\d+)"/>
192+
</xs:restriction>
193+
</xs:simpleType>
194+
195+
<xs:complexType name="km-info">
196+
<xs:simpleContent>
197+
<xs:extension base="xs:string">
198+
<xs:attribute name="URL" type="xs:anyURI" />
199+
</xs:extension>
200+
</xs:simpleContent>
201+
</xs:complexType>
202+
203+
<xs:simpleType name="km-file-copy-location">
204+
<xs:restriction base="xs:integer">
205+
<xs:minInclusive value="0" />
206+
<xs:maxInclusive value="3"/>
207+
</xs:restriction>
208+
</xs:simpleType>
209+
210+
<xs:simpleType name="km-package-relationship">
211+
<xs:restriction base="xs:string">
212+
<xs:pattern value="deprecates" />
213+
</xs:restriction>
214+
</xs:simpleType>
215+
216+
<xs:simpleType name="km-start-menu-location">
217+
<xs:restriction base="xs:string">
218+
<xs:pattern value="psmelStartMenu|psmelDesktop"></xs:pattern>
219+
</xs:restriction>
220+
</xs:simpleType>
221+
222+
<xs:complexType name="km-keyboard-languages">
223+
<xs:sequence>
224+
<xs:element minOccurs="0" maxOccurs="unbounded" name="Language">
225+
<xs:complexType>
226+
<xs:simpleContent>
227+
<xs:extension base="xs:string">
228+
<xs:attribute name="ID" type="xs:string" />
229+
</xs:extension>
230+
</xs:simpleContent>
231+
</xs:complexType>
232+
</xs:element>
233+
</xs:sequence>
234+
</xs:complexType>
235+
236+
<xs:complexType name="km-keyboard-examples">
237+
<xs:sequence>
238+
<xs:element minOccurs="0" maxOccurs="unbounded" name="Example">
239+
<xs:complexType>
240+
<xs:attribute name="ID" type="xs:string" />
241+
<xs:attribute name="Keys" type="xs:string" />
242+
<xs:attribute name="Text" type="xs:string" />
243+
<xs:attribute name="Note" type="xs:string" />
244+
</xs:complexType>
245+
</xs:element>
246+
</xs:sequence>
247+
</xs:complexType>
248+
249+
<xs:complexType name="km-keyboard-fonts">
250+
<xs:sequence>
251+
<xs:element minOccurs="0" maxOccurs="unbounded" name="Font">
252+
<xs:complexType>
253+
<xs:attribute name="Filename" type="xs:string" />
254+
</xs:complexType>
255+
</xs:element>
256+
</xs:sequence>
257+
</xs:complexType>
258+
259+
</xs:schema>

schemas/kps/README.md

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
1-
# kps
1+
# kps.xsd
22

3-
* kps.xsd
3+
* .kps Keyman package file format - XML
4+
5+
## 2025-04-02 18.0
6+
* Version 18.0 deprecates the following fields, and kmc-package does not use them (@keymanapp/keyman#13600):
7+
- Keyboards/Keyboard/Version
8+
- Keyboards/Keyboard/Name
9+
- Keyboards/Keyboard/RTL
10+
- LexicalModels/LexicalModel/Name
11+
- LexicalModels/LexicalModel/RTL (Note: was never read or written by any Keyman tooling)
412

513
## 2023-10-19 17.0
614
* Version 17.0 adds:
@@ -11,9 +19,12 @@
1119
- Keyboards/Keyboard/Examples - a list of typing examples for the keyboard
1220
- Keyboards/Keyboard/WebOSKFonts - a list of font filenames (not necessarily in package) suitable for rendering the on screen keyboard
1321
- Keyboards/Keyboard/WebDisplayFonts - a list of font filenames (not necessarily in package) suitable for use with the keyboard
22+
* Version 17.0 removes:
23+
- LexicalModels/LexicalModel/Version - version information is not stored in the models, but only in the package metadata (was unused)
1424

15-
## 2023-04-21 7.0.1 (not published)
16-
* Removes LexicalModel.Version, as it was never read or written
25+
## 2023-04-21 7.0.1
26+
* Removes LexicalModels/LexicalModel/Version, as it was never read or written
1727

1828
## 2021-07-19 7.0
1929
* Initial version 7.0
30+

0 commit comments

Comments
 (0)