
    01i10                       S r SSKJr  SSKrSSKJs  Jr  SSKJ	r	  SSK
JrJrJrJrJrJrJrJrJrJrJr  SSKJr  SSKJr  SSKJr  SS	KJrJrJrJ r   SS
K!J"r"J#r#J$r$J%r%J&r&   SSK'Jr(  Sr)Sr+S\+-  r,\RZ                  " \.5      r/ " S S\5      r0 " S S\5      r1SS jr2 " S S\ 5      r3 " S S5      r4g! \* a    Sr) NTf = f)zA Parser for SPARQL results in XML:

http://www.w3.org/TR/rdf-sparql-XMLres/

Bits and pieces borrowed from:
http://projects.bigasterisk.com/sparqlhttp/

Authors: Drew Perttula, Gunnar Aastrand Grimnes
    )annotationsN)BytesIO)IOTYPE_CHECKINGAnyBinaryIODictOptionalSequenceTextIOTupleUnioncast)XML_NAMESPACE)XMLGenerator)AttributesNSImpl)ResultResultExceptionResultParserResultSerializer)BNode
IdentifierLiteralURIRefVariableTFz&http://www.w3.org/2005/sparql-results#z{%s}c                  &    \ rS rSrSrSSS jjrSrg)XMLResultParser2   z#A Parser for SPARQL results in XML.Nc                    [        U5      $ N)	XMLResult)selfsourcecontent_types      b/home/james-whalen/.local/lib/python3.13/site-packages/rdflib/plugins/sparql/results/xmlresults.pyparseXMLResultParser.parse6   s           r    )r#   r   r$   Optional[str]returnr   )__name__
__module____qualname____firstlineno____doc__r&   __static_attributes__r)   r(   r%   r   r   2   s    -! !r(   r   c                  "    \ rS rSrSSS jjrSrg)r!   :   Nc           	        S n[        US5      (       aO  [        (       a  [        U[        5      (       d   eSnUR	                  5       n[        UR                  U5      5      nO"[        (       a  [        U[        5      (       d   e[        (       aB  [        R                  " SUS9n[        [        R                  [        R                  " XS95      nO([        R                  " US9n[        R                  " XS9nUR                  [         S-   5      nUR                  [         S-   5      n	Ub  S	n
OU	b  S
n
O[#        S5      e[$        R&                  " X
5        U
S
:X  a  / U l        U	 H  nUR*                  [          S3:w  a  M  0 nU HE  nUR*                  [          S3:w  a  M  [-        US   5      U[/        UR1                  S5      5      '   MG     U R(                  R3                  U5        M     UR5                  S[         < S[         < S35       Vs/ s H  n[/        UR1                  S5      5      PM     snU l        g UR8                  R;                  5       R=                  5       S:H  U l        g s  snf )Nencodingutf-8T)	huge_treer5   )parser)r5   booleanresultsASKSELECTz/No RDF result-bindings or boolean answer found!resultbindingr   namez./zhead/variabletrue) hasattrr   
isinstancer   readr   encoder   
FOUND_LXML
lxml_etree	XMLParserr   	xml_etreeElementTreer&   findRESULTS_NS_ETr   r   __init__bindingstag	parseTermr   getappendfindallvarstextlowerstrip	askAnswer)r"   r#   r$   parser_encoding
source_strlxml_parsertree
xml_parserr9   r:   type_r=   rr>   xs                  r%   rM   XMLResult.__init__;   s   )-6:&&}!&&1111%OJZ..?@F}!&(3333:$..XK%%  <D
 #,,oFJ??6=D))MI56))MI56E E!"STT$HDM!::M?&!99 %G{{w&?? !
 8A7LAhw{{6234  & $$Q'% "4 -:MJ	A v'	DI %\\//1779VCDN	s   $I0)rX   rN   rT   r    )r#   r   r$   r*   )r,   r-   r.   r/   rM   r1   r)   r(   r%   r!   r!   :   s    DD DDr(   r!   c                   U R                   U R                  p!U[        S-   :X  a}  Uc  SnSnSnU R                  SS5      (       a  [	        U R                  S5      5      nO6U R                  S[
        -  S5      (       a  U R                  S[
        -  5      n[        X#US9nU$ U[        S-   :X  a  [	        U5      $ U[        S-   :X  a  [        U5      $ [        S	U -  5      e)
zHrdflib object (Literal, URIRef, BNode) for the given
elementtree elementliteralN datatypez{%s}lang)re   languribnodezunknown binding type %r)	rO   rU   rL   rQ   r   r   r   r   	TypeError)elementrO   rU   re   rf   rets         r%   rP   rP      s     W\\
mi''<D;;z4((gkk*56H[[m3T::;;zM9:DdD9
	%	%d|	'	'T{1G;<<r(   c                  0    \ rS rSrSrSS jrSS	S jjrSrg)
XMLResultSerializer   z*Serializes SPARQL results into XML format.c                0    [         R                  " X5        g r    )r   rM   )r"   r=   s     r%   rM   XMLResultSerializer.__init__   s    !!$/r(   c                   [        X5      nU R                  R                  S:X  a7  UR                  / 5        UR	                  U R                  R
                  5        OUR                  U R                  R                  5        UR                  5         U R                  R                   HM  nUR                  5         UR                  5        H  u  pgUR                  Xg5        M     UR                  5         MO     UR                  5         g )Nr;   )SPARQLXMLWriterr=   typewrite_header	write_askrX   rT   write_results_headerrN   write_start_resultitemswrite_bindingwrite_end_resultclose)r"   streamr5   kwargswriterbkeyvals           r%   	serializeXMLResultSerializer.serialize   s     2;;u$#T[[223  0 01'')[[))))+ !	HC((2 !* '') * 	r(   r)   N)r=   r   r6   )r|   r   r5   strr}   r   r+   None)r,   r-   r.   r/   r0   rM   r   r1   r)   r(   r%   rm   rm      s    40 r(   rm   c                  l    \ rS rSrSrSSS jjrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSrg)rr      z)
Python saxutils-based SPARQL XML Writer
c                
   [        X5      nUR                  5         UR                  S[        5        UR                  S[        5        UR                  [        S4S[        0 0 5      5        X0l        Xl        X l	        SU l
        g )Nrd   xmlsparqlF)r   startDocumentstartPrefixMappingSPARQL_XML_NAMESPACEr   startElementNSr   r~   _output	_encoding_results)r"   outputr5   r~   s       r%   rM   SPARQLXMLWriter.__init__   ss    f/!!"&:;!!%7!8,h8HR8P	
 !r(   c           	        U R                   R                  [        S4S[        0 0 5      5        [	        S[        U5      5       Hd  nS[        X   5      0nSS0nU R                   R                  [        S4S[        X45      5        U R                   R                  [        S4S5        Mf     U R                   R                  [        S4S5        g )Nheadr   Nr?   r?   r@   )r~   r   r   r   rangelenr   endElementNS)r"   allvarsLi	attr_valsattr_qnamess        r%   rt   SPARQLXMLWriter.write_header   s    ""!6*F4DR4L	
 q#h-(AHK 0I K KK&&%z2 !8 KK$$&:J%GT ) 	  "6!?Hr(   c                   U R                   R                  [        S4S[        0 0 5      5        U R                   R	                  [        U5      R                  5       5        U R                   R                  [        S4S5        g )Nr9   )r~   r   r   r   
charactersr   rV   r   )r"   r   s     r%   ru   SPARQLXMLWriter.write_ask   sa    ""!9-y:J2r:R	
 	s3x~~/0  "6	!BINr(   c                l    U R                   R                  [        S4S[        0 0 5      5        SU l        g )Nr:   T)r~   r   r   r   r   r"   s    r%   rv   $SPARQLXMLWriter.write_results_header   s1    ""!9-y:J2r:R	
 r(   c                l    U R                   R                  [        S4S[        0 0 5      5        SU l        g )Nr=   T)r~   r   r   r   _resultStartedr   s    r%   rw   "SPARQLXMLWriter.write_start_result   s2    ""!8,h8HR8P	
 #r(   c                |    U R                   (       d   eU R                  R                  [        S4S5        SU l         g )Nr=   F)r   r~   r   r   r   s    r%   rz    SPARQLXMLWriter.write_end_result   s3    """"  "6!A8L#r(   c                   U R                   (       d   eS[        U5      0nSS0nU R                  R                  [        S4S[        X45      5        [        U[        5      (       al  U R                  R                  [        S4S[        0 0 5      5        U R                  R                  U5        U R                  R                  [        S4S5        GOh[        U[        5      (       ak  U R                  R                  [        S4S[        0 0 5      5        U R                  R                  U5        U R                  R                  [        S4S5        O[        U[        5      (       a  0 n0 nUR                  (       a!  UR                  U[        S4'   SU[        S4'   O%UR                  (       a  UR                  US'   S	US'   U R                  R                  [        S
4S
[        X45      5        U R                  R                  U5        U R                  R                  [        S
4S
5        O[        SU-  5      eU R                  R                  [        S4S5        g )Nr   r?   r>   rg   rh   rf   zxml:lang)Nre   re   rc   zUnsupported RDF term: %s)r   r   r~   r   r   r   rC   r   r   r   r   r   languager   re   	Exception)r"   r?   r   r   r   s        r%   ry   SPARQLXMLWriter.write_binding   s   """" CI;
	 F=
 	""!9- Y4	
 c6""KK&&%u-u6Fr26N KK""3'KK$$&:E%BEJU##KK&&%w/:J2r:R KK""3'KK$$&:G%DgNW%%IK||58\\	=&127A]F3403	,-2<./KK&&%y1 !8 KK""3'KK$$&:I%F	R 6<==  "6	!BINr(   c                    U R                   (       a"  U R                  R                  [        S4S5        U R                  R                  [        S4S5        U R                  R	                  5         g )Nr:   r   )r   r~   r   r   endDocumentr   s    r%   r{   SPARQLXMLWriter.close-  sM    ==KK$$&:I%F	R  "6!A8L!r(   )r   r   r   r   r~   Nr   )r   r   r5   r   )r   zSequence[Variable]r+   r   )r   boolr+   r   )r+   r   )r?   r   r   r   r+   r   )r,   r-   r.   r/   r0   rM   rt   ru   rv   rw   rz   ry   r{   r1   r)   r(   r%   rr   rr      s3    I*O#$
4Ol"r(   rr   )rj   zxml_etree.Elementr+   zUnion[URIRef, Literal, BNode])5r0   
__future__r   loggingxml.etree.ElementTreeetreerJ   rI   ior   typingr   r   r   r   r	   r
   r   r   r   r   r   xml.domr   xml.sax.saxutilsr   xml.sax.xmlreaderr   rdflib.queryr   r   r   r   rdflib.termr   r   r   r   r   
lxml.etreerG   rF   ImportErrorr   rL   	getLoggerr,   logr   r!   rP   rm   rr   r)   r(   r%   <module>r      s    #  ) )     " ) . P P D D#J @ --!!l !ED EDP=6* 6y" y"_  Js   #B5 5C ?C 