-
Notifications
You must be signed in to change notification settings - Fork 24
/
ldf.xsd
183 lines (171 loc) · 7.42 KB
/
ldf.xsd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ldf="http://planet-sl.org/ldf"
xmlns:bgf="http://planet-sl.org/bgf"
xmlns:ldxl="http://planet-sl.org/ldxl"
xmlns:xhtml="http://www.w3.org/1999/xhtml/datatypes/"
targetNamespace="http://planet-sl.org/ldf">
<xsd:annotation>
<xsd:documentation>
The Language Document Format.
This is basically a metamodel for language documents or documentations.
Sample program tags:
- External reference (with XPath-like subprogram selection)
- Verbatim text + claim about corresponding grammar and nontermninal (and perhaps version)
- Generation request for given grammar and nontermninal (and perhaps version, more control)
- Sample suite extraction request (what are the constraints on the requested sample?)
</xsd:documentation>
</xsd:annotation>
<xsd:element name="document">
<xsd:annotation>
<xsd:documentation>
A document is essentially a section; see below.
It may contain some distinguished constituents of the kind of title information.
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="author" type="xsd:string"/>
<xsd:element name="abstract" type="xsd:string"/>
<xsd:element name="content" type="ldf:contentType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="contentType">
<xsd:annotation>
<xsd:documentation>
A sections content is a list of different kinds of portions.
Text is one kind of portion.
A grammar fragment is another kind of portion.
A sample is yet another kind of portion.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="text" type="ldf:mixedType"/>
<xsd:element name="grammar">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="http://planet-sl.org/bgf" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="language" type="xsd:anyURI" use="required"/>
<xsd:attribute name="version" type="xsd:token" use="optional"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="sample" type="ldf:sampleType"/>
<xsd:element name="runnable" type="ldf:runnableType"/>
</xsd:choice>
<xsd:element name="section" type="ldf:sectionType" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="sampleType">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="language" type="xsd:anyURI" use="required"/>
<xsd:attribute name="version" type="xsd:token" use="optional"/>
<xsd:attribute name="sort" type="xsd:Name" use="optional">
<xsd:annotation>
<xsd:documentation>
The sort (aka nonterminal) of the sample at hand.
If it is missing, it's implicitely defined.
The language's grammar must defined a root sort to this end.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="id" type="xsd:ID" use="optional">
<xsd:annotation>
<xsd:documentation>
The means to refer to this particular sample later in the same document.
For example, this sample introduces a function that is used in one of the next samples.
It can also be a full text of a program that is run with different set of attributes later.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:complexType name="runnableType">
<xsd:annotation>
<xsd:documentation>
Related to the sample, this element shows a way to run a sample.
In FL, it is always just a name of one of the functions and the list of its parameters.
Generally, while keeping the internal structure of this element as such,
one might want to represent it in the resulting language document differently
(i.e. "java Test a b c" instead of "main(a,b,c);" ).
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="context" type="xsd:IDREF">
<xsd:annotation>
<xsd:documentation>
The reference to another sample that must be used
as a context while evaluating this one
The means to refer to this particular sample later in the same document.
For example, this sample introduces a function that is used in one of the next samples.
It can also be a full text of a program that is run with different set of attributes later.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="main" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
The main function that is applied to the arguments.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="argument" type="xsd:string" minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation>
These arguments are passed to the function during execution.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="yields" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
The value that the sample should yield if parsed and
evalutated in the specified language.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="language" type="xsd:anyURI" use="required"/>
<xsd:attribute name="version" type="xsd:token" use="optional"/>
</xsd:complexType>
<xsd:complexType name="sectionType">
<xsd:annotation>
<xsd:documentation>
A section has a title, some content, and possibly a list of subsections.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="content" type="ldf:contentType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="mixedType" mixed="true">
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
<xsd:any processContents="lax"/>
</xsd:sequence>
<xsd:anyAttribute namespace="##other" processContents="lax"/>
</xsd:complexType>
<xsd:element name="reference" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
A reference to a nonterminal
Generally, (reference)alpha(/reference) should mean something like
(a href="#alpha")alpha(/a)
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="tail" type="ldf:mixedType">
<xsd:annotation>
<xsd:documentation>
A documentation part that comes after the grammar in the resulting document,
yet precedes the grammar in the language document due to some idiosyncrasy.
This definition reuses the one from LDL, but this is not critical.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:schema>