
    #HJj10                       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ZdddZy)XMLResultParserz#A Parser for SPARQL results in XML.Nc                    t        |      S N)	XMLResult)selfsourcecontent_types      r/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/rdflib/plugins/sparql/results/xmlresults.pyparsezXMLResultParser.parse6   s          r   )r"   r   r#   Optional[str]returnr   )__name__
__module____qualname____doc__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_treer0   )parser)r0   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_parserr4   r5   type_r8   rr9   xs                  r$   rH   zXMLResult.__init__;   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+   rH   r-   r&   r$   r    r    :   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)	rJ   rP   rG   rL   r   r   r   r   	TypeError)elementrJ   rP   r_   r`   rets         r$   rK   rK      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ZddZdddZy)XMLResultSerializerz*Serializes SPARQL results into XML format.c                0    t        j                  | |       y r   )r   rH   )r!   r8   s     r$   rH   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 )Nr6   )SPARQLXMLWriterr8   typewrite_header	write_askrS   rO   write_results_headerrI   write_start_resultitemswrite_bindingwrite_end_resultclose)r!   streamr0   kwargswriterbkeyvals           r$   	serializezXMLResultSerializer.serialize   s     2;;u$#T[[223  0 01'')[[))))+ !	HC((c2 !* '') * 	r&   N)r8   r   r1   )rt   r   r0   strru   r   r(   None)r)   r*   r+   r,   rH   rz   r-   r&   r$   rg   rg      s    40r&   rg   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
)rj   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   rv   _output	_encoding_results)r!   outputr0   rv   s       r$   rH   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   Nr:   r:   r;   )rv   r   r   r   rangelenr|   endElementNS)r!   allvarsLi	attr_valsattr_qnamess        r$   rl   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 )Nr4   )rv   r   r   r   
charactersr|   rQ   r   )r!   ry   s     r$   rm   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 )Nr5   T)rv   r   r   r   r   r!   s    r$   rn   z$SPARQLXMLWriter.write_results_header   s1    ""!9-y:J2r:R	
 r&   c                l    | j                   j                  t        dfdt        i i              d| _        y )Nr8   T)rv   r   r   r   _resultStartedr   s    r$   ro   z"SPARQLXMLWriter.write_start_result   s2    ""!8,h8HR8P	
 #r&   c                r    | j                   sJ | j                  j                  t        dfd       d| _         y )Nr8   F)r   rv   r   r   r   s    r$   rr   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   r:   r9   ra   rb   r`   zxml:lang)Nr_   r_   r]   zUnsupported RDF term: %s)r   r|   rv   r   r   r   r>   r   r   r   r   r   languager   r_   	Exception)r!   r:   ry   r   r   s        r$   rq   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 )Nr5   r   )r   rv   r   r   endDocumentr   s    r$   rs   zSPARQLXMLWriter.close-  sM    ==KK$$&:I%F	R  "6!A8L!r&   Nr{   )r   r   r0   r|   )r   zSequence[Variable]r(   r}   )ry   boolr(   r}   )r(   r}   )r:   r   ry   r   r(   r}   )r)   r*   r+   r,   rH   rl   rm   rn   ro   rr   rq   rs   r-   r&   r$   rj   rj      s3    I*O#$
4Ol"r&   rj   )rd   zxml_etree.Elementr(   zUnion[URIRef, Literal, BNode])5r,   
__future__r   loggingxml.etree.ElementTreeetreerE   rD   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.etreerB   rA   ImportErrorr   rG   	getLoggerr)   logr   r    rK   rg   rj   r-   r&   r$   <module>r      s    #  ) )     " ) . P P D D#J @ --g!!l !ED EDP=6* 6y" y"_  Js   #B4 4B>=B>