§
    kÃ¿a1  ã                   ó(  — d Z ddl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mZ ddlmZmZ dd	lmZmZ dd
lmZ ddlmZmZmZmZmZmZmZ ddgZej        ej        ej         ej!        hZ" G d„ de¦  «        Z#	 	 	 	 	 	 	 dd„Z$ G d„ de%¦  «        Z&dS )a¼  
This serialiser will output an RDF Graph as a JSON-LD formatted document. See:

    http://json-ld.org/

Example usage::

    >>> from rdflib import Graph
    >>> testrdf = '''
    ... @prefix dc: <http://purl.org/dc/terms/> .
    ... <http://example.org/about>
    ...     dc:title "Someone's Homepage"@en .
    ... '''

    >>> g = Graph().parse(data=testrdf, format='n3')

    >>> print(g.serialize(format='json-ld', indent=4))
    [
        {
            "@id": "http://example.org/about",
            "http://purl.org/dc/terms/title": [
                {
                    "@language": "en",
                    "@value": "Someone's Homepage"
                }
            ]
        }
    ]

é    N)Ú
Serializer)ÚGraph)ÚURIRefÚLiteralÚBNode)ÚRDFÚXSD)ÚIOÚOptionalé   )ÚContextÚUNDEF)Újson)ÚCONTEXTÚGRAPHÚIDÚVOCABÚLISTÚSETÚLANGÚJsonLDSerializerÚfrom_rdfc                   ób   ‡ — e Zd Zdefˆ fd„Z	 	 ddee         dee         dee         fd„Z	ˆ xZ
S )	r   Ústorec                 óX   •— t          t          | ¦  «                             |¦  «         d S ©N)Úsuperr   Ú__init__)Úselfr   Ú	__class__s     €úC/usr/lib/python3/dist-packages/rdflib/plugins/serializers/jsonld.pyr   zJsonLDSerializer.__init__9   s(   ø€ ÝÕ Ñ%Ô%×.Ò.¨uÑ5Ô5Ð5Ð5Ð5ó    NÚstreamÚbaseÚencodingc                 ó\  — |pd}|dvrt          j        d|› �¦  «         |                     d¦  «        }|                     dd¦  «        f}|                     dd¦  «        }|                     dd¦  «        }|                     d	d
¦  «        }	|                     dd¦  «        }
|                     dd¦  «        }|                     dd¦  «        }t          | j        |||||¬¦  «        }t          j        ||	|
||¬¦  «        }|                     |                     |d¦  «        ¦  «         d S )Núutf-8)r'   zutf-16z7JSON should be encoded as unicode. Given encoding was: ÚcontextÚuse_native_typesFÚuse_rdf_typeÚauto_compactÚindentr   Ú
separators)ú,z: Ú	sort_keysTÚensure_ascii)r+   )r,   r-   r/   r0   Úreplace)	ÚwarningsÚwarnÚgetr   r   r   ÚdumpsÚwriteÚencode)r   r#   r$   r%   ÚkwargsÚcontext_datar)   r*   r+   r,   r-   r/   r0   ÚobjÚdatas                  r!   Ú	serializezJsonLDSerializer.serialize<   sM  € ð Ð&˜wˆØÐ.Ð.Ð.ÝŒMØWÈXÐWÐWñô ð ð —z’z )Ñ,Ô,ˆØ"ŸJšJÐ'9¸5ÑAÔAÐCÐØ—z’z .°%Ñ8Ô8ˆØ—z’z .°%Ñ8Ô8ˆà—’˜H aÑ(Ô(ˆØ—Z’Z ¨kÑ:Ô:ˆ
Ø—J’J˜{¨DÑ1Ô1ˆ	Ø—z’z .°%Ñ8Ô8ˆåØŒJØØØØØ%ð
ñ 
ô 
ˆõ ŒzØØØ!ØØ%ð
ñ 
ô 
ˆð 	�Š�T—[’[ ¨9Ñ5Ô5Ñ6Ô6Ð6Ð6Ð6r"   ©NN)Ú__name__Ú
__module__Ú__qualname__r   r   r
   Úbytesr   Ústrr<   Ú__classcell__)r    s   @r!   r   r   8   s�   ø€ € € € € ð6˜eð 6ð 6ð 6ð 6ð 6ð 6ð #Ø"&ð	)7ð )7à�5”	ð)7ð �sŒmð)7ð ˜3”-ð	)7ð )7ð )7ð )7ð )7ð )7ð )7ð )7r"   Fc                 ó¸  — |s-|r+t          d„ |                      ¦   «         D ¦   «         ¦  «        }t          |t          ¦  «        r|}|                     ¦   «         }nt          ||¬¦  «        }t          |||¦  «        }	|	                     | ¦  «        }
|	j        j        r;t          |
t          ¦  «        r| 
                    t          ¦  «        |
i}
||
t          <   |
S )Nc              3   óh   K  — | ]-\  }}|r&t          |¦  «        d k    ¯|t          |¦  «        fV — Œ.dS )z$http://www.w3.org/XML/1998/namespaceN)rB   )Ú.0ÚpfxÚnss      r!   ú	<genexpr>zfrom_rdf.<locals>.<genexpr>v   sX   è è € ð 
ð 
á��bØð
õ ˜2‘w”wÐ"HÒHÐHð •#�b‘'”'ˆNàHÐHÐHÐHð
ð 
r"   )r$   )ÚdictÚ
namespacesÚ
isinstancer   Úto_dictÚ	ConverterÚconvertr(   ÚactiveÚlistÚget_keyr   r   )Úgraphr9   r$   r)   r*   r+   Ú	startnodeÚindexr(   Ú	converterÚresults              r!   r   r   h   sï   € ð ð 
˜Lð 
Ýð 
ð 
à"×-Ò-Ñ/Ô/ð
ñ 
ô 
ñ 
ô 
ˆõ �,¥Ñ(Ô(ð 3ØˆØ—’Ñ(Ô(ˆˆå˜,¨TÐ2Ñ2Ô2ˆå˜'Ð#3°\ÑBÔB€IØ×Ò˜uÑ%Ô%€FàÔÔð 'Ý�f�dÑ#Ô#ð 	6Ø—o’o¥eÑ,Ô,¨fÐ5ˆFØ&ˆ�w‰à€Mr"   c                   ó>   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
rN   c                 ó>   — || _         |j        p|| _        || _        d S r   )r(   rP   r)   r*   )r   r(   r)   r*   s       r!   r   zConverter.__init__Ž   s'   € ØˆŒØ '¤Ð BÐ2BˆÔØ(ˆÔÐÐr"   c                 ó  — |j         r^t          ¦   «         }|g}|                     ¦   «         D ]7}t          |j        t
          ¦  «        r|                     |¦  «         Œ2||z  }Œ8n|g}| j        }g }|D �]}i }d }t          |j        t
          ¦  «        r$|                     |j        ¦  «        }|||j	        <   |  
                    |¦  «        }	|s/t          |	¦  «        dk    r|                     |	d         ¦  «         n|	sŒŽ|	||j        <   |rS|d                              |                     t           ¦  «        ¦  «        |k    r|d                              |¦  «         Œí|                     |¦  «         �Œt          |¦  «        dk    rYt          |¦  «        dk    rF| j        j        s:|d         }
