o
    ¹iëO  ã                   @  sV  d Z ddlmZ ddlZddlmZmZmZmZm	Z	m
Z
 ddl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mZmZmZmZ d	d
lmZmZmZ d	dlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. d	dl/m0Z0m1Z1m2Z2m3Z3 ddgZ4ee5ej6ƒe,e.ƒZ7dZ8G dd„ dej9j:ƒZ;					d"d#dd„Z<G d d!„ d!ƒZ:dS )$aQ  
This parser will interpret a JSON-LD document as an RDF Graph. See:

    http://json-ld.org/

Example usage::

    >>> 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Ú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)ÚVOCAB_DELIMSÚcontext_from_urlinputsourceÚjsonÚsource_to_jsonÚJsonLDParserÚto_rdfTc                      s&   e Zd Z‡ fdd„Zddd„Z‡  ZS )r+   c                   s   t t| ƒ ¡  d S ©N)Úsuperr+   Ú__init__)Úself©Ú	__class__© úX/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/rdflib/plugins/parsers/jsonld.pyr/   O   s   zJsonLDParser.__init__Úsourcer   Úsinkr
   Úkwargsr   ÚreturnÚNonec                 K  sö   |  d¡pd}|dvrt d| ¡ |  d¡p#| | ¡ p"| ¡ p"d¡}|  d¡}|sBt|dƒrBt|d	ƒrBtr>t|t	ƒs>J ‚t
|ƒ}z
t|  d
d¡ƒ}W n tyW   d }Y nw |  dd¡}t|ƒ}	|jsnt|j|jd}
n|}
t|	|
||||ƒ d S )NÚencodingúutf-8)r;   zutf-16z9JSON should be encoded as unicode. Given encoding was: %sÚbaseÚ ÚcontextÚurlÚlinksÚversionz1.0Úgeneralized_rdfF)ÚstoreÚ
identifier)ÚgetÚwarningsÚwarnÚ
absolutizeÚgetPublicIdÚgetSystemIdÚhasattrr   Ú
isinstancer   r(   ÚfloatÚ
ValueErrorr*   Úcontext_awarer	   rC   rD   r,   )r0   r5   r6   r7   r:   r<   Úcontext_datarA   rB   ÚdataÚ	conj_sinkr3   r3   r4   ÚparseR   s4   ÿÿÿ
ÿzJsonLDParser.parse)r5   r   r6   r
   r7   r   r8   r9   )Ú__name__Ú
__module__Ú__qualname__r/   rS   Ú__classcell__r3   r3   r1   r4   r+   N   s    FrQ   r   Údatasetr
   r<   úOptional[str]rP   úOptional[bool]rA   úOptional[float]rB   ÚboolÚallow_lists_of_listsc           	      C  s4   t ||d}|r| |¡ t||d}| | ||¡S )N)r<   rA   )rB   r]   )r   ÚloadÚParserrS   )	rQ   rX   r<   rP   rA   rB   r]   r>   Úparserr3   r3   r4   r,   z   s   

ÿc                   @  sž   e Zd Z	dBdCdd„ZdDdd„Z	dEdFdd„ZdGdd„Z		dHdId$d%„ZdJd)d*„Ze	dKd-d.„ƒZ
	dEdLd1d2„ZdMd5d6„ZdNd8d9„ZdOd<d=„Ze	dPd@dA„ƒZdS )Qr_   FNrB   r\   r]   rZ   c                 C  s"   || _ |d ur|| _d S t| _d S r-   )rB   ÚALLOW_LISTS_OF_LISTSr]   )r0   rB   r]   r3   r3   r4   r/   Ž   s   ÿÿýzParser.__init__rQ   r   r>   r   rX   r
   r8   c                 C  sÊ   d}t |tƒr
|}nt |tƒr)| t¡}|r| ||j¡ d}|}t |tƒs)|g}|jr3| d |j¡ |j	 
¡ D ]\}}|jrL|j t¡rL| ||j¡ q8|jrS|jn|}	|D ]}
|  ||	||
|¡ qW|	S )NFT)rL   ÚlistÚdictrE   r   r^   r<   ÚvocabÚbindÚtermsÚitemsÚidÚendswithr'   rO   Údefault_contextÚ_add_to_graph)r0   rQ   r>   rX   Ú
topcontextÚ	resourcesÚlocal_contextÚnameÚtermÚgraphÚnoder3   r3   r4   rS   ˜   s*   



€zParser.parserq   rr   rl   úOptional[Node]c                 C  sD  t |tƒr
| |¡rd S t|v r$|s$|t }|r| |¡}nt|jd}| |¡}| |¡}|d u rD|  	||¡}|d urDt
|ƒdkrD|}t |tƒrP|  ||¡}	ntƒ }	|	d u rYd S |d u }
| ¡ D ]>\}}|tksp|| t¡v rqqa|tks||| t¡v r“| ¡ D ]\}}| j||||	||d|
d q€qa| j||||	|||
d qa|	S )N)r<   r   T)ÚreverseÚno_id)ru   )rL   rc   Ú	get_valuer   Ú
subcontextr   Údoc_baseÚget_context_for_typeÚget_idÚ_get_nested_idÚlenÚstrÚ
_to_rdf_idr   rg   Úget_keysr   r"   Ú_key_to_graph)r0   rX   rq   r>   rr   rl   rn   Úid_valÚ	nested_idÚsubjru   ÚkeyÚobjÚrkeyÚrobjr3   r3   r4   rk   µ   sJ   


