
    Pi-                        d 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mZ ddlmZ ddlmZmZmZ d	d
lmZ dgZdZd	ZdZdZdZ G d de          ZdS )am  
LongTurtle RDF graph serializer for RDFLib.
See http://www.w3.org/TeamSubmission/turtle/ for syntax specification.

This variant, longturtle as opposed to just turtle, makes some small format changes
to turtle - the original turtle serializer. It:

* uses PREFIX instead of @prefix
* uses BASE instead of @base
* adds a new line at RDF.type, or 'a'
* adds a newline and an indent for all triples with more than one object (object list)
* adds a new line and ';' for the last triple in a set with '.'
    on the start of the next line
* uses default encoding (encode()) is used instead of "latin-1"

- Nicholas Car, 2023
    )annotations)IOAnyOptional)to_canonical_graph)Error)Graph_TripleType)RDF)BNodeLiteralURIRef   )RecursiveSerializerLongTurtleSerializer   Fc                       e Zd ZdZdZdZ fdZ fdZd Z fdZ		 	 	 d)d*dZ
d+ fdZd,dZd Zd Zd Zd Zd Zd-d Zd-d!Zd" Zd# Zd$ Zd% Zd-d&Zd-d'Zd( Z xZS ).r   a0  LongTurtle, a Turtle serialization format.

    When the optional parameter `canon` is set to `True`, the graph is canonicalized
    before serialization. This normalizes blank node identifiers and allows for
    deterministic serialization of the graph. Useful when consistent outputs are required.
    
longturtlez    c                    i | _         d| _        t          t          |                               |           t
          j        di| _        |                                  d | _	        t          | _        d S )NFa)_ns_rewrite_canonsuperr   __init__r   typekeywordsresetstream_SPACIOUS_OUTPUT	_spacious)selfstore	__class__s     y/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/rdflib/plugins/serializers/longturtle.pyr   zLongTurtleSerializer.__init__4   s]    "D))2259993

/    c                P   |dk    r|d         dk    s| j                             ||          |k    rJ|| j        vr&d|z   }|| j         v rd|z   }|| j         v || j        |<   | j                            ||          }t          t          |                               ||           |S )N r   _p)
namespacesgetr   r   r   addNamespace)r!   prefix	namespacer)   r#   s       r$   r,   z!LongTurtleSerializer.addNamespace=   s     RKKF1I,,1D1DI2
 2
2 2 T---&L4?**aA 4?**+, (%))&&99F"D))66vyIIIr%   c                   | j         sdS | j        j        }t          | j                  }|                    d          }|                    d          }|                                 t                      }|                    d	                    |          dd           |
                                }||_        || _        dS )zApply canonicalization to the store.

        This normalizes blank node identifiers and allows for deterministic
        serialization of the graph.
        Nzapplication/n-triples)format
T)datar0   	skolemize)r   r"   namespace_managerr   	serializesplitsortr	   parsejoinde_skolemize)r!   r4   r"   contentlinesgraphs         r$   canonizezLongTurtleSerializer.canonizeU   s     { 	F J8"4:..//)@/AAd##

5!!*AT 	 	
 	
 	
 ""$$"3


r%   c                    t          t          |                                            i | _        d| _        i | _        |                                  d S )NF)r   r   r   _shortNames_startedr   r>   )r!   r#   s    r$   r   zLongTurtleSerializer.resetk   sH    "D))//111r%   Nr   	IO[bytes]baseOptional[str]encodingspaciousOptional[bool]kwargsr   returnNonec                   |                     dd          | _        |                                  || _        ||| _        n| j        j        | j        j        | _        ||| _        |                                  |                                 }| 	                                 d}|D ]H}| 
                    |          r|rd}|                     |          r|s|                     d           I|                                  d | _        d S )NcanonFTr1   )r+   r   r   r   rC   r"   r    
preprocessorderSubjectsstartDocumentisDone	statementwriteendDocument)	r!   r   rC   rE   rF   rH   subjects_list	firstTimesubjects	            r$   r5   zLongTurtleSerializer.serializer   s    jj%00

DIIZ_(
DI%DN**,,	$ 	! 	!G{{7##  "!	~~g&& !y !

4   			r%   tripler
   c                   t          t          |                               |           t          |          D ]\  }}|t          k    r{|| j        v r| j        jt          |t                    rU|	                    | j                  r;d|
                    | j        d          vrd|
                    | j        d          vr|                     ||t          k               t          |t                    r(|j        r!|                     |j        t                     |d         }t          |t                    r| j        |xx         dz  cc<   d S d S )N#r'   /)
