yaparc 0.1.6 → 0.2.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.
@@ -14,13 +14,13 @@ module ABC
14
14
 
15
15
  def initialize
16
16
  @parser = lambda do
17
- Yaparc::ManyParser.new(
18
- Yaparc::AltParser.new(AbcTune.new,
19
- Comment.new,
20
- Xcommand.new,
21
- FileField.new,
22
- TextLine.new,
23
- Tex.new))
17
+ Yaparc::Many.new(
18
+ Yaparc::Alt.new(AbcTune.new,
19
+ Comment.new,
20
+ Xcommand.new,
21
+ FileField.new,
22
+ TextLine.new,
23
+ Tex.new))
24
24
  end
25
25
  end
26
26
  end
@@ -31,28 +31,28 @@ module ABC
31
31
 
32
32
  def initialize
33
33
  @parser = lambda do
34
- Yaparc::AltParser.new(
35
- FieldArea.new,
36
- FieldBook.new,
37
- FieldComposer.new,
38
- FieldDiscography.new,
39
- FieldFile.new,
40
- FieldGroup.new,
41
- FieldHistory.new,
42
- FieldLength.new,
43
- FieldMeter.new,
44
- FieldNotes.new,
45
- FieldOrigin.new,
46
- FieldParts.new,
47
- FieldTempo.new,
48
- FieldRhythm.new,
49
- FieldSource.new,
50
- FieldUserdefPrint.new,
51
- FieldUserdefPlay.new,
52
- FieldWords.new,
53
- FieldTranscription.new,
54
- FieldKey.new,
55
- UnusedField.new)
34
+ Yaparc::Alt.new(
35
+ FieldArea.new,
36
+ FieldBook.new,
37
+ FieldComposer.new,
38
+ FieldDiscography.new,
39
+ FieldFile.new,
40
+ FieldGroup.new,
41
+ FieldHistory.new,
42
+ FieldLength.new,
43
+ FieldMeter.new,
44
+ FieldNotes.new,
45
+ FieldOrigin.new,
46
+ FieldParts.new,
47
+ FieldTempo.new,
48
+ FieldRhythm.new,
49
+ FieldSource.new,
50
+ FieldUserdefPrint.new,
51
+ FieldUserdefPlay.new,
52
+ FieldWords.new,
53
+ FieldTranscription.new,
54
+ FieldKey.new,
55
+ UnusedField.new)
56
56
  end
57
57
  end
58
58
  end
@@ -63,9 +63,9 @@ module ABC
63
63
 
64
64
  def initialize
65
65
  @parser = lambda do
66
- Yaparc::SeqParser.new(AbcHeader.new,
67
- AbcMusic.new,
68
- Eol.new)
66
+ Yaparc::Seq.new(AbcHeader.new,
67
+ AbcMusic.new,
68
+ Eol.new)
69
69
  end
70
70
  end
71
71
  end
@@ -76,11 +76,11 @@ module ABC
76
76
 
77
77
  def initialize
78
78
  @parser = lambda do
79
- Yaparc::SeqParser.new(
80
- ZeroOneParser.new(FieldNumber.new)
81
- TitleFields.new,
82
- ManyParser.new(OtherField.new),
83
- FieldKey.new)
79
+ Yaparc::Seq.new(
80
+ ZeroOne.new(FieldNumber.new)
81
+ TitleFields.new,
82
+ Many.new(OtherField.new),
83
+ FieldKey.new)
84
84
  end
85
85
  end
86
86
  end
@@ -91,9 +91,8 @@ module ABC
91
91
 
92
92
  def initialize
93
93
  @parser = lambda do