øÿzParser._add_to_graphúDict[str, Any]rY   c           	      C  s¶   |  ¡ D ]T\}}|jdkrX|| t¡v rX|j |¡}|r"|jd u r"qt|tƒr)|n|g}|D ])}t|t	ƒs6q.| 
|¡}|sL| |j |¡¡}|  ||¡}t|tƒrW|    S q.qd S ©Nçš™™™™™ñ?)rg   rA   r   r    rf   rE   rh   rL   rb   rc   rz   Úget_context_for_termr{   r}   )	r0   r>   rr   r„   r…   rp   Úobjsr   rw   r3   r3   r4   r{   ó   s(   


ÿ
ÿ€ñzParser._get_nested_idrƒ   r   r„   r}   r…   rt   ru   r9   c	              
   C  sð  t |tƒr|}	n|g}	|j |¡}
|
r:|
j}|
jtkr"|  |¡g}	nt|
j	v r-t|	ig}	nt |t
ƒr9|  ||
|¡}	nd }t||fv rDt}
t||fv ro|jr^|s^trXt |tƒsXJ ‚| |¡}n|}|	D ]
}|  ||||¡ qbd S t||fv r„|	D ]
}|  ||||¡ qwd S t||fv r™|	D ]
}|  ||||¡ qŒd S |jdkrë|| t¡v rë|j |¡}
|
r´|
jd u r´d S t |tƒr»|n|g}|D ](}t |t
ƒsÈqÀ| ¡ D ]\}}|| t¡v rØqÌ| |¡}|  ||||||¡ qÌqÀd S |
rð|
jn| |¡}| |
¡}g }|	D ]$}t |t
ƒr| |¡}|d ur|}t |tƒr||7 }qþ|  |¡ qþ|}	|s*d S |
r4|
j!r4| }|  "|¡}|rG| j#sBd S t$|ƒ}nt%|ƒ}|	D ](}|  &||||
|¡}|d u r_qM|rl| '|||f¡ qM| '|||f¡ qMd S r‰   )(rL   rb   rf   rE   rh   Útyper   Ú_to_typed_json_valuer   Ú	containerrc   Ú_parse_containerr$   Ú	TYPE_TERMr   rO   r   r	   Úget_contextrk   r#   r   rA   r   r    rg   r   ry   r€   Úexpandr‹   Úget_setÚappendrt   Ú_get_bnodeidrB   r   r   Ú
_to_objectÚadd)r0   rX   rq   r>   rƒ   r„   r…   rt   ru   Ú	obj_nodesrp   Úterm_idÚsubgraphÚonoderŒ   ÚnkeyÚnobjrw   Úpred_uriÚ	flattenedÚbidÚpredÚobj_noder3   r3   r4   r€     sž   



€


ú





ùzParser._key_to_graphrp   r   ú	List[Any]c                   sØ  t ˆjv r2g }| ¡ D ]$\}}t|tƒs|g}|ˆ  t¡v r#||7 }q|D ]	}| ||f¡ q%q|S ˆ jdk}|rNt	ˆjv rNt
ˆjv rN‡ fdd„| ¡ D ƒS |rct	ˆjv rctˆjv rcdd„ | ¡ D ƒS |rqt	ˆjv rqtt	|iƒgS |rƒt
ˆjv rƒ‡ fdd„| ¡ D ƒS |r—tˆjv r—‡ ‡‡fdd„| ¡ D ƒS tˆjv rég }| ¡ D ]D\}	}
t|
tƒs®|
g}
|
D ]5}|ràˆjrà|	ˆ  t¡vràt|tƒsÇt
|i}| ˆjg ¡}t|tƒsÖ|g}| |	¡ ||ˆj< | |¡ q°q¢|S |gS )NrŠ   c                   sH   g | ] \}}|ˆ   t¡v rtt|iƒnt|tƒr tt|t|iƒn|‘qS r3   )r   r!   rc   r   rL   r   ©Ú.0ÚkÚo©r>   r3   r4   Ú
<listcomp>†  s    üÿÿûz+Parser._parse_container.<locals>.<listcomp>c                 S  s   g | ]
\}}t t|iƒ‘qS r3   )rc   r   r¥   r3   r3   r4   rª     s    c                   s@   g | ]\}}t |tƒr|ˆ  t¡vrtt|ifi |¤Žn|‘qS r3   )rL   rc   r   r!   r   r¥   r©   r3   r4   rª   –  s    þÿÿýc              	     sd   g | ].\}}t |ttfƒr.|ˆ  t¡vr.ˆ ˆ t |tƒr*tˆjtkr'ˆ  	|¡n|in||¡n|‘qS r3   )
rL   rc   r}   r   r!   Ú	_add_typer   r   r&   r“   r¥   ©r>   r0   rp   r3   r4   rª   ž  s    
þùùÿû÷)r   r   rg   rL   rb   r   r!   r•   rA   r   r   r   rc   r$   ÚindexrE   )r0   r>   rp   r…   r™   ÚlangÚvaluesÚvÚv11r„   Únodesrr   r3   r¬   r4   r   t  s\   


