3
Kdt                 @   s   d dl Z d dlmZ d dlmZ d dl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mZ d d	lmZmZmZmZ d d
lmZ dZde Ze jeZG dd deZG dd deZdd Z G dd deZ!G dd dZ"dS )    N)BytesIO)XMLGenerator)XML_NAMESPACE)AttributesNSImpl)etree)	iteritems)LiteralURIRefBNodeGraphVariable)ResultResultParserResultSerializerResultException)	text_typez&http://www.w3.org/2005/sparql-results#z{%s}c               @   s   e Zd ZdddZdS )XMLResultParserNc             C   s   t |S )N)	XMLResult)selfsourcecontent_type r   Z/var/www/html/virt/lib/python3.6/site-packages/rdflib/plugins/sparql/results/xmlresults.pyparse(   s    zXMLResultParser.parse)N)__name__
__module____qualname__r   r   r   r   r   r   &   s   r   c               @   s   e Zd ZdddZdS )r   Nc             C   s  yt jdd}t j||}W n tk
r:   t j|}Y nX |jtd }|jtd }|d k	rfd}n|d k	rtd}ntdtj| | |dkrg | _	xD|D ]<}i }	x&|D ]}
t
|
d |	t|
jd	< qW | j	j|	 qW d
d |jdttf D | _n|jj j dk| _d S )NT)Z	huge_treebooleanresultsASKZSELECTz/No RDF result-bindings or boolean answer found!r   namec             S   s   g | ]}t |jd qS )r    )r   get).0xr   r   r   
<listcomp>J   s   z&XMLResult.__init__.<locals>.<listcomp>z./%shead/%svariabletrue)r   	XMLParserr   	TypeErrorfindRESULTS_NS_ETr   r   __init__bindings	parseTermr   r!   appendfindallvarstextlowerstrip	askAnswer)r   r   r   parsertreer   r   type_resultrbindingr   r   r   r*   -   s4    

zXMLResult.__init__)N)r   r   r   r*   r   r   r   r   r   ,   s   r   c             C   s   | j | j }}|td krz|dkr&d}d}d}| jddrJt| jd}n| jdt drh| jdt }t|||d}|S |td krt|S |td krt|S td	|  dS )
zLrdflib object (Literal, URIRef, BNode) for the given
    elementtree elementliteralN datatypez{%s}lang)r<   languribnodezunknown binding type %r)	tagr0   r)   r!   r	   r   r   r
   r'   )elementr@   r0   r<   r=   retr   r   r   r,   S   s"    r,   c               @   s   e Zd Zdd ZdddZdS )XMLResultSerializerc             C   s   t j| | d S )N)r   r*   )r   r7   r   r   r   r*   n   s    zXMLResultSerializer.__init__utf-8c             C   s   t ||}| jjdkr0|jg  |j| jj nZ|j| jj |j  xB| jjD ]6}|j	  x t
|D ]\}}|j|| qfW |j  qPW |j  d S )Nr   )SPARQLXMLWriterr7   typewrite_header	write_askr3   r/   write_results_headerr+   write_start_resultr   write_bindingwrite_end_resultclose)r   streamencodingwriterbkeyvalr   r   r   	serializeq   s    

zXMLResultSerializer.serializeN)rD   )r   r   r   r*   rT   r   r   r   r   rC   l   s   rC   c               @   sR   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 )rE   z1
    Python saxutils-based SPARQL XML Writer
    utf-8c             C   s^   t ||}|j  |jdt |jdt |jtdfdti i  || _|| _|| _	d| _
d S )Nr;   xmlsparqlF)r   startDocumentstartPrefixMappingSPARQL_XML_NAMESPACEr   startElementNSr   rP   _output	_encoding_results)r   outputrO   rP   r   r   r   r*      s    
zSPARQLXMLWriter.__init__c             C   s   | j jtdfdti i  xZtdt|D ]H}dt|| i}ddi}| j jtdfdt|| | j jtdfd q*W | j jtdfd d S )Nheadr   r    variable)Nr    )Nr    )rP   r[   rZ   r   rangelenr   endElementNS)r   ZallvarsLi	attr_valsattr_qnamesr   r   r   rG      s    zSPARQLXMLWriter.write_headerc             C   sD   | j jtdfdti i  | j jt|j  | j jtdfd d S )Nr   )rP   r[   rZ   r   
charactersstrr1   rd   )r   rS   r   r   r   rH      s    zSPARQLXMLWriter.write_askc             C   s$   | j jtdfdti i  d| _d S )Nr   T)rP   r[   rZ   r   r^   )r   r   r   r   rI      s    z$SPARQLXMLWriter.write_results_headerc             C   s$   | j jtdfdti i  d| _d S )Nr7   T)rP   r[   rZ   r   _resultStarted)r   r   r   r   rJ      s    z"SPARQLXMLWriter.write_start_resultc             C   s&   | j s
t| jjtdfd d| _ d S )Nr7   F)rj   AssertionErrorrP   rd   rZ   )r   r   r   r   rL      s    
z SPARQLXMLWriter.write_end_resultc             C   sl  | j s
td
t|i}ddi}| jjtdfdt|| t|tr|| jjtdfdti i  | jj	| | jj
tdfd nt|tr| jjtdfdti i  | jj	| | jj
tdfd nt|trJi }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	| | jj
tdfd d S )Nr    r9   r>   r?   r=   zxml:langr<   r:   zUnsupported RDF term: %s)Nr    )Nr    )Nr<   )Nr<   )rj   rk   r   rP   r[   rZ   r   
isinstancer	   rh   rd   r
   r   languager   r<   	Exception)r   r    rS   rf   rg   r   r   r   rK      sL    



zSPARQLXMLWriter.write_bindingc             C   s8   | j r| jjtdfd | jjtdfd | jj  d S )Nr   rW   )r^   rP   rd   rZ   endDocument)r   r   r   r   rM      s    zSPARQLXMLWriter.closeN)rU   )r   r   r   __doc__r*   rG   rH   rI   rJ   rL   rK   rM   r   r   r   r   rE      s   
2rE   )#loggingior   xml.sax.saxutilsr   xml.domr   Zxml.sax.xmlreaderr   Zrdflib.compatr   sixr   Zrdflibr   r	   r
   r   r   Zrdflib.queryr   r   r   r   r   rZ   r)   	getLoggerr   logr   r   r,   rC   rE   r   r   r   r   <module>   s"   
'