
    Pi10                       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)n# e*$ r dZ)Y nw xY wdZ+de+z  Z, ej-        e.          Z/ G d de          Z0 G d de          Z1ddZ2 G d de           Z3 G d d          Z4dS )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dS )XMLResultParserz#A Parser for SPARQL results in XML.Nsourcer   content_typeOptional[str]returnr   c                     t          |          S N)	XMLResult)selfr   r   s      |/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/rdflib/plugins/sparql/results/xmlresults.pyparsezXMLResultParser.parse6   s           r#   )r   r   r   r    r!   r   )__name__
__module____qualname____doc__r'    r(   r&   r   r   2   s3        --! ! ! ! ! ! !r(   r   c                      e Zd ZdddZdS )	r$   Nr   r   r   r    c           	        d }t          |d          rWt          rt          |t                    sJ d}|                                }t          |                    |                    }nt          rt          |t                    sJ t          rEt          j
        d|          }t          t          j        t          j        ||                    }n+t          j
        |          }t          j        ||          }|                    t           dz             }|                    t           dz             }	|d	}
n|	d
}
nt#          d          t%          j        | |
           |
d
k    rg | _        |	D ]}|j        t            dk    ri }|D ]N}|j        t            dk    rt-          |d                   |t/          |                    d                    <   O| j                            |           d |                    dt           dt           d          D             | _        d S |j                                                                        dk    | _        d S )Nencodingutf-8T)	huge_treer0   )parser)r0   booleanresultsASKSELECTz/No RDF result-bindings or boolean answer found!resultbindingr   namec                R    g | ]$}t          |                    d                     %S )r:   )r   get).0xs     r&   
<listcomp>z&XMLResult.__init__.<locals>.<listcomp>s   s<     	 	 	  v''	 	 	r(   z./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   r<   appendfindallvarstextlowerstrip	askAnswer)r%   r   r   parser_encoding
source_strlxml_parsertree
xml_parserr4   r5   type_r8   rr9   s                 r&   rM   zXMLResult.__init__;   s   )-6:&& 	4 2!&&11111%OJZ..??@@FF 4!&(33333 	>$.XXXK% <<< DD
 #,oFFFJ?6*===D))MI566))MI566EE EE!"STTTe$$$HDM! ( (:M!9!9!999 % 
M 
MG{&?&?&??? !
 8A7L7LAhw{{6223344$$Q''''	 	 -:]]MMMJ 	 	 	DIII %\//117799VCDNNNr(   r#   )r   r   r   r    )r)   r*   r+   rM   r-   r(   r&   r$   r$   :   s;        DD DD DD DD DD DD DDr(   r$   elementxml_etree.Elementr!   Union[URIRef, Literal, BNode]c                   | j         | j        }}|t          dz   k    r|d}d}d}|                     dd          r#t	          |                     d                    }n;|                     dt
          z  d          r|                     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)re   languribnodezunknown binding type %r)	rO   rT   rL   r<   r   r   r   r   	TypeError)r_   rO   rT   re   rf   rets         r&   rP   rP      s     W\C
mi'''<D;;z4(( 	;gkk*5566HH[[m3T:: 	;;;zM9::DdXD999
	%	%	%d||	'	'	'T{{1G;<<<r(   c                  $    e Zd ZdZddZdddZdS )XMLResultSerializerz*Serializes SPARQL results into XML format.r8   r   c                0    t          j        | |           d S r#   )r   rM   )r%   r8   s     r&   rM   zXMLResultSerializer.__init__   s    !$/////r(   r1   streamr   r0   strkwargsr   r!   Nonec                   t          ||          }| j        j        dk    r5|                    g            |                    | j        j                   n|                    | j        j                   |                                 | j        j        D ]Z}|	                                 |
                                D ]\  }}|                    ||           |                                 [|                                 d S )Nr6   )SPARQLXMLWriterr8   typewrite_header	write_askrW   rS   write_results_headerrN   write_start_resultitemswrite_bindingwrite_end_resultclose)r%   rn   r0   rp   writerbkeyvals           r&   	serializezXMLResultSerializer.serialize   s     22;u$$###T[23333  0111'')))[) * *))+++ !		 3 3HC((c2222''))))r(   N)r8   r   r1   )rn   r   r0   ro   rp   r   r!   rq   )r)   r*   r+   r,   rM   r   r-   r(   r&   rl   rl      sG        440 0 0 0      r(   rl   c                  T    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dS )rs   z1
    Python saxutils-based SPARQL XML Writer
    r1   outputr   r0   ro   c                J   t          ||          }|                                 |                    dt                     |                    dt                     |                    t          dfdt          i i                      || _        || _        || _	        d| _
        d S )Nrd   xmlsparqlF)r   startDocumentstartPrefixMappingSPARQL_XML_NAMESPACEr   startElementNSr   r}   _output	_encoding_results)r%   r   r0   r}   s       r&   rM   zSPARQLXMLWriter.__init__   s    fh//!!"&:;;;!!%777!8,h8HR8P8P	
 	
 	
 !r(   allvarsLSequence[Variable]r!   rq   c           	        | j                             t          dfdt          i i                      t	          dt          |                    D ]p}dt          ||                   i}ddi}| j                             t          dfdt          ||                     | j                             t          dfd           q| j                             t          dfd           d S )Nheadr   Nr:   r:   r@   )r}   r   r   r   rangelenro   endElementNS)r%   r   i	attr_valsattr_qnamess        r&   ru   zSPARQLXMLWriter.write_header   s    ""!6*F4DR4L4L	
 	
 	
 q#h--(( 	U 	UAHQK 0 0I K K&&%z2 !K88   K$$&:J%GTTTT  "6!?HHHHHr(   r   boolc                   | j                             t          dfdt          i i                      | j                             t          |                                                     | j                             t          dfd           d S )Nr4   )r}   r   r   r   
