
    i;                    p   d Z ddlmZ ddlZddlmZmZmZmZm	Z	 ddl
mZ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 d	d
lmZm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&m'Z' ddgZ(ejR                  ejT                  ejV                  ejX                  hZ- G d de      Z.	 	 	 	 	 	 	 ddZ/ G d d      Z0y)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=2))
    [
      {
        "@id": "http://example.org/about",
        "http://purl.org/dc/terms/title": [
          {
            "@language": "en",
            "@value": "Someone's Homepage"
          }
        ]
      }
    ]

    )annotationsN)IOAnyDictListOptional)DATASET_DEFAULT_GRAPH_IDGraph_ObjectType)RDFXSD)
Serializer)BNodeIdentifiedNode
IdentifierLiteralURIRef   )UNDEFContext)CONTEXTGRAPHIDLANGLISTSETVOCAB)_HAS_ORJSONjsonorjsonJsonLDSerializerfrom_rdfc                  @     e Zd Zd fdZ	 	 d	 	 	 	 	 	 	 	 	 ddZ xZS )r!   c                ,    t         t        |   |       y N)superr!   __init__)selfstore	__class__s     PC:\Projects\mas-dev\.venv\Lib\site-packages\rdflib/plugins/serializers/jsonld.pyr'   zJsonLDSerializer.__init__;   s    .u5    c                   |xs d}|dvrt        j                  d|        |j                  d      }|j                  dd      f}|j                  dd      }|j                  dd      }|j                  d	d
      }	|j                  dd      }
|j                  dd      }|j                  dd      }t        | j                  |||||      }t
        rzt        j                  }|	|t        j                  z  }|r|t        j                  z  }|rt        j                  d       t        j                  ||      }|j                  |       y t        j                  ||	|
||      }|j                  |j                  |d             y )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)r2   z#Cannot use ensure_ascii with orjson)option)r3   r4   r6   r7   replace)warningswarngetr"   r)   r   r    OPT_NON_STR_KEYSOPT_INDENT_2OPT_SORT_KEYSdumpswriter   encode)r(   streambaseencodingkwargscontext_datar0   r1   r2   r3   r4   r6   r7   objr8   
data_bytesdatas                    r+   	serializezJsonLDSerializer.serialize>   sm    &w..MMLXJW zz),"JJ'95ACzz.%8zz.%8Ha(ZZk:
JJ{D1	zz.%8JJ%
  11F!&---&...CDc&9JLL$::%#)D LLXy9:r,   )r)   r
   NN)
rC   z	IO[bytes]rD   Optional[str]rE   rM   rF   r   returnNone)__name__
__module____qualname__r'   rK   __classcell__)r*   s   @r+   r!   r!   :   sE    6 #"&	2;2; 2;  	2;
 2; 
2;r,   c                v   |s"|r t        d | j                         D              }t        |t              r|}|j	                         }nt        ||      }t        |||      }	|	j                  |       }
|	j                  j                  r0t        |
t              r|j                  t              |
i}
||
t        <   |
S )Nc              3  \   K   | ]$  \  }}|rt        |      d k7  r|t        |      f & yw)z$http://www.w3.org/XML/1998/namespaceN)str).0pfxnss      r+   	<genexpr>zfrom_rdf.<locals>.<genexpr>   s3      
/	bs2w"HH #b'N/s   *,)rD   )dict
namespaces
isinstancer   to_dict	Converterconvertr/   activelistget_keyr   r   )graphrG   rD   r0   r1   r2   	startnodeindexr/   	converterresults              r+   r"   r"   s   s     L 
"--/
 
 ,((,T2'#3\BIu%Ffd#ooe,f5F&wMr,   c                  p    e Zd Zd
dZddZddZddZ	 	 	 	 	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 	 	 ddZ	ddZ
y	)r_   c                J    || _         |j                  xs || _        || _        y r%   )r/   ra   r0   r1   )r(   r/   r0   r1   s       r+   r'   zConverter.__init__   s#     ' B2B(r,   c                   |j                   rt        |j                               }t        d |D              }|r*|j                  j
                  t        k(  r|j                  }n
t               }|g}|j
                  }|D ]8  }||v rt        |j
                  t              r|j                  |       4||z  }: n|g}|j
                  }| j                  }g }	|D ]  }i }
