
    i/                       d Z ddlmZ ddlZddlmc mZ ddlm	Z	 ddl
mZmZmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZmZmZm Z  dd
l!m"Z"m#Z#m$Z$m%Z%m&Z& 	 ddl'mZ( dZ)dZ+de+z  Z, ejZ                  e.      Z/ G d de      Z0 G d de      Z1ddZ2 G d de       Z3 G d d      Z4y# e*$ r dZ)Y Rw xY w)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                      e Zd ZdddZy)XMLResultParserNc                    t        |      S N)	XMLResult)selfsourcecontent_types      WC:\Projects\mas-dev\.venv\Lib\site-packages\rdflib/plugins/sparql/results/xmlresults.pyparsezXMLResultParser.parse4   s          r   )r"   r   r#   Optional[str]returnr   )__name__
__module____qualname__r%    r&   r$   r   r   2   s    !r&   r   c                      e Zd ZdddZy)r    Nc           	        d }t        |d      rEt        rt        |t              sJ d}|j	                         }t        |j                  |            }nt        rt        |t              sJ t        rGt        j                  d|      }t        t        j                  t        j                  ||            }n-t        j                  |      }t        j                  ||      }|j                  t         dz         }|j                  t         dz         }	|d	}
n|	d
}
nt#        d      t%        j&                  | |
       |
d
k(  rg | _        |	D ]}  }|j*                  t          dk7  ri }|D ]B  }|j*                  t          dk7  rt-        |d         |t/        |j1                  d            <   D | j(                  j3                  |        |j5                  dt         dt         d      D cg c]  }t/        |j1                  d             c}| _        y |j8                  j;                         j=                         dk(  | _        y c c}w )Nencodingutf-8T)	huge_treer/   )parser)r/   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_parserr3   r4   type_r7   rr8   xs                  r$   rG   zXMLResult.__init__9   s   )-6:&!&&111%OJZ..?@F!&(333$..XK%%  <D
 #,,oFJ??6*=D))MI56))MI56E E!"STTe$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   1!Ir   )r"   r   r#   r'   )r)   r*   r+   rG   r,   r&   r$   r    r    8   s	    DDr&   r    c                   | j                   | j                  }}|t        dz   k(  rv|d}d}d}| j                  dd      rt	        | j                  d            }n1| j                  dt
        z  d      r| j                  dt
        z        }t        |||      }|S |t        dz   k(  rt	        |      S |t        dz   k(  rt        |      S t        d	| z        )
zLrdflib object (Literal, URIRef, BNode) for the given
    elementtree elementliteralN datatypez{%s}lang)r^   languribnodezunknown binding type %r)	rI   rO   rF   rK   r   r   r   r   	TypeError)elementrI   rO   r^   r_   rets         r$   rJ   rJ      s     W\\C
mi''<D;;z4(gkk*56H[[m3T:;;zM9:DdXD9
	%	%d|	'	'T{1G;<<r&   c                      e Zd ZddZdddZy)XMLResultSerializerc                0    t        j                  | |       y r   )r   rG   )r!   r7   s     r$   rG   zXMLResultSerializer.__init__   s    !!$/r&   c                   t        ||      }| j                  j                  dk(  r7|j                  g        |j	                  | j                  j
                         n|j                  | j                  j                         |j                          | j                  j                  D ]L  }|j                          |j                         D ]  \  }}|j                  ||        |j                          N |j                          y )Nr5   )SPARQLXMLWriterr7   typewrite_header	write_askrR   rN   write_results_headerrH   write_start_resultitemswrite_bindingwrite_end_resultclose)r!   streamr/   kwargswriterbkeyvals           r$   	serializezXMLResultSerializer.serialize   s     2;;u$#T[[223  0 01'')[[))))+ !	HC((c2 !* '') * 	r&   N)r7   r   r0   )rs   r   r/   strrt   r   r(   None)r)   r*   r+   rG   ry   r,   r&   r$   rf   rf      s    0r&   rf   c                  R    e Zd ZdZdddZddZddZddZddZddZ	ddZ
