coursecode 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +322 -0
  3. package/THIRD_PARTY_NOTICES.md +22 -0
  4. package/bin/cli.js +331 -0
  5. package/framework/assets/logo-coursecode-black.svg +14 -0
  6. package/framework/assets/logo-coursecode-white.svg +14 -0
  7. package/framework/assets/logo-coursecode.svg +14 -0
  8. package/framework/css/01-base.css +160 -0
  9. package/framework/css/02-layout.css +499 -0
  10. package/framework/css/accessibility.css +834 -0
  11. package/framework/css/components/accordions.css +710 -0
  12. package/framework/css/components/assessments.css +520 -0
  13. package/framework/css/components/audio-player.css +570 -0
  14. package/framework/css/components/badges.css +80 -0
  15. package/framework/css/components/breadcrumbs.css +87 -0
  16. package/framework/css/components/buttons.css +707 -0
  17. package/framework/css/components/callouts.css +1280 -0
  18. package/framework/css/components/cards.css +475 -0
  19. package/framework/css/components/carousel.css +193 -0
  20. package/framework/css/components/checkbox-group.css +123 -0
  21. package/framework/css/components/checklist.css +203 -0
  22. package/framework/css/components/collapse.css +96 -0
  23. package/framework/css/components/comparison.css +33 -0
  24. package/framework/css/components/content-image.css +36 -0
  25. package/framework/css/components/document-gallery.css +425 -0
  26. package/framework/css/components/dropdown.css +115 -0
  27. package/framework/css/components/embed-frame.css +142 -0
  28. package/framework/css/components/engagement.css +412 -0
  29. package/framework/css/components/features.css +35 -0
  30. package/framework/css/components/flip-cards.css +253 -0
  31. package/framework/css/components/footer.css +353 -0
  32. package/framework/css/components/forms.css +294 -0
  33. package/framework/css/components/hero.css +216 -0
  34. package/framework/css/components/images.css +528 -0
  35. package/framework/css/components/interactive-timeline.css +274 -0
  36. package/framework/css/components/intro-cards.css +30 -0
  37. package/framework/css/components/lightbox.css +666 -0
  38. package/framework/css/components/loading.css +65 -0
  39. package/framework/css/components/modals.css +235 -0
  40. package/framework/css/components/notifications.css +107 -0
  41. package/framework/css/components/quote.css +150 -0
  42. package/framework/css/components/sidebar.css +684 -0
  43. package/framework/css/components/slide-header.css +52 -0
  44. package/framework/css/components/spinner.css +62 -0
  45. package/framework/css/components/stats.css +44 -0
  46. package/framework/css/components/steps.css +232 -0
  47. package/framework/css/components/tables.css +90 -0
  48. package/framework/css/components/tabs.css +347 -0
  49. package/framework/css/components/timeline.css +154 -0
  50. package/framework/css/components/toggle.css +95 -0
  51. package/framework/css/components/tooltip.css +226 -0
  52. package/framework/css/components/video-player.css +438 -0
  53. package/framework/css/design-tokens.css +707 -0
  54. package/framework/css/framework.css +86 -0
  55. package/framework/css/interactions/accessibility.css +75 -0
  56. package/framework/css/interactions/base.css +92 -0
  57. package/framework/css/interactions/drag-drop.css +295 -0
  58. package/framework/css/interactions/fill-in-the-blank.css +236 -0
  59. package/framework/css/interactions/hotspots.css +69 -0
  60. package/framework/css/interactions/index.css +45 -0
  61. package/framework/css/interactions/interactive-image.css +359 -0
  62. package/framework/css/interactions/likert.css +126 -0
  63. package/framework/css/interactions/matching.css +354 -0
  64. package/framework/css/interactions/numeric-input.css +78 -0
  65. package/framework/css/interactions/sequencing.css +378 -0
  66. package/framework/css/interactions/true-false.css +177 -0
  67. package/framework/css/layouts/article.css +258 -0
  68. package/framework/css/layouts/base.css +30 -0
  69. package/framework/css/layouts/canvas.css +38 -0
  70. package/framework/css/layouts/focused.css +236 -0
  71. package/framework/css/layouts/index.css +29 -0
  72. package/framework/css/layouts/presentation.css +191 -0
  73. package/framework/css/layouts/traditional.css +52 -0
  74. package/framework/css/responsive.css +439 -0
  75. package/framework/css/utilities/accessibility-utils.css +59 -0
  76. package/framework/css/utilities/animations.css +419 -0
  77. package/framework/css/utilities/borders.css +72 -0
  78. package/framework/css/utilities/colors.css +76 -0
  79. package/framework/css/utilities/container.css +46 -0
  80. package/framework/css/utilities/decorative.css +442 -0
  81. package/framework/css/utilities/display.css +257 -0
  82. package/framework/css/utilities/flexbox.css +80 -0
  83. package/framework/css/utilities/grid.css +69 -0
  84. package/framework/css/utilities/icons.css +534 -0
  85. package/framework/css/utilities/lists.css +190 -0
  86. package/framework/css/utilities/spacing.css +167 -0
  87. package/framework/css/utilities/tables.css +81 -0
  88. package/framework/css/utilities/typography.css +159 -0
  89. package/framework/css/utilities/visibility.css +117 -0
  90. package/framework/docs/COURSE_AUTHORING_GUIDE.md +1773 -0
  91. package/framework/docs/COURSE_OUTLINE_GUIDE.md +725 -0
  92. package/framework/docs/COURSE_OUTLINE_TEMPLATE.md +161 -0
  93. package/framework/docs/DATA_MODEL.md +409 -0
  94. package/framework/docs/FRAMEWORK_GUIDE.md +1088 -0
  95. package/framework/docs/USER_GUIDE.md +583 -0
  96. package/framework/docs/examples/cloudflare-channel-relay.js +169 -0
  97. package/framework/docs/examples/cloudflare-data-worker.js +102 -0
  98. package/framework/docs/examples/cloudflare-error-worker.js +228 -0
  99. package/framework/index.html +175 -0
  100. package/framework/js/app/AppActions.js +410 -0
  101. package/framework/js/app/AppState.js +225 -0
  102. package/framework/js/app/AppUI.js +616 -0
  103. package/framework/js/assessment/AssessmentActions.js +615 -0
  104. package/framework/js/assessment/AssessmentFactory.js +471 -0
  105. package/framework/js/assessment/AssessmentState.js +322 -0
  106. package/framework/js/assessment/AssessmentUI.js +451 -0
  107. package/framework/js/automation/api-engagement.js +196 -0
  108. package/framework/js/automation/api-interactions.js +167 -0
  109. package/framework/js/automation/api.js +242 -0
  110. package/framework/js/automation/index.js +41 -0
  111. package/framework/js/components/interactions/drag-drop.js +884 -0
  112. package/framework/js/components/interactions/fill-in.js +535 -0
  113. package/framework/js/components/interactions/hotspot.js +702 -0
  114. package/framework/js/components/interactions/interaction-base.js +511 -0
  115. package/framework/js/components/interactions/likert.js +301 -0
  116. package/framework/js/components/interactions/matching.js +699 -0
  117. package/framework/js/components/interactions/multiple-choice.js +377 -0
  118. package/framework/js/components/interactions/numeric.js +271 -0
  119. package/framework/js/components/interactions/sequencing.js +423 -0
  120. package/framework/js/components/interactions/true-false.js +241 -0
  121. package/framework/js/components/ui-components/accordion.js +442 -0
  122. package/framework/js/components/ui-components/alert.js +88 -0
  123. package/framework/js/components/ui-components/audio-player.js +1193 -0
  124. package/framework/js/components/ui-components/callout.js +121 -0
  125. package/framework/js/components/ui-components/carousel.js +145 -0
  126. package/framework/js/components/ui-components/checkbox-group.js +87 -0
  127. package/framework/js/components/ui-components/checklist.js +40 -0
  128. package/framework/js/components/ui-components/collapse.js +114 -0
  129. package/framework/js/components/ui-components/comparison.js +30 -0
  130. package/framework/js/components/ui-components/conditional-display.js +150 -0
  131. package/framework/js/components/ui-components/content-image.js +41 -0
  132. package/framework/js/components/ui-components/dropdown.js +262 -0
  133. package/framework/js/components/ui-components/embed-frame.js +274 -0
  134. package/framework/js/components/ui-components/features.js +33 -0
  135. package/framework/js/components/ui-components/flip-card.js +230 -0
  136. package/framework/js/components/ui-components/form-validator.js +76 -0
  137. package/framework/js/components/ui-components/hero.js +49 -0
  138. package/framework/js/components/ui-components/index.js +12 -0
  139. package/framework/js/components/ui-components/interactive-image.js +235 -0
  140. package/framework/js/components/ui-components/interactive-timeline.js +285 -0
  141. package/framework/js/components/ui-components/intro-cards.js +35 -0
  142. package/framework/js/components/ui-components/lightbox.js +652 -0
  143. package/framework/js/components/ui-components/modal.js +386 -0
  144. package/framework/js/components/ui-components/notifications.js +145 -0
  145. package/framework/js/components/ui-components/progress.js +88 -0
  146. package/framework/js/components/ui-components/quote.js +41 -0
  147. package/framework/js/components/ui-components/stats.js +33 -0
  148. package/framework/js/components/ui-components/steps.js +41 -0
  149. package/framework/js/components/ui-components/tabs.js +255 -0
  150. package/framework/js/components/ui-components/timeline.js +42 -0
  151. package/framework/js/components/ui-components/toggle-group.js +73 -0
  152. package/framework/js/components/ui-components/tooltip.js +458 -0
  153. package/framework/js/components/ui-components/value-display.js +133 -0
  154. package/framework/js/components/ui-components/video-player.js +686 -0
  155. package/framework/js/core/component-catalog.js +121 -0
  156. package/framework/js/core/event-bus.js +178 -0
  157. package/framework/js/core/interaction-catalog.js +149 -0
  158. package/framework/js/dev/runtime-linter.js +1725 -0
  159. package/framework/js/drivers/cmi5-driver.js +768 -0
  160. package/framework/js/drivers/driver-factory.js +77 -0
  161. package/framework/js/drivers/driver-interface.js +110 -0
  162. package/framework/js/drivers/http-driver-base.js +241 -0
  163. package/framework/js/drivers/lti-driver.js +508 -0
  164. package/framework/js/drivers/proxy-driver.js +444 -0
  165. package/framework/js/drivers/scorm-12-driver.js +560 -0
  166. package/framework/js/drivers/scorm-2004-driver.js +775 -0
  167. package/framework/js/drivers/scorm-driver-base.js +112 -0
  168. package/framework/js/engagement/engagement-manager.js +404 -0
  169. package/framework/js/engagement/engagement-progress.js +191 -0
  170. package/framework/js/engagement/engagement-trackers.js +215 -0
  171. package/framework/js/engagement/requirement-strategies.js +268 -0
  172. package/framework/js/main.js +727 -0
  173. package/framework/js/managers/accessibility-manager.js +499 -0
  174. package/framework/js/managers/assessment-manager.js +230 -0
  175. package/framework/js/managers/audio-manager.js +944 -0
  176. package/framework/js/managers/comment-manager.js +88 -0
  177. package/framework/js/managers/flag-manager.js +86 -0
  178. package/framework/js/managers/interaction-manager.js +254 -0
  179. package/framework/js/managers/interaction-registry.js +96 -0
  180. package/framework/js/managers/objective-manager.js +423 -0
  181. package/framework/js/managers/score-manager.js +441 -0
  182. package/framework/js/managers/video-manager.js +536 -0
  183. package/framework/js/navigation/Breadcrumbs.js +234 -0
  184. package/framework/js/navigation/NavigationActions.js +1132 -0
  185. package/framework/js/navigation/NavigationState.js +276 -0
  186. package/framework/js/navigation/NavigationUI.js +574 -0
  187. package/framework/js/navigation/document-gallery.js +357 -0
  188. package/framework/js/navigation/navigation-helpers.js +175 -0
  189. package/framework/js/navigation/navigation-validators.js +174 -0
  190. package/framework/js/state/index.js +8 -0
  191. package/framework/js/state/lms-connection.js +482 -0
  192. package/framework/js/state/lms-error-utils.js +58 -0
  193. package/framework/js/state/state-commits.js +200 -0
  194. package/framework/js/state/state-domains.js +86 -0
  195. package/framework/js/state/state-manager.js +502 -0
  196. package/framework/js/state/state-validation.js +311 -0
  197. package/framework/js/state/transaction-log.js +41 -0
  198. package/framework/js/state/xapi-statement-service.js +325 -0
  199. package/framework/js/utilities/access-control.js +99 -0
  200. package/framework/js/utilities/breakpoint-manager.js +315 -0
  201. package/framework/js/utilities/canvas-slide.js +35 -0
  202. package/framework/js/utilities/conditional-display.js +388 -0
  203. package/framework/js/utilities/course-channel.js +214 -0
  204. package/framework/js/utilities/course-helpers.js +420 -0
  205. package/framework/js/utilities/data-reporter.js +273 -0
  206. package/framework/js/utilities/error-reporter.js +313 -0
  207. package/framework/js/utilities/hotspot-helper.js +341 -0
  208. package/framework/js/utilities/icons.js +348 -0
  209. package/framework/js/utilities/logger.js +92 -0
  210. package/framework/js/utilities/markdown-renderer.js +45 -0
  211. package/framework/js/utilities/scroll-tracker.js +68 -0
  212. package/framework/js/utilities/ui-initializer.js +146 -0
  213. package/framework/js/utilities/utilities.js +293 -0
  214. package/framework/js/utilities/view-manager.js +227 -0
  215. package/framework/js/validation/html-validators.js +422 -0
  216. package/framework/js/validation/scorm-validators.js +438 -0
  217. package/framework/js/vendor/pipwerks.js +931 -0
  218. package/framework/scripts/generate-narration.js +629 -0
  219. package/framework/scripts/tts-providers/azure-provider.js +178 -0
  220. package/framework/scripts/tts-providers/base-provider.js +81 -0
  221. package/framework/scripts/tts-providers/deepgram-provider.js +135 -0
  222. package/framework/scripts/tts-providers/elevenlabs-provider.js +148 -0
  223. package/framework/scripts/tts-providers/google-provider.js +272 -0
  224. package/framework/scripts/tts-providers/index.js +158 -0
  225. package/framework/scripts/tts-providers/openai-provider.js +143 -0
  226. package/framework/version.json +63 -0
  227. package/lib/authoring-api.js +919 -0
  228. package/lib/build-linter.js +450 -0
  229. package/lib/build-packaging.js +186 -0
  230. package/lib/build.js +88 -0
  231. package/lib/cloud.js +691 -0
  232. package/lib/convert.js +341 -0
  233. package/lib/course-parser.js +936 -0
  234. package/lib/course-writer.js +258 -0
  235. package/lib/create.js +248 -0
  236. package/lib/css-index.js +237 -0
  237. package/lib/dev.js +51 -0
  238. package/lib/export-content.js +1246 -0
  239. package/lib/headless-browser.js +413 -0
  240. package/lib/import.js +377 -0
  241. package/lib/index.js +80 -0
  242. package/lib/info.js +79 -0
  243. package/lib/interaction-formatters.js +568 -0
  244. package/lib/manifest/cmi5-manifest.js +63 -0
  245. package/lib/manifest/lti-tool-config.js +53 -0
  246. package/lib/manifest/manifest-factory.js +99 -0
  247. package/lib/manifest/scorm-12-manifest.js +61 -0
  248. package/lib/manifest/scorm-2004-manifest.js +94 -0
  249. package/lib/manifest/scorm-proxy-manifest.js +104 -0
  250. package/lib/manifest-parser.js +96 -0
  251. package/lib/mcp-prompts.js +753 -0
  252. package/lib/mcp-server.js +316 -0
  253. package/lib/narration.js +53 -0
  254. package/lib/pdf-structure.js +142 -0
  255. package/lib/preview-export.js +231 -0
  256. package/lib/preview-routes-api.js +662 -0
  257. package/lib/preview-routes-editing.js +159 -0
  258. package/lib/preview-routes-lms.js +230 -0
  259. package/lib/preview-server.js +564 -0
  260. package/lib/project-utils.js +269 -0
  261. package/lib/proxy-templates/proxy.html +68 -0
  262. package/lib/proxy-templates/scorm-bridge.js +112 -0
  263. package/lib/scaffold.js +193 -0
  264. package/lib/schema-extractor.js +361 -0
  265. package/lib/slide-source-editor.js +586 -0
  266. package/lib/stub-player/app-viewer.js +195 -0
  267. package/lib/stub-player/app.js +370 -0
  268. package/lib/stub-player/catalog-panel.js +312 -0
  269. package/lib/stub-player/config-panel.js +1303 -0
  270. package/lib/stub-player/content-generator.js +586 -0
  271. package/lib/stub-player/content-viewer.js +173 -0
  272. package/lib/stub-player/debug-panel.js +420 -0
  273. package/lib/stub-player/edit-mode.js +922 -0
  274. package/lib/stub-player/edit-utils.js +400 -0
  275. package/lib/stub-player/header-bar.js +354 -0
  276. package/lib/stub-player/interaction-editor.js +210 -0
  277. package/lib/stub-player/interactions-panel.js +565 -0
  278. package/lib/stub-player/lms-api.js +1094 -0
  279. package/lib/stub-player/login-screen.js +74 -0
  280. package/lib/stub-player/outline-mode.js +689 -0
  281. package/lib/stub-player/styles/_assessments-panel.css +245 -0
  282. package/lib/stub-player/styles/_base.css +89 -0
  283. package/lib/stub-player/styles/_catalog-icons.css +96 -0
  284. package/lib/stub-player/styles/_catalog-panel.css +291 -0
  285. package/lib/stub-player/styles/_config-panel.css +636 -0
  286. package/lib/stub-player/styles/_content-viewer.css +834 -0
  287. package/lib/stub-player/styles/_debug-panel.css +576 -0
  288. package/lib/stub-player/styles/_edit-mode.css +128 -0
  289. package/lib/stub-player/styles/_header-bar.css +343 -0
  290. package/lib/stub-player/styles/_interaction-editor.css +140 -0
  291. package/lib/stub-player/styles/_interactions-panel.css +1038 -0
  292. package/lib/stub-player/styles/_login-screen.css +102 -0
  293. package/lib/stub-player/styles/_outline-mode.css +752 -0
  294. package/lib/stub-player/styles.css +15 -0
  295. package/lib/stub-player.js +160 -0
  296. package/lib/test-data-reporting.js +176 -0
  297. package/lib/test-error-reporting.js +146 -0
  298. package/lib/token.js +86 -0
  299. package/lib/upgrade.js +257 -0
  300. package/lib/validation-rules.js +517 -0
  301. package/lib/vite-plugin-content-discovery.js +296 -0
  302. package/package.json +108 -0
  303. package/schemas/XMLSchema.dtd +402 -0
  304. package/schemas/adlcp_v1p3.xsd +111 -0
  305. package/schemas/adlnav_v1p3.xsd +61 -0
  306. package/schemas/adlseq_v1p3.xsd +93 -0
  307. package/schemas/common/anyElement.xsd +27 -0
  308. package/schemas/common/dataTypes.xsd +138 -0
  309. package/schemas/common/elementNames.xsd +767 -0
  310. package/schemas/common/elementTypes.xsd +786 -0
  311. package/schemas/common/rootElement.xsd +31 -0
  312. package/schemas/common/vocabTypes.xsd +345 -0
  313. package/schemas/common/vocabValues.xsd +257 -0
  314. package/schemas/datatypes.dtd +203 -0
  315. package/schemas/ims_xml.xsd +35 -0
  316. package/schemas/imscp_v1p1.xsd +368 -0
  317. package/schemas/imsss_v1p0.xsd +67 -0
  318. package/schemas/imsss_v1p0auxresource.xsd +19 -0
  319. package/schemas/imsss_v1p0control.xsd +20 -0
  320. package/schemas/imsss_v1p0delivery.xsd +17 -0
  321. package/schemas/imsss_v1p0limit.xsd +47 -0
  322. package/schemas/imsss_v1p0objective.xsd +67 -0
  323. package/schemas/imsss_v1p0random.xsd +16 -0
  324. package/schemas/imsss_v1p0rollup.xsd +46 -0
  325. package/schemas/imsss_v1p0seqrule.xsd +108 -0
  326. package/schemas/imsss_v1p0util.xsd +94 -0
  327. package/schemas/license.txt +17 -0
  328. package/schemas/lom.xsd +102 -0
  329. package/schemas/lomCustom.xsd +62 -0
  330. package/schemas/lomLoose.xsd +62 -0
  331. package/schemas/lomStrict.xsd +62 -0
  332. package/schemas/xml.xsd +81 -0
  333. package/template/.env.example +92 -0
  334. package/template/course/assets/audio/example-intro.mp3 +0 -0
  335. package/template/course/assets/audio/example-ui-demo--compact-player.mp3 +0 -0
  336. package/template/course/assets/audio/example-ui-demo--demo-modal.mp3 +0 -0
  337. package/template/course/assets/audio/example-ui-demo--full-player.mp3 +0 -0
  338. package/template/course/assets/docs/example_md_1.md +39 -0
  339. package/template/course/assets/docs/example_md_2.md +41 -0
  340. package/template/course/assets/docs/example_pdf_1_thumbnail.png +0 -0
  341. package/template/course/assets/docs/example_pdf_2.pdf +0 -0
  342. package/template/course/assets/images/course-architecture.svg +36 -0
  343. package/template/course/assets/images/logo.svg +14 -0
  344. package/template/course/assets/widgets/counter-demo.html +190 -0
  345. package/template/course/assets/widgets/gravity-painter.html +384 -0
  346. package/template/course/course-config.js +539 -0
  347. package/template/course/icons.js +19 -0
  348. package/template/course/interactions/PLUGIN_GUIDE.md +97 -0
  349. package/template/course/slides/example-course-structure.js +138 -0
  350. package/template/course/slides/example-final-exam.js +144 -0
  351. package/template/course/slides/example-finishing.js +127 -0
  352. package/template/course/slides/example-interactions-showcase.js +615 -0
  353. package/template/course/slides/example-preview-tour.js +129 -0
  354. package/template/course/slides/example-remedial.js +143 -0
  355. package/template/course/slides/example-summary.js +103 -0
  356. package/template/course/slides/example-ui-showcase.js +1805 -0
  357. package/template/course/slides/example-welcome.js +123 -0
  358. package/template/course/slides/example-workflow.js +140 -0
  359. package/template/course/theme.css +165 -0
  360. package/template/eslint.config.js +47 -0
  361. package/template/package.json +28 -0
  362. package/template/vite.config.js +339 -0