|
                     |j        ¦  «        }t          |
¦  «        dk    r|r|}n't          |¦  «        dk    r| j        j        r|d         }|S )Né   r   )Úcontext_awarer   ÚcontextsrL   Ú
identifierr   Úappendr(   Ú
shrink_iriÚid_keyÚ
from_graphÚlenÚupdateÚ	graph_keyr4   rR   r   rP   )r   rS   Údefault_graphÚgraphsÚgr(   Úobjsr:   Ú	graphnameÚnodesÚdefaultÚitemss               r!   rO   zConverter.convert“   s  € ð Ôð 		Ý!™GœGˆMØ#�_ˆFØ—^’^Ñ%Ô%ð 'ð '�Ý˜aœl­FÑ3Ô3ð 'Ø—M’M !Ñ$Ô$Ð$Ð$à! QÑ&�M�Mð	'ð �WˆFà”,ˆàˆØð 	!ñ 	!ˆAØˆCØˆIå˜!œ,­Ñ/Ô/ð 0Ø#×.Ò.¨q¬|Ñ<Ô<�	Ø&/��G”NÑ#à—O’O AÑ&Ô&ˆEàð /¥ U¡¤¨q¢ Ø—
’
˜5 œ8Ñ$Ô$Ð$Ð$àð ØØ).��GÔ%Ñ&àð !˜˜QœŸš G§O¢OµBÑ$7Ô$7Ñ8Ô8¸IÒEÐEØ�Q”—’˜sÑ#Ô#Ð#Ð#à—’˜CÑ Ô Ð Ñ åˆv‰;Œ;˜!ÒÐ¥ D¡	¤	¨Q¢ °t´|Ô7J Ø˜1”gˆGØ—K’K Ô 1Ñ2Ô2ˆEÝ�7‰|Œ|˜qÒ Ð  UÐ Ø�øÝ�‰YŒY˜!Š^ˆ^ ¤Ô 3ˆ^Ø˜”7ˆDàˆr"   c                 óX  — i }t          |                     ¦   «         ¦  «        D ]f}t          |t          ¦  «        s8t          |t          ¦  «        r:t          |                     d |¦  «        ¦  «        s|                      |||¦  «         Œgt          |                     ¦   «         ¦  «        S r   )	ÚsetÚsubjectsrL   r   r   ÚanyÚprocess_subjectrQ   Úvalues)r   rS   ÚnodemapÚss       r!   rb   zConverter.from_graphÄ   s�   € Øˆå�U—^’^Ñ%Ô%Ñ&Ô&ð 	8ð 	8ˆAå˜!�VÑ$Ô$ð 8Ý˜1�eÑ$Ô$ð8Ý-0°·²ÀÀaÑ1HÔ1HÑ-IÔ-Ið8ð ×$Ò$ U¨A¨wÑ7Ô7Ð7øå�G—N’NÑ$Ô$Ñ%Ô%Ð%r"   c           	      ó`  — t          |t          ¦  «        r| j                             |¦  «        }n,t          |t          ¦  «        r|                     ¦   «         }nd }||v rd S i }||| j        j        <   |||<   |                     |¦  «        D ]\  }}|                      ||||||¦  «         Œ |S r   )	rL   r   r(   r`   r   Ún3ra   Úpredicate_objectsÚadd_to_node)r   rS   ru   rt   Únode_idÚnodeÚpÚos           r!   rr   zConverter.process_subjectÐ   sÈ   € Ý�a�Ñ Ô ð 	Ø”l×-Ò-¨aÑ0Ô0ˆGˆGÝ˜�5Ñ!Ô!ð 	Ø—d’d‘f”fˆGˆGàˆGð �gÐÐØ�4àˆØ$+ˆˆTŒ\Ô Ñ!Øˆ�Ñà×+Ò+¨AÑ.Ô.ð 	<ð 	<‰DˆAˆqØ×Ò˜U A q¨!¨T°7Ñ;Ô;Ð;Ð;àˆr"   c                 ól  ‡ ‡‡‡‡— ‰ j         }t          |t          ¦  «        rJ|j        rt	          |j        ¦  «        nd }|j        }	|                     t	          |¦  «        ||	¬¦  «        Šnt‰                     |t          j	        ¦  «        r	t          d gnd g}
|
D ]E}t          t          t          fD ]*}|                     t	          |¦  «        ||¦  «        Š‰r nŒ+‰r nŒFd }|j         }‰�rP‰j        }‰j        r‰                      |‰j        ¦  «        }nK‰j        r |j        ‰j        k    rt	          |¦  «        }n$|j        r‰j        €|j        €t	          |¦  «        }t          ‰j        v r(ˆˆˆˆ ˆfd„‰                      ‰|¦  «        D ¦   «         }�n0t(          ‰j        v r†|	r„|                     |i ¦  «        }|                     |	¦  «        }t	          |¦  «        }|st.          ‰j        v r3t          |t0          ¦  «        s|gx||	<   }|                     |¦  «         n|||	<   d S t.          ‰j        v rd}n‹|                     |¦  «        }|j                             |¦  «        }|r|j        s|j        r|}‰sH|t          j        k    r8‰ j        s1t          |t:          ¦  «        r|                     |¦  «        }|j        }|€‰                      ‰‰|‰¦  «        }|                     |¦  «        }|r.t          |t0          ¦  «        s|g}|                     |¦  «         n|r|g}n|}|||<   d S )N)Úlanguagec                 óv   •— g | ]5}‰                      |‰j        ¦  «        p‰                     ‰‰|‰¦  «        ‘Œ6S © )Útype_coerceÚtypeÚto_raw_value)rF   ÚvrS   rt   ru   r   Úterms     €€€€€r!   ú
<listcomp>z)Converter.add_to_node.<locals>.<listcomp>  sY   ø€ ð ð ð ð ð ×$Ò$ Q¨¬	Ñ2Ô2ð ?Ø×(Ò(¨°°1°gÑ>Ô>ðð ð r"   T) r(   rL   r   ÚdatatyperB   r   Ú	find_termÚvaluer   Úfirstr   r   r   r   rP   Únamerƒ   r‚   Ú	containerÚto_collectionr   Ú
setdefaultr4   r   rQ   r_   Ú	to_symbolÚtermsr*   r   Útype_keyr„   )r   rS   ru   r|   r}   Ús_nodert   r(   rˆ   r   Ú
containersr�   Úcoercionr{   Úuse_setÚp_keyrŠ   rs   Úkey_termr†   s   ```   `            @r!   ry   zConverter.add_to_nodeå   s�  øøøøø€ Ø”,ˆå�a�Ñ!Ô!ð 	Ø*+¬*Ð>•s˜1œ:‘”�¸$ˆHØ”zˆHØ×$Ò$¥S¨¡V¤V¨XÀÐ$ÑIÔIˆDˆDà).¯ª°Q½¼	Ñ)BÔ)BÐN�$ ˜˜ÈÈˆJØ'ð ð �	Ý!#¥U­EÐ 2ð ð �HØ"×,Ò,­S°©V¬V°X¸yÑIÔI�DØð Ø˜ðàð Ø�Eðð ˆØ”nÐ$ˆàñ '	)Ø”IˆEàŒyð Ø×'Ò'¨¨4¬9Ñ5Ô5��Ø”ð  1¤:°´Ò#>Ð#>Ý˜1‘v”v��ØÔ!ð  t¤}Ð'<ÀÄÐASÝ˜1‘v”v�å�t”~Ð%Ð%ðð ð ð ð ð ð ð ð "×/Ò/°°qÑ9Ô9ðñ ô �‘õ
 ˜œÐ'Ð'¨HÐ'Ø×)Ò)¨%°Ñ4Ô4�ØŸš 8Ñ,Ô,�Ý˜1‘v”v�Øð +�S D¤NÐ2Ð2Ý% f­dÑ3Ô3ð <Ø4:°8Ð;˜˜h™¨&Ø—M’M $Ñ'Ô'Ð'Ð'à&*�E˜(‘OØ�Ý˜œÐ&Ð&Ø�øð ×%Ò% aÑ(Ô(ˆEà”}×(Ò(¨Ñ/Ô/ˆHØð ˜Xœ]ð ¨hÔ.@ð Ø�Øð )˜A¥¤šM˜M°$Ô2C˜MÝ˜a¥Ñ(Ô(ð 0Ø"×,Ò,¨QÑ/Ô/�DØÔ(�àˆ<Ø×$Ò$ U¨A¨q°'Ñ:Ô:ˆDà—
