3
d 0                 @   s   d dl mZ d dlmZ d dlmZmZmZ d dlm	Z	m
Z
mZ d dl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 d d
lZddlmZ dddgZG dd deZdZdZedZ dd Z!G dd deZ"d
S )    )absolute_import)	XMLWriter)	NamespaceRDFRDFS)URIRefLiteralBNode)first	more_than)
Collection)
Serializer)b)	quoteattrescapeN   )ESCAPE_ENTITIESfixXMLSerializerPrettyXMLSerializerc                   sB   e Zd Z fddZdd ZdddZdd	d
ZdddZ  ZS )r   c                s   t t| j| d S )N)superr   __init__)selfstore)	__class__ C/tmp/pip-build-7vycvbft/rdflib/rdflib/plugins/serializers/rdfxml.pyr      s    zXMLSerializer.__init__c       	      c   s   | j }|j}i }x0t|j D ] }|j|\}}}t|||< qW td}d|krd|d |ksltn||d< x|j D ]\}}||fV  qvW d S )Nz+http://www.w3.org/1999/02/22-rdf-syntax-ns#rdf)r   namespace_managerset
predicatescompute_qname_strictr   AssertionErroritems)	r   r   nmbindings	predicateprefix	namespacenameZRDFNSr   r   r   Z
__bindings   s    zXMLSerializer.__bindingsNc       
         s  |d k	r|| _ n| jj d k	r&| jj | _ | _i | _| j  fdd | _}|d| j  |d d|kr||d|d   n| j r|d| j   t| j }|j  x2|D ]*\}}|r|d||f  q|d|  qW |d	 x| jj	 D ]}	| j
