§
    kÃ¿az%  ã                   óx   — d 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gZdZdZdZd	Zd	Z G d
„ de¦  «        ZdS )ao  
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, 2021
é    )ÚBNodeÚLiteralÚURIRef)ÚErroré   )ÚRecursiveSerializer)ÚRDFÚLongTurtleSerializeré   Fc                   ó²   ‡ — e Zd ZdZdZˆ fd„Zˆ fd„Zˆ fd„Zdd„Zˆ 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d„Zd„ Zd„ Zdd„Zdd„Zd„ Zˆ xZS )r
   Ú
longturtlez    c                 óÚ   •— i | _         t          t          | ¦  «                             |¦  «         t          j        di| _        |                      ¦   «          d | _        t          | _
        d S )NÚa)Ú_ns_rewriteÚsuperr
   Ú__init__r	   ÚtypeÚkeywordsÚresetÚstreamÚ_SPACIOUS_OUTPUTÚ	_spacious)ÚselfÚstoreÚ	__class__s     €úG/usr/lib/python3/dist-packages/rdflib/plugins/serializers/longturtle.pyr   zLongTurtleSerializer.__init__'   sV   ø€ ØˆÔÝÕ" DÑ)Ô)×2Ò2°5Ñ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Ë   ø€ ð �RŠKˆK˜F 1œI¨Ò,Ð,°´×1DÒ1DØ�Iñ2
ô 2
àò2ð 2ð ˜TÔ-Ð-Ð-Ø˜&‘L�Ø˜4œ?Ð*Ð*Ø˜a™�Að ˜4œ?Ð*Ð*à+,�Ô  Ñ(àÔ%×)Ò)¨&°&Ñ9Ô9ˆFåÕ" DÑ)Ô)×6Ò6°v¸yÑIÔIÐIØˆr   c                 ó€   •— t          t          | ¦  «                             ¦   «          i | _        d| _        i | _        d S )NF)r   r
   r   Ú_shortNamesÚ_startedr   )r   r   s    €r   r   zLongTurtleSerializer.resetH   s=   ø€ ÝÕ" DÑ)Ô)×/Ò/Ñ1Ô1Ð1ØˆÔØˆŒØˆÔÐÐr   Nc                 ó  — |                       ¦   «          || _        |�|| _        n| j        j        �| j        j        | _        |�|| _        |                      ¦   «          |                      ¦   «         }|                      ¦   «          d}|D ]H}|                      |¦  «        rŒ|rd}|  	                    |¦  «        r|s|  
                    d¦  «         ŒI|                      ¦   «          |  
                    d¦  «         d | _        d S )NTFú
)r   r   Úbaser   r   Ú
preprocessÚorderSubjectsÚstartDocumentÚisDoneÚ	statementÚwriteÚendDocument)	r   r   r,   ÚencodingÚspaciousÚargsÚsubjects_listÚ	firstTimeÚsubjects	            r   Ú	serializezLongTurtleSerializer.serializeN   s  € Ø�
Š
‰ŒˆØˆŒàÐØˆDŒIˆIØŒZŒ_Ð(Øœ
œˆDŒIàÐØ%ˆDŒNà�ŠÑÔÐØ×*Ò*Ñ,Ô,ˆà×ÒÑÔÐàˆ	Ø$ð 	!ð 	!ˆGØ�{Š{˜7Ñ#Ô#ð ØØð "Ø!�	Ø�~Š~˜gÑ&Ô&ð !¨yð !Ø—
’
˜4Ñ Ô Ð øà×ÒÑÔÐØ�
Š
�4ÑÔÐàˆŒ	ˆ	ˆ	r   c                 ó¸  •— t          t          | ¦  «                             |¦  «         t          |¦  «        D ]l\  }}|| j        v rŒ|                      ||t          k    ¬¦  «         t          |t          ¦  «        r(|j	        r!|                      |j	        t          ¬¦  «         Œm|d         }t          |t          ¦  «        r| j        |xx         dz  cc<   d S d S )N)Ú
gen_prefixr   )r   r
   ÚpreprocessTripleÚ	enumerater   ÚgetQNameÚVERBÚ
isinstancer   ÚdatatypeÚ_GEN_QNAME_FOR_DTr   Ú_references)r   ÚtripleÚiÚnoder!   r   s        €r   r=   z%LongTurtleSerializer.preprocessTriplem   sê   ø€ ÝÕ" DÑ)Ô)×:Ò:¸6ÑBÔBÐBÝ  Ñ(Ô(ð 	Kð 	K‰GˆAˆtØ�t”}Ð$Ð$Øà�MŠM˜$¨AµªIˆMÑ7Ô7Ð7Ý˜$¥Ñ(Ô(ð K¨T¬]ð KØ—’˜dœmÕ8I�ÑJÔJÐJøØ�1ŒIˆÝ�a�ÑÔð 	%ØÔ˜QÐÐÔ 1Ñ$ÐÐÑÐÐð	%ð 	%r   Tc                 óB  — t          |t          ¦  «        sd S 	 | j                             ||¬¦  «        }n1#  | j        j                             |¦  «        }|�||df}nY d S Y nxY w|\  }}}|                     d¦  «        rd S |                      ||¦  «        }|›d|›�S )N)Úgenerater   ú.ú:)rA   r   r   Úcompute_qnamer%   Úendswithr$   )r   Úurir<   ÚpartsÚpfxr%   r&   Úlocals           r   r?   zLongTurtleSerializer.getQNamez   sÌ   € Ý˜#�vÑ&Ô&ð 	Ø�4ð
	Ø”J×,Ò,¨S¸:Ð,ÑFÔFˆEˆEøð	à”*Ô"×)Ò)¨#Ñ.Ô.ˆCàˆØ˜c 2˜��ð �t�tð �øøøð
 $)Ñ ˆ�	˜5ð �>Š>˜#ÑÔð 	Ø�4à×"Ò" 6¨9Ñ5Ô5ˆà ˜&˜& % %Ð(Ð(s	   ™6 ¶)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>