’
˜5Ñ!Ô!ˆØð 	Ý˜e¥TÑ*Ô*ð  Ø˜�Ø�LŠL˜ÑÔÐÐØð 	Ø�FˆEˆEàˆEØˆˆu‰ˆˆr"   c                 ó¢  — |t           k    rZt          |t          ¦  «        r| j                             |¦  «        S t          |t
          ¦  «        r|                     ¦   «         S |S |t          k    r/t          |t          ¦  «        r| j                             |¦  «        S t          |t          ¦  «        rt          |j        ¦  «        |k    r|S d S r   )r   rL   r   r(   r`   r   rw   r   r�   r   rB   rˆ   )r   r}   Úcoerce_types      r!   r‚   zConverter.type_coerce0  s·   € Ø�"ÒÐÝ˜!�VÑ$Ô$ð Ø”|×.Ò.¨qÑ1Ô1Ð1Ý˜A�uÑ%Ô%ð Ø—t’t‘v”v�à�Ø�EÒ!Ð!¥j°µFÑ&;Ô&;Ð!Ø”<×)Ò)¨!Ñ,Ô,Ð,Ý˜�7Ñ#Ô#ð 	­¨A¬J©¬¸;Ò(FÐ(FØˆHà�4r"   c                 óî  ‡ ‡‡‡— ‰ j         }‰                      ‰|¦  «        }|�.ˆˆˆˆ fd„‰                      ‰|¦  «        D ¦   «         }|j        |iS t          |t          ¦  «        ryd}‰                      ‰|‰¦  «        }|rC|r1t          ˆfd„‰                     d |¦  «        D ¦   «         ¦  «        s|S |‰||j                 <   |j        | 	                    ¦   «         iS t          |t          ¦  «        r|j        |                     |¦  «        iS t          |t          ¦  «        rÏ‰ j        o|j        t          v }	|	r|                     ¦   «         }
nt#          |¦  «        }
|j        rA|	r‰ j         j        r|
S |j        |
iS |j        |                     |j        ¦  «        |j        |
iS |j        r%|j        |j        k    r|j        |j        |j        |
iS |j        r|j        r|j        s	|j        |
iS |
S d S )Nc                 ó@   •— g | ]}‰                      ‰‰|‰¦  «        ‘ŒS r�   )r„   )rF   ÚlorS   rt   ru   r   s     €€€€r!   r‡   z*Converter.to_raw_value.<locals>.<listcomp>C  s=   ø€ ð ð ð àð ×!Ò! %¨¨B°Ñ8Ô8ðð ð r"   Fc              3   ó(   •K  — | ]}|‰k    ¯|V — Œd S r   r�   )rF   Ús2ru   s     €r!   rI   z)Converter.to_raw_value.<locals>.<genexpr>N  s(   øè è € Ð$UÐ$U¨BÈRÐSTÊWÈW RÈWÈWÈWÈWÐ$UÐ$Ur"   )r(   rŽ   Úlist_keyrL   r   rr   rq   rp   ra   rw   r   r`   r   r)   rˆ   ÚPLAIN_LITERAL_TYPESÚtoPythonrB   rP   Ú	value_keyr’   r�   r   Úlang_key)r   rS   ru   r}   rt   r(   ÚcollÚembedÚonodeÚnativer…   s   ``` `      r!   r„   zConverter.to_raw_value?  s]  øøøø€ Ø”,ˆØ×!Ò! %¨Ñ+Ô+ˆØÐðð ð ð ð ð ð à×,Ò,¨U°AÑ6Ô6ðñ ô ˆDð Ô$ dÐ+Ð+Ý˜�5Ñ!Ô!ð $	àð ð ×(Ò(¨°°7Ñ;Ô;ˆEØð ;Øð ;¥Ð$UÐ$UÐ$UÐ$U°%·.².ÀÀqÑ2IÔ2IÐ$UÑ$UÔ$UÑ!UÔ!Uð ;Ø �Là5:�G˜E '¤.Ô1Ñ2Ø”N A§D¢D¡F¤FÐ+Ð+Ý˜�6Ñ"Ô"ð 	à”N G×$6Ò$6°qÑ$9Ô$9Ð:Ð:Ý˜�7Ñ#Ô#ð 	àÔ*ÐP¨q¬zÕ=PÐ/PˆFØð Ø—J’J‘L”L��å˜‘F”F�ØŒzð Øð 6Ø”|Ô*ð 6Ø ˜à 'Ô 1°1Ð5Ð5àÔ$ g×&7Ò&7¸¼
Ñ&CÔ&CØÔ% qðð ð ”ð  ¤
¨gÔ.>Ò >Ð >ØÔ(¨!¬*°gÔ6GÈÐKÐKØ”^ð  wÔ'7ð ÀÄ
ð ØÔ)¨1Ð-Ð-à�ð-	ð 	r"   c                 ó*  — |t           j        k    r"|                     |t           j        ¦  «        sd S g }t	          |g¦  «        }|rÌ|t           j        k    r|S t          |t          ¦  «        rd S d\  }}|                     |¦  «        D ]R\  }}|s|t           j        k    r|}Œ|s|t           j        k    r|}Œ/|t           j	        k    s|t           j
        k    r d S ŒS|                     |¦  «         |}||v rd S |                     |¦  «         |°Êd S d S )Nr=   )r   ÚnilrŠ   r‹   ro   rL   r   rx   Úrestrƒ   ÚListr_   Úadd)	r   rS   Úl_Ú
