1
1
import xml .dom .minidom
2
- from typing import IO , Dict , Optional , Set
2
+ from typing import IO , Dict , Generator , Optional , Set , Tuple
3
3
from xml .sax .saxutils import escape , quoteattr
4
4
5
5
from rdflib .collection import Collection
@@ -20,13 +20,14 @@ class XMLSerializer(Serializer):
20
20
def __init__ (self , store : Graph ):
21
21
super (XMLSerializer , self ).__init__ (store )
22
22
23
- def __bindings (self ):
23
+ def __bindings (self ) -> Generator [ Tuple [ str , URIRef ], None , None ] :
24
24
store = self .store
25
25
nm = store .namespace_manager
26
- bindings = {}
26
+ bindings : Dict [ str , URIRef ] = {}
27
27
28
28
for predicate in set (store .predicates ()):
29
- prefix , namespace , name = nm .compute_qname_strict (predicate )
29
+ # type error: Argument 1 to "compute_qname_strict" of "NamespaceManager" has incompatible type "Node"; expected "str"
30
+ prefix , namespace , name = nm .compute_qname_strict (predicate ) # type: ignore[arg-type]
30
31
bindings [prefix ] = URIRef (namespace )
31
32
32
33
RDFNS = URIRef ("http://www.w3.org/1999/02/22-rdf-syntax-ns#" )
@@ -45,7 +46,7 @@ def serialize(
45
46
base : Optional [str ] = None ,
46
47
encoding : Optional [str ] = None ,
47
48
** args ,
48
- ):
49
+ ) -> None :
49
50
# if base is given here, use that, if not and a base is set for the graph use that
50
51
if base is not None :
51
52
self .base = base
@@ -82,7 +83,8 @@ def serialize(
82
83
83
84
# write out triples by subject
84
85
for subject in self .store .subjects ():
85
- self .subject (subject , 1 )
86
+ # type error: Argument 1 to "subject" of "XMLSerializer" has incompatible type "Node"; expected "Identifier"
87
+ self .subject (subject , 1 ) # type: ignore[arg-type]
86
88
87
89
# endRDF
88
90
write ("</rdf:RDF>\n " )
@@ -91,7 +93,7 @@ def serialize(
91
93
# self.__serialized = None
92
94
del self .__serialized
93
95
94
- def subject (self , subject , depth = 1 ) :
96
+ def subject (self , subject : Identifier , depth : int = 1 ) -> None :
95
97
if subject not in self .__serialized :
96
98
self .__serialized [subject ] = 1
97
99
@@ -110,13 +112,17 @@ def subject(self, subject, depth=1):
110
112
write (">\n " )
111
113
112
114
for predicate , object in self .store .predicate_objects (subject ):
113
- self .predicate (predicate , object , depth + 1 )
115
+ # type error: Argument 1 to "predicate" of "XMLSerializer" has incompatible type "Node"; expected "Identifier"
116
+ # type error: Argument 2 to "predicate" of "XMLSerializer" has incompatible type "Node"; expected "Identifier"
117
+ self .predicate (predicate , object , depth + 1 ) # type: ignore[arg-type]
114
118
write ("%s</%s>\n " % (indent , element_name ))
115
119
116
120
else :
117
121
write ("/>\n " )
118
122
119
- def predicate (self , predicate , object , depth = 1 ):
123
+ def predicate (
124
+ self , predicate : Identifier , object : Identifier , depth : int = 1
125
+ ) -> None :
120
126
write = self .write
121
127
indent = " " * depth
122
128
qname = self .store .namespace_manager .qname_strict (predicate )
@@ -150,7 +156,7 @@ def predicate(self, predicate, object, depth=1):
150
156
151
157
152
158
# TODO:
153
- def fix (val ) :
159
+ def fix (val : str ) -> str :
154
160
"strip off _: from nodeIDs... as they are not valid NCNames"
155
161
if val .startswith ("_:" ):
156
162
return val [2 :]
@@ -169,7 +175,7 @@ def serialize(
169
175
base : Optional [str ] = None ,
170
176
encoding : Optional [str ] = None ,
171
177
** args ,
172
- ):
178
+ ) -> None :
173
179
self .__serialized : Dict [Identifier , int ] = {}
174
180
store = self .store
175
181
# if base is given here, use that, if not and a base is set for the graph use that
@@ -236,7 +242,7 @@ def serialize(
236
242
# Set to None so that the memory can get garbage collected.
237
243
self .__serialized = None # type: ignore[assignment]
238
244
239
- def subject (self , subject : IdentifiedNode , depth : int = 1 ):
245
+ def subject (self , subject : Identifier , depth : int = 1 ):
240
246
store = self .store
241
247
writer = self .writer
242
248
@@ -257,7 +263,8 @@ def subject(self, subject: IdentifiedNode, depth: int = 1):
257
263
type = None
258
264
259
265
element = type or RDFVOC .Description
260
- writer .push (element )
266
+ # type error: Argument 1 to "push" of "XMLWriter" has incompatible type "Node"; expected "str"
267
+ writer .push (element ) # type: ignore[arg-type]
261
268
262
269
if isinstance (subject , BNode ):
263
270
@@ -277,9 +284,12 @@ def subj_as_obj_more_than(ceil):
277
284
if (subject , None , None ) in store :
278
285
for predicate , object in store .predicate_objects (subject ):
279
286
if not (predicate == RDF .type and object == type ):
280
- self .predicate (predicate , object , depth + 1 )
287
+ # type error: Argument 1 to "predicate" of "PrettyXMLSerializer" has incompatible type "Node"; expected "Identifier"
288
+ # type error: Argument 2 to "predicate" of "PrettyXMLSerializer" has incompatible type "Node"; expected "Identifier"
289
+ self .predicate (predicate , object , depth + 1 ) # type: ignore[arg-type]
281
290
282
- writer .pop (element )
291
+ # type error: Argument 1 to "pop" of "XMLWriter" has incompatible type "Node"; expected "Optional[str]"
292
+ writer .pop (element ) # type: ignore[arg-type]
283
293
284
294
elif subject in self .forceRDFAbout :
285
295
# TODO FIXME?: this looks like a duplicate of first condition
@@ -288,7 +298,9 @@ def subj_as_obj_more_than(ceil):
288
298
writer .pop (RDFVOC .Description )
289
299
self .forceRDFAbout .remove (subject ) # type: ignore[arg-type]
290
300
291
- def predicate (self , predicate , object , depth = 1 ):
301
+ def predicate (
302
+ self , predicate : Identifier , object : Identifier , depth : int = 1
303
+ ) -> None :
292
304
writer = self .writer
293
305
store = self .store
294
306
writer .push (predicate )
@@ -338,14 +350,17 @@ def predicate(self, predicate, object, depth=1):
338
350
for item in col :
339
351
if isinstance (item , URIRef ):
340
352
self .forceRDFAbout .add (item )
341
- self .subject (item )
353
+ # type error: Argument 1 to "subject" of "PrettyXMLSerializer" has incompatible type "Node"; expected "Identifier"
354
+ self .subject (item ) # type: ignore[arg-type]
342
355
343
356
if not isinstance (item , URIRef ):
344
- self .__serialized [item ] = 1
357
+ # type error: Invalid index type "Node" for "Dict[Identifier, int]"; expected type "Identifier"
358
+ self .__serialized [item ] = 1 # type: ignore[index]
345
359
else :
346
360
if first (
347
361
store .triples_choices (
348
- (object , RDF .type , [OWL_NS .Class , RDFS .Class ])
362
+ # type error: Argument 1 to "triples_choices" of "Graph" has incompatible type "Tuple[Identifier, URIRef, List[URIRef]]"; expected "Union[Tuple[List[Node], Node, Node], Tuple[Node, List[Node], Node], Tuple[Node, Node, List[Node]]]"
363
+ (object , RDF .type , [OWL_NS .Class , RDFS .Class ]) # type: ignore[arg-type]
349
364
)
350
365
) and isinstance (object , URIRef ):
351
366
writer .attribute (RDFVOC .resource , self .relativize (object ))
0 commit comments