o
    ÒmÆiž=  ã                   @  s  d dl mZ d dlZd dlmZmZmZ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d„Z.G dd„ deƒZ/dS )é    )ÚannotationsN)ÚIOÚAnyÚDictÚ	GeneratorÚOptionalÚSetÚTuple)ÚescapeÚ	quoteattr)Ú
Collection)ÚGraph)ÚRDFÚRDFSÚ	Namespace)ÚRDFVOC)Ú	XMLWriter)Ú
Serializer)ÚBNodeÚIdentifiedNodeÚ
IdentifierÚLiteralÚNodeÚURIRef)ÚfirstÚ	more_thané   )ÚESCAPE_ENTITIES)ÚfixÚXMLSerializerÚPrettyXMLSerializerc                      sV   e Zd ZdZd ‡ fdd„Zd!dd	„Z	
	
d"d#dd„Zd$d%dd„Z	d$d&dd„Z‡  Z	S )'r   zRDF/XML RDF graph serializer.Ústorer   c                   s   t t| ƒ |¡ d S ©N)Úsuperr   Ú__init__)Úselfr!   ©Ú	__class__© ú[/home/kim/smarthome/.venv/lib/python3.10/site-packages/rdflib/plugins/serializers/rdfxml.pyr$      s   zXMLSerializer.__init__Úreturnú)Generator[Tuple[str, URIRef], None, None]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ÚnameZRDFNSr(   r(   r)   Z
__bindings   s   €ÿzXMLSerializer.__bindingsNÚstreamú	IO[bytes]ÚbaseúOptional[str]ÚencodingÚkwargsr   ÚNonec           
        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©r=   r9   r(   r)   Ú<lambda>>   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>
)r;   r!   Z_XMLSerializer__streamÚ_XMLSerializer__serializedr=   rA   ÚlistÚ_XMLSerializer__bindingsÚsortÚsubjectsÚsubject)
r%   r9   r;   r=   r>   rA   r4   r6   r7   rM   r(   rD   r)   Ú	serialize/   s2   
zXMLSerializer.serializer   rM   r   ÚdepthÚintc           	      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=%srG   z%s</%s>
z/>
)
rH   Ú
isinstancer   r   rA   r   Ú
relativizer!   Úpredicate_objectsr5   )	r%   rM   rO   rA   ÚindentZelement_nameÚurir5   Úobjectr(   r(   r)   rM   d   s$   


èzXMLSerializer.subjectr5   rW   c                 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 )NrQ   Ú 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/>
)rA   r!   r.   Zqname_strictrR   r   ÚlanguageÚdatatyper
   r   r   r   rS   )r%   r5   rW   rO   rA   rU   ÚqnameÚ
attributesr(   r(   r)   r5      s*   
ÿÿ
ÿÿzXMLSerializer.predicate©r!   r   )r*   r+   ©NN©
r9   r:   r;   r<   r=   r<   r>   r   r*   r?   ©r   )rM   r   rO   rP   r*   r?   ©r5   r   rW   r   rO   rP   r*   r?   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r$   rJ   rN   rM   r5   Ú__classcell__r(   r(   r&   r)   r      s    
ü5ÿr   z(http://www.w3.org/XML/1998/namespacelangz(http://www.w3.org/XML/1998/namespacebasezhttp://www.w3.org/2002/07/owl#ÚvalÚstrr*   c                 C  s   |   d¡r| dd… S | S )z:strip off _: from nodeIDs... as they are not valid NCNamesz_:é   N)Ú
startswith)rg   r(   r(   r)   r   £   s   
r   c                      sN   e Zd ZdZdd‡ fdd„Z		d d!dd„Zd"d#dd„Z	d"d$dd„Z‡  ZS )%r    z$Pretty RDF/XML RDF graph serializer.é   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__Nr9   r:   r;   r<   r=   r>   r   r*   r?   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¡ qƒt	ƒ }| ¡ D ]}t|tƒrµ| |¡ q¨|  |d¡ q¨|D ]}|| j vrË|  |d¡ q¾| tj¡ | d	 d
¡¡ d | _ d S )Nrm   rk   r   z max_depth must be greater than 0r,   r-   rF   r   Ú
zlatin-1)Ú _PrettyXMLSerializer__serializedr!   r;   Úgetrm   r.   r3   r   Úwriterr/   r0   ÚunionÚobjectsr   Útyper1   Úpushr   Ú	attributeÚXMLBASEÚ
namespacesr2   rL   rM   rR   r   ÚaddÚpoprA   rB   )r%   r9   r;   r=   r>   r!   r3   rq   rx   Úpossibler5   r6   r7   ÚlocalrM   ZbnodesZbnoder(   r(   r)   rN   ²   sV   
ÿ
€


€
zPrettyXMLSerializer.serializer   rM   r   rO   rP   c           
      C  s”  | j }| j}|| jv r)| tj¡ | tj|  |¡¡ | 	tj¡ | j 
|¡ d S || jvr¥d| 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!   rq   rl   ru   r   ÚDescriptionrv   ZaboutrS   rz   Úremovero   r   rs   r   rt   r3   r[   Ú	ExceptionrR   r   ÚnodeIDr   rT   r5   )
r%   rM   rO   r!   rq   rt   Úelementr~   r5   rW   r(   r(   r)   rM   û   sF   


ÿ


€€
ûzPrettyXMLSerializer.subjectr5   rW   c           	      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|  |¡¡ n·t| |t	j¡ƒrÊd| j|< dd l}|j dt!|ƒ d t"dd | tjd	¡ t#||ƒ}|D ]}t|t$ƒr¹| j% &|¡ |  '|¡ t|t$ƒsÈd| j|< q¬nkt| (|t	j)t*j+t,j+gf¡ƒrét|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   rX   r   r   z&Assertions on %s other than RDF.first z/and RDF.rest are ignored ... including RDF.Listri   )Ú
stacklevelr   )rW   )2rq   r!   ru   rR   r   rY   rv   ÚXMLLANGrZ   r   Z
XMLLiteralÚvalueÚxmlÚdomZminidomZDocumentr   Z	parseTypeÚtextr9   rA   ro   r   r   Ztriplesr‚   r   ÚresourcerS   r   rs   ÚwarningsÚwarnÚreprÚUserWarningr   r   rl   ry   rM   Ztriples_choicesrt   ÚOWL_NSÚClassr   rm   ÚlenrI   rL   rz   )	r%   r5   rW   rO   rq   r!   r‹   ÚcolÚitemr(   r(   r)   r5   3  sx   

ÿ


€

ÿü




€ø
þÿû
zPrettyXMLSerializer.predicate)rk   r]   r^   r_   r`   )rM   r   rO   rP   ra   )	rb   rc   rd   re   r$   rN   rM   r5   rf   r(   r(   r&   r)   r    «   s    üI9ÿr    )rg   rh   r*   rh   )0Ú
__future__r   Zxml.dom.minidomr‡   Útypingr   r   r   r   r   r   r	   Zxml.sax.saxutilsr
   r   Zrdflib.collectionr   Zrdflib.graphr   Zrdflib.namespacer   r   r   Zrdflib.plugins.parsers.RDFVOCr   Z$rdflib.plugins.serializers.xmlwriterr   Zrdflib.serializerr   Zrdflib.termr   r   r   r   r   r   Zrdflib.utilr   r   Z	xmlwriterr   Ú__all__r   r…   rw   r   r   r    r(   r(   r(   r)   Ú<module>   s*    $  	