gen_prefixr   )r   r   preprocessTriple	enumerateVERBr   rC   
isinstancer   
startswithreplacegetQNamer   datatype_GEN_QNAME_FOR_DTr   _references)r!   rW   inoder)   r#   s        r$   r\   z%LongTurtleSerializer.preprocessTriple   s`   "D))::6BBB (( 	K 	KGAtDyy4=((I)"400 *	22 * 4<<	2#>#>>>4<<	2#>#>>> MM$AIM777$(( KT] Kdm8IJJJ1Ia 	%Q1$	% 	%r%   Tc                   t          |t                    sd S 	 | j                            ||          }n:# t          $ r- | j        j                            |          }|||df}nY d S Y nw xY w|\  }}}|                    dd                              dd          }|                    d          rd S |                     ||          }|d|S )	N)generater'   (z\()z\).:)	r_   r   r"   compute_qname	Exceptionr-   ra   endswithr,   )r!   urir[   partspfxr-   r.   locals           r$   rb   zLongTurtleSerializer.getQName   s   #v&& 	4
	J,,S:,FFEE 	 	 	*"))#..Cc2 tt 	 $) 	5dE**224?? >># 	4""6955 &&%%((s   6 1A-,A-c           	        d| _         t          | j                                                  }| j        r2|                     |                                 d| j        z  z              |D ]6\  }}|                     |                                 d|d|dz              7|r| j        r|                     d           d S d S d S )NTz
BASE <%s>
zPREFIX z: <z>
r1   )rA   sortedr*   itemsrC   rR   indentr    )r!   ns_listr-   rq   s       r$   rO   z"LongTurtleSerializer.startDocument   s    ..00119 	BJJt{{}}}ty'@@AAA" 	L 	LKFCJJt{{}}}fffccc'JJKKKK 	t~ 	JJt	 	 	 	r%   c                B    | j         r|                     d           d S d S )Nr1   )r    rR   )r!   s    r$   rS   z LongTurtleSerializer.endDocument   s.    > 	JJt	 	r%   c                    |                      |           |                     |          p|                     |          S N)subjectDone	s_squared	s_defaultr!   rV   s     r$   rQ   zLongTurtleSerializer.statement   s9    !!!~~g&&A$..*A*AAr%   c                8   |                      d|                                 z              |                     |t                     |                      d|                                 z              |                     |           |                      d           dS )Nr1   
.T)rR   rx   pathSUBJECTpredicateListr   s     r$   r   zLongTurtleSerializer.s_default   s    

4$++--'(((		'7###

4$++--'(((7###

5tr%   c                   | j         |         dk    st          |t                    sdS |                     d|                                 z   dz              |                     |d           |                     d           dS )Nr   Fr1   z[]newliner   T)re   r_   r   rR   rx   r   r   s     r$   r~   zLongTurtleSerializer.s_squared   s}    W%))*We2L2L)5

4$++--'$.///7E222

5tr%   Fc                    |                      ||          s*|                     |||          st          d|d          d S d S )NzCannot serialize node '')	p_squared	p_defaultr   r!   rg   positionr   s       r$   r   zLongTurtleSerializer.path   sc    NN4**	@.2nnT8W.U.U	@ %>???	@ 	@ 	@ 	@r%   c                    |t           k    r|s|                     d           |                     |                     ||                     dS )N T)r   rR   labelr   s       r$   r   zLongTurtleSerializer.p_default   sF    wwJJsOOO

4::dH--...tr%   c                T    |t           j        k    rdS |t          u r| j        v r j        |         S t	          |t
                    r|                    d fd          S                      |          }                     ||t          k              p|	                                S )Nz()Tc                :                         | t                    S r|   )rb   rd   )dtr!   s    r$   <lambda>z,LongTurtleSerializer.label.<locals>.<lambda>  s    $--<M*N*N r%   )	use_plainqname_callback)
