o
    i4                     @   s   d dl Zd dlmZ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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mZmZ d dlm Z m!Z! ddl"m#Z# g d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 )    N)IODictOptionalSet)escape	quoteattr)
Collection)Graph)RDFRDFS	Namespace)RDFVOC)	XMLWriter)
Serializer)BNodeIdentifiedNode
IdentifierLiteralNodeURIRef)first	more_than   )ESCAPE_ENTITIES)fixXMLSerializerPrettyXMLSerializerc                       sf   e Zd Zdef fddZdd Z		ddee dee	 d	ee	 fd
dZ
dddZdddZ  ZS )r   storec                    s   t t| | d S N)superr   __init__)selfr   	__class__ \/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/rdflib/plugins/serializers/rdfxml.pyr       s   zXMLSerializer.__init__c           	      c   s    | j }|j}i }t| D ]}||\}}}t|||< qtd}d|v r1|d |ks0J n||d< | D ]	\}}||fV  q9d S )N+http://www.w3.org/1999/02/22-rdf-syntax-ns#rdf)r   namespace_managerset
predicatescompute_qname_strictr   items)	r!   r   nmbindings	predicateprefix	namespacenameRDFNSr$   r$   r%   
__bindings   s   zXMLSerializer.__bindingsNstreambaseencodingc           
         s  |d ur|| _ n| jj d ur| jj | _ | _i | _| j  fdd | _}|d| j  |d d|v r>|d|d   n
| j rH|d| j   t|  }|  |D ]\}}|rc|d||f  qT|d|  qT|d	 | j	 D ]}	| 
|	d
 qs|d | `d S )Nc                    s    |  dS )Nreplace)writeencode)unir7   r5   r$   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"
>
r   z</rdf:RDF>
)r6   r   _XMLSerializer__stream_XMLSerializer__serializedr7   r9   list_XMLSerializer__bindingssortsubjectssubject)
r!   r5   r6   r7   argsr9   r.   r0   r1   rF   r$   r<   r%   	serialize*   s2   
zXMLSerializer.serializer   c           	      C   s   || j vrid| j |< t|ttfrk| j}d| }d}t|tr)|d|||f  nt| |}|d|||f  |d d f| jv rc|d | j|D ]\}}| 	|||d  qK|d||f  d S |d d S d S d S )	Nr     zrdf:Descriptionz%s<%s rdf:nodeID="%s"z%s<%s rdf:about=%sr?   z%s</%s>
z/>
)
rA   
isinstancer   r   r9   r   
relativizer   predicate_objectsr/   )	r!   rF   depthr9   indentelement_nameurir/   objectr$   r$   r%   rF   ^   s$   


zXMLSerializer.subjectc                 C   s   | j }d| }| jj|}t|tr9d}|jr|d|j 7 }|jr)|d|j 7 }|d|||t|t	|f  d S t|t
rI|d|||f  d S |d||t| |f  d S )NrI    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/>
)r9   r   r(   qname_strictrJ   r   languagedatatyper   r   r   r   rK   )r!   r/   rQ   rM   r9   rN   qname
attributesr$   r$   r%   r/   w   s*   

zXMLSerializer.predicateNNr   )__name__
__module____qualname__r	   r    rC   r   bytesr   strrH   rF   r/   __classcell__r$   r$   r"   r%   r      s    

4r   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   |  dr| dd S | S )z:strip off _: from nodeIDs... as they are not valid NCNamesz_:   N)
startswith)valr$   r$   r%   r      s   
r   c                       sj   e Zd Zddef fddZ		ddee dee dee fd	d
Z	dde
defddZdddZ  ZS )r      r   c                    s   t t| | t | _d S r   )r   r   r    r)   forceRDFAbout)r!   r   	max_depthr"   r$   r%   r       s   zPrettyXMLSerializer.__init__Nr5   r6   r7   c                 K   s  i | _ | j}|d ur|| _n	|jd ur|j| _|dd| _| jdks'J d|j | _}t||| | _}i }t	|
 |d tj}	|	D ]}
||
\}}}|||< qHd|d< |tj d|v rn|t|d  n
| jrx|t| j ||  | D ]}d d |f|v r|d |f|v r| |d q| |d qt	 }| D ]}t|tr|| q| |d q|D ]}|| j vr| |d q|tj |d	d
 d | _ d S )Nre   rc   r   z max_depth must be greater than 0r&   r'   r>   r   
zlatin-1) _PrettyXMLSerializer__serializedr   r6   getre   r(   r-   r   writerr)   r*   unionobjectsr
   typer+   pushr   	attributeXMLBASE
namespacesr,   rE   rF   rJ   r   addpopr9   r:   )r!   r5   r6   r7   rG   r   r-   ri   rp   possibler/   r0   r1   localrF   bnodesbnoder$   r$   r%   rH      sV   





zPrettyXMLSerializer.serializer   rF   rM   c           
      C   s  | j }| j}|| jv r)|tj |tj| | |	tj | j
| d S || jvrd| j|< t||tj}z| j| W n tyO   d }Y nw |pTtj}|| t|trqdd }|drp|tjt| n
|tj| | |d d f|v r||D ]\}}	|tjkr|	|ks| ||	|d  q|	| d S || jv r|tj |tj| | |	tj | j
| d S 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   ri   rd   rm   r   Descriptionrn   aboutrK   rr   removerg   r   rk   r
   rl   r-   rV   	ExceptionrJ   r   nodeIDr   rL   r/   )
r!   rF   rM   r   ri   rl   elementrx   r/   rQ   r$   r$   r%   rF      sF   






zPrettyXMLSerializer.subjectc           	      C   sx  | j }| j}|| t|trM|jr|t|j |jt	j
kr<t|jtjjjr<|tjd |d |j| n|jrG|tj|j || n|| jv sY|d d f|vr~t|trst|d d |fdrr|tjt| n|tj| | nt||t	jrd| j|< dd l}|j dt!| d t"dd |tjd	 t#||}|D ]}t|t$r| j%&| | '| t|t$sd| j|< qnkt|(|t	j)t*j+t,j+gfrt|t$r|tj| | nL|| j-kr| '||d  n>t|tr+|| jvr!|d d f|v r!t.t/|j0|d
dkr!| '||d  n|tjt| n
|tj| | |1| d S )Nr   rR   r   r   z&Assertions on %s other than RDF.first z/and RDF.rest are ignored ... including RDF.Listr`   )
stacklevelr   )rQ   )2ri   r   rm   rJ   r   rT   rn   XMLLANGrU   r
   
XMLLiteralvaluexmldomminidomDocumentr   	parseTypetextr5   r9   rg   r   r   triplesr}   r   resourcerK   r   rk   warningswarnreprUserWarningr   r   rd   rq   rF   triples_choicesrl   OWL_NSClassr   re   lenrB   rE   rr   )	r!   r/   rQ   rM   ri   r   r   colitemr$   r$   r%   r/   #  sv   











zPrettyXMLSerializer.predicate)rc   rX   rY   )rZ   r[   r\   r	   r    r   r]   r   r^   rH   r   intrF   r/   r_   r$   r$   r"   r%   r      s    
I4r   )+xml.dom.minidomr   typingr   r   r   r   xml.sax.saxutilsr   r   rdflib.collectionr   rdflib.graphr	   rdflib.namespacer
   r   r   rdflib.plugins.parsers.RDFVOCr   $rdflib.plugins.serializers.xmlwriterr   rdflib.serializerr   rdflib.termr   r   r   r   r   r   rdflib.utilr   r   	xmlwriterr   __all__r   r   ro   r   r   r   r$   r$   r$   r%   <module>   s(      