d }t        |j
                  t              r9|j
                  |k7  r*|j                  |j
                        }||
|j                  <   | j                  |      }|s#t        |      dk(  r|
j!                  |d          n|s||
|j"                  <   |	r?|	d   j%                  |j'                  t(                    |k(  r|	d   j!                  |
       |	j                  |
        t        |      dk(  rXt        |	      dk(  rJ| j                  j*                  s4|	d   }|j%                  |j"                        }t        |      dk(  r|r|}	|	S t        |	      dk(  r| j                  j*                  r|	d   }	|	S )Nc              3  B   K   | ]  }|j                   t        k(    y wr%   )
identifierr	   )rW   cs     r+   rZ   z$Converter.convert.<locals>.<genexpr>   s      )BNQ 88,s      r   )context_awarerb   contextsanydefault_contextrm   r	   r
   r]   r   appendr/   
shrink_iriid_key
from_graphlenupdate	graph_keyr<   rc   r   ra   )r(   rd   all_contextshas_dataset_default_iddefault_graphgraphsdefault_graph_idgr/   objsrH   	graphnamenodesdefaultitemss                  r+   r`   zConverter.convert   s      01L%( )BN) &" '))448PP % 5 5 %#_F,77!;allF3MM!$!Q&M " WF$//,,ACI!,,/<<#33 ' 2 21<< @I*3C'OOA&EUq

58$).G%%&QGOOB$78IEQs#C + . v;!D	Qt||7J7J1gGKK 1 12E7|q U  Y!^ 3 37Dr,   c                   i }t        |j                               D ]R  }t        |t              s-t        |t              s$t        |j                  d |            r@| j                  |||       T t        |j                               S r%   )	setsubjectsr]   r   r   rr   process_subjectrb   values)r(   rd   nodemapss       r+   rw   zConverter.from_graph   si    "$U^^%&A!V$1e$Sa1H-I$$UAw7 ' GNN$%%r,   c           	     L   t        |t              r| j                  j                  |      }n#t        |t              r|j                         }nd }||v ry i }||| j                  j                  <   |||<   |j                  |      D ]  \  }}| j                  ||||||        |S r%   )	r]   r   r/   ru   r   n3rv   predicate_objectsadd_to_node)r(   rd   r   r   node_idnodepos           r+   r   zConverter.process_subject   s    a ll--a0G5!ddfG G g$+T\\  !++A.DAq UAq!T7; /
 r,   c           	        | j                   }t        |t              rM|j                  rt	        |j                        nd }|j
                  }	|j                  t	        |      ||	      }
nl|j                  |t        j                        rt        d gnd g}|D ]<  }t        t        t        fD ]"  }|j                  t	        |      ||      }
|
s" n 
s< n d }|j                   }
r|
j                  }|
j                   r| j#                  ||
j                         }n`|
j
                  r%|j
                  |
j
                  k(  rt	        |      }n/|j
                  r#|
j
                  |j
                  t	        |      }t        |
j$                  v rQ| j'                  ||      D cg c]4  }| j#                  ||
j                         xs | j)                  ||||      6 }}n1t*        |
j$                  v rt	rr|j-                  |i       }|j/                  |	      }t	        |      }|st0        |
j$                  v r*t        |t2              s|gx||	<   }|j5                  |       y |||	<   y t0        |
j$                  v rd}n|j7                  |      }|j8                  j/                  |      }|r|j                   s|j$                  r|}|
sL|t        j                   k(  r9| j:                  s-t        |t<              r|j7                  |      }|j>                  }|| j)                  ||||      }|j/                  |      }|r%t        |t2              s|g}|j5                  |       n|r|g}n|}|||<   y c c}w )N)languageT) r/   r]   r   datatyperV   r   	find_termvaluer   firstr   r   r   r   ra   nametypetype_coerce	containerto_collectionto_raw_valuer   
setdefaultr<   r   rb   rt   	to_symboltermsr1   r   type_key)r(   rd   r   r   r   s_noder   r/   r   r   term
containersr   coercionr   use_setp_keyvr   r   key_terms                        r+   r   zConverter.add_to_node  s
    ,,a!*+**s1::$HzzH$$SVX$ID).Q		)B$J'	!#UE 2H #,,SVXyID !3  ( nn$IIEyy''49951::#>1v!!t}}'<AS1vt~~% "//q9 : $$Q		2 ?((1g>?9  
 'H))%48,1vSDNN2%fd34:8;h&MM$'  '+E(O& %%a(E}}((/HX]]h.@.@AM$2C2Ca(",,Q/D((<$$UAq':D