charactersro   rU   r   )r%   r   s     r&   rv   zSPARQLXMLWriter.write_ask   s    ""!9-y:J2r:R:R	
 	
 	
 	s3xx~~//000  "6	!BINNNNNr(   c                v    | j                             t          dfdt          i i                      d| _        d S )Nr5   T)r}   r   r   r   r   r%   s    r&   rw   z$SPARQLXMLWriter.write_results_header   s@    ""!9-y:J2r:R:R	
 	
 	
 r(   c                v    | j                             t          dfdt          i i                      d| _        d S )Nr8   T)r}   r   r   r   _resultStartedr   s    r&   rx   z"SPARQLXMLWriter.write_start_result   sC    ""!8,h8HR8P8P	
 	
 	
 #r(   c                j    | j         sJ | j                            t          dfd           d| _         d S )Nr8   F)r   r}   r   r   r   s    r&   r{   z SPARQLXMLWriter.write_end_result   s=    """"  "6!A8LLL#r(   r:   r   r   c                   | j         sJ dt          |          i}ddi}| j                            t          dfdt          ||                     t          |t                    ro| j                            t          dfdt          i i                      | j                            |           | j        	                    t          dfd           nWt          |t                    rn| j                            t          dfdt          i i                      | 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                            t          d
fd
t          ||                     | j                            |           | j        	                    t          d
fd
           nt          d|z            | j        	                    t          dfd           d S )Nr   r:   r9   rg   rh   rf   zxml:lang)Nre   re   rc   zUnsupported RDF term: %s)r   ro   r}   r   r   r   rC   r   r   r   r   r   languager   re   	Exception)r%   r:   r   r   r   s        r&   rz   zSPARQLXMLWriter.write_binding   su   """" CII;
	 F=
 	""!9- Y44	
 	
 	
 c6"" !	>K&&%u-u6Fr26N6N   K""3'''K$$&:E%BEJJJJU## 	>K&&%w/:J2r:R:R   K""3'''K$$&:G%DgNNNNW%% 	>IK| =58\	=&127A]F344 =03	,-2<./K&&%y1 !K88   K""3'''K$$&:I%F	RRRR 6<===  "6	!BINNNNNr(   c                    | j         r"| j                            t          dfd           | j                            t          dfd           | j                                         d S )Nr5   r   )r   r}   r   r   endDocumentr   s    r&   r|   zSPARQLXMLWriter.close-  sc    = 	SK$$&:I%F	RRR  "6!A8LLL!!!!!r(   Nr   )r   r   r0   ro   )r   r   r!   rq   )r   r   r!   rq   )r!   rq   )r:   r   r   r   r!   rq   )r)   r*   r+   r,   rM   ru   rv   rw   rx   r{   rz   r|   r-   r(   r&   rs   rs      s             I I I I*O O O O   # # # #$ $ $ $
4O 4O 4O 4Ol" " " " " "r(   rs   )r_   r`   r!   ra   )5r,   
__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   rl   rs   r-   r(   r&   <module>r      s    # " " " " "  ) ) ) ) ) ) ) ) )                                " ! ! ! ! ! ) ) ) ) ) ) . . . . . . P P P P P P P P P P P P D D D D D D D D D D D D D D######JJ   JJJ @ --g!!! ! ! ! !l ! ! !ED ED ED ED ED ED ED EDP= = = =6    *   6y" y" y" y" y" y" y" y" y" y"s   #A, ,A65A6