ÿ

ú	
ü
ö





÷
zParser._parse_containerr¨   r§   c                 C  s8   |   |¡pg }|rt|tƒs|g}| |¡ ||t< |S r-   )Úget_typerL   rb   r•   r$   )r>   r¨   r§   Úotyper3   r3   r4   r«   ¾  s   
zParser._add_typeúOptional[Term]Úinlistc                 C  s"  t |tƒr|\}}|d u rd S |rd|v rd S t||dS t |tƒr@| |¡}	|	d ur?|r2| js2d S |  |||||	¡}
|
r?|
S nm|r‡|jr‡|jtkrP|  	|¡}n]|d u rVd S |jt
krht |tƒrht
| |¡i}nE|jtkrt |tƒrt
| |¡p|| |¡i}n.t|jt|i}n&|d u rd S t |tƒr™t|tjdS |r¤|jtur¤|j}n|j}t||dS | |¡}| rº| |¡p»d }| |¡}|| t¡v r×|  	|¡}| |¡}| |¡}|så| t¡|v såt|v r	|d u rëd S |rùd|v ród S t||dS |rt|| |¡dS t|ƒS |  ||||¡S )Nú )r®   )Údatatype)rL   Útupler   rc   Úget_listr]   Ú	_add_listr   r   rŽ   r   r}   Úresolver&   r“   Úresolve_irir$   r%   rM   r   ÚdoubleÚlanguager   Úget_languager³   rv   r   Úget_keyrk   )r0   rX   rq   r>   rp   rr   r¶   Úvaluer®   Ú	node_listÚlistrefr¸   r3   r3   r4   r—   Ç  sh   
	


€







zParser._to_objectr   úOptional[IdentifiedNode]c                 C  s:   |   |¡}|rt|ƒS | |¡}| jsd|vrd S t|ƒS )Nú:)r–   r   r¼   rB   r   )r0   r>   r   r¡   Úurir3   r3   r4   r~     s   

zParser._to_rdf_idÚrefc                 C  s&   |  d¡sd S | dd¡d }|pd S )Nz_:é   éÿÿÿÿ)Ú
startswithÚsplit)r0   rÈ   r¡   r3   r3   r4   r–      s   
zParser._get_bnodeidrÃ   r   c              	   C  s¨   t |tƒs|g}tƒ }|d }}|D ]0}	|	d u rq|r&| |tj|f¡ |}| j|||||	dd}
|
d u r6q| |tj|
f¡ tƒ }q|rQ| |tjtjf¡ |S tjS )NT)r¶   )	rL   rb   r   r˜   r   Úrestr—   ÚfirstÚnil)r0   rX   rq   r>   rp   rÃ   Ú
first_subjrƒ   rÍ   rr   r…   r3   r3   r4   r»   '  s&   

zParser._add_listrÂ   úDict[str, str]c              	   C  s&   t tdttƒ ƒttj| ddddiS )Nz%sJSON)ú,rÆ   TF)Ú
separatorsÚ	sort_keysÚensure_ascii)r$   r   r}   r   r%   r)   Údumps)rÂ   r3   r3   r4   rŽ   L  s
   ÿþzParser._to_typed_json_value)FN)rB   r\   r]   rZ   )rQ   r   r>   r   rX   r
   r8   r
   )F)rX   r
   rq   r
   r>   r   rr   r   rl   r\   r8   rs   )r>   r   rr   rˆ   r8   rY   )FF)rX   r
   rq   r
   r>   r   rƒ   r   r„   r}   r…   r   rt   r\   ru   r\   r8   r9   )r>   r   rp   r   r…   rˆ   r8   r¤   )r>   r   r¨   rˆ   r§   r}   r8   rˆ   )rX   r
   rq   r
   r>   r   rp   rµ   rr   r   r¶   r\   r8   rs   )r>   r   r   r}   r8   rÅ   )rÈ   r}   r8   rY   )rX   r
   rq   r
   r>   r   rp   rµ   rÃ   r   r8   r   )rÂ   r   r8   rÑ   )rT   rU   rV   r/   rS   rk   r{   r€   r   Ústaticmethodr«   r—   r~   r–   r»   rŽ   r3   r3   r3   r4   r_      s(    ÿ

#ú
>÷
nJù
O


%r_   )NNNFN)rQ   r   rX   r
   r<   rY   rP   rZ   rA   r[   rB   r\   r]   rZ   )=Ú__doc__Ú
__future__r   rF   Útypingr   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*   Ú__all__r}   r   r‘   ra   r`   r_   r+   r,   r3   r3   r3   r4   Ú<module>   s.   ! D/ù