|	d
 qW |d | `d S )Nc                s   j | j dS )Nreplace)writeencode)uni)encodingstreamr   r   <lambda>9   s   z)XMLSerializer.serialize.<locals>.<lambda>z$<?xml version="1.0" encoding="%s"?>
z	<rdf:RDF
xml_basez   xml:base="%s"
z   xmlns:%s="%s"
z   xmlns="%s"
z>
r   z</rdf:RDF>
)baser   Z_XMLSerializer__stream_XMLSerializer__serializedr.   r+   list_XMLSerializer__bindingssortsubjectssubject)
r   r/   r2   r.   argsr+   r%   r'   r(   r8   r   )r.   r/   r   	serialize0   s2    
zXMLSerializer.serializer   c       	      C   s   || j krd| j |< t|ttfr| j}d| }d}t|trR|d|||f  n t| j|}|d|||f  |d d f| jkr|d x*| jj|D ]\}}| j	|||d  qW |d||f  n|d d S )	Nr   z  zrdf:Descriptionz%s<%s rdf:nodeID="%s"z%s<%s rdf:about=%sz>
z%s</%s>
z/>
)
r3   
isinstancer	   r   r+   r   
relativizer   predicate_objectsr&   )	r   r8   depthr+   indentZelement_nameurir&   objectr   r   r   r8   _   s$    


zXMLSerializer.subjectc             C   s   | j }d| }| jjj|}t|trpd}|jr>|d|j 7 }|jrR|d|j 7 }|d|||t|t	|f  n:t|t
r|d|||f  n|d||t| j|f  d S )Nz   z xml:lang="%s"z rdf:datatype="%s"z%s<%s%s>%s</%s>
z%s<%s rdf:nodeID="%s"/>
z%s<%s rdf:resource=%s/>
)r+   r   r   Zqname_strictr;   r   languagedatatyper   r   r	   r   r<   )r   r&   rA   r>   r+   r?   qname
attributesr   r   r   r&   z   s"    

zXMLSerializer.predicate)NN)r   )r   )	__name__
__module____qualname__r   r5   r:   r8   r&   __classcell__r   r   )r   r   r      s
   
/
z(http://www.w3.org/XML/1998/namespacelangz(http://www.w3.org/XML/1998/namespacebasezhttp://www.w3.org/2002/07/owl#c             C   s   | j dr| dd S | S dS )z:strip off _: from nodeIDs... as they are not valid NCNamesz_:   N)
startswith)valr   r   r   r      s    
c                   s<   e Zd Zd fdd	ZdddZddd	Zdd
dZ  ZS )r      c                s   t t| j| t | _d S )N)r   r   r   r   forceRDFAbout)r   r   	max_depth)r   r   r   r      s    zPrettyXMLSerializer.__init__Nc             K   s  i | _ | j}|d k	r|| _n|jd k	r.|j| _|jdd| _| jdksNtd|j | _}t||| | _	}i }t
|j j|jd tj}	x$|	D ]}
|j|
\}}}|||< qW d|d< |jtj d|kr|jt|d  n| jr|jt| j |j|j  xL|j D ]@}d d |f|kr>|d |f|krJ| j|d n| j|d qW t
 }x8|j D ],}t|tr~|j| q`| j|d q`W x&|D ]}|| j kr| j|d qW |jtj |jtd	 d | _ d S )
NrP   rN   r   z max_depth must be greater than 0z+http://www.w3.org/1999/02/22-rdf-syntax-ns#r   r1   r   
) _PrettyXMLSerializer__serializedr   r2   getrP   r"   r   r$   r   writerr   r    unionobjectsr   typer!   push	attributeXMLBASE
namespacesr#   r7   r8   r;   r	   addpopr+   r   )r   r/   r2   r.   r9   r   r$   rT   r[   possibler&   r'   r(   localr8   ZbnodesZbnoder   r   r   r:      sP    



zPrettyXMLSerializer.serializer   c       
      C   s  | j }| j}|| jkrR|jtj |jtj| j| |j	tj | jj
| nB|| jkrPd| j|< t|j|tj}y| jj| W n   d }Y nX |ptj}|j| t|trdd }|dr|jtjt| n|jtj| j| |d d f|krDx@|j|D ]2\}}	|tjko(|	|ks| j||	|d  qW |j	| nD|| jkr|jtj |jtj| j| |j	tj | jj
| d S )Nr   c             S   s   dS )NTr   )ceilr   r   r   subj_as_obj_more_than   s    z:PrettyXMLSerializer.subject.<locals>.subj_as_obj_more_than)r   rT   rO   rX   r   DescriptionrY   Zaboutr<   r]   removerR   r
   rV   rW   r$   rE   r;   r	   nodeIDr   r=   r&   )
r   r8   r>   r   rT   rW   elementra   r&   rA   r   r   r   r8      s>    





zPrettyXMLSerializer.subjectc       	      C   s  | j }| j}|j| t|tr|jr4|jt|j |jt	j
krxt|jtjjjrx|jt	jd |jd |jj| n |jr|jt	j|j |j| n|| jks|d d f|krt|trt|jd d |fdr|jt	jt| n|jt	j| j| nt|j|t	jrd| j|< dd l}|jdt | d t!dd |jt	jd	 t"||}xF|D ]>}t|t#r~| j$j%| | j&| t|t#sbd| j|< qbW nt|j'|t	j(t)j*t+j*gfrt|t#r|jt	j| j| n|| j,kr| j&||d  n|t|trn|| jkrZ|d d f|krZt-t.|j/|d
dkrZ| j&||d  n|jt	jt| n|jt	j| j| |j0| d S )Nr   rB   r   r   z&Assertions on %s other than RDF.first z/and RDF.rest are ignored ... including RDF.ListrK   )
stacklevelr   )rA   )1rT   r   rX   r;   r   rC   rY   XMLLANGrD   r   Z
XMLLiteralvaluexmldomminidomDocumentZ	parseTypetextr/   r+   rR   r	   r   Ztriplesrd   r   resourcer<   r
   rV   warningswarnreprUserWarningr   r   rO   r\   r8   Ztriples_choicesrW   OWL_NSZClassr   rP   lenr4   r7   r]   )	r   r&   rA   r>   rT   r   ro   colitemr   r   r   r&     s`    









zPrettyXMLSerializer.predicate)rN   )NN)r   )r   )rG   rH   rI   r   r:   r8   r&   rJ   r   r   )r   r   r      s   
>
1)#
__future__r   Z$rdflib.plugins.serializers.xmlwriterr   Zrdflib.namespacer   r   r   Zrdflib.termr   r   r	   Zrdflib.utilr
   r   Zrdflib.collectionr   Zrdflib.serializerr   sixr   xml.sax.saxutilsr   r   Zxml.dom.minidomri   Z	xmlwriterr   __all__r   rg   rZ   rs   r   r   r   r   r   r   <module>   s"   
}