r   nilr^   r   r_   r   _literal_n3
relativizerb   n3r!   rg   r   s   `  r$   r   zLongTurtleSerializer.label   s    37??4t 5 5=&&dG$$ 	F##NNNN $   
 ??4((D==x4'788EDGGIIEr%   c                   t          |t                    r%|| j        v s| j        |         dk    s|t          k    rdS |                     |          rx| xj        dz  c_        |                     d           | xj        dz  c_        |                     |           |                     d| 	                                z   dz              n| 
                    |           |                     d| 	                    d          z   dz              | xj        dz  c_        |                     |           | xj        dz  c_        |                     d| 	                    d          z   dz              d	S )
Nr   Fr   z (
r1   rk   z[
]T)r_   r   _serializedre   r   isValidListdepthrR   doListrx   r}   r   r   s      r$   r   zLongTurtleSerializer.p_squared
  s_    4''	t'''%))7""5D!! 	4JJ!OJJJJvJJ!OJJKKJJtdkkmm+c12222 T"""JJtdkk!nn,u4555JJ!OJJt$$$JJ!OJJJJtdkk!nn,s2333tr%   c                `   	 | j                             |t          j                  dS n# t          $ r Y dS w xY w|rq|t          j        k    r:t          t          | j                             |                              dk    rdS | j                             |t          j	                  }|qdS )zW
        Checks if l is a valid RDF list, i.e. no nodes have other properties.
        NFr   T)
r"   valuer   firstro   r   lenlistpredicate_objectsrest)r!   l_s     r$   r   z LongTurtleSerializer.isValidList)  s    	zCI..6u 7 	 	 	55	 	0SW}}T$**F*Fr*J*J%K%K!L!LPQ!Q!Qu!!"ch//B  	0 ts   %* 
88c                   d}|r| j                             |t          j                  }||dk    r)|                     |                     d                     n+|                     d|                     d          z              |                     |t          d           |                     |           | j                             |t          j	                  }|dz  }|d S d S )Nr   r   r1   Tr   )
r"   r   r   r   rR   rx   r   OBJECTr}   r   )r!   r   rf   items       r$   r   zLongTurtleSerializer.doList8  s     
	:##B	22D66JJt{{1~~....JJtdkk!nn4555		$	555  $$$!!"ch//BFA  
	 
	 
	 
	 
	r%   c                N   |                      |          }|                     |          }t          |          dk    rd S |                     |                     d                     |                     |d         d           |                     ||d                             |dd          D ]_}|                     d|                     d          z              |                     |d           |                     ||                    `|                     d           d S )Nr   r   Tr   z ;
z ;)buildPredicateHashsortPropertiesr   rR   rx   verb
objectList)r!   rV   r   
propertiespropList	predicates         r$   r   z"LongTurtleSerializer.predicateListF  s   ,,W55
&&z22x==AF

4;;q>>"""		(1+t	,,,
8A;/000!!"" 	3 	3IJJvA.///IIiI...OOJy12222

4r%   c                >    |                      |t          |           d S r|   )r   r^   )r!   rg   r   s      r$   r   zLongTurtleSerializer.verbT  s    		$g&&&&&r%   c                   t          |          }|dk    rd S |dk    rdpd}| xj        |z  c_        d}|dk    r^t          |d         t                    s,|                     d|                     d          z              n|                     d           d}|                     |d         t          |           |dd          D ]t}|                     d           t          |t                    s+|                     d|                     d          z              |                     |t          d           u| xj        |z  c_        d S )	Nr   r   Fr1   r   Tr   z ,)r   r   r_   r   rR   rx   r   r   )r!   objectscountdepthmodfirst_nlobjs         r$   r   zLongTurtleSerializer.objectListW  sA   GA::FQJ%A*

h

199gaj%00  

4$++a..01111

3H		'!*fh	777122; 	1 	1CJJtc5)) 2

4$++a..0111IIc64I0000

h



r%   )NNN)r   rB   rC   rD   rE   rD   rF   rG   rH   r   rI   rJ   )rW   r
   rI   rJ   )T)F)__name__
__module____qualname____doc__
short_nameindentStringr   r,   r>   r   r5   r\   rb   rO   rS   rQ   r   r~   r   r   r   r   r   r   r   r   r   __classcell__)r#   s   @r$   r   r   )   s         JL0 0 0 0 0    0  ,     #"&#'$ $ $ $ $L% % % % % %0) ) ) )8	 	 	  B B B    @ @ @ @   F F F  >       ' ' ' '      r%   N)r   
__future__r   typingr   r   r   rdflib.comparer   rdflib.exceptionsr   rdflib.graphr	   r
   rdflib.namespacer   rdflib.termr   r   r   turtler   __all__r   r^   r   rd   r   r    r%   r$   <module>r      s!   $ # " " " " " $ $ $ $ $ $ $ $ $ $ - - - - - - # # # # # # + + + + + + + +             . . . . . . . . . . ' ' ' ' ' '!
"
	
  A A A A A. A A A A Ar%   