3
d'                 @   sV   d Z ddlmZ ddlmZmZ ddlmZmZm	Z	 dgZ
edZG dd deZdS )	z2
Notation 3 (N3) RDF graph serializer for RDFLib.
    )Graph)	NamespaceOWL)TurtleSerializerSUBJECTOBJECTN3Serializerz#http://www.w3.org/2000/10/swap/log#c                   s   e Zd ZdZd  fdd	Z fddZ fddZ fd	d
Z fddZ fddZ	d! fdd	Z
 fddZd" fdd	Z fddZd# fdd	Zdd Zdd Z  ZS )$r   Zn3Nc                s2   t t| j| | jjtjdtjdi || _	d S )N=z=>)
superr   __init__keywordsupdater   ZsameAsSWAP_LOGZimpliesparent)selfstorer   )	__class__ ?/tmp/pip-build-7vycvbft/rdflib/rdflib/plugins/serializers/n3.pyr      s
    zN3Serializer.__init__c                s   t t| j  i | _d S )N)r
   r   resetZ_stores)r   )r   r   r   r      s    zN3Serializer.resetc                s&   t t| j| | jr"| jj| d S )N)r
   r   subjectDoner   )r   subject)r   r   r   r      s    zN3Serializer.subjectDonec                s$   t t| j|o"| j p"| jj|S )N)r
   r   isDoner   )r   r   )r   r   r   r   #   s    zN3Serializer.isDonec                s   t t| j  d S )N)r
   r   startDocument)r   )r   r   r   r   '   s    zN3Serializer.startDocumentc                s   | j stt| j  d S )N)r   r
   r   endDocument)r   )r   r   r   r   ;   s    zN3Serializer.endDocumentr   c                s,   t t| j|}| jd k	r(|| jj 7 }|S )N)r
   r   indentr   )r   modifierr   )r   r   r   r   ?   s    
zN3Serializer.indentc                sh   t t| j| t|d tr:x|d D ]}| j| q(W t|d trdx|d D ]}| j| qRW d S )Nr      )r
   r   preprocessTriple
isinstancer   )r   Ztriplet)r   r   r   r   E   s    zN3Serializer.preprocessTripleTc                s:   d }| j d k	r| j j||}|d kr6tt| j||}|S )N)r   getQNamer
   r   )r   uriZ
gen_prefixqname)r   r   r   r!   N   s    
zN3Serializer.getQNamec                s>   | j | | j|}t|dkr$dS | j|p<tt| j|S )Nr   F)r   ZbuildPredicateHashlens_clauser
   r   	statement)r   r   Z
properties)r   r   r   r&   V   s    


zN3Serializer.statementFc                s$   | j ||s tt| j||| d S )N)p_clauser
   r   path)r   nodepositionnewline)r   r   r   r(   ^   s    zN3Serializer.pathc             C   sH   t |tr@| jd| j   | j|t | j| | jd dS dS d S )N
z .TF)r   r   writer   r'   r   ZpredicateList)r   r   r   r   r   r%   b   s    


zN3Serializer.s_clausec             C   s   t |trz| j| |tkr&| jd | jd |  jd7  _t|| d}|j| j |  jd8  _| j| j	 d  dS dS d S )N {   )r   }TF)
r   r   r   r   r-   depthr   	serializestreamr   )r   r)   r*   
serializerr   r   r   r'   l   s    



zN3Serializer.p_clause)N)r   )T)F)__name__
__module____qualname__Z
short_namer   r   r   r   r   r   r   r   r!   r&   r(   r%   r'   __classcell__r   r   )r   r   r      s   	
N)__doc__Zrdflib.graphr   Zrdflib.namespacer   r   Z!rdflib.plugins.serializers.turtler   r   r   __all__r   r   r   r   r   r   <module>   s   