94
- Yaparc::SeqParser.new(
95
-
96
-
94
+ Yaparc::Seq.new(
95
+
97
96
  %x58.3A *WSP 1*DIGIT header-eol ; X:
98
97
  end
99
98
  end
@@ -105,7 +104,7 @@ module ABC
105
104
 
106
105
  def initialize
107
106
  @parser = lambda do
108
- Yaparc::AltParser.new(RegexParser.new(/\n/))
107
+ Yaparc::Alt.new(Regex.new(/\n/))
109
108
  end
110
109
  end
111
110
  end
@@ -3,20 +3,19 @@ require 'test/unit'
3
3
 
4
4
  module Calc
5
5
 
6
- # class Expr < Yaparc::AbstractParser
7
6
  class Expr
8
7
  include Yaparc::Parsable
9
8
 
10
9
  def initialize
11
10
  @parser = lambda do
12
- Yaparc::AltParser.new(
13
- Yaparc::SeqParser.new(Term.new,
14
- Yaparc::Symbol.new('+'),
15
- Expr.new) do |term, _, expr|
16
- ['+', term,expr]
17
- end,
18
- Term.new
19
- )
11
+ Yaparc::Alt.new(
12
+ Yaparc::Seq.new(Term.new,
13
+ Yaparc::Symbol.new('+'),
14
+ Expr.new) do |term, _, expr|
15
+ ['+', term,expr]
16
+ end,
17
+ Term.new
18
+ )
20
19
  end
21
20
  end
22
21
 
@@ -45,40 +44,36 @@ module Calc
45
44
  end
46
45
  end
47
46
 
48
- # class Term < Yaparc::AbstractParser
49
47
  class Term
50
48
  include Yaparc::Parsable
51
49
 
52
50
  def initialize
53
51
  @parser = lambda do
54
- Yaparc::AltParser.new(
55
- Yaparc::SeqParser.new(Factor.new,
56
- Yaparc::Symbol.new('*'),
57
- Term.new) do |factor, _, term|
58
- ['*', factor,term]
59
- end,
60
- Factor.new
61
- )
52
+ Yaparc::Alt.new(
53
+ Yaparc::Seq.new(Factor.new,
54
+ Yaparc::Symbol.new('*'),
55
+ Term.new) do |factor, _, term|
56
+ ['*', factor,term]
57
+ end,
58
+ Factor.new)
62
59
  end
63
60
  end
64
61
  end
65
62
 
66
- # class Factor < Yaparc::AbstractParser
67
63
  class Factor
68
64
  include Yaparc::Parsable
69
65
 
70
66
  def initialize
71
67
  @parser = lambda do
72
- Yaparc::AltParser.new(
73
- Yaparc::SeqParser.new(
74
- Yaparc::Symbol.new('('),
75
- Expr.new,
76
- Yaparc::Symbol.new(')')
77
- ) do |_,expr, _|
78
- expr
79
- end,
80
- Yaparc::Natural.new
81
- )
68
+ Yaparc::Alt.new(
69
+ Yaparc::Seq.new(
70
+ Yaparc::Symbol.new('('),
71
+ Expr.new,
72
+ Yaparc::Symbol.new(')')
73
+ ) do |_,expr, _|
74
+ expr
75
+ end,
76
+ Yaparc::Natural.new)
82
77
  end
83
78
  end
84
79
  end
@@ -1,3 +1,4 @@
1
+ =begin
1
2
  ontology ::= 'Ontology(' [ ontologyID ] { directive } ')'
2
3
  directive ::= 'Annotation(' ontologyPropertyID ontologyID ')'
3
4
  | 'Annotation(' annotationPropertyID URIreference ')'
@@ -13,17 +14,8 @@ datavaluedPropertyID ::= URIreference
13
14
  individualvaluedPropertyID ::= URIreference
14
15
  annotationPropertyID ::= URIreference
15
16
  ontologyPropertyID ::= URIreference
16
- annotation ::= 'annotation(' annotationPropertyID URIreference ')'
17
- | 'annotation(' annotationPropertyID dataLiteral ')'
18
- | 'annotation(' annotationPropertyID individual ')'
19
17
 
20
18
  fact ::= individual
21
- individual ::= 'Individual(' [ individualID ] { annotation } { 'type(' type ')' } { value } ')'
22
- value ::= 'value(' individualvaluedPropertyID individualID ')'
23
- | 'value(' individualvaluedPropertyID individual ')'
24
- | 'value(' datavaluedPropertyID dataLiteral ')'
25
- type ::= description
26
-
27
19
  axiom ::= 'Class(' classID ['Deprecated'] modality { annotation } { description } ')'
28
20
  | 'EnumeratedClass(' classID ['Deprecated'] { annotation } { individualID } ')'
29
21
  | 'DisjointClasses(' description description { description } ')'
@@ -39,7 +31,17 @@ axiom ::= 'Class(' classID ['Deprecated'] modality { annotation } { description
39
31
  | 'EquivalentProperties(' individualvaluedPropertyID individualvaluedPropertyID { individualvaluedPropertyID } ')'
40
32
  | 'SubPropertyOf(' individualvaluedPropertyID individualvaluedPropertyID ')'
41
33
 
42
- modality ::= 'complete' | 'partial'
34
+ individual ::= 'Individual(' [ individualID ] { annotation } { 'type(' type ')' } { value } ')'
35
+ value ::= 'value(' individualvaluedPropertyID individualID ')'
36
+ | 'value(' individualvaluedPropertyID individual ')'
37
+ | 'value(' datavaluedPropertyID dataLiteral ')'
38
+ annotation ::= 'annotation(' annotationPropertyID URIreference ')'
39
+ | 'annotation(' annotationPropertyID dataLiteral ')'
40
+ | 'annotation(' annotationPropertyID individual ')'
41
+
42
+ type ::= description
43
+
44
+
43
45
 
44
46
  description ::= classID
45
47
  | restriction
@@ -51,18 +53,987 @@ description ::= classID
51
53
  restriction ::= 'restriction(' datavaluedPropertyID dataRestrictionComponent { dataRestrictionComponent } ')'
52
54
  | 'restriction(' individualvaluedPropertyID individualRestrictionComponent { individualRestrictionComponent } ')'
53
55
 
56
+ individualRestrictionComponent ::= 'allValuesFrom(' description ')'
57
+ | 'someValuesFrom(' description ')'
58
+ | 'value(' individualID ')'
59
+ | cardinality
60
+ modality ::= 'complete' | 'partial'
61
+
54
62
  dataRestrictionComponent ::= 'allValuesFrom(' dataRange ')'
55
63
  | 'someValuesFrom(' dataRange ')'
56
64
  | 'value(' dataLiteral ')'
57
65
  | cardinality
58
66
 
59
- individualRestrictionComponent ::= 'allValuesFrom(' description ')'
60
- | 'someValuesFrom(' description ')'
61
- | 'value(' individualID ')'
62
- | cardinality
63
67
  cardinality ::= 'minCardinality(' non-negative-integer ')'
64
68
  | 'maxCardinality(' non-negative-integer ')'
65
69
  | 'cardinality(' non-negative-integer ')'
66
- dataRange ::= datatypeID | 'rdfs:Literal'
70
+ dataRange ::= datatypeID
71
+ | 'rdfs:Literal'
67
72
  | 'oneOf(' { dataLiteral } ')'
68
73
 
74
+
75
+ # http://www.w3.org/TR/rdf-concepts/#dfn-plain-literal
76
+ dataLiteral ::= typedLiteral | plainLiteral
77
+ typedLiteral ::= lexicalForm^^URIreference
78
+ plainLiteral ::= lexicalForm | lexicalForm@languageTag
79
+ lexicalForm ::= /"[^"]*"/ # as in RDF, a unicode string in normal form C
80
+ languageTag ::= /[a-z-]+/ # as in RDF, an XML language tag
81
+ =end
82
+
83
+ module OWLParser
84
+ KEYWORDS = %w{Ontology( Class( EnumeratedClass( DisjointClasses( EquivalentClasses( SubClassOf( Datatype( DatatypeProperty( ObjectProperty( AnnotationProperty( OntologyProperty( EquivalentProperties( SubPropertyOf( EquivalentProperties( type( Annotation( Individual( value( unionOf( intersectionOf( complementOf( oneOf( restriction( allValuesFrom( someValuesFrom( (minCardinality( maxCardinality( cardinality( rdfs:Literal}
85
+
86
+ # ontology ::= 'Ontology(' [ ontologyID ] { directive } ')'
87
+ class Ontology
88
+ include Yaparc::Parsable
89
+ def initialize
90
+ @parser = lambda do |input|
91
+ Yaparc::Seq.new(Yaparc::Literal.new('Ontology('),
92
+ Yaparc::ZeroOne.new(OntologyID.new,{}),
93
+ Yaparc::Many.new(Directive.new,{}),
94
+ Yaparc::Literal.new(')')) do |_,ontologyID, directive,_|
95
+ {:ontologyID => ontologyID, :directive => directive}
96
+ end
97
+ end
98
+ end
99
+ end
100
+
101
+ # directive ::= 'Annotation(' ontologyPropertyID ontologyID ')'
102
+ # | 'Annotation(' annotationPropertyID URIreference ')'
103
+ # | 'Annotation(' annotationPropertyID dataLiteral ')'
104
+ # | 'Annotation(' annotationPropertyID individual ')'
105
+ # | axiom
106
+ # | fact
107
+ class Directive
108
+ include Yaparc::Parsable
109
+ def initialize
110
+ @parser = lambda do |input|
111
+ Yaparc::Alt.new(Yaparc::Seq.new(Yaparc::Literal.new('Annotation('),
112
+ OntologyPropertyID.new,
113
+ OntologyID.new,
114
+ Yaparc::Literal.new(')')) do |_,ontology_property_id,ontology_id,_|
115
+ {:ontology_property_id => ontology_property_id, :ontology_id => ontology_id }
116
+ end,
117
+ Yaparc::Seq.new(Yaparc::Literal.new('Annotation('),
118
+ AnnotationPropertyID.new,
119
+ Yaparc::Alt.new(URIReference.new,
120
+ DataLiteral.new,
121
+ Individual.new),
122
+ Yaparc::Literal.new(')')),
123
+ Axiom.new,
124
+ Fact.new)
125
+ end
126
+ end
127
+ end
128
+
129
+ # axiom ::= 'Class(' classID ['Deprecated'] modality { annotation } { description } ')'
130
+ # | 'EnumeratedClass(' classID ['Deprecated'] { annotation } { individualID } ')'
131
+ # | 'DisjointClasses(' description description { description } ')'
132
+ # | 'EquivalentClasses(' description { description } ')'
133
+ # | 'SubClassOf(' description description ')'
134
+ # | 'Datatype(' datatypeID ['Deprecated'] { annotation } )'
135
+ # | 'DatatypeProperty(' datavaluedPropertyID ['Deprecated'] { annotation } { 'super(' datavaluedPropertyID ')'} ['Functional'] { 'domain(' description ')' } { 'range(' dataRange ')' } ')'
136
+ # | 'ObjectProperty(' individualvaluedPropertyID ['Deprecated'] { annotation } { 'super(' individualvaluedPropertyID ')' } [ 'inverseOf(' individualvaluedPropertyID ')' ] [ 'Symmetric' ] [ 'Functional' | 'InverseFunctional' | 'Functional' 'InverseFunctional' | 'Transitive' ] { 'domain(' description ')' } { 'range(' description ')' } ')'
137
+ # | 'AnnotationProperty(' annotationPropertyID { annotation } ')'
138
+ # | 'OntologyProperty(' ontologyPropertyID { annotation } ')'
139
+ # | 'EquivalentProperties(' datavaluedPropertyID datavaluedPropertyID { datavaluedPropertyID } ')'
140
+ # | 'SubPropertyOf(' datavaluedPropertyID datavaluedPropertyID ')'
141
+ # | 'EquivalentProperties(' individualvaluedPropertyID individualvaluedPropertyID { individualvaluedPropertyID } ')'
142
+ # | 'SubPropertyOf(' individualvaluedPropertyID individualvaluedPropertyID ')'
143
+
144
+ class Axiom
145
+ include Yaparc::Parsable
146
+ def initialize
147
+ @parser = lambda do |input|
148
+ Yaparc::Alt.new(#'Class(' classID ['Deprecated'] modality { annotation } { description } ')'
149
+ Yaparc::Seq.new(Yaparc::Literal.new('Class('),
150
+ ClassID.new,
151
+ Yaparc::ZeroOne.new(Yaparc::Literal.new('Deprecated'),{}),
152
+ Modality.new,
153
+ Yaparc::Many.new(Annotation.new,{}),
154
+ Yaparc::Many.new(Description.new,{}),
155
+ Yaparc::Literal.new(')')) do |_,class_id, deprecated, modality, annotations, descriptions,_|
156
+ {:class => {:class_id => class_id, :deprecated => deprecated, :modality => modality, :annotations => annotations, :descriptions => descriptions }}
157
+ end,
158
+ #'EnumeratedClass(' classID ['Deprecated'] { annotation } { individualID } ')'
159
+ Yaparc::Seq.new(Yaparc::Literal.new('EnumeratedClass('),
160
+ ClassID.new,
161
+ Yaparc::ZeroOne.new(Yaparc::Literal.new('Deprecated'),{}),
162
+ Yaparc::Many.new(Annotation.new,{}),
163
+ Yaparc::Many.new(IndividualID.new,{}),
164
+ Yaparc::Literal.new(')')) do |_,class_id, deprecated, annotations, individual_ids,_|
165
+ {:enumerated_class => {:class_id => class_id, :deprecated => deprecated, :annotations => annotations, :individual_ids => individual_ids }}
166
+ end,
167
+ #'DisjointClasses(' description description { description } ')'
168
+ Yaparc::Seq.new(Yaparc::Literal.new('DisjointClasses('),
169
+ Description.new,
170
+ Yaparc::ManyOne.new(Description.new,{}),
171
+ Yaparc::Literal.new(')')) do |_,description,descriptions,_|
172
+ {:disjoint_classes => description.merge(descriptions)}
173
+ end,
174
+ #'EquivalentClasses(' description { description } ')'
175
+ Yaparc::Seq.new(Yaparc::Literal.new('EquivalentClasses('),
176
+ Yaparc::ManyOne.new(Description.new,{ }),
177
+ Yaparc::Literal.new(')')) do |_,descriptions,_|
178
+ {:equivalent_classes => descriptions}
179
+ end,
180
+ #'SubClassOf(' description description ')'
181
+ Yaparc::Seq.new(Yaparc::Literal.new('SubClassOf('),
182
+ Description.new,
183
+ Description.new,
184
+ Yaparc::Literal.new(')')) do |_,description1,description2,_|
185
+ {:sub_class_of => description1.merge(description2)}
186
+ end,
187
+ #'Datatype(' datatypeID ['Deprecated'] { annotation } )'
188
+ Yaparc::Seq.new(Yaparc::Literal.new('Datatype('),
189
+ DatatypeID.new,
190
+ Yaparc::ZeroOne.new(Yaparc::Literal.new('Deprecated'),{}),
191
+ Yaparc::Many.new(Annotation.new,{ }),
192
+ Yaparc::Literal.new(')')) do |_,datatype_id,_,annotations,_|
193
+ {:datatype => {:datatype_id => datatype_id,:annotations=> annotations }}
194
+ end,
195
+ #'DatatypeProperty(' datavaluedPropertyID ['Deprecated'] { annotation } { 'super(' datavaluedPropertyID ')'} ['Functional'] { 'domain(' description ')' } { 'range(' dataRange ')' } ')'
196
+ Yaparc::Seq.new(Yaparc::Literal.new('DatatypeProperty('),
197
+ DatavaluedPropertyID.new,
198
+ Yaparc::ZeroOne.new(Yaparc::Literal.new('Deprecated'),{}),
199
+ Yaparc::Many.new(Annotation.new,{ }),
200
+ Yaparc::Many.new(
201
+ Yaparc::Seq.new(Yaparc::Literal.new('super('),
202
+ DatavaluedPropertyID.new,
203
+ Yaparc::Literal.new(')')),{}),
204
+ Yaparc::ZeroOne.new(Yaparc::Literal.new('Functional'),{}),
205
+ Yaparc::Many.new(
206
+ Yaparc::Seq.new(Yaparc::Literal.new('domain('),
207
+ Description.new,
208
+ Yaparc::Literal.new(')')),{}),
209
+ Yaparc::Many.new(
210
+ Yaparc::Seq.new(Yaparc::Literal.new('range('),
211
+ DataRange.new,
212
+ Yaparc::Literal.new(')')),{}),
213
+ Yaparc::Literal.new(')')) do |_, datavalued_property_id, _, annotation, super_tag, functional, domain, range,_|
214
+ {:datatype_property_id => {:annotation => annotation, :super_tag => super_tag, :functional => functional, :domain => domain, :range => range}}
215
+ end,
216
+ #'ObjectProperty(' individualvaluedPropertyID ['Deprecated'] { annotation } { 'super(' individualvaluedPropertyID ')' } [ 'inverseOf(' individualvaluedPropertyID ')' ] [ 'Symmetric' ] [ 'Functional' | 'InverseFunctional' | 'Functional' 'InverseFunctional' | 'Transitive' ] { 'domain(' description ')' } { 'range(' description ')' } ')'
217
+ Yaparc::Seq.new(Yaparc::Literal.new('ObjectProperty('),
218
+ IndividualvaluedPropertyID.new,
219
+ Yaparc::ZeroOne.new(Yaparc::Literal.new('Deprecated'),{}),
220
+ Yaparc::Many.new(Annotation.new,{}),
221
+ Yaparc::Many.new(
222
+ Yaparc::Seq.new(Yaparc::Literal.new('super('),
223
+ IndividualvaluedPropertyID.new,
224
+ Yaparc::Literal.new(')')),{}),
225
+ Yaparc::Many.new(
226
+ Yaparc::Seq.new(Yaparc::Literal.new('inverseOf('),
227
+ IndividualvaluedPropertyID.new,
228
+ Yaparc::Literal.new(')')),{}),
229
+ Yaparc::ZeroOne.new(Yaparc::Literal.new('Symmetric'),{}),
230
+ Yaparc::Alt.new(
231
+ Yaparc::Literal.new('Functional'),
232
+ Yaparc::Literal.new('InverseFunctional'),
233
+ Yaparc::Seq.new(Yaparc::Literal.new('Functional'), Yaparc::Literal.new('InverseFunctional')),
234
+ Yaparc::Literal.new('Transitive')),
235
+ Yaparc::Many.new(
236
+ Yaparc::Seq.new(Yaparc::Literal.new('domain('),
237
+ Description.new,
238
+ Yaparc::Literal.new(')')),{}),
239
+ Yaparc::Many.new(
240
+ Yaparc::Seq.new(Yaparc::Literal.new('range('),
241
+ Description.new,
242
+ Yaparc::Literal.new(')')),{}),
243
+
244
+ Yaparc::Literal.new(')')) do |_,individualvaluedPropertyID1, deprecated, annotation, super_tag,inverseOf,symmetric, functional, domain, range, _|
245
+ {:object_property => {}}
246
+ end,
247
+ #'AnnotationProperty(' annotationPropertyID { annotation } ')'
248
+ Yaparc::Seq.new(Yaparc::Literal.new('AnnotationPropertyID('),
249
+ AnnotationPropertyID.new,
250
+ Yaparc::ManyOne.new(Annotation.new,{}),
251
+ Yaparc::Literal.new(')')) do |_, annotationPropertyID, annotation,_|
252
+ {:annotationProperty => {:annotationPropertyID => annotationPropertyID, :annotation => annotation }}
253
+ end,
254
+ #'OntologyProperty(' ontologyPropertyID { annotation } ')'
255
+ Yaparc::Seq.new(Yaparc::Literal.new('OntologyProperty('),
256
+ OntologyPropertyID.new,
257
+ Yaparc::ManyOne.new(Annotation.new,{}),
258
+ Yaparc::Literal.new(')')) do |_, ontologyPropertyID, annotation,_|
259
+ {:OntologyProperty => {:ontologyPropertyID => ontologyPropertyID, :annotation => annotation }}
260
+ end,
261
+ #'EquivalentProperties(' datavaluedPropertyID datavaluedPropertyID { datavaluedPropertyID } ')'
262
+ Yaparc::Seq.new(Yaparc::Literal.new('EquivalentProperties('),
263
+ DatavaluedPropertyID.new,
264
+ Yaparc::ManyOne.new(DatavaluedPropertyID.new,{}),
265
+ Yaparc::Literal.new(')')) do |_,datavaluedPropertyID, datavaluedPropertyIDs,_|
266
+ {:equivalentProperties => {}}
267
+ end,
268
+ #'SubPropertyOf(' datavaluedPropertyID datavaluedPropertyID ')'
269
+ Yaparc::Seq.new(Yaparc::Literal.new('SubPropertyOf('),
270
+ DatavaluedPropertyID.new,
271
+ DatavaluedPropertyID.new,
272
+ Yaparc::Literal.new(')')) do |_,datavaluedPropertyID1, datavaluedPropertyID2,_|
273
+ {:subPropertyOf => {}}
274
+ end,
275
+ #'EquivalentProperties(' individualvaluedPropertyID individualvaluedPropertyID { individualvaluedPropertyID } ')'
276
+ Yaparc::Seq.new(Yaparc::Literal.new('EquivalentProperties('),
277
+ IndividualvaluedPropertyID.new,
278
+ Yaparc::ManyOne.new(IndividualvaluedPropertyID.new,{}),
279
+ Yaparc::Literal.new(')')) do |_,individualvaluedPropertyID,individualvaluedPropertyIDs,_|
280
+ {:equivalentProperties => {}}
281
+ end,
282
+ #'SubPropertyOf(' individualvaluedPropertyID individualvaluedPropertyID ')'
283
+ Yaparc::Seq.new(Yaparc::Literal.new('SubPropertyOf('),
284
+ IndividualvaluedPropertyID.new,
285
+ IndividualvaluedPropertyID.new,
286
+ Yaparc::Literal.new(')')) do |_,individualvaluedPropertyID1, individualvaluedPropertyID2,_|
287
+ {:subPropertyOf => { }}
288
+ end)
289
+ end
290
+ end
291
+ end
292
+
293
+ # fact ::= individual
294
+ class Fact
295
+ include Yaparc::Parsable
296
+ def initialize
297
+ @parser = lambda do |input|
298
+ Individual.new
299
+ end
300
+ end
301
+ end
302
+
303
+ # individual ::= 'Individual(' [ individualID ] { annotation } { 'type(' type ')' } { value } ')'
304
+ class Individual
305
+ include Yaparc::Parsable
306
+ def initialize
307
+ @parser = lambda do |input|
308
+ Yaparc::Seq.new(Yaparc::Literal.new('Individual('),
309
+ Yaparc::ZeroOne.new(IndividualID.new,{}),
310
+ Yaparc::Many.new(Annotation.new,{ }),
311
+ Yaparc::Many.new(
312
+ Yaparc::Seq.new(Yaparc::Literal.new('type('),
313
+ Type.new,
314
+ Yaparc::Literal.new(')')) do |_, type, _|
315
+ {:type => type}
316
+ end,{}),
317
+ # Yaparc::Apply.new(Yaparc::Many.new(Value.new,{ })) do |value|
318
+ # {:value => value}
319
+ # end,
320
+ Yaparc::Many.new(Value.new,{ }),
321
+ Yaparc::Literal.new(')')) do |_,individual_id, annotations, types, values,_|
322
+ individual_id.merge(annotations).merge(types).merge(values)
323
+ # {:individual_id => individual_id, :annotations => annotations, :types => types, :values => values}
324
+ end
325
+ end
326
+ end
327
+ end
328
+
329
+ # annotation ::= 'annotation(' annotationPropertyID URIreference ')'
330
+ # | 'annotation(' annotationPropertyID dataLiteral ')'
331
+ # | 'annotation(' annotationPropertyID individual ')'
332
+ class Annotation
333
+ include Yaparc::Parsable
334
+ def initialize
335
+ @parser = lambda do |input|
336
+ Yaparc::Alt.new(Yaparc::Seq.new(Yaparc::Literal.new('annotation('),
337
+ AnnotationPropertyID.new,
338
+ URIReference.new,
339
+ Yaparc::Literal.new(')')) do |_,annotation_property_id, uri_reference, _|
340
+ {:annotation_property_id => annotation_property_id, :uri_reference => uri_reference }
341
+ end,
342
+ Yaparc::Seq.new(Yaparc::Literal.new('annotation('),
343
+ AnnotationPropertyID.new,
344
+ DataLiteral.new,
345
+ Yaparc::Literal.new(')')) do |_,annotation_property_id, data_literal, _|
346
+ {:annotation_property_id => annotation_property_id, :data_literal => data_literal}
347
+ end,
348
+ Yaparc::Seq.new(Yaparc::Literal.new('annotation('),
349
+ AnnotationPropertyID.new,
350
+ Individual.new,
351
+ Yaparc::Literal.new(')')) do |_,annotation_property_id, individual, _|
352
+ {:annotation_property_id => annotation_property_id, :individual => individual }
353
+ end)
354
+ end
355
+ end
356
+ end
357
+
358
+
359
+ # value ::= 'value(' individualvaluedPropertyID individualID ')'
360
+ # | 'value(' individualvaluedPropertyID individual ')'
361
+ # | 'value(' datavaluedPropertyID dataLiteral ')'
362
+ class Value
363
+ include Yaparc::Parsable
364
+ def initialize
365
+ @parser = lambda do |input|
366
+ Yaparc::Alt.new(Yaparc::Seq.new(Yaparc::Literal.new('value('),
367
+ IndividualvaluedPropertyID.new,
368
+ IndividualID.new,
369
+ Yaparc::Literal.new(')')) do |_,individualvalued_property_id, individual_id,_|
370
+ {:individualvalued_property_id => individualvalued_property_id, :individual_id => individual_id }
371
+ end,
372
+ Yaparc::Seq.new(Yaparc::Literal.new('value('),
373
+ IndividualvaluedPropertyID.new,
374
+ Individual.new,
375
+ Yaparc::Literal.new(')')) do |_,individualvalued_property_id, individual,_|
376
+ {:individualvalued_property_id => individualvalued_property_id, :individual => individual}
377
+ end,
378
+ Yaparc::Seq.new(Yaparc::Literal.new('value('),
379
+ IndividualvaluedPropertyID.new,
380
+ DataLiteral.new,
381
+ Yaparc::Literal.new(')')) do |_,individualvalued_property_id, data_literal,_|
382
+ {:individualvalued_property_id => individualvalued_property_id, :data_literal => data_literal}
383
+
384
+ end)
385
+ end
386
+ end
387
+ end
388
+
389
+ # type ::= description
390
+ class Type
391
+ include Yaparc::Parsable
392
+ def initialize
393
+ @parser = lambda do |input|
394
+ Description.new
395
+ end
396
+ end
397
+ end
398
+
399
+ # description ::= classID
400
+ # | restriction
401
+ # | 'unionOf(' { description } ')'
402
+ # | 'intersectionOf(' { description } ')'
403
+ # | 'complementOf(' description ')'
404
+ # | 'oneOf(' { individualID } ')'
405
+ class Description
406
+ include Yaparc::Parsable
407
+ def initialize
408
+ @parser = lambda do |input|
409
+ Yaparc::Alt.new(Restriction.new,
410
+ Yaparc::Seq.new(Yaparc::Literal.new('unionOf('),
411
+ Yaparc::Many.new(Description.new,{ }),
412
+ Yaparc::Literal.new(')')) do |_,description,_|
413
+ {:unionOf => description}
414
+ end,
415
+ Yaparc::Seq.new(Yaparc::Literal.new('intersectionOf('),
416
+ Yaparc::Many.new(Description.new,{ }),
417
+ Yaparc::Literal.new(')')) do |_,description,_|
418
+ {:intersectionOf => description}
419
+ end,
420
+ Yaparc::Seq.new(Yaparc::Literal.new('complementOf('),
421
+ Description.new,
422
+ Yaparc::Literal.new(')')) do |_,description,_|
423
+ {:complementOf => description}
424
+ end,
425
+ Yaparc::Seq.new(Yaparc::Literal.new('oneOf('),
426
+ Yaparc::Many.new(IndividualID.new,{}),
427
+ Yaparc::Literal.new(')')) do |_,description,_|
428
+ {:oneOf => {:individual_id => description}}
429
+ end,
430
+ ClassID.new)
431
+ end
432
+ end
433
+ end
434
+
435
+ # restriction ::= 'restriction(' datavaluedPropertyID dataRestrictionComponent { dataRestrictionComponent } ')'
436
+ # | 'restriction(' individualvaluedPropertyID individualRestrictionComponent { individualRestrictionComponent } ')'
437
+ class Restriction
438
+ include Yaparc::Parsable
439
+ def initialize
440
+ @parser = lambda do |input|
441
+ Yaparc::Alt.new(Yaparc::Seq.new(Yaparc::Literal.new('restriction('),
442
+ DatavaluedPropertyID.new,
443
+ Yaparc::ManyOne.new(DataRestrictionComponent.new,{ }),
444
+ Yaparc::Literal.new(')')) do |_,datavalued_property_id, data_restriction_components,_|
445
+ {:datavalued_property_id => datavalued_property_id, :data_restriction_components => data_restriction_components}
446
+ end,
447
+ Yaparc::Seq.new(Yaparc::Literal.new('restriction('),
448
+ IndividualvaluedPropertyID.new,
449
+ Yaparc::ManyOne.new(IndividualRestrictionComponent.new,{ }),
450
+ Yaparc::Literal.new(')')) do |_,individualvalued_property_id, individual_restriction_components,_|
451
+ {:individualvalued_property_id => individualvalued_property_id, :individual_restriction_components => individual_restriction_components}
452
+ end)
453
+ end
454
+ end
455
+ end
456
+
457
+ # individualRestrictionComponent ::= 'allValuesFrom(' description ')'
458
+ # | 'someValuesFrom(' description ')'
459
+ # | 'value(' individualID ')'
460
+ # | cardinality
461
+ class IndividualRestrictionComponent
462
+ include Yaparc::Parsable
463
+ def initialize
464
+ @parser = lambda do |input|
465
+ Yaparc::Alt.new(Yaparc::Seq.new(Yaparc::Literal.new('allValuesFrom('),
466
+ Description.new,
467
+ Yaparc::Literal.new(')')) do |_,description,_|
468
+ {:allValuesFrom => description}
469
+ end,
470
+ Yaparc::Seq.new(Yaparc::Literal.new('someValuesFrom('),
471
+ Description.new,
472
+ Yaparc::Literal.new(')')) do |_,description,_|
473
+ {:someValuesFrom => description}
474
+ end,
475
+ Yaparc::Seq.new(Yaparc::Literal.new('value('),
476
+ IndividualID.new,
477
+ Yaparc::Literal.new(')')) do |_,individual_id,_|
478
+ {:value => individual_id}
479
+ end,
480
+ Cardinality.new)
481
+ end
482
+ end
483
+ end
484
+
485
+ # modality ::= 'complete' | 'partial'
486
+ class Modality
487
+ include Yaparc::Parsable
488
+ def initialize
489
+ @parser = lambda do |input|
490
+ Yaparc::Alt.new(Yaparc::Literal.new('complete'),Yaparc::Literal.new('partial'))
491
+ end
492
+ end
493
+ end
494
+
495
+ # dataRestrictionComponent ::= 'allValuesFrom(' dataRange ')'
496
+ # | 'someValuesFrom(' dataRange ')'
497
+ # | 'value(' dataLiteral ')'
498
+ # | cardinality
499
+ class DataRestrictionComponent
500
+ include Yaparc::Parsable
501
+ def initialize
502
+ @parser = lambda do |input|
503
+ Yaparc::Alt.new(Yaparc::Seq.new(Yaparc::Literal.new('allValuesFrom('),
504
+ DataRange.new,
505
+ Yaparc::Literal.new(')')) do |_,data_range,_|
506
+ {:allValuesFrom => data_range }
507
+ end,
508
+ Yaparc::Seq.new(Yaparc::Literal.new('someValuesFrom('),
509
+ DataRange.new,
510
+ Yaparc::Literal.new(')')) do |_,data_range,_|
511
+ {:someValuesFrom => data_range }
512
+ end,
513
+ Yaparc::Seq.new(Yaparc::Literal.new('value('),
514
+ DataLiteral.new,
515
+ Yaparc::Literal.new(')')) do |_,data_literal,_|
516
+ {:value => data_literal }
517
+ end,
518
+ Cardinality.new)
519
+ end
520
+ end
521
+ end
522
+
523
+ # cardinality ::= 'minCardinality(' non-negative-integer ')'
524
+ # | 'maxCardinality(' non-negative-integer ')'
525
+ # | 'cardinality(' non-negative-integer ')'
526
+
527
+ class Cardinality
528
+ include Yaparc::Parsable
529
+ def initialize
530
+ @parser = lambda do |input|
531
+ Yaparc::Alt.new(Yaparc::Seq.new(Yaparc::Literal.new('minCardinality('),
532
+ Yaparc::Many.new(NonNegativeInteger.new,0),
533
+ Yaparc::Literal.new(')')) do |_,integer,_|
534
+ {:minCardinality => integer}
535
+ end,
536
+ Yaparc::Seq.new(Yaparc::Literal.new('maxCardinality('),
537
+ Yaparc::Many.new(NonNegativeInteger.new,0),
538
+ Yaparc::Literal.new(')')) do |_,integer,_|
539
+ {:maxCardinality => integer}
540
+ end,
541
+ Yaparc::Seq.new(Yaparc::Literal.new('cardinality('),
542
+ Yaparc::Many.new(NonNegativeInteger.new,0),
543
+ Yaparc::Literal.new(')')) do |_,integer,_|
544
+ {:cardinality => integer}
545
+ end)
546
+ end
547
+ end
548
+ end
549
+
550
+ class NonNegativeInteger
551
+ include Yaparc::Parsable
552
+ def initialize
553
+ @parser = lambda do |input|
554
+ Yaparc::Apply.new(Yaparc::Regex.new(/\A[0-9]+/)) do |number|
555
+ Integer(number)
556
+ end
557
+ end
558
+ end
559
+ end
560
+
561
+
562
+ # dataRange ::= datatypeID
563
+ # | 'rdfs:Literal'
564
+ # | 'oneOf(' { dataLiteral } ')'
565
+ class DataRange
566
+ include Yaparc::Parsable
567
+ def initialize
568
+ @parser = lambda do |input|
569
+ Yaparc::Alt.new(Yaparc::Literal.new('rdfs:Literal'),
570
+ Yaparc::Seq.new(Yaparc::Literal.new('oneOf('),
571
+ Yaparc::Many.new(DataLiteral.new,[]),
572
+ Yaparc::Literal.new(')')) do |_,data_literals,_|
573
+ {:oneOf => data_literals}
574
+ end,
575
+ DatatypeID.new)
576
+ end
577
+ end
578
+ end
579
+
580
+ # ontologyID ::= URIreference
581
+ class OntologyID
582
+ include Yaparc::Parsable
583
+ def initialize
584
+ @parser = lambda do |input|
585
+ Yaparc::Apply.new(URIReference.new) do |uri|
586
+ {:ontology_id => uri}
587
+ end
588
+ end
589
+ end
590
+ end
591
+
592
+ # datavaluedPropertyID ::= URIreference
593
+ class DatavaluedPropertyID
594
+ include Yaparc::Parsable
595
+ def initialize
596
+ @parser = lambda do |input|
597
+ Yaparc::Apply.new(URIReference.new) do |uri|
598
+ {:datavalued_property_id => {:uri_reference => uri}}
599
+ end
600
+ #URIReference.new
601
+ #URIParser::URIReference.new
602
+ end
603
+ end
604
+ end
605
+
606
+
607
+ # individualvaluedPropertyID ::= URIreference
608
+ class IndividualvaluedPropertyID
609
+ include Yaparc::Parsable
610
+ def initialize
611
+ @parser = lambda do |input|
612
+ Yaparc::Apply.new(URIReference.new) do |uri|
613
+ {:individualvalued_property_id => {:uri_reference => uri}}
614
+ end
615
+ end
616
+ end
617
+ end
618
+
619
+ # annotationPropertyID ::= URIreference
620
+ class AnnotationPropertyID
621
+ include Yaparc::Parsable
622
+ def initialize
623
+ @parser = lambda do |input|
624
+ Yaparc::Apply.new(URIReference.new) do |uri|
625
+ {:annotation_property_id => uri}
626
+ end
627
+ end
628
+ end
629
+ end
630
+
631
+ # ontologyPropertyID ::= URIreference
632
+ class OntologyPropertyID
633
+ include Yaparc::Parsable
634
+ def initialize
635
+ @parser = lambda do |input|
636
+ Yaparc::Apply.new(URIReference.new) do |uri|
637
+ {:ontology_property_id => {:uri_reference => uri}}
638
+ end
639
+ end
640
+ end
641
+ end
642
+
643
+ # classID ::= URIreference
644
+ class ClassID
645
+ include Yaparc::Parsable
646
+
647
+ def initialize
648
+ @parser = lambda do |input|
649
+ Yaparc::Apply.new(URIReference.new) do |uri|
650
+ {:class_id => uri}
651
+ end
652
+ end
653
+ end
654
+ end
655
+
656
+ # individualID ::= URIreference
657
+ class IndividualID
658
+ include Yaparc::Parsable
659
+ def initialize
660
+ @parser = lambda do |input|
661
+ Yaparc::Apply.new(URIReference.new) do |uri|
662
+ {:individual_id => uri}
663
+ end
664
+ end
665
+ end
666
+ end
667
+
668
+ # datatypeID ::= URIreference
669
+ class DatatypeID
670
+ include Yaparc::Parsable
671
+ def initialize
672
+ @parser = lambda do |input|
673
+ Yaparc::Apply.new(URIReference.new) do |uri|
674
+ {:datatype_id => {:uri_reference => uri}}
675
+ end
676
+ end
677
+ end
678
+ end
679
+
680
+ # dataLiteral ::= typedLiteral | plainLiteral
681
+ class DataLiteral
682
+ include Yaparc::Parsable
683
+ def initialize
684
+ @parser = lambda do |input|
685
+ Yaparc::Alt.new(TypedLiteral.new,
686
+ PlainLiteral.new)
687
+ end
688
+ end
689
+ end
690
+
691
+ # typedLiteral ::= lexicalForm^^URIreference
692
+ class TypedLiteral
693
+ include Yaparc::Parsable
694
+ def initialize
695
+ @parser = lambda do |input|
696
+ Yaparc::Seq.new(LexicalForm.new,
697
+ Yaparc::Literal.new('^^'),
698
+ URIReference.new) do |lexical_form, _, uri|
699
+ ["#{lexical_form}^^#{uri}"]
700
+ end
701
+ end
702
+ end
703
+ end
704
+
705
+ # plainLiteral ::= lexicalForm | lexicalForm@languageTag
706
+ class PlainLiteral
707
+ include Yaparc::Parsable
708
+ def initialize
709
+ @parser = lambda do |input|
710
+ Yaparc::Alt.new(Yaparc::Seq.new(LexicalForm.new,
711
+ Yaparc::Literal.new('@'),
712
+ LanguageTag.new) do |lexical_form,_,language_tag|
713
+ [lexical_form + '@' + language_tag]
714
+ end,
715
+ LexicalForm.new)
716
+ end
717
+ end
718
+ end
719
+
720
+ #lexicalForm ::= as in RDF, a unicode string in normal form C
721
+ class LexicalForm
722
+ include Yaparc::Parsable
723
+ def initialize
724
+ @parser = lambda do |input|
725
+ Yaparc::Apply.new(Yaparc::Regex.new(/"[^"]*"/)) do |lexical_form|
726
+ lexical_form
727
+ end
728
+ end
729
+ end
730
+ end
731
+
732
+ #languageTag ::= as in RDF, an XML language tag
733
+ class LanguageTag
734
+ include Yaparc::Parsable
735
+ def initialize
736
+ @parser = lambda do |input|
737
+ Yaparc::Regex.new(/[a-zA-Z-]+/)
738
+ end
739
+ end
740
+ end
741
+
742
+ # ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
743
+ class URIReference
744
+ include Yaparc::Parsable
745
+ def initialize
746
+ @parser = lambda do |input|
747
+
748
+ keyword_parsers = OWLParser::KEYWORDS.map {|keyword| Yaparc::Literal.new(keyword)}
749
+ case result = Yaparc::Alt.new(*keyword_parsers).parse(input)
750
+ when Yaparc::Result::OK
751
+ return Yaparc::Fail.new
752
+ end
753
+
754
+ parser = Yaparc::Tokenize.new(Yaparc::Regex.new(/\A(([^:\/?# ]+):)?(\/\/([^\/?#() ]*))?([^?#() ]*)(\?([^# ]*))?(#(.*))?/), :prefix => Yaparc::Space.new, :postfix => Yaparc::Space.new)
755
+ case result = parser.parse(input)
756
+ when Yaparc::Result::OK
757
+ unless result.value.empty?
758
+ Yaparc::Result::OK.new(:value => {:uri_reference => result.value}, :input => result.input)
759
+ else
760
+ Yaparc::Fail.new
761
+ end
762
+ else
763
+ result
764
+ end
765
+ end
766
+ end
767
+ end
768
+ end
769
+
770
+
771
+ class OwlTest < Test::Unit::TestCase
772
+ include ::Yaparc
773
+
774
+ def test_ontology
775
+ ontology = OWLParser::Ontology.new
776
+ result = ontology.parse("Ontology()")
777
+ assert_instance_of Result::OK, result
778
+ result = ontology.parse("Ontology(ex:ontology_id)")
779
+ assert_instance_of Result::OK, result
780
+ result = ontology.parse("Ontology(Class(ex:class complete annotation(ex:annotation http://localhost.localdomain )))")
781
+ assert_instance_of Result::OK, result
782
+ result = ontology.parse("Ontology(Class(ex:class Deprecated partial annotation(ex:annotation http://localhost.localdomain )))")
783
+ assert_instance_of Result::OK, result
784
+
785
+ ontology1 = <<-EOS
786
+ Ontology(ontology1
787
+ Class(Pc complete unionOf(Desktop Laptop))
788
+ Individual(ibmR40 type(Laptop))
789
+ Individual(compaqPresario200 type(Desktop))
790
+ Class(PcOffice complete intersectionOf(Pc complementOf(Desktop))))
791
+ EOS
792
+ result = ontology.parse(ontology1)
793
+ assert_instance_of Result::OK, result
794
+ end
795
+
796
+ def test_directive
797
+ directive = OWLParser::Directive.new
798
+ result = directive.parse("Class(ex:class complete )")
799
+ assert_instance_of Result::OK, result
800
+ result = directive.parse("Class(ex:class complete annotation(ex:annotation http://localhost.localdomain ))")
801
+ assert_instance_of Result::OK, result
802
+ result = directive.parse("Class(ex:class Deprecated partial annotation(ex:annotation http://localhost.localdomain ))")
803
+ assert_instance_of Result::OK, result
804
+ end
805
+
806
+ def test_axiom
807
+ axiom = OWLParser::Axiom.new
808
+ result = axiom.parse("Class(Pc complete unionOf(Desktop Laptop))")
809
+ assert_instance_of Result::OK, result
810
+ result = axiom.parse("Class(ex:class_id complete )")
811
+ assert_instance_of Result::OK, result
812
+ result = axiom.parse("EnumeratedClass(ex:class_id Deprecated )")
813
+ assert_instance_of Result::OK, result
814
+ result = axiom.parse("Class(ex:class complete annotation(ex:annotation http://localhost.localdomain ))")
815
+ assert_instance_of Result::OK, result
816
+ result = axiom.parse("Class(ex:class Deprecated partial annotation(ex:annotation http://localhost.localdomain ))")
817
+ result = axiom.parse("SubClassOf(ex:subclass ex:superclass)")
818
+ assert_instance_of Result::OK, result
819
+ end
820
+
821
+ def test_annotation
822
+ annotation = OWLParser::Annotation.new
823
+ result = annotation.parse("annotation(ex:annotation http://localhost.localdomain)")
824
+ assert_instance_of Result::OK, result
825
+ result = annotation.parse("annotation(ex:annotation type(ex:human))")
826
+ assert_instance_of Result::Fail, result
827
+ result = annotation.parse('annotation(ex:annotation "akimichi"^^http://www.w3.org/2001/XMLSchema@integer)')
828
+ assert_instance_of Result::OK, result
829
+ assert_instance_of Result::Fail, annotation.parse("annotation(ex:annotation value(ex:human))")
830
+ assert_instance_of Result::Fail, annotation.parse("annotation(ex:annotation type(ex:human) value(ex:human))")
831
+ end
832
+
833
+ def test_value
834
+ value = OWLParser::Value.new
835
+ result = value.parse("value(ex:value http://localhost.localdomain)")
836
+ assert_instance_of Result::OK, result
837
+ end
838
+
839
+ def test_individual
840
+ individual = OWLParser::Individual.new
841
+ result = individual.parse("Individual(ex:individual)")
842
+ assert_instance_of Result::OK, result
843
+ assert_equal Hash[:individual_id=>{:uri_reference=>"ex:individual"}], result.value
844
+ result = individual.parse("Individual(ex:individual type(ex:human))")
845
+ assert_instance_of Result::OK, result
846
+ assert_instance_of Result::OK, individual.parse("Individual(ex:individual type(ex:human))")
847
+ assert_instance_of Result::OK, individual.parse("Individual(ex:individual value(ex:human http://localhost.localdomain))")
848
+ assert_instance_of Result::OK, individual.parse("Individual(ex:individual type(ex:human) value(ex:human http://localhost.localdomain))")
849
+ end
850
+
851
+ def test_type
852
+ type = OWLParser::Type.new
853
+ assert_instance_of Result::OK, type.parse("http://localhost.localdomain")
854
+ assert_instance_of Result::OK, type.parse("unionOf( )")
855
+ assert_instance_of Result::OK, type.parse("unionOf(Desktop Laptop)")
856
+ assert_instance_of Result::OK, type.parse("unionOf(http://localhost.localdomain)")
857
+ assert_instance_of Result::OK, type.parse("ex:hasMember")
858
+ assert_instance_of Result::OK, type.parse("unionOf(ex:hasMember)")
859
+ assert_instance_of Result::OK, type.parse("intersectionOf(ex:hasMember)")
860
+ assert_instance_of Result::OK, type.parse("complementOf(intersectionOf(ex:hasMember))")
861
+ assert_instance_of Result::OK, type.parse("oneOf(ex:hasMember)")
862
+ end
863
+
864
+ def test_description
865
+ description = OWLParser::Description.new
866
+ assert_instance_of Result::OK, description.parse("http://localhost.localdomain")
867
+ assert_instance_of Result::OK, description.parse("unionOf( )")
868
+ assert_instance_of Result::OK, description.parse("unionOf(http://localhost.localdomain)")
869
+ assert_instance_of Result::OK, description.parse("unionOf(Desktop Laptop)")
870
+ assert_instance_of Result::OK, description.parse("ex:hasMember")
871
+ assert_instance_of Result::OK, description.parse("unionOf(ex:hasMember)")
872
+ assert_instance_of Result::OK, description.parse("intersectionOf(ex:hasMember)")
873
+ assert_instance_of Result::OK, description.parse("complementOf(intersectionOf(ex:hasMember))")
874
+ assert_instance_of Result::OK, description.parse("oneOf(ex:hasMember)")
875
+ assert_instance_of Result::OK, description.parse("restriction(ex:hasMember allValuesFrom(ex:StringPlayer))")
876
+ end
877
+
878
+ def test_individual_restriction_component
879
+ individual_restriction_component = OWLParser::IndividualRestrictionComponent.new
880
+ result = individual_restriction_component.parse("allValuesFrom(ex:StringPlayer)")
881
+ assert_instance_of Result::OK, result
882
+ assert_equal "", result.input
883
+ result = individual_restriction_component.parse("someValuesFrom(ex:StringPlayer)")
884
+ assert_instance_of Result::OK, result
885
+ assert_equal "", result.input
886
+ result = individual_restriction_component.parse("value(ex:StringPlayer)")
887
+ assert_instance_of Result::OK, result
888
+ assert_equal "", result.input
889
+ result = individual_restriction_component.parse("minCardinality(1)")
890
+ assert_instance_of Result::OK, result
891
+ assert_equal "", result.input
892
+ end
893
+
894
+ def test_restriction
895
+ restriction = OWLParser::Restriction.new
896
+ assert_instance_of Result::OK, restriction.parse("restriction(ex:hasMember value(datatype))")
897
+ assert_instance_of Result::OK, restriction.parse("restriction(ex:hasMember allValuesFrom(ex:StringPlayer))")
898
+ end
899
+
900
+
901
+ def test_data_restriction_component
902
+ data_restriction_component = OWLParser::DataRestrictionComponent.new
903
+ assert_instance_of Result::OK, data_restriction_component.parse('value("akimichi"@ja)')
904
+ assert_instance_of Result::OK, data_restriction_component.parse("allValuesFrom( rdfs:Literal )")
905
+ assert_instance_of Result::OK, data_restriction_component.parse("allValuesFrom(ex:StringPlayer)")
906
+ assert_instance_of Result::OK, data_restriction_component.parse("allValuesFrom(http://localhost.localdomain)")
907
+ assert_instance_of Result::OK, data_restriction_component.parse("allValuesFrom(oneOf())")
908
+ assert_instance_of Result::OK, data_restriction_component.parse('allValuesFrom(oneOf("akimichi"@ja))')
909
+ assert_instance_of Result::OK, data_restriction_component.parse("maxCardinality(10)")
910
+ assert_instance_of Result::OK, data_restriction_component.parse("cardinality(398)")
911
+ assert_instance_of Result::OK, data_restriction_component.parse("minCardinality(1)")
912
+ assert_instance_of Result::OK, data_restriction_component.parse("maxCardinality(10)")
913
+ assert_instance_of Result::OK, data_restriction_component.parse("cardinality(398)")
914
+
915
+ end
916
+
917
+ def test_cardinality
918
+ cardinality = OWLParser::Cardinality.new
919
+ assert_instance_of Result::OK, cardinality.parse("minCardinality(1)")
920
+ assert_instance_of Result::OK, cardinality.parse("maxCardinality(10)")
921
+ assert_instance_of Result::OK, cardinality.parse("cardinality(398)")
922
+
923
+ end
924
+
925
+ def test_data_range
926
+ data_range = OWLParser::DataRange.new
927
+ assert_instance_of Result::OK, data_range.parse("datatype@localhost.localdomain")
928
+ assert_instance_of Result::OK, data_range.parse("http://datatype@localhost.localdomain")
929
+ assert_instance_of Result::OK, data_range.parse("http://localhost.localdomain")
930
+ assert_instance_of Result::OK, data_range.parse("datatype@localhost.localdomain)")
931
+ assert_instance_of Result::OK, data_range.parse("rdfs:Literal")
932
+ assert_instance_of Result::OK, data_range.parse("oneOf()")
933
+ assert_instance_of Result::OK, data_range.parse('oneOf("akimichi"@ja)')
934
+ # assert_instance_of Result::OK, data_range.parse("oneOf( emile@datarange.localdomain )")
935
+ end
936
+
937
+ def test_data_literal
938
+ data_literal = OWLParser::DataLiteral.new
939
+ assert_instance_of Result::OK, data_literal.parse('"akimichi"@ja')
940
+ assert_instance_of Result::OK, data_literal.parse('"akimichi"^^http://www.w3.org/2001/XMLSchema@integer')
941
+ assert_instance_of Result::Fail, data_literal.parse("ex:hasMember")
942
+ assert_instance_of Result::Fail, data_literal.parse("datatype")
943
+ assert_instance_of Result::Fail, data_literal.parse("emile@localhost.localdomain")
944
+ end
945
+
946
+ def test_plain_literal
947
+ plain_literal = OWLParser::PlainLiteral.new
948
+ assert_instance_of Result::OK, plain_literal.parse('"akimichi"@ja')
949
+ result = plain_literal.parse('"nick"@en-US')
950
+ assert_instance_of Result::OK, result
951
+ assert_equal ["\"nick\"@en-US"], result.value
952
+ assert_instance_of Result::OK, plain_literal.parse('"akimichi"')
953
+ end
954
+
955
+ def test_typed_literal
956
+ typed_literal = OWLParser::TypedLiteral.new
957
+ assert_instance_of Result::OK, typed_literal.parse('"akimichi"^^http://www.w3.org/2001/XMLSchema@integer')
958
+ end
959
+
960
+ def test_lexical_form
961
+ lexical_form = OWLParser::LexicalForm.new
962
+ assert_instance_of Result::OK, lexical_form.parse('"ex:hasMember"')
963
+ assert_instance_of Result::OK, lexical_form.parse('"datatype"')
964
+ assert_instance_of Result::OK, lexical_form.parse('"emile@localhost.localdomain"')
965
+ end
966
+
967
+ def test_language_tag
968
+ language_tag = OWLParser::LanguageTag.new
969
+ assert_instance_of Result::OK, language_tag.parse("ja")
970
+ result = language_tag.parse("en-US")
971
+ assert_instance_of Result::OK, result
972
+ assert_equal "en-US", result.value
973
+ end
974
+
975
+ def test_annotation_property_id
976
+ annotation_property_id = OWLParser::AnnotationPropertyID.new
977
+ result = annotation_property_id.parse("ex:annotation")
978
+ assert_instance_of Result::OK, result
979
+ assert_equal Hash[:annotation_property_id => {:uri_reference=>"ex:annotation"}], result.value
980
+ end
981
+
982
+ def test_individual_id
983
+ individual_id = OWLParser::IndividualID.new
984
+ assert_instance_of Result::Fail, individual_id.parse("type(")
985
+ result = individual_id.parse("ex:individual")
986
+ assert_instance_of Result::OK, result
987
+ assert_equal "", result.input
988
+ result = individual_id.parse("ex:individual type")
989
+ assert_instance_of Result::OK, result
990
+ assert_equal Hash[:individual_id => {:uri_reference=>"ex:individual"}], result.value
991
+ assert_equal "type", result.input
992
+ assert_instance_of Result::OK, individual_id.parse("http://localhost.localdomain:3000/pchar;param?query")
993
+ assert_instance_of Result::OK, individual_id.parse("http://localhost.localdomain")
994
+ end
995
+
996
+ def test_ontology_id
997
+ ontology_id = OWLParser::OntologyID.new
998
+ assert_instance_of Result::OK, ontology_id.parse("http://localhost.localdomain:3000")
999
+ result = ontology_id.parse("ex:individual type")
1000
+ end
1001
+
1002
+ def test_class_id
1003
+ class_id = OWLParser::ClassID.new
1004
+ result = class_id.parse("ex:class_id")
1005
+ assert_instance_of Result::OK, result
1006
+ assert_equal Hash[:class_id=>{:uri_reference=>"ex:class_id"}], result.value
1007
+ result = class_id.parse("ex:individual")
1008
+ assert_instance_of Result::OK, class_id.parse("http://localhost.localdomain:3000")
1009
+ result = class_id.parse("ex:individual type")
1010
+ assert_instance_of Result::OK, result
1011
+ assert_equal Hash[:class_id=> {:uri_reference=>"ex:individual"}], result.value
1012
+ assert_equal "type", result.input
1013
+ assert_instance_of Result::OK, class_id.parse("http://localhost.localdomain:3000/pchar;param?query")
1014
+ assert_instance_of Result::OK, class_id.parse("http://localhost.localdomain")
1015
+ end
1016
+
1017
+ def test_uri_reference
1018
+ uri_reference = OWLParser::URIReference.new
1019
+ assert_instance_of Result::OK, uri_reference.parse("http://localhost.localdomain:3000/pchar;param?query")
1020
+ assert_instance_of Result::OK, uri_reference.parse("http://localhost.localdomain")
1021
+ result = uri_reference.parse("http://localhost.localdomain")
1022
+ assert_instance_of Result::OK, result
1023
+ assert_equal Hash[:uri_reference=>"http://localhost.localdomain"], result.value
1024
+ assert_equal "", result.input
1025
+ result = uri_reference.parse("http://localhost.localdomain)")
1026
+ assert_instance_of Result::OK, result
1027
+ assert_equal Hash[:uri_reference=>"http://localhost.localdomain"], result.value
1028
+ assert_equal ")", result.input
1029
+ result = uri_reference.parse("ex:hasMember")
1030
+ assert_instance_of Result::OK, result
1031
+ assert_equal Hash[:uri_reference => "ex:hasMember"], result.value
1032
+ assert_equal "", result.input
1033
+ result = uri_reference.parse("")
1034
+ assert_instance_of Result::Fail, result
1035
+ end
1036
+
1037
+
1038
+
1039
+ end