You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

622 lines
15 KiB

4 years ago
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3. (c) International Organization for Standardization 2005.
  4. Permission to copy in any form is granted for use with conforming
  5. SGML systems and applications as defined in ISO 8879,
  6. provided this notice is included in all copies.
  7. -->
  8. <grammar ns="http://purl.oclc.org/dsdl/schematron" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  9. <start>
  10. <ref name="schema"/>
  11. </start>
  12. <!-- Element declarations -->
  13. <define name="schema">
  14. <element name="schema">
  15. <optional>
  16. <attribute name="id">
  17. <data type="ID"/>
  18. </attribute>
  19. </optional>
  20. <ref name="rich"/>
  21. <optional>
  22. <attribute name="schemaVersion">
  23. <ref name="non-empty-string"/>
  24. </attribute>
  25. </optional>
  26. <optional>
  27. <attribute name="defaultPhase">
  28. <data type="IDREF"/>
  29. </attribute>
  30. </optional>
  31. <optional>
  32. <attribute name="queryBinding">
  33. <ref name="non-empty-string"/>
  34. </attribute>
  35. </optional>
  36. <interleave>
  37. <ref name="foreign"/>
  38. <zeroOrMore>
  39. <ref name="inclusion"/>
  40. </zeroOrMore>
  41. <group>
  42. <optional>
  43. <ref name="title"/>
  44. </optional>
  45. <zeroOrMore>
  46. <ref name="ns"/>
  47. </zeroOrMore>
  48. <zeroOrMore>
  49. <ref name="p"/>
  50. </zeroOrMore>
  51. <zeroOrMore>
  52. <ref name="let"/>
  53. </zeroOrMore>
  54. <zeroOrMore>
  55. <ref name="phase"/>
  56. </zeroOrMore>
  57. <oneOrMore>
  58. <ref name="pattern"/>
  59. </oneOrMore>
  60. <zeroOrMore>
  61. <ref name="p"/>
  62. </zeroOrMore>
  63. <optional>
  64. <ref name="diagnostics"/>
  65. </optional>
  66. </group>
  67. </interleave>
  68. </element>
  69. </define>
  70. <define name="active">
  71. <element name="active">
  72. <attribute name="pattern">
  73. <data type="IDREF"/>
  74. </attribute>
  75. <interleave>
  76. <ref name="foreign"/>
  77. <zeroOrMore>
  78. <choice>
  79. <text/>
  80. <ref name="dir"/>
  81. <ref name="emph"/>
  82. <ref name="span"/>
  83. </choice>
  84. </zeroOrMore>
  85. </interleave>
  86. </element>
  87. </define>
  88. <define name="assert">
  89. <element name="assert">
  90. <attribute name="test">
  91. <ref name="exprValue"/>
  92. </attribute>
  93. <optional>
  94. <attribute name="flag">
  95. <ref name="flagValue"/>
  96. </attribute>
  97. </optional>
  98. <optional>
  99. <attribute name="id">
  100. <data type="ID"/>
  101. </attribute>
  102. </optional>
  103. <optional>
  104. <attribute name="diagnostics">
  105. <data type="IDREFS"/>
  106. </attribute>
  107. </optional>
  108. <ref name="rich"/>
  109. <ref name="linkable"/>
  110. <interleave>
  111. <ref name="foreign"/>
  112. <zeroOrMore>
  113. <choice>
  114. <text/>
  115. <ref name="name"/>
  116. <ref name="value-of"/>
  117. <ref name="emph"/>
  118. <ref name="dir"/>
  119. <ref name="span"/>
  120. </choice>
  121. </zeroOrMore>
  122. </interleave>
  123. </element>
  124. </define>
  125. <define name="diagnostic">
  126. <element name="diagnostic">
  127. <attribute name="id">
  128. <data type="ID"/>
  129. </attribute>
  130. <ref name="rich"/>
  131. <interleave>
  132. <ref name="foreign"/>
  133. <zeroOrMore>
  134. <choice>
  135. <text/>
  136. <ref name="value-of"/>
  137. <ref name="emph"/>
  138. <ref name="dir"/>
  139. <ref name="span"/>
  140. </choice>
  141. </zeroOrMore>
  142. </interleave>
  143. </element>
  144. </define>
  145. <define name="diagnostics">
  146. <element name="diagnostics">
  147. <interleave>
  148. <ref name="foreign"/>
  149. <zeroOrMore>
  150. <ref name="inclusion"/>
  151. </zeroOrMore>
  152. <zeroOrMore>
  153. <ref name="diagnostic"/>
  154. </zeroOrMore>
  155. </interleave>
  156. </element>
  157. </define>
  158. <define name="dir">
  159. <element name="dir">
  160. <optional>
  161. <attribute name="value">
  162. <choice>
  163. <value>ltr</value>
  164. <value>rtl</value>
  165. </choice>
  166. </attribute>
  167. </optional>
  168. <interleave>
  169. <ref name="foreign"/>
  170. <text/>
  171. </interleave>
  172. </element>
  173. </define>
  174. <define name="emph">
  175. <element name="emph">
  176. <text/>
  177. </element>
  178. </define>
  179. <define name="extends">
  180. <element name="extends">
  181. <attribute name="rule">
  182. <data type="IDREF"/>
  183. </attribute>
  184. <ref name="foreign-empty"/>
  185. </element>
  186. </define>
  187. <define name="let">
  188. <element name="let">
  189. <attribute name="name">
  190. <ref name="nameValue"/>
  191. </attribute>
  192. <attribute name="value">
  193. <data type="string" datatypeLibrary=""/>
  194. </attribute>
  195. </element>
  196. </define>
  197. <define name="name">
  198. <element name="name">
  199. <optional>
  200. <attribute name="path">
  201. <ref name="pathValue"/>
  202. </attribute>
  203. </optional>
  204. <ref name="foreign-empty"/>
  205. </element>
  206. </define>
  207. <define name="ns">
  208. <element name="ns">
  209. <attribute name="uri">
  210. <ref name="uriValue"/>
  211. </attribute>
  212. <attribute name="prefix">
  213. <ref name="nameValue"/>
  214. </attribute>
  215. <ref name="foreign-empty"/>
  216. </element>
  217. </define>
  218. <define name="p">
  219. <element name="p">
  220. <optional>
  221. <attribute name="id">
  222. <data type="ID"/>
  223. </attribute>
  224. </optional>
  225. <optional>
  226. <attribute name="class">
  227. <ref name="classValue"/>
  228. </attribute>
  229. </optional>
  230. <optional>
  231. <attribute name="icon">
  232. <ref name="uriValue"/>
  233. </attribute>
  234. </optional>
  235. <interleave>
  236. <ref name="foreign"/>
  237. <zeroOrMore>
  238. <choice>
  239. <text/>
  240. <ref name="dir"/>
  241. <ref name="emph"/>
  242. <ref name="span"/>
  243. </choice>
  244. </zeroOrMore>
  245. </interleave>
  246. </element>
  247. </define>
  248. <define name="param">
  249. <element name="param">
  250. <attribute name="name">
  251. <ref name="nameValue"/>
  252. </attribute>
  253. <attribute name="value">
  254. <ref name="non-empty-string"/>
  255. </attribute>
  256. </element>
  257. </define>
  258. <define name="pattern">
  259. <element name="pattern">
  260. <ref name="rich"/>
  261. <interleave>
  262. <ref name="foreign"/>
  263. <zeroOrMore>
  264. <ref name="inclusion"/>
  265. </zeroOrMore>
  266. <choice>
  267. <group>
  268. <attribute name="abstract">
  269. <value>true</value>
  270. </attribute>
  271. <attribute name="id">
  272. <data type="ID"/>
  273. </attribute>
  274. <optional>
  275. <ref name="title"/>
  276. </optional>
  277. <group>
  278. <zeroOrMore>
  279. <ref name="p"/>
  280. </zeroOrMore>
  281. <zeroOrMore>
  282. <ref name="let"/>
  283. </zeroOrMore>
  284. <zeroOrMore>
  285. <ref name="rule"/>
  286. </zeroOrMore>
  287. </group>
  288. </group>
  289. <group>
  290. <optional>
  291. <attribute name="abstract">
  292. <value>false</value>
  293. </attribute>
  294. </optional>
  295. <optional>
  296. <attribute name="id">
  297. <data type="ID"/>
  298. </attribute>
  299. </optional>
  300. <optional>
  301. <ref name="title"/>
  302. </optional>
  303. <group>
  304. <zeroOrMore>
  305. <ref name="p"/>
  306. </zeroOrMore>
  307. <zeroOrMore>
  308. <ref name="let"/>
  309. </zeroOrMore>
  310. <zeroOrMore>
  311. <ref name="rule"/>
  312. </zeroOrMore>
  313. </group>
  314. </group>
  315. <group>
  316. <optional>
  317. <attribute name="abstract">
  318. <value>false</value>
  319. </attribute>
  320. </optional>
  321. <attribute name="is-a">
  322. <data type="IDREF"/>
  323. </attribute>
  324. <optional>
  325. <attribute name="id">
  326. <data type="ID"/>
  327. </attribute>
  328. </optional>
  329. <optional>
  330. <ref name="title"/>
  331. </optional>
  332. <group>
  333. <zeroOrMore>
  334. <ref name="p"/>
  335. </zeroOrMore>
  336. <zeroOrMore>
  337. <ref name="param"/>
  338. </zeroOrMore>
  339. </group>
  340. </group>
  341. </choice>
  342. </interleave>
  343. </element>
  344. </define>
  345. <define name="phase">
  346. <element name="phase">
  347. <attribute name="id">
  348. <data type="ID"/>
  349. </attribute>
  350. <ref name="rich"/>
  351. <interleave>
  352. <ref name="foreign"/>
  353. <zeroOrMore>
  354. <ref name="inclusion"/>
  355. </zeroOrMore>
  356. <group>
  357. <zeroOrMore>
  358. <ref name="p"/>
  359. </zeroOrMore>
  360. <zeroOrMore>
  361. <ref name="let"/>
  362. </zeroOrMore>
  363. <zeroOrMore>
  364. <ref name="active"/>
  365. </zeroOrMore>
  366. </group>
  367. </interleave>
  368. </element>
  369. </define>
  370. <define name="report">
  371. <element name="report">
  372. <attribute name="test">
  373. <ref name="exprValue"/>
  374. </attribute>
  375. <optional>
  376. <attribute name="flag">
  377. <ref name="flagValue"/>
  378. </attribute>
  379. </optional>
  380. <optional>
  381. <attribute name="id">
  382. <data type="ID"/>
  383. </attribute>
  384. </optional>
  385. <optional>
  386. <attribute name="diagnostics">
  387. <data type="IDREFS"/>
  388. </attribute>
  389. </optional>
  390. <ref name="rich"/>
  391. <ref name="linkable"/>
  392. <interleave>
  393. <ref name="foreign"/>
  394. <zeroOrMore>
  395. <choice>
  396. <text/>
  397. <ref name="name"/>
  398. <ref name="value-of"/>
  399. <ref name="emph"/>
  400. <ref name="dir"/>
  401. <ref name="span"/>
  402. </choice>
  403. </zeroOrMore>
  404. </interleave>
  405. </element>
  406. </define>
  407. <define name="rule">
  408. <element name="rule">
  409. <optional>
  410. <attribute name="flag">
  411. <ref name="flagValue"/>
  412. </attribute>
  413. </optional>
  414. <ref name="rich"/>
  415. <ref name="linkable"/>
  416. <interleave>
  417. <ref name="foreign"/>
  418. <zeroOrMore>
  419. <ref name="inclusion"/>
  420. </zeroOrMore>
  421. <choice>
  422. <group>
  423. <attribute name="abstract">
  424. <value>true</value>
  425. </attribute>
  426. <attribute name="id">
  427. <data type="ID"/>
  428. </attribute>
  429. <zeroOrMore>
  430. <ref name="let"/>
  431. </zeroOrMore>
  432. <oneOrMore>
  433. <choice>
  434. <ref name="assert"/>
  435. <ref name="report"/>
  436. <ref name="extends"/>
  437. </choice>
  438. </oneOrMore>
  439. </group>
  440. <group>
  441. <attribute name="context">
  442. <ref name="pathValue"/>
  443. </attribute>
  444. <optional>
  445. <attribute name="id">
  446. <data type="ID"/>
  447. </attribute>
  448. </optional>
  449. <optional>
  450. <attribute name="abstract">
  451. <value>false</value>
  452. </attribute>
  453. </optional>
  454. <zeroOrMore>
  455. <ref name="let"/>
  456. </zeroOrMore>
  457. <oneOrMore>
  458. <choice>
  459. <ref name="assert"/>
  460. <ref name="report"/>
  461. <ref name="extends"/>
  462. </choice>
  463. </oneOrMore>
  464. </group>
  465. </choice>
  466. </interleave>
  467. </element>
  468. </define>
  469. <define name="span">
  470. <element name="span">
  471. <attribute name="class">
  472. <ref name="classValue"/>
  473. </attribute>
  474. <interleave>
  475. <ref name="foreign"/>
  476. <text/>
  477. </interleave>
  478. </element>
  479. </define>
  480. <define name="title">
  481. <element name="title">
  482. <zeroOrMore>
  483. <choice>
  484. <text/>
  485. <ref name="dir"/>
  486. </choice>
  487. </zeroOrMore>
  488. </element>
  489. </define>
  490. <define name="value-of">
  491. <element name="value-of">
  492. <attribute name="select">
  493. <ref name="pathValue"/>
  494. </attribute>
  495. <ref name="foreign-empty"/>
  496. </element>
  497. </define>
  498. <!-- common declarations -->
  499. <define name="inclusion">
  500. <element name="include">
  501. <attribute name="href">
  502. <ref name="uriValue"/>
  503. </attribute>
  504. </element>
  505. </define>
  506. <define name="rich">
  507. <optional>
  508. <attribute name="icon">
  509. <ref name="uriValue"/>
  510. </attribute>
  511. </optional>
  512. <optional>
  513. <attribute name="see">
  514. <ref name="uriValue"/>
  515. </attribute>
  516. </optional>
  517. <optional>
  518. <attribute name="fpi">
  519. <ref name="fpiValue"/>
  520. </attribute>
  521. </optional>
  522. <optional>
  523. <attribute name="xml:lang">
  524. <ref name="langValue"/>
  525. </attribute>
  526. </optional>
  527. <optional>
  528. <attribute name="xml:space">
  529. <choice>
  530. <value>preserve</value>
  531. <value>default</value>
  532. </choice>
  533. </attribute>
  534. </optional>
  535. </define>
  536. <define name="linkable">
  537. <optional>
  538. <attribute name="role">
  539. <ref name="roleValue"/>
  540. </attribute>
  541. </optional>
  542. <optional>
  543. <attribute name="subject">
  544. <ref name="pathValue"/>
  545. </attribute>
  546. </optional>
  547. </define>
  548. <define name="foreign">
  549. <ref name="foreign-attributes"/>
  550. <zeroOrMore>
  551. <ref name="foreign-element"/>
  552. </zeroOrMore>
  553. </define>
  554. <define name="foreign-empty">
  555. <ref name="foreign-attributes"/>
  556. </define>
  557. <define name="foreign-attributes">
  558. <zeroOrMore>
  559. <attribute>
  560. <anyName>
  561. <except>
  562. <nsName ns=""/>
  563. <nsName ns="http://www.w3.org/XML/1998/namespace"/>
  564. </except>
  565. </anyName>
  566. </attribute>
  567. </zeroOrMore>
  568. </define>
  569. <define name="foreign-element">
  570. <element>
  571. <anyName>
  572. <except>
  573. <nsName/>
  574. </except>
  575. </anyName>
  576. <zeroOrMore>
  577. <choice>
  578. <attribute>
  579. <anyName/>
  580. </attribute>
  581. <ref name="foreign-element"/>
  582. <ref name="schema"/>
  583. <text/>
  584. </choice>
  585. </zeroOrMore>
  586. </element>
  587. </define>
  588. <!-- Data types -->
  589. <define name="uriValue">
  590. <data type="anyURI"/>
  591. </define>
  592. <define name="pathValue">
  593. <data type="string" datatypeLibrary=""/>
  594. </define>
  595. <define name="exprValue">
  596. <data type="string" datatypeLibrary=""/>
  597. </define>
  598. <define name="fpiValue">
  599. <data type="string" datatypeLibrary=""/>
  600. </define>
  601. <define name="langValue">
  602. <data type="language"/>
  603. </define>
  604. <define name="roleValue">
  605. <data type="string" datatypeLibrary=""/>
  606. </define>
  607. <define name="flagValue">
  608. <data type="string" datatypeLibrary=""/>
  609. </define>
  610. <define name="nameValue">
  611. <data type="string" datatypeLibrary=""/>
  612. </define>
  613. <!-- In the default query language binding, xsd:NCNAME -->
  614. <define name="classValue">
  615. <data type="string" datatypeLibrary=""/>
  616. </define>
  617. <define name="non-empty-string">
  618. <data type="token">
  619. <param name="minLength">1</param>
  620. </data>
  621. </define>
  622. </grammar>