5!eT*LLFEEuUs   #9M-c                l   |t         k(  rMt        |t              r| j                  j	                  |      S t        |t
              r|j                         S |S |t        k(  r+t        |t              r| j                  j                  |      S t        |t              rt        |j                        |k(  r|S y r%   )r   r]   r   r/   ru   r   r   r   r   r   rV   r   )r(   r   coerce_types      r+   r   zConverter.type_coerce\  s    "!V$||..q11Au%ttvE!jF&;<<))!,,7#AJJ;(FHr,   c           	     l   | j                   }| j                  ||      }|?| j                  ||      D cg c]  }| j                  |||       }}|j                  |iS t	        |t
              rmd}| j                  |||      }	|	r:|r&t        fd|j                  d |      D              s|	S |	||	|j                     <   |j                  |j                         iS t	        |t              r|j                  |j                  |      iS t	        |t              r| j                  xr |j                  t         v }
|
r|j#                         }nt%        |      }|j                  rM|
r| j                   j&                  r|S |j(                  |j+                  |j                        |j,                  |iS |j.                  r=|j.                  |j.                  k7  r$|j0                  |j.                  |j,                  |iS |j&                  r|j.                  r|j.                  s|j,                  |iS |S y c c}w )NFc              3  .   K   | ]  }|k7  s	|  y wr%    )rW   s2r   s     r+   rZ   z)Converter.to_raw_value.<locals>.<genexpr>|  s     $U2IBRSTWR2Is   
)r/   r   r   list_keyr]   r   r   rr   r   rv   r   r   ru   r   r0   r   PLAIN_LITERAL_TYPEStoPythonrV   ra   r   r   	value_keyr   lang_key)r(   rd   r   r   r   r/   collloembedonodenativer   s     `         r+   r   zConverter.to_raw_valuek  s    ,,!!%+ ,,UA66B !!%B86   $$d++5!  ((7;E$U%..q2I$U!U L5:GE'..12NNADDF++6"NNG$6$6q$9::7#**Pqzz=P/PFJJLFzzdll11H$$g&7&7

&C%%q  

g.>.> >((!**g6G6GKK^^w'7'7

))1--) $'s   H1c                   |t         j                  k7  r!|j                  |t         j                        sy g }t	        |g      }|r|t         j                  k(  r|S t        |t              ry d\  }}|j                  |      D ]]  \  }}|s|t         j                  k(  r|}|s|t         j                  k(  r|}6|t         j                  k7  s|t         j                  k7  s] y  |j                  |       |}||v ry |j                  |       |ry y )NrL   )r   nilr   r   r   r]   r   r   restr   r   rt   add)	r(   rd   l_
list_nodeschainr   r   r   r   s	            r+   r   zConverter.to_collection  s    =R!;24
RD	SWW}!!"f%$KE4//31ciiE!sxx-D#((]a388m 4 e$BU{IIbM% r,   N)r/   r   r0   boolr1   r   )rd   r
   )rd   r
   r   r   )
rd   r
   r   r   r   r   r   r   r   Dict[str, Any])r   r   r   rV   )rd   r
   r   r   r   r   r   r   )rd   r
   r   r   )rP   rQ   rR   r'   r`   rw   r   r   r   r   r   r   r,   r+   r_   r_      s    )
AF
&0UU U 	U
 U Un----2<-GU-^r,   r_   )NNFFFNF)1__doc__
__future__r   r:   typingr   r   r   r   r   rdflib.graphr	   r
   r   rdflib.namespacer   r   rdflib.serializerr   rdflib.termr   r   r   r   r   shared.jsonld.contextr   r   shared.jsonld.keysr   r   r   r   r   r   r   shared.jsonld.utilr   r   r    __all__booleanintegerdoublestringr   r!   r"   r_   r   r,   r+   <module>r      s   J #  0 0 E E % ( J J 2 K K K : :z
* {{CKKSZZH 6;z 6;v 	
"JY Yr,   