
    01iY_                       S r SSKJr  SSKrSSKrSSKJrJrJrJ	r	J
r
JrJr  SSKrSSKJrJr  SSKJrJr  SSKJrJr  SSKJrJrJrJrJr  S	S
KJrJrJ r   S	SK!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0  S	SK1J2r2J3r3J4r4J5r5J6r6J7r7  SS/r8\ " \9" \Rt                  5      \.\05      r;Sr< " S S\Rz                  R|                  5      r?      S               SS jjr@ " S S5      r>g)aY  
This parser will interpret a JSON-LD document as an RDF Graph. See http://json-ld.org/

Example:
    ```python
    >>> from rdflib import Graph, URIRef, Literal
    >>> test_json = '''
    ... {
    ...     "@context": {
    ...         "dc": "http://purl.org/dc/terms/",
    ...         "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    ...         "rdfs": "http://www.w3.org/2000/01/rdf-schema#"
    ...     },
    ...     "@id": "http://example.org/about",
    ...     "dc:title": {
    ...         "@language": "en",
    ...         "@value": "Someone's Homepage"
    ...     }
    ... }
    ... '''
    >>> g = Graph().parse(data=test_json, format='json-ld')
    >>> list(g) == [(URIRef('http://example.org/about'),
    ...     URIRef('http://purl.org/dc/terms/title'),
    ...     Literal("Someone's Homepage", lang='en'))]
    True

    ```
    )annotationsN)TYPE_CHECKINGAnyDictIterableListOptionalUnion)ConjunctiveGraphGraph)RDFXSD)InputSourceURLInputSource)BNodeIdentifiedNodeLiteralNodeURIRef   )UNDEFContextTerm)CONTEXTGRAPHIDINCLUDEDINDEXJSONLANGLISTNESTNONEREVSETTYPEVALUEVOCAB)_HAS_ORJSONVOCAB_DELIMScontext_from_urlinputsourcejsonorjsonsource_to_jsonJsonLDParserto_rdfTc                  n   ^  \ rS rSrU 4S jr       S                     SS jjrSrU =r$ )r/   P   c                *   > [         [        U ]  5         g N)superr/   __init__)self	__class__s    W/home/james-whalen/.local/lib/python3.13/site-packages/rdflib/plugins/parsers/jsonld.pyr6   JsonLDParser.__init__Q   s    lD*,    c
           
        US;  a  [         R                  " SU-  5        U(       d?  UR                  UR                  5       =(       d    UR	                  5       =(       d    S5      nUnU(       dO  [        US5      (       a>  [        US5      (       a-  [        (       a  [        U[        5      (       d   e[        U5      n [        U5      n [        UR	                  5       5      R                  n[        XU	5      u  pUb	  [        XS9nUR                   (       d  [#        UR$                  UR&                  S	9nOUn[)        UUUUU[+        U5      US
9  g! [         a    Sn Nf = f! [         a    Sn Nf = f)aX  Parse JSON-LD from a source document.

The source document can be JSON or HTML with embedded JSON script
elements (type attribute = `application/ld+json`). To process as HTML
`source.content_type` must be set to "text/html" or
`application/xhtml+xml.

Args:
    source: InputSource with JSON-formatted data (JSON or HTML)
    sink: Graph to receive the parsed triples
    version: parse as JSON-LD version, defaults to 1.1
    skolemize: whether to skolemize blank nodes, defaults to False
    encoding: character encoding of the JSON (should be "utf-8"
    base: JSON-LD [Base IRI](https://www.w3.org/TR/json-ld/#base-iri), defaults to None
    context: JSON-LD [Context](https://www.w3.org/TR/json-ld/#the-context), defaults to None
    generalized_rdf: parse as [Generalized RDF](https://www.w3.org/TR/json-ld/#relationship-to-rdf), defaults to False
    extract_all_scripts: if source is an HTML document then extract
        script element). This is ignored if `source.system_id` contains
        a fragment identifier, in which case only the script element with
        matching id attribute is extracted.
)utf-8zutf-16z9JSON should be encoded as unicode. Given encoding was: %s urllinks皙?Nbase)store
identifier)	skolemize)warningswarn
absolutizegetPublicIdgetSystemIdhasattrr   
isinstancer   r+   float
ValueErrorr   fragment	Exceptionr.   context_awarer   rD   rE   r0   bool)r7   sourcesinkversionrF   encodingrC   contextgeneralized_rdfextract_all_scriptskwargscontext_datafragment_iddata	html_base	conj_sinks                   r9   parseJsonLDParser.parseT   sW   P ..MM)+34
 ??6#5#5#7#U6;M;M;O#USUVD 6 6767;S;S}!&.99996v>L	GnG
	 !3!3!56??K )>QR )/D !!(tzzdooVII!	
-  	G	  	K	s$   ?E #E% E"!E"%E43E4 )rA   Fr=   NNFF)rT   r   rU   r   rV   rN   rF   rS   rW   Optional[str]rC   rd   rX   LOptional[Union[List[Union[Dict[str, Any], str, None]], Dict[str, Any], str]]rY   Optional[bool]rZ   rf   r[   r   returnNone)__name__
__module____qualname____firstlineno__r6   ra   __static_attributes____classcell__)r8   s   @r9   r/   r/   P   s    - ")" */.3!W
W
 W
 	W

 W
  W
 W

W
 (W
  ,!W
" #W
$ 
%W
 W
r;   c                ~    [        X$S9nU(       a  UR                  U5        [        UUUS9n	U	R                  XU5      $ )N)rC   rV   )rY   allow_lists_of_listsrF   )r   loadParserra   )
r^   datasetrC   r\   rV   rY   rp   rF   rX   parsers
             r9   r0   r0      sC    " 41G\"'1F
 <<w//r;   c                  V   \ rS rSr   S     SS jjrSS jr S           SS jjrSS jr  S                 SS jjr        SS jr	\
SS	 j5       r S             SS
 jjrSS jrSS jr            SS jr\
SS j5       r\S S j5       rSrg)!rr      Nc                J    X0l         Xl        Ub  UO[        U l        0 U l        g r4   )rF   rY   ALLOW_LISTS_OF_LISTSrp   invalid_uri_to_bnode)r7   rY   rp   rF   s       r9   r6   Parser.__init__   s1     #. $/ !% 	!
 79!r;   c                   Sn[        U[        5      (       a  UnOh[        U[        5      (       aS  UR                  [        5      nU(       a  UR                  XbR                  5        SnUn[        U[        5      (       d  U/nUR                  (       a  UR                  S UR                  5        UR                  R                  5        HY  u  pxUR                  (       d  M  UR                  R                  [        5      (       d  M>  UR                  XxR                  5        M[     UR                  (       a  UR                  OUn	W H  n
U R!                  X9X*U5        M     U	$ )NFT)rM   listdictgetr   rq   rC   vocabbindtermsitemsidendswithr*   rR   default_context_add_to_graph)r7   r^   rX   rs   
topcontext	resourceslocal_contextnametermgraphnodes              r9   ra   Parser.parse   s    
dD!!Id## HHW-M]LL9!
Ii..&K	==LLw}}-!----/JDwww477++L99T77+ 0
 ,3+@+@''gDwwjI  r;   c                v   [        U[        5      (       a  UR                  U5      (       a  g [        U;   a<  U(       d5  U[           nU(       a  UR	                  U5      nO[        UR                  S9nUR                  U5      nUR                  U5      nUc%  U R                  X45      nUb  [        U5      S:  a  Un[        U[        5      (       a  U R                  X75      n	O+[        5       n	U R                  (       a  U	R                  5       n	U	c  g US L n
UR                  5        H  u  pU[        :X  d  XR!                  ["        5      ;   a  M)  U[$        :X  d  XR!                  [$        5      ;   a1  UR                  5        H  u  pU R'                  UUUU	UUSU
S9  M     M|  U R'                  XX9XU
S9  M     U	$ )NrB   r   T)reverseno_id)r   )rM   r}   	get_valuer   
subcontextr   doc_baseget_context_for_typeget_id_get_nested_idlenstr
_to_rdf_idr   rF   r   get_keysr   r$   _key_to_graph)r7   rs   r   rX   r   r   r   id_val	nested_idsubjr   keyobjrkeyrobjs                  r9   r   Parser._add_to_graph   s    $%%):):4)@)@d?: MM!,,];!w'7'78 ..t4%>++G:I$Y!);"fc""??73D7D~~~~'< $

HCg~(8(8(<!<czS$4$4S$99"%))+JD&& $# ' 	 #. ""77#RW"X# %& r;   c                D   UR                  5        GH  u  p4UR                  S:  d  M  X1R                  [        5      ;   d  M2  UR                  R                  U5      nU(       a  UR                  c  Mc  [        U[        5      (       a  UOU/nU H  n[        U[        5      (       d  M  UR                  U5      nU(       d;  UR                  UR                  R                  U5      5      nU R                  X5      n[        U[        5      (       d  M  Us  s  $    GM     g NrA   )r   rV   r   r"   r   r~   r   rM   r|   r}   r   get_context_for_termr   r   )	r7   rX   r   r   r   r   objsr   r   s	            r9   r   Parser._get_nested_id7  s    

HC#%#1A1A$1G*G}}((-DGGO(d33s#C%c400 $^^C0F!%,%A%A#MM--c2&
 "&!4!4Z!E!&#..%   %r;   c	           
     X  ^^ [        U[        5      (       a  Un	OU/n	TR                  R                  U5      n
U
(       a  U
R                  nU
R
                  [        :X  a  U R                  U5      /n	OQ[        U
R                  ;   a  U R                  U	5      /n	O*[        U[        5      (       a  U R                  TX5      n	OS n[        X[4;   a  [        n
[        X[4;   ak  UR                   (       a;  U(       d4  ["        (       a  [        U[$        5      (       d   eUR'                  U5      nOUnU	 H  nU R)                  XTU5        M     g [*        X[4;   a  U	 H  nU R)                  XTU5        M     g [,        X[4;   a  U	 H  nU R)                  XTU5        M     g TR.                  S:  a  UTR1                  [2        5      ;   a  TR                  R                  U5      n
U
(       a  U
R                  c  g [        U[        5      (       a  UOU/nU Ht  n[        U[        5      (       d  M  UR5                  5        HF  u  nnUTR1                  [6        5      ;   a  M!  TR9                  U5      nU R;                  XUXOU5        MH     Mv     g U
(       a  U
R                  OTR=                  U5      nTR?                  U
5      mSUU4S jjmT" U	5      n	U(       d  g U
(       a  U
R@                  (       a  U(       + nU RC                  U5      nU(       a?  U RD                  (       d  g [G        U5      nU RH                  (       a  URI                  5       nO[K        U5      nU	 HM  nU RM                  XTU
U5      nUc  M  U(       a  URO                  UUU45        M9  URO                  UUU45        MO     g )NrA   c                   > / nU  Ha  n[        U[        5      (       a  TR                  U5      nUb  Un[        U[        5      (       a  UT" U5      -  nMP  UR	                  U5        Mc     U$ r4   )rM   r}   get_setr|   append)n	flattenedr   r   rX   flattens       r9   r   %Parser._key_to_graph.<locals>.flatten  sl    Ic4(("??3/D'"c4((-I  %  r;   )r   zIterable[Any]rg   	List[Any])(rM   r|   r   r~   r   typer   _to_typed_json_valuer!   	container_expand_nested_listr}   _parse_containerr&   	TYPE_TERMr   rR   r   r   get_contextr   r%   r   rV   r   r"   r   r   r   r   expandr   r   _get_bnodeidrY   r   rF   r   
_to_objectadd)r7   rs   r   rX   r   r   r   r   r   	obj_nodesr   term_idsubgraphonoder   nkeynobjr   pred_uribidpredobj_noder   s      `                  @r9   r   Parser._key_to_graphJ  s    c4  II}}  %ggGyyD !66s;<	'!55i@A	C&& 11'4E	GC>!DSN"$$U =%g/?@@@@"..t4 """7guE #3. """77EB #~%"""77EB #??c!cW-=-=d-C&C==$$S)D$S$//3cUD!#t,,"%))+JD$w//33 !(!=!=c!BJ&&wz4tT #.  "477s(;..t4	 	 I&	DLL!kG )'':D~~~~'(#D!H//''4JC{		3d+,		4s+, "r;   c                `   [         UR                  ;   an  / nUR                  5        HV  u  pV[        U[        5      (       d  U/nXQR                  [        5      ;   a  XF-  nM;  U H  nUR                  Xu45        M     MX     U$ UR                  S:  nU(       a  [        UR                  ;   a  [        UR                  ;   az  UR                  5        V	V
s/ s H\  u  pXR                  [        5      ;   a  [        [        U
05      O-[        U
[        5      (       a  [        [        U	[        U
05      OU
PM^     sn
n	$ U(       a\  [        UR                  ;   aH  [        UR                  ;   a4  UR                  5        V	V
s/ s H  u  p[        [        U
05      PM     sn
n	$ U(       a&  [        UR                  ;   a  [        [        U05      /$ U(       ax  [        UR                  ;   ad  UR                  5        V	V
s/ s HF  u  p[        U
[        5      (       a*  XR                  [        5      ;  a  [        [        U	040 U
D6OU
PMH     sn
n	$ U(       a  [        UR                  ;   a  UR                  5        V	V
s/ s H  u  p[        U
[        [        45      (       am  XR                  [        5      ;  aU  U R                  U[        U
[        5      (       a-  [        UR                   ["        :X  a  UR%                  U
5      OU
0OU
U	5      OU
PM     sn
n	$ [        UR                  ;   a  / nUR                  5        H  u  p[        U[        5      (       d  U/nU H  nU(       a  UR&                  (       a  XR                  [        5      ;  ap  [        U[        5      (       d  [        U0nUR)                  UR&                  / 5      n[        U[        5      (       d  U/nUR                  U5        XmUR&                  '   UR                  U5        M     M     U$ U/$ s  sn
n	f s  sn
n	f s  sn
n	f s  sn
n	f r   )r    r   r   rM   r|   r   r#   r   rV   r   r   r}   r   r&   r   	_add_typer   r(   r   indexr~   )r7   rX   r   r   r   langvaluesvv11kor   nodesr   s                 r9   r   Parser._parse_container  so    4>>!I #		!&$//$XF++D11'I#!((!3 $ !, oo$5DNN*rT^^/C  IIK (DA ,,T22 %$4>q$4G4Gr1eQ/0QO (  Udnn,$..1H14=D%$==Udnn,%&''R4>>)  IIK (DA "!T**q8H8H8N/N "a&A& (  TT^^+  IIK (DA "!dC[11a?O?OPT?U6U NN  *!S11  dii56H!2aP!" 
 ( " dnn$I!iik
!%.."GE!Dtzzc9I9I$9O.O)$55$&:D!%$**b!9)&$77&,XFc*+1TZZ($$T* " * uy >s   A#P=P9AP$8BP*c                    U R                  U5      =(       d    / nU(       a  [        U[        5      (       d  U/nUR                  U5        X1[        '   U$ r4   )get_typerM   r|   r   r&   )rX   r   r   otypes       r9   r   Parser._add_type  sD      #)rE400GEQ$r;   c                   [        U[        5      (       a  Uu  pxUc  g U(       a  SU;   a  g [        XxS9$ [        U[        5      (       aK  UR	                  U5      n	U	b5  U(       a  U R
                  (       d  g U R                  XX4U	5      n
U
(       a  U
$ GOcU(       a  UR                  (       a  UR                  [        :X  a  U R                  U5      nGO$Uc  g UR                  [        :X  a-  [        U[        5      (       a  [        UR                  U5      0nOUR                  [        :X  aE  [        U[        5      (       a0  [        UR                  U5      =(       d    UR                  U5      0nO[         UR                  ["        U0nOmUc  g [        U[$        5      (       a  [        U[&        R(                  S9$ U(       a   UR*                  [,        La  UR*                  nOUR*                  n[        XXS9$ UR/                  U5      nU(       + =(       a    UR1                  U5      =(       d    S nUR3                  U5      nXR5                  [        5      ;   a3  U R                  U5      nUR1                  U5      nUR3                  U5      nU(       d#  UR7                  ["        5      U;   d
  ["        U;   aE  Uc  g U(       a  SU;   a  g [        XxS9$ U(       a  [        XsR                  U5      S9$ [        U5      $ U R9                  XX55      $ )N )r   )datatype)rM   tupler   r}   get_listrp   	_add_listr   r   r   r   r   resolver(   r   resolve_irir&   r'   rN   r   doublelanguager   get_languager   r   r   get_keyr   )r7   rs   r   rX   r   r   inlistvaluer   	node_listlistrefr   s               r9   r   Parser._to_object  sf    dE""KE}t5,,dD!!((.I$$";";..	R"N 		99$44T:D\YY"_D#)>)> 56DYY%'JtS,A,At 4 Q8K8KD8QRD $))UD9D<dE**"4#**==DMM6==D"++Dt//##D)86 0 0 6>$!!$'''--,,U3D''-H%%d+E7??5)T1Ud]}$;u00u~~h/GHHu~%%%ggDDr;   c                   U R                  U5      nU(       a.  [        U5      nU R                  (       a  UR                  5       $ U$ UR                  U5      nU R                  (       d  SU;  a  g [        U5      n[        U5      (       dJ  X R                  ;  a,  [        [        R                  " S5      5      U R                  U'   U R                  U   nU$ )N:   )
r   r   rF   r   rY   r   r   ry   secretstoken_urlsafe)r7   rX   r   r   burir   s          r9   r   Parser._to_rdf_idf  s    'c
A~~{{}$H//&)C''CsN#)#;Dt99!:!::8=g>S>STV>W8XD--f5008Kr;   c                p    UR                  S5      (       d  g UR                  SS5      S   nU=(       d    S $ )Nz_:   )
startswithsplit)r7   refr   s      r9   r   Parser._get_bnodeidx  s3    ~~d##iia ${dr;   c           
        [        U[        5      (       d  U/n[        5       nU R                  (       a%  [        U[        5      (       a  UR                  5       nUS pU H  n	U	c  M  U(       a$  UR	                  U[
        R                  U45        UnU R                  XX4U	SS9n
U
c  MJ  UR	                  U[
        R                  U
45        [        5       nU R                  (       d  M  [        U[        5      (       d  M  UR                  5       nM     U(       a2  UR	                  U[
        R                  [
        R                  45        U$ [
        R                  $ )NT)r   )
rM   r|   r   rF   r   r   restr   firstnil)r7   rs   r   rX   r   r   
first_subjr   r   r   r   s              r9   r   Parser._add_list  s    )T**"I+07
>>jU;;#--/J  dD|		4401//''d/SC{IItSYY,-7D~~~*T5"9"9~~'# & IItSXXsww/077Nr;   c                   [         (       aD  [        R                  " U [        R                  [        R                  -  S9R                  S5      nO[        R                  " U SSSS9n[        [        R                  [        U0$ )N)optionr=   ),r   TF)
separators	sort_keysensure_ascii)r)   r-   dumpsOPT_SORT_KEYSOPT_NON_STR_KEYSdecoder,   r&   r   r   r'   )r   
val_strings     r9   r   Parser._to_typed_json_value  sm    ;$ll++f.E.EE fWo 
 *5J #((:
 	
r;   c                    U Vs/ s H+  n[        U[        5      (       a  U R                  U5      OUPM-     nn[        U0$ s  snf r4   )rM   r|   r   r!   )clsr   r   results       r9   r   Parser._expand_nested_list  sO     OX
NW*Q*=*=C##A&1Di 	 
 f~
s   2A)rp   rY   ry   rF   )FNF)rY   rS   rp   rf   rF   rS   )r^   r   rX   r   rs   r   rg   r   )F)rs   r   r   r   rX   r   r   r   r   rS   rg   Optional[Node])rX   r   r   Dict[str, Any]rg   rd   )FF)rs   r   r   r   rX   r   r   r   r   r   r   r   r   rS   r   rS   rg   rh   )rX   r   r   r   r   r  rg   r   )rX   r   r   r  r   r   rg   r  )rs   r   r   r   rX   r   r   Optional[Term]r   r   r   rS   rg   r  )rX   r   r   r   rg   zOptional[IdentifiedNode])r   r   rg   rd   )rs   r   r   r   rX   r   r   r  r   r   rg   r   )r   r   rg   zDict[str, str])r   r   rg   zDict[str, List[Any]])ri   rj   rk   rl   r6   ra   r   r   r   r   staticmethodr   r   r   r   r   r   classmethodr   rm   rc   r;   r9   rr   rr      s    !&/3	99 -9 	9F !== = 	=
 = = 
=@&6 r-r- r- 	r-
 r- r- r- r- r- 
r-hNN&*N1?N	N`   MEME ME 	ME
 ME ME ME 
ME^$)) ) 	)
 ) ) 
)V 
 
  r;   rr   )NNNFNF)r^   r   rs   r   rC   rd   r\   re   rV   zOptional[float]rY   rS   rp   rf   rF   rS   )A__doc__
__future__r   r   rG   typingr   r   r   r   r   r	   r
   rdflib.parserrdflibrdflib.graphr   r   rdflib.namespacer   r   r   r   rdflib.termr   r   r   r   r   shared.jsonld.contextr   r   r   shared.jsonld.keysr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   shared.jsonld.utilr)   r*   r+   r,   r-   r.   __all__r   r   r   rx   rt   rr   r/   r0   rc   r;   r9   <module>r     s  B #   L L L  0 % 5 D D 8 8    "  8
$SXXe,	 [
6=='' [
B  	#!+/0
00 0	0 0 0 )0 08u ur;   