@@ -0,0 +1,767 @@
1
+ <xs:schema targetNamespace="http://ltsc.ieee.org/xsd/LOM"
2
+ xmlns="http://ltsc.ieee.org/xsd/LOM"
3
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
4
+ elementFormDefault="qualified"
5
+ version="IEEE LTSC LOM XML 1.0">
6
+
7
+ <xs:annotation>
8
+ <xs:documentation>
9
+ This work is licensed under the Creative Commons Attribution-ShareAlike
10
+ License. To view a copy of this license, see the file license.txt,
11
+ visit http://creativecommons.org/licenses/by-sa/1.0 or send a letter to
12
+ Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
13
+ </xs:documentation>
14
+
15
+ <xs:documentation>
16
+ This component schema provides element name declarations for metadata elements.
17
+
18
+ This component schema checks for the uniqueness of elements declared to be unique
19
+ within their parent by the presence of the uniqueElementName attribute,
20
+ and is common to all uniqueness profiles.
21
+ </xs:documentation>
22
+ </xs:annotation>
23
+
24
+ <!-- Element declarations -->
25
+
26
+ <!-- Duplicate declarations are included as comments. -->
27
+
28
+ <!-- 1 General -->
29
+ <xs:group name="general">
30
+ <xs:sequence>
31
+ <xs:element name="general" type="general">
32
+ <xs:unique name="generalUnique">
33
+ <xs:selector xpath="*"/>
34
+ <xs:field xpath="@uniqueElementName"/>
35
+ </xs:unique>
36
+ </xs:element>
37
+ </xs:sequence>
38
+ </xs:group>
39
+
40
+ <!-- 1.1 Identifier -->
41
+ <xs:group name="identifier">
42
+ <xs:sequence>
43
+ <xs:element name="identifier" type="identifier">
44
+ <xs:unique name="identifierUnique">
45
+ <xs:selector xpath="*"/>
46
+ <xs:field xpath="@uniqueElementName"/>
47
+ </xs:unique>
48
+ </xs:element>
49
+ </xs:sequence>
50
+ </xs:group>
51
+
52
+ <!-- 1.1.1 Catalog -->
53
+ <xs:group name="catalog">
54
+ <xs:sequence>
55
+ <xs:element name="catalog" type="catalog"/>
56
+ </xs:sequence>
57
+ </xs:group>
58
+
59
+ <!-- 1.1.2 Entry -->
60
+ <xs:group name="entry">
61
+ <xs:sequence>
62
+ <xs:element name="entry" type="entry"/>
63
+ </xs:sequence>
64
+ </xs:group>
65
+
66
+ <!-- 1.2 Title -->
67
+ <xs:group name="title">
68
+ <xs:sequence>
69
+ <xs:element name="title" type="title"/>
70
+ </xs:sequence>
71
+ </xs:group>
72
+
73
+ <!-- 1.3 Language -->
74
+ <xs:group name="languageIdOrNone">
75
+ <xs:sequence>
76
+ <xs:element name="language" type="LanguageIdOrNone"/>
77
+ </xs:sequence>
78
+ </xs:group>
79
+
80
+ <!-- 1.4 Description -->
81
+ <xs:group name="descriptionUnbounded">
82
+ <xs:sequence>
83
+ <xs:element name="description" type="LangString"/>
84
+ </xs:sequence>
85
+ </xs:group>
86
+
87
+ <!-- 1.5 Keyword -->
88
+ <xs:group name="keyword">
89
+ <xs:sequence>
90
+ <xs:element name="keyword" type="keyword"/>
91
+ </xs:sequence>
92
+ </xs:group>
93
+
94
+ <!-- 1.6 Coverage -->
95
+ <xs:group name="coverage">
96
+ <xs:sequence>
97
+ <xs:element name="coverage" type="coverage"/>
98
+ </xs:sequence>
99
+ </xs:group>
100
+
101
+ <!-- 1.7 Structure -->
102
+ <xs:group name="structure">
103
+ <xs:sequence>
104
+ <xs:element name="structure" type="structure">
105
+ <xs:unique name="structureUnique">
106
+ <xs:selector xpath="*"/>
107
+ <xs:field xpath="@uniqueElementName"/>
108
+ </xs:unique>
109
+ </xs:element>
110
+ </xs:sequence>
111
+ </xs:group>
112
+
113
+ <!-- 1.8 Aggregation Level -->
114
+ <xs:group name="aggregationLevel">
115
+ <xs:sequence>
116
+ <xs:element name="aggregationLevel" type="aggregationLevel">
117
+ <xs:unique name="aggregationLevelUnique">
118
+ <xs:selector xpath="*"/>
119
+ <xs:field xpath="@uniqueElementName"/>
120
+ </xs:unique>
121
+ </xs:element>
122
+ </xs:sequence>
123
+ </xs:group>
124
+
125
+ <!-- 2 Life Cycle -->
126
+ <xs:group name="lifeCycle">
127
+ <xs:sequence>
128
+ <xs:element name="lifeCycle" type="lifeCycle">
129
+ <xs:unique name="lifeCycleUnique">
130
+ <xs:selector xpath="*"/>
131
+ <xs:field xpath="@uniqueElementName"/>
132
+ </xs:unique>
133
+ </xs:element>
134
+ </xs:sequence>
135
+ </xs:group>
136
+
137
+ <!-- 2.1 Version -->
138
+ <xs:group name="version">
139
+ <xs:sequence>
140
+ <xs:element name="version" type="version"/>
141
+ </xs:sequence>
142
+ </xs:group>
143
+
144
+ <!-- 2.2 Status -->
145
+ <xs:group name="status">
146
+ <xs:sequence>
147
+ <xs:element name="status" type="status">
148
+ <xs:unique name="statusUnique">
149
+ <xs:selector xpath="*"/>
150
+ <xs:field xpath="@uniqueElementName"/>
151
+ </xs:unique>
152
+ </xs:element>
153
+ </xs:sequence>
154
+ </xs:group>
155
+
156
+ <!-- 2.3 Contribute -->
157
+ <xs:group name="contribute">
158
+ <xs:sequence>
159
+ <xs:element name="contribute" type="contribute">
160
+ <xs:unique name="contributeUnique">
161
+ <xs:selector xpath="*"/>
162
+ <xs:field xpath="@uniqueElementName"/>
163
+ </xs:unique>
164
+ </xs:element>
165
+ </xs:sequence>
166
+ </xs:group>
167
+
168
+ <!-- 2.3.1 Role -->
169
+ <xs:group name="role">
170
+ <xs:sequence>
171
+ <xs:element name="role" type="role">
172
+ <xs:unique name="roleUnique">
173
+ <xs:selector xpath="*"/>
174
+ <xs:field xpath="@uniqueElementName"/>
175
+ </xs:unique>
176
+ </xs:element>
177
+ </xs:sequence>
178
+ </xs:group>
179
+
180
+ <!-- 2.3.2 Entity -->
181
+ <xs:group name="entityUnbounded">
182
+ <xs:sequence>
183
+ <xs:element name="entity" type="VCard"/>
184
+ </xs:sequence>
185
+ </xs:group>
186
+
187
+ <!-- 2.3.3 Date -->
188
+ <xs:group name="date">
189
+ <xs:sequence>
190
+ <xs:element name="date" type="date">
191
+ <xs:unique name="dateUnique">
192
+ <xs:selector xpath="*"/>
193
+ <xs:field xpath="@uniqueElementName"/>
194
+ </xs:unique>
195
+ </xs:element>
196
+ </xs:sequence>
197
+ </xs:group>
198
+
199
+ <!-- 3 Meta-Metadata -->
200
+ <xs:group name="metaMetadata">
201
+ <xs:sequence>
202
+ <xs:element name="metaMetadata" type="metaMetadata">
203
+ <xs:unique name="metaMetadataUnique">
204
+ <xs:selector xpath="*"/>
205
+ <xs:field xpath="@uniqueElementName"/>
206
+ </xs:unique>
207
+ </xs:element>
208
+ </xs:sequence>
209
+ </xs:group>
210
+
211
+ <!-- 3.1 Identifier
212
+ <xs:group name="identifier">
213
+ <xs:sequence>
214
+ <xs:element name="identifier" type="identifier">
215
+ <xs:unique name="identifierUnique">
216
+ <xs:selector xpath="*"/>
217
+ <xs:field xpath="@uniqueElementName"/>
218
+ </xs:unique>
219
+ </xs:element>
220
+ </xs:sequence>
221
+ </xs:group> -->
222
+
223
+ <!-- 3.1.1 Catalog
224
+ <xs:group name="catalog">
225
+ <xs:sequence>
226
+ <xs:element name="catalog" type="catalog"/>
227
+ </xs:sequence>
228
+ </xs:group> -->
229
+
230
+ <!-- 3.1.2 Entry
231
+ <xs:group name="entry">
232
+ <xs:sequence>
233
+ <xs:element name="entry" type="entry"/>
234
+ </xs:sequence>
235
+ </xs:group> -->
236
+
237
+ <!-- 3.2 Contribute -->
238
+ <xs:group name="contributeMeta">
239
+ <xs:sequence>
240
+ <xs:element name="contribute" type="contributeMeta">
241
+ <xs:unique name="contributeMetaUnique">
242
+ <xs:selector xpath="*"/>
243
+ <xs:field xpath="@uniqueElementName"/>
244
+ </xs:unique>
245
+ </xs:element>
246
+ </xs:sequence>
247
+ </xs:group>
248
+
249
+ <!-- 3.2.1 Role -->
250
+ <xs:group name="roleMeta">
251
+ <xs:sequence>
252
+ <xs:element name="role" type="roleMeta">
253
+ <xs:unique name="roleMetaUnique">
254
+ <xs:selector xpath="*"/>
255
+ <xs:field xpath="@uniqueElementName"/>
256
+ </xs:unique>
257
+ </xs:element>
258
+ </xs:sequence>
259
+ </xs:group>
260
+
261
+ <!-- 3.2.2 Entity
262
+ <xs:group name="entityUnbounded">
263
+ <xs:sequence>
264
+ <xs:element name="entity" type="VCard"/>
265
+ </xs:sequence>
266
+ </xs:group> -->
267
+
268
+ <!-- 3.2.3 Date
269
+ <xs:group name="date">
270
+ <xs:sequence>
271
+ <xs:element name="date" type="date">
272
+ <xs:unique name="dateUnique">
273
+ <xs:selector xpath="*"/>
274
+ <xs:field xpath="@uniqueElementName"/>
275
+ </xs:unique>
276
+ </xs:element>
277
+ </xs:sequence>
278
+ </xs:group> -->
279
+
280
+ <!-- 3.3 Metadata Schema -->
281
+ <xs:group name="metadataSchema">
282
+ <xs:sequence>
283
+ <xs:element name="metadataSchema" type="metadataSchema"/>
284
+ </xs:sequence>
285
+ </xs:group>
286
+
287
+ <!-- 3.4 Language -->
288
+ <xs:group name="language">
289
+ <xs:sequence>
290
+ <xs:element name="language" type="language"/>
291
+ </xs:sequence>
292
+ </xs:group>
293
+
294
+ <!-- 4 Technical -->
295
+ <xs:group name="technical">
296
+ <xs:sequence>
297
+ <xs:element name="technical" type="technical">
298
+ <xs:unique name="technicalUnique">
299
+ <xs:selector xpath="*"/>
300
+ <xs:field xpath="@uniqueElementName"/>
301
+ </xs:unique>
302
+ </xs:element>
303
+ </xs:sequence>
304
+ </xs:group>
305
+
306
+ <!-- 4.1 Format -->
307
+ <xs:group name="format">
308
+ <xs:sequence>
309
+ <xs:element name="format" type="format"/>
310
+ </xs:sequence>
311
+ </xs:group>
312
+
313
+ <!-- 4.2 Size -->
314
+ <xs:group name="size">
315
+ <xs:sequence>
316
+ <xs:element name="size" type="size"/>
317
+ </xs:sequence>
318
+ </xs:group>
319
+
320
+ <!-- 4.3 Location -->
321
+ <xs:group name="location">
322
+ <xs:sequence>
323
+ <xs:element name="location" type="location"/>
324
+ </xs:sequence>
325
+ </xs:group>
326
+
327
+ <!-- 4.4 Requirement -->
328
+ <xs:group name="requirement">
329
+ <xs:sequence>
330
+ <xs:element name="requirement" type="requirement"/>
331
+ </xs:sequence>
332
+ </xs:group>
333
+
334
+ <!-- 4.4.1 OrComposite -->
335
+ <xs:group name="orComposite">
336
+ <xs:sequence>
337
+ <xs:element name="orComposite" type="orComposite">
338
+ <xs:unique name="orCompositeUnique">
339
+ <xs:selector xpath="*"/>
340
+ <xs:field xpath="@uniqueElementName"/>
341
+ </xs:unique>
342
+ </xs:element>
343
+ </xs:sequence>
344
+ </xs:group>
345
+
346
+ <!-- 4.4.1.1 Type -->
347
+ <xs:group name="type">
348
+ <xs:sequence>
349
+ <xs:element name="type" type="type">
350
+ <xs:unique name="typeUnique">
351
+ <xs:selector xpath="*"/>
352
+ <xs:field xpath="@uniqueElementName"/>
353
+ </xs:unique>
354
+ </xs:element>
355
+ </xs:sequence>
356
+ </xs:group>
357
+
358
+ <!-- 4.4.1.2 Name -->
359
+ <xs:group name="name">
360
+ <xs:sequence>
361
+ <xs:element name="name" type="name">
362
+ <xs:unique name="nameUnique">
363
+ <xs:selector xpath="*"/>
364
+ <xs:field xpath="@uniqueElementName"/>
365
+ </xs:unique>
366
+ </xs:element>
367
+ </xs:sequence>
368
+ </xs:group>
369
+
370
+ <!-- 4.4.1.3 Minimum Version -->
371
+ <xs:group name="minimumVersion">
372
+ <xs:sequence>
373
+ <xs:element name="minimumVersion" type="minimumVersion"/>
374
+ </xs:sequence>
375
+ </xs:group>
376
+
377
+ <!-- 4.4.1.4 Maximum Version -->
378
+ <xs:group name="maximumVersion">
379
+ <xs:sequence>
380
+ <xs:element name="maximumVersion" type="maximumVersion"/>
381
+ </xs:sequence>
382
+ </xs:group>
383
+
384
+ <!-- 4.5 Installation Remarks -->
385
+ <xs:group name="installationRemarks">
386
+ <xs:sequence>
387
+ <xs:element name="installationRemarks" type="installationRemarks"/>
388
+ </xs:sequence>
389
+ </xs:group>
390
+
391
+ <!-- 4.6 Other Platform Requirements -->
392
+ <xs:group name="otherPlatformRequirements">
393
+ <xs:sequence>
394
+ <xs:element name="otherPlatformRequirements" type="otherPlatformRequirements"/>
395
+ </xs:sequence>
396
+ </xs:group>
397
+
398
+ <!-- 4.7 Duration -->
399
+ <xs:group name="duration">
400
+ <xs:sequence>
401
+ <xs:element name="duration" type="duration">
402
+ <xs:unique name="durationUnique">
403
+ <xs:selector xpath="*"/>
404
+ <xs:field xpath="@uniqueElementName"/>
405
+ </xs:unique>
406
+ </xs:element>
407
+ </xs:sequence>
408
+ </xs:group>
409
+
410
+ <!-- 5 Educational -->
411
+ <xs:group name="educational">
412
+ <xs:sequence>
413
+ <xs:element name="educational" type="educational">
414
+ <xs:unique name="educationalUnique">
415
+ <xs:selector xpath="*"/>
416
+ <xs:field xpath="@uniqueElementName"/>
417
+ </xs:unique>
418
+ </xs:element>
419
+ </xs:sequence>
420
+ </xs:group>
421
+
422
+ <!-- 5.1 Interactivity Type -->
423
+ <xs:group name="interactivityType">
424
+ <xs:sequence>
425
+ <xs:element name="interactivityType" type="interactivityType">
426
+ <xs:unique name="interactivityTypeUnique">
427
+ <xs:selector xpath="*"/>
428
+ <xs:field xpath="@uniqueElementName"/>
429
+ </xs:unique>
430
+ </xs:element>
431
+ </xs:sequence>
432
+ </xs:group>
433
+
434
+ <!-- 5.2 Learning Resource Type -->
435
+ <xs:group name="learningResourceType">
436
+ <xs:sequence>
437
+ <xs:element name="learningResourceType" type="learningResourceType">
438
+ <xs:unique name="learningResourceTypeUnique">
439
+ <xs:selector xpath="*"/>
440
+ <xs:field xpath="@uniqueElementName"/>
441
+ </xs:unique>
442
+ </xs:element>
443
+ </xs:sequence>
444
+ </xs:group>
445
+
446
+ <!-- 5.3 Interactivity Level -->
447
+ <xs:group name="interactivityLevel">
448
+ <xs:sequence>
449
+ <xs:element name="interactivityLevel" type="interactivityLevel">
450
+ <xs:unique name="interactivityLevelUnique">
451
+ <xs:selector xpath="*"/>
452
+ <xs:field xpath="@uniqueElementName"/>
453
+ </xs:unique>
454
+ </xs:element>
455
+ </xs:sequence>
456
+ </xs:group>
457
+
458
+ <!-- 5.4 Semantic Density -->
459
+ <xs:group name="semanticDensity">
460
+ <xs:sequence>
461
+ <xs:element name="semanticDensity" type="semanticDensity">
462
+ <xs:unique name="semanticDensityUnique">
463
+ <xs:selector xpath="*"/>
464
+ <xs:field xpath="@uniqueElementName"/>
465
+ </xs:unique>
466
+ </xs:element>
467
+ </xs:sequence>
468
+ </xs:group>
469
+
470
+ <!-- 5.5 Intended End User Role -->
471
+ <xs:group name="intendedEndUserRole">
472
+ <xs:sequence>
473
+ <xs:element name="intendedEndUserRole" type="intendedEndUserRole">
474
+ <xs:unique name="intendedEndUserRoleUnique">
475
+ <xs:selector xpath="*"/>
476
+ <xs:field xpath="@uniqueElementName"/>
477
+ </xs:unique>
478
+ </xs:element>
479
+ </xs:sequence>
480
+ </xs:group>
481
+
482
+ <!-- 5.6 Context -->
483
+ <xs:group name="context">
484
+ <xs:sequence>
485
+ <xs:element name="context" type="context">
486
+ <xs:unique name="contextUnique">
487
+ <xs:selector xpath="*"/>
488
+ <xs:field xpath="@uniqueElementName"/>
489
+ </xs:unique>
490
+ </xs:element>
491
+ </xs:sequence>
492
+ </xs:group>
493
+
494
+ <!-- 5.7 Typical Age Range -->
495
+ <xs:group name="typicalAgeRange">
496
+ <xs:sequence>
497
+ <xs:element name="typicalAgeRange" type="typicalAgeRange"/>
498
+ </xs:sequence>
499
+ </xs:group>
500
+
501
+ <!-- 5.8 Difficulty -->
502
+ <xs:group name="difficulty">
503
+ <xs:sequence>
504
+ <xs:element name="difficulty" type="difficulty">
505
+ <xs:unique name="difficultyUnique">
506
+ <xs:selector xpath="*"/>
507
+ <xs:field xpath="@uniqueElementName"/>
508
+ </xs:unique>
509
+ </xs:element>
510
+ </xs:sequence>
511
+ </xs:group>
512
+
513
+ <!-- 5.9 Typical Learning Time -->
514
+ <xs:group name="typicalLearningTime">
515
+ <xs:sequence>
516
+ <xs:element name="typicalLearningTime" type="typicalLearningTime">
517
+ <xs:unique name="typicalLearningTimeUnique">
518
+ <xs:selector xpath="*"/>
519
+ <xs:field xpath="@uniqueElementName"/>
520
+ </xs:unique>
521
+ </xs:element>
522
+ </xs:sequence>
523
+ </xs:group>
524
+
525
+ <!-- 5.10 Description
526
+ <xs:group name="descriptionUnbounded">
527
+ <xs:sequence>
528
+ <xs:element name="description" type="LangString"/>
529
+ </xs:sequence>
530
+ </xs:group> -->
531
+
532
+ <!-- 5.11 Language -->
533
+ <xs:group name="languageId">
534
+ <xs:sequence>
535
+ <xs:element name="language" type="LanguageId"/>
536
+ </xs:sequence>
537
+ </xs:group>
538
+
539
+ <!-- 6 Rights -->
540
+ <xs:group name="rights">
541
+ <xs:sequence>
542
+ <xs:element name="rights" type="rights">
543
+ <xs:unique name="rightsUnique">
544
+ <xs:selector xpath="*"/>
545
+ <xs:field xpath="@uniqueElementName"/>
546
+ </xs:unique>
547
+ </xs:element>
548
+ </xs:sequence>
549
+ </xs:group>
550
+
551
+ <!-- 6.1 Cost -->
552
+ <xs:group name="cost">
553
+ <xs:sequence>
554
+ <xs:element name="cost" type="cost">
555
+ <xs:unique name="costUnique">
556
+ <xs:selector xpath="*"/>
557
+ <xs:field xpath="@uniqueElementName"/>
558
+ </xs:unique>
559
+ </xs:element>
560
+ </xs:sequence>
561
+ </xs:group>
562
+
563
+ <!-- 6.2 Copyright and Other Restrictions -->
564
+ <xs:group name="copyrightAndOtherRestrictions">
565
+ <xs:sequence>
566
+ <xs:element name="copyrightAndOtherRestrictions" type="copyrightAndOtherRestrictions">
567
+ <xs:unique name="copyrightAndOtherRestrictionsUnique">
568
+ <xs:selector xpath="*"/>
569
+ <xs:field xpath="@uniqueElementName"/>
570
+ </xs:unique>
571
+ </xs:element>
572
+ </xs:sequence>
573
+ </xs:group>
574
+
575
+ <!-- 6.3 Description -->
576
+ <xs:group name="description">
577
+ <xs:sequence>
578
+ <xs:element name="description" type="description"/>
579
+ </xs:sequence>
580
+ </xs:group>
581
+
582
+ <!-- 7 Relation -->
583
+ <xs:group name="relation">
584
+ <xs:sequence>
585
+ <xs:element name="relation" type="relation">
586
+ <xs:unique name="relationUnique">
587
+ <xs:selector xpath="*"/>
588
+ <xs:field xpath="@uniqueElementName"/>
589
+ </xs:unique>
590
+ </xs:element>
591
+ </xs:sequence>
592
+ </xs:group>
593
+
594
+ <!-- 7.1 Kind -->
595
+ <xs:group name="kind">
596
+ <xs:sequence>
597
+ <xs:element name="kind" type="kind">
598
+ <xs:unique name="kindUnique">
599
+ <xs:selector xpath="*"/>
600
+ <xs:field xpath="@uniqueElementName"/>
601
+ </xs:unique>
602
+ </xs:element>
603
+ </xs:sequence>
604
+ </xs:group>
605
+
606
+ <!-- 7.2 Resource -->
607
+ <xs:group name="resource">
608
+ <xs:sequence>
609
+ <xs:element name="resource" type="resource"/>
610
+ </xs:sequence>
611
+ </xs:group>
612
+
613
+ <!-- 7.2.1 Identifier
614
+ <xs:group name="identifier">
615
+ <xs:sequence>
616
+ <xs:element name="identifier" type="identifier">
617
+ <xs:unique name="identifierUnique">
618
+ <xs:selector xpath="*"/>
619
+ <xs:field xpath="@uniqueElementName"/>
620
+ </xs:unique>
621
+ </xs:element>
622
+ </xs:sequence>
623
+ </xs:group> -->
624
+
625
+ <!-- 7.2.1.1 Catalog
626
+ <xs:group name="catalog">
627
+ <xs:sequence>
628
+ <xs:element name="catalog" type="catalog"/>
629
+ </xs:sequence>
630
+ </xs:group> -->
631
+
632
+ <!-- 7.2.1.2 Entry
633
+ <xs:group name="entry">
634
+ <xs:sequence>
635
+ <xs:element name="entry" type="entry"/>
636
+ </xs:sequence>
637
+ </xs:group> -->
638
+
639
+ <!-- 7.2.2 Description
640
+ <xs:group name="description">
641
+ <xs:sequence>
642
+ <xs:element name="description" type="description"/>
643
+ </xs:sequence>
644
+ </xs:group> -->
645
+
646
+ <!-- 8 Annotation -->
647
+ <xs:group name="annotation">
648
+ <xs:sequence>
649
+ <xs:element name="annotation" type="annotation">
650
+ <xs:unique name="annotationUnique">
651
+ <xs:selector xpath="*"/>
652
+ <xs:field xpath="@uniqueElementName"/>
653
+ </xs:unique>
654
+ </xs:element>
655
+ </xs:sequence>
656
+ </xs:group>
657
+
658
+ <!-- 8.1 Entity -->
659
+ <xs:group name="entity">
660
+ <xs:sequence>
661
+ <xs:element name="entity" type="entity"/>
662
+ </xs:sequence>
663
+ </xs:group>
664
+
665
+ <!-- 8.2 Date
666
+ <xs:group name="date">
667
+ <xs:sequence>
668
+ <xs:element name="date" type="date">
669
+ <xs:unique name="dateUnique">
670
+ <xs:selector xpath="*"/>
671
+ <xs:field xpath="@uniqueElementName"/>
672
+ </xs:unique>
673
+ </xs:element>
674
+ </xs:sequence>
675
+ </xs:group> -->
676
+
677
+ <!-- 8.3 Description
678
+ <xs:group name="description">
679
+ <xs:sequence>
680
+ <xs:element name="description" type="description"/>
681
+ </xs:sequence>
682
+ </xs:group> -->
683
+
684
+ <!-- 9 Classification -->
685
+ <xs:group name="classification">
686
+ <xs:sequence>
687
+ <xs:element name="classification" type="classification">
688
+ <xs:unique name="classificationUnique">
689
+ <xs:selector xpath="*"/>
690
+ <xs:field xpath="@uniqueElementName"/>
691
+ </xs:unique>
692
+ </xs:element>
693
+ </xs:sequence>
694
+ </xs:group>
695
+
696
+ <!-- 9.1 Purpose -->
697
+ <xs:group name="purpose">
698
+ <xs:sequence>
699
+ <xs:element name="purpose" type="purpose">
700
+ <xs:unique name="purposeUnique">
701
+ <xs:selector xpath="*"/>
702
+ <xs:field xpath="@uniqueElementName"/>
703
+ </xs:unique>
704
+ </xs:element>
705
+ </xs:sequence>
706
+ </xs:group>
707
+
708
+ <!-- 9.2 Taxon Path -->
709
+ <xs:group name="taxonPath">
710
+ <xs:sequence>
711
+ <xs:element name="taxonPath" type="taxonPath">
712
+ <xs:unique name="taxonPathUnique">
713
+ <xs:selector xpath="*"/>
714
+ <xs:field xpath="@uniqueElementName"/>
715
+ </xs:unique>
716
+ </xs:element>
717
+ </xs:sequence>
718
+ </xs:group>
719
+
720
+ <!-- 9.2.1 Source -->
721
+ <xs:group name="source">
722
+ <xs:sequence>
723
+ <xs:element name="source" type="source"/>
724
+ </xs:sequence>
725
+ </xs:group>
726
+
727
+ <!-- 9.2.2 Taxon -->
728
+ <xs:group name="taxon">
729
+ <xs:sequence>
730
+ <xs:element name="taxon" type="taxon">
731
+ <xs:unique name="taxonUnique">
732
+ <xs:selector xpath="*"/>
733
+ <xs:field xpath="@uniqueElementName"/>
734
+ </xs:unique>
735
+ </xs:element>
736
+ </xs:sequence>
737
+ </xs:group>
738
+
739
+ <!-- 9.2.2.1 Id -->
740
+ <xs:group name="id">
741
+ <xs:sequence>
742
+ <xs:element name="id" type="id"/>
743
+ </xs:sequence>
744
+ </xs:group>
745
+
746
+ <!-- 9.2.2.2 Entry -->
747
+ <xs:group name="entryTaxon">
748
+ <xs:sequence>
749
+ <xs:element name="entry" type="entryTaxon"/>
750
+ </xs:sequence>
751
+ </xs:group>
752
+
753
+ <!-- 9.3 Description
754
+ <xs:group name="description">
755
+ <xs:sequence>
756
+ <xs:element name="description" type="description"/>
757
+ </xs:sequence>
758
+ </xs:group> -->
759
+
760
+ <!-- 9.4 Keyword
761
+ <xs:group name="keyword">
762
+ <xs:sequence>
763
+ <xs:element name="keyword" type="keyword"/>
764
+ </xs:sequence>
765
+ </xs:group> -->
766
+
767
+ </xs:schema>