list_nodesÚchainr‹   r«   r|   r}   s	            r!   rŽ   zConverter.to_collectionn  s9  € Ø•”Š=ˆ= §¢¨Rµ´Ñ!;Ô!;ˆ=Ø�4Øˆ
Ý�R�D‘	”	ˆØð 	Ø•S”WŠ}ˆ}Ø!Ð!Ý˜"�fÑ%Ô%ð Ø�tØ$‰KˆE�4Ø×/Ò/°Ñ3Ô3ð  ð  ‘��1Øð   ¥c¤i¢ Ø�E�EØð   !¥s¤x¢- -Ø�D�DØ�#œ(’]�] a­3¬8¢m mØ˜4˜4ð '4à×Ò˜eÑ$Ô$Ð$ØˆBØ�Uˆ{ˆ{Ø�tØ�IŠI�b‰MŒMˆMð# ð 	ð 	ð 	ð 	ð 	r"   N)r>   r?   r@   r   rO   rb   rr   ry   r‚   r„   rŽ   r�   r"   r!   rN   rN   �   s’   € € € € € ð)ð )ð )ð
/ð /ð /ðb
&ð 
&ð 
&ðð ð ð*Ið Ið IðVð ð ð-ð -ð -ð^ð ð ð ð r"   rN   )NNFFFNF)'Ú__doc__r2   Úrdflib.serializerr   Úrdflib.graphr   Úrdflib.termr   r   r   Úrdflib.namespacer   r	   Útypingr
   r   Úshared.jsonld.contextr   r   Úshared.jsonld.utilr   Úshared.jsonld.keysr   r   r   r   r   r   r   Ú__all__ÚbooleanÚintegerÚdoubleÚstringr¡   r   r   ÚobjectrN   r�   r"   r!   ú<module>rÀ      s¥  ððð ðH €€€à (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ð Ð à 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø %Ð %Ð %Ð %Ð %Ð %Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ Kà˜zÐ
*€ð ”{ C¤K°´¸S¼ZÐHÐ ð-7ð -7ð -7ð -7ð -7�zñ -7ô -7ð -7ðd Ø	ØØØØØ
ð"ð "ð "ð "ðJwð wð wð wð w�ñ wô wð wð wð wr"   