dd	Zy
)ri   z1
    Python saxutils-based SPARQL XML Writer
    c                   t        ||      }|j                          |j                  dt               |j                  dt               |j                  t        dfdt        i i              || _        || _        || _	        d| _
        y )Nr]   xmlsparqlF)r   startDocumentstartPrefixMappingSPARQL_XML_NAMESPACEr   startElementNSr   ru   _output	_encoding_results)r!   outputr/   ru   s       r$   rG   zSPARQLXMLWriter.__init__   s{    fh/!!"&:;!!%7!8,h8HR8P	
 !r&   c           	        | j                   j                  t        dfdt        i i              t	        dt        |            D ]e  }dt        ||         i}ddi}| j                   j                  t        dfdt        ||             | j                   j                  t        dfd       g | j                   j                  t        dfd       y )Nheadr   Nr9   r9   r:   )ru   r   r   r   rangelenr{   endElementNS)r!   allvarsLi	attr_valsattr_qnamess        r$   rk   zSPARQLXMLWriter.write_header   s    ""!6*F4DR4L	
 q#h-(AHQK 0I K KK&&%z2 !K8 KK$$&:J%GT ) 	  "6!?Hr&   c                   | j                   j                  t        dfdt        i i              | j                   j	                  t        |      j                                | j                   j                  t        dfd       y )Nr3   )ru   r   r   r   
charactersr{   rP   r   )r!   rx   s     r$   rl   zSPARQLXMLWriter.write_ask   sa    ""!9-y:J2r:R	
 	s3x~~/0  "6	!BINr&   c                l    | j                   j                  t        dfdt        i i              d| _        y )Nr4   T)ru   r   r   r   r   r!   s    r$   rm   z$SPARQLXMLWriter.write_results_header   s1    ""!9-y:J2r:R	
 r&   c                l    | j                   j                  t        dfdt        i i              d| _        y )Nr7   T)ru   r   r   r   _resultStartedr   s    r$   rn   z"SPARQLXMLWriter.write_start_result   s2    ""!8,h8HR8P	
 #r&   c                r    | j                   sJ | j                  j                  t        dfd       d| _         y )Nr7   F)r   ru   r   r   r   s    r$   rq   z SPARQLXMLWriter.write_end_result   s3    """"  "6!A8L#r&   c                   | j                   sJ dt        |      i}ddi}| j                  j                  t        dfdt        ||             t        |t              rl| j                  j                  t        dfdt        i i              | j                  j                  |       | j                  j                  t        dfd       nUt        |t              rk| j                  j                  t        dfdt        i i              | j                  j                  |       | j                  j                  t        dfd       nt        |t              ri }i }|j                  r!|j                  |t        df<   d|t        df<   n |j                  r|j                  |d<   d	|d<   | j                  j                  t        d
fd
t        ||             | j                  j                  |       | j                  j                  t        d
fd
       nt        d|z        | j                  j                  t        dfd       y )Nr   r9   r8   r`   ra   r_   zxml:lang)Nr^   r^   r\   zUnsupported RDF term: %s)r   r{   ru   r   r   r   r=   r   r   r   r   r   languager   r^   	Exception)r!   r9   rx   r   r   s        r$   rp   z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 !K8 KK""3'KK$$&:I%F	R 6<==  "6	!BINr&   c                    | j                   r"| j                  j                  t        dfd       | j                  j                  t        dfd       | j                  j	                          y )Nr4   r   )r   ru   r   r   endDocumentr   s    r$   rr   zSPARQLXMLWriter.close)  sM    ==KK$$&:I%F	R  "6!A8L!r&   Nrz   )r   r   r/   r{   )r   zSequence[Variable]r(   r|   )rx   boolr(   r|   )r(   r|   )r9   r   rx   r   r(   r|   )r)   r*   r+   __doc__rG   rk   rl   rm   rn   rq   rp   rr   r,   r&   r$   ri   ri      s3    I*O#$
4Ol"r&   ri   )rc   zxml_etree.Elementr(   zUnion[URIRef, Literal, BNode])5r   
__future__r   loggingxml.etree.ElementTreeetreerD   rC   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.etreerA   r@   ImportErrorr   rF   	getLoggerr)   logr   r    rJ   rf   ri   r,   r&   r$   <module>r      s    #  ) )     " ) . P P D D#J @ --g!!l !ED EDP=6* 2y" y"W  Js   #B4 4B>=B>