@prefix schema: <https://schema.org/> .
@prefix sc: <http://purl.org/science/owl/sciencecommons/> .
@prefix dct: <http://purl.org/dc/terms/> .
@prefix rr:    <http://www.w3.org/ns/r2rml#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix fn:   <http://www.w3.org/2005/xpath-functions/> .

@prefix dr:   <http://islab.ntua.gr/ns/d2rml#> .
@prefix drop:  <http://islab.ntua.gr/ns/d2rml-op#> .
@prefix dris:  <http://islab.ntua.gr/ns/d2rml-is#> .

@prefix sd-voc: <https://w3id.org/stirdata/vocabulary/> .

<#Order>
   a dr:D2RMLSpecification ;
   dr:logicalDatasets ( 
                        <#GLEIFPageMapping>  
                        <#GLEIFDataMapping>
                      ) ;
   dr:parameter [
      drop:name "ORGANIZATION_PREFIX" ;
   ] ;
   dr:parameter [
      drop:name "RAC_CODE" ;
   ] .					  

<#GLEIFPageSource>
   a dris:HTTPSource ;
   dris:uri "https://www.gleif.org/en/lei-data/gleif-concatenated-file/download-the-concatenated-file" .

<#GLEIFContainerSource>   
   a dris:HTTPSource .

<#GLEIFDataSource>
   a dris:FileSource ;
   dris:containerSource <#GLEIFContainerSource> ;
   dris:path "*" .

#<#GLEIFDataSource>
#    a dris:FileSource ;
#    dris:path "d:/data/stirdata/20220427-gleif-concatenated-file-lei2.xml" .
   
<#GLEIFPageMapping>  
   dr:logicalArray [ 
      a dr:RegExItemArray ;
      dr:source <#GLEIFPageSource> ;
      dr:iterator "(?s)(^.*$)" ;
   ] ;

   dr:definedColumn [
     dr:name "LINK" ;
     dr:function drop:extractMatch ; 
     dr:selector dr:firstElement ;
     dr:parameterBinding [ 
	    dr:parameter "input" ;
        rr:column "##1"  ;
     ] ;
     dr:parameterBinding [  
	    dr:parameter "regex" ;
		rr:constant "<a href=\"(https://leidata\\.gleif\\.org/api/v1/concatenated-files/lei2/get/[0-9]*/zip)\">"  ;
     ] ;    
   ] ;

   dr:triplesMap [
      dr:logicalOutput dris:CurrentD2RMLDocument ;
	  
	  rr:subject <#GLEIFContainerSource> ;
	  
	  rr:predicateObjectMap [
	     rr:predicate dris:uri ;
		 rr:objectMap [
		    rr:template "{LINK}" ;
			rr:termType rr:Literal ;
		 ] ;
	  ] ;
   ] .

<#GLEIFDataMapping>  
   dr:logicalSource [ 
      a dr:XMLItemArray ;
      dr:source <#GLEIFDataSource> ;
      dr:iterator "LEIRecord" ;
	  dr:iteratorFormulation dris:XMLElement ;
#	  dr:limit 1 ;
   ] ;
   
   dr:definedColumn [
     dr:name "CODE" ;
     dr:function fn:replace ; 
     dr:parameterBinding [ 
	    dr:parameter "input" ;
        rr:column "/LEIRecord/Entity/RegistrationAuthority/RegistrationAuthorityEntityID/text()"  ;
     ] ;
     dr:parameterBinding [  
	    dr:parameter "pattern" ;
		rr:constant " "  ;
     ] ;    
     dr:parameterBinding [  
	    dr:parameter "replacement" ;
		rr:constant ""  ;
     ] ;    
   ] ;
   
   rr:subjectMap [ 
      rr:template  "{@@NO_URL_ENCODE@@ORGANIZATION_PREFIX@@}{CODE}" ;
	  dr:condition [
	     rr:column "/LEIRecord/Entity/RegistrationAuthority/RegistrationAuthorityID/text()" ;
		 drop:eq "{@@RAC_CODE@@}" ;
	  ]
   ] ;
   rr:predicateObjectMap [ 
      rr:predicate  schema:leiCode ;
      rr:objectMap [
	     rr:column "/LEIRecord/LEI/text()" ;
		 rr:termType rr:Literal ;
	  ] 
   ] ;   
   