r+   )r)   Úsortedr"   Úitemsr,   r2   Úindentr   )r   Úns_listr%   rN   s       r   r/   z"LongTurtleSerializer.startDocument”   sØ   € ØˆŒÝ˜œ×.Ò.Ñ0Ô0Ñ1Ô1ˆàŒ9ð 	BØ�JŠJ�t—{’{‘}”} }°t´yÑ'@Ñ@ÑAÔAÐAØ"ð 	Lð 	L‰KˆF�CØ�JŠJ�t—{’{‘}”}�}¸f¸f¸fÀcÀcÀcÐ'JÑJÑKÔKÐKÐKØð 	�t”~ð 	Ø�JŠJ�tÑÔÐÐÐð	ð 	ð 	ð 	r   c                 óB   — | j         r|                      d¦  «         d S d S )Nr+   )r   r2   )r   s    r   r3   z LongTurtleSerializer.endDocumentŸ   s.   € ØŒ>ð 	Ø�JŠJ�tÑÔÐÐÐð	ð 	r   c                 ó€   — |                       |¦  «         |                      |¦  «        p|                      |¦  «        S ©N)ÚsubjectDoneÚ	s_squaredÚ	s_default©r   r9   s     r   r1   zLongTurtleSerializer.statement£   s9   € Ø×Ò˜Ñ!Ô!Ð!Ø�~Š~˜gÑ&Ô&ÐA¨$¯.ª.¸Ñ*AÔ*AÐAr   c                 ó8  — |                       d|                      ¦   «         z   ¦  «         |                      |t          ¦  «         |                       d|                      ¦   «         z   ¦  «         |                      |¦  «         |                       d¦  «         dS )Nr+   ú ;
.T)r2   rU   ÚpathÚSUBJECTÚpredicateListr]   s     r   r\   zLongTurtleSerializer.s_default§   s   € Ø�
Š
�4˜$Ÿ+š+™-œ-Ñ'Ñ(Ô(Ð(Ø�	Š	�'�7Ñ#Ô#Ð#Ø�
Š
�4˜$Ÿ+š+™-œ-Ñ'Ñ(Ô(Ð(Ø×Ò˜7Ñ#Ô#Ð#Ø�
Š
�7ÑÔÐØˆtr   c                 ó  — | j         |         dk    st          |t          ¦  «        sdS |                      d|                      ¦   «         z   dz   ¦  «         |                      |¦  «         |                      d¦  «         dS )Nr   Fr+   z[]r_   T)rD   rA   r   r2   rU   rb   r]   s     r   r[   zLongTurtleSerializer.s_squared¯   sx   € ØÔ˜WÔ%¨Ò)Ð)µ*¸WÅeÑ2LÔ2LÐ)Ø�5Ø�
Š
�4˜$Ÿ+š+™-œ-Ñ'¨$Ñ.Ñ/Ô/Ð/Ø×Ò˜7Ñ#Ô#Ð#Ø�
Š
�7ÑÔÐØˆtr   Fc                 óŒ   — |                       |||¦  «        s*|                      |||¦  «        st          d|›d�¦  «        ‚d S d S )NzCannot serialize node 'ú')Ú	p_squaredÚ	p_defaultr   ©r   rG   ÚpositionÚnewlines       r   r`   zLongTurtleSerializer.path·   se   € à�NŠN˜4 ¨7Ñ3Ô3ð	@à�~Š~˜d H¨gÑ6Ô6ð	@õ �%¸¸¸Ð>Ñ?Ô?Ð?ð		@ð 	@ð 	@ð 	@r   c                 óœ   — |t           k    r|s|                      d¦  «         |                      |                      ||¦  «        ¦  «         dS )Nú T)ra   r2   Úlabelrh   s       r   rg   zLongTurtleSerializer.p_default¾   sF   € Ø•wÒÐ wÐØ�JŠJ�s‰OŒOˆOØ�
Š
�4—:’:˜d HÑ-Ô-Ñ.Ô.Ð.Øˆ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 rY   )r?   rC   )Údtr   s    €r   ú<lambda>z,LongTurtleSerializer.label.<locals>.<lambda>Ì   s   ø€ ¨$¯-ª-¸Õ<MÑ*NÔ*N€ r   )Ú	use_plainÚqname_callback)
r	   Únilr@   r   rA   r   Ú_literal_n3Ú
relativizer?   Ún3)r   rG   ri   s   `  r   rm   zLongTurtleSerializer.labelÄ   s¯   ø€ Ø•3”7Š?ˆ?Ø�4Ø•tÐÐ ¨¬Ð 5Ð 5Ø”= Ô&Ð&Ý�d�GÑ$Ô$ð 	FØ×#Ò#ØØNÐNÐNÐNð $ñ ô ð ð
 —?’? 4Ñ(Ô(ˆDà—=’=  xµ4Ò'7Ñ8Ô8ÐE¸D¿GºG¹I¼IÐEr   c                 ó&  — t          |t          ¦  «        r%|| j        v s| j        |         dk    s|t          k    rdS |s|                      d¦  «         |                      |¦  «        r‰| xj        dz  c_        |                      d¦  «         | xj        dz  c_        |                      |¦  «         | xj        dz  c_        |                      d|  	                    d¦  «        z   dz   ¦  «         nŸ|  
                    |¦  «         | xj        dz  c_        |                      d¦  «         | xj        dz  c_        |                      |d¬	¦  «         | xj        dz  c_        |                      d|  	                    d¦  «        z   d
z   ¦  «         dS )Nr   Frl   r   z(
r+   ú)z[
©rj   ú]T)rA   r   Ú_serializedrD   ra   r2   ÚisValidListÚdepthÚdoListrU   rZ   rb   rh   s       r   rf   zLongTurtleSerializer.p_squaredÓ   sƒ  € å˜4¥Ñ'Ô'ð	à�tÔ'Ð'Ð'ØÔ Ô%¨Ò)Ð)Ø�7Ò"Ð"à�5àð 	Ø�JŠJ�s‰OŒOˆOà×Ò˜DÑ!Ô!ð 	4àˆJŒJ˜!‰OˆJŒJØ�JŠJ�uÑÔÐØˆJŒJ˜!‰OˆJŒJØ�KŠK˜ÑÔÐØˆJŒJ˜!‰OˆJŒJØ�JŠJ�t˜dŸkšk¨!™nœnÑ,¨sÑ2Ñ3Ô3Ð3Ð3à×Ò˜TÑ"Ô"Ð"ØˆJŒJ˜!‰OˆJŒJØ�JŠJ�uÑÔÐØˆJŒJ˜!‰OˆJŒJØ×Ò˜t¨UÐÑ3Ô3Ð3ØˆJŒJ˜!‰OˆJŒJØ�JŠJ�t˜dŸkšk¨!™nœnÑ,¨sÑ2Ñ3Ô3Ð3àˆtr   c                 óN  — 	 | j                              |t          j        ¦  «        €dS n#  Y dS 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	   Úfirstrt   ÚlenÚlistÚpredicate_objectsÚrest)r   Úl_s     r   r}   z LongTurtleSerializer.isValidListò   s¨   € ð	ØŒz×Ò ¥C¤IÑ.Ô.Ð6Ø�uð 7øð	Ø�5�5øøøØð 	0Ø•S”WŠ}ˆ}¥¥T¨$¬*×*FÒ*FÀrÑ*JÔ*JÑ%KÔ%KÑ!LÔ!LÐPQÒ!QÐ!QØ�uØ”×!Ò! "¥c¤hÑ/Ô/ˆBð ð 	0ð ˆts   ‚%* ª/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   r+   Trz   )
r   r�   r	   r‚   r2   rU   r`   ÚOBJECTrZ   r†   )r   r‡   rF   Úitems       r   r   zLongTurtleSerializer.doList  sã   € ØˆØð 
	Ø”:×#Ò# B­¬	Ñ2Ô2ˆDØÐØ˜’6�6Ø—J’J˜tŸ{š{¨1™~œ~Ñ.Ô.Ð.Ð.à—J’J˜t d§k¢k°!¡n¤nÑ4Ñ5Ô5Ð5Ø—	’	˜$¥°�	Ñ5Ô5Ð5Ø× Ò  Ñ$Ô$Ð$Ø”×!Ò! "¥c¤hÑ/Ô/ˆBØ�‰FˆAð ð 
	ð 
	ð 
	ð 
	ð 
	r   c                 ó$  — |                       |¦  «        }|                      |¦  «        }t          |¦  «        dk    rd S |                      |                      d¦  «        ¦  «         |                      |d         d¬¦  «         |                      ||d                  ¦  «         |dd …         D ]_}|                      d|                      d¦  «        z   ¦  «         |                      |d¬¦  «         |                      ||         ¦  «         Œ`d S )Nr   r   Trz   z ;
)ÚbuildPredicateHashÚsortPropertiesrƒ   r2   rU   ÚverbÚ
objectList)r   r9   rj   Ú
propertiesÚpropListÚ	predicates         r   rb   z"LongTurtleSerializer.predicateList  s  € Ø×,Ò,¨WÑ5Ô5ˆ
Ø×&Ò& zÑ2Ô2ˆÝˆx‰=Œ=˜AÒÐØˆFØ�
Š
�4—;’;˜q‘>”>Ñ"Ô"Ð"Ø�	Š	�(˜1”+ tˆ	Ñ,Ô,Ð,Ø�Š˜
 8¨A¤;Ô/Ñ0Ô0Ð0Ø! ! " "œð 	3ð 	3ˆIØ�JŠJ�v §¢¨A¡¤Ñ.Ñ/Ô/Ð/Ø�IŠI�i¨ˆIÑ.Ô.Ð.Ø�OŠO˜J yÔ1Ñ2Ô2Ð2Ð2ð	3ð 	3r   c                 ó>   — |                       |t          |¦  «         d S rY   )r`   r@   )r   rG   rj   s      r   rŽ   zLongTurtleSerializer.verb  s   € Ø�	Š	�$�˜gÑ&Ô&Ð&Ð&Ð&r   c                 ó  — t          |¦  «        }|dk    rd S |dk    rdpd}| xj        |z  c_        d}|dk    r-|                      d|                      d¦  «        z   ¦  «         d}|                      |d         t
          |¬¦  «         |dd …         D ]\}|                      d¦  «         |                      |                      d¦  «        ¦  «         |                      |t
          d¬¦  «         Œ]| xj        |z  c_        d S )Nr   r   Fr+   Trz   z ,
)rƒ   r~   r2   rU   r`   r‰   )r   ÚobjectsÚcountÚdepthmodÚfirst_nlÚobjs         r   r�   zLongTurtleSerializer.objectList  s  € Ý�G‘”ˆØ�AŠ:ˆ:ØˆFØ˜Q’JÐ% AÐ*¨ˆØˆ
Œ
�hÑˆ
Œ
ØˆØ�1Š9ˆ9Ø�JŠJ�t˜dŸkšk¨!™nœnÑ,Ñ-Ô-Ð-ØˆHØ�	Š	�'˜!”*�f¨hˆ	Ñ7Ô7Ð7Ø˜1˜2˜2”;ð 	1ð 	1ˆCØ�JŠJ�vÑÔÐØ�JŠJ�t—{’{ 1‘~”~Ñ&Ô&Ð&Ø�IŠI�c�6¨4ˆIÑ0Ô0Ð0Ð0Øˆ
Œ
�hÑˆ
Œ
ˆ
ˆ
r   )NNN)T)F)Ú__name__Ú
__module__Ú__qualname__Ú
short_nameÚindentStringr   r$   r   r:   r=   r?   r/   r3   r1   r\   r[   r`   rg   rm   rf   r}   r   rb   rŽ   r�   Ú__classcell__)r   s   @r   r
   r
   "   sª  ø€ € € € € à€JØ€Lð*ð *ð *ð *ð *ðð ð ð ð ð2ð ð ð ð ðð ð ð ð>%ð %ð %ð %ð %ð)ð )ð )ð )ð4	ð 	ð 	ðð ð ðBð Bð Bðð ð ðð ð ð@ð @ð @ð @ðð ð ð ðFð Fð Fðð ð ð ð>ð ð ðð ð ð3ð 3ð 3ð 3ð'ð 'ð 'ð 'ðð ð ð ð ð ð r   N)Ú__doc__Úrdflib.termr   r   r   Úrdflib.exceptionsr   Úturtler   Úrdflib.namespacer	   Ú__all__ra   r@   r‰   rC   r   r
   © r   r   ú<module>r§      sÇ   ððð ð$ /Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø #Ð #Ð #Ð #Ð #Ð #Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø  Ð  Ð  Ð  Ð  Ð  à!Ð
"€à
€Ø€Ø	
€àÐ ØÐ ðLð Lð Lð Lð LÐ.ñ Lô Lð Lð Lð Lr   