GET https://rct.dev.bbntimes.com/technology/give-your-data-a-bath-ingesting-sql-as-rdf

ArticleController :: show

Request

GET Parameters

None

POST Parameters

None

Uploaded Files

None

Request Attributes

Key Value
_controller
"App\Controller\ArticleController::show"
_firewall_context
"security.firewall.map.context.main"
_links
Symfony\Component\WebLink\GenericLinkProvider {#3628
  -links: [
    3749 => Symfony\Component\WebLink\Link {#3749
      -href: "/build/runtime.js"
      -rel: [
        "preload" => "preload"
      ]
      -attributes: [
        "as" => "script"
      ]
    }
    3747 => Symfony\Component\WebLink\Link {#3747
      -href: "/build/644.js"
      -rel: [
        "preload" => "preload"
      ]
      -attributes: [
        "as" => "script"
      ]
    }
    3746 => Symfony\Component\WebLink\Link {#3746
      -href: "/build/502.js"
      -rel: [
        "preload" => "preload"
      ]
      -attributes: [
        "as" => "script"
      ]
    }
    3745 => Symfony\Component\WebLink\Link {#3745
      -href: "/build/app.js"
      -rel: [
        "preload" => "preload"
      ]
      -attributes: [
        "as" => "script"
      ]
    }
    3744 => Symfony\Component\WebLink\Link {#3744
      -href: "/build/view-more.js"
      -rel: [
        "preload" => "preload"
      ]
      -attributes: [
        "as" => "script"
      ]
    }
    3743 => Symfony\Component\WebLink\Link {#3743
      -href: "/build/term-condition.js"
      -rel: [
        "preload" => "preload"
      ]
      -attributes: [
        "as" => "script"
      ]
    }
    3742 => Symfony\Component\WebLink\Link {#3742
      -href: "/build/contact.js"
      -rel: [
        "preload" => "preload"
      ]
      -attributes: [
        "as" => "script"
      ]
    }
    3741 => Symfony\Component\WebLink\Link {#3741
      -href: "/build/scroll-infinite-article.js"
      -rel: [
        "preload" => "preload"
      ]
      -attributes: [
        "as" => "script"
      ]
    }
    3740 => Symfony\Component\WebLink\Link {#3740
      -href: "/build/app.css"
      -rel: [
        "preload" => "preload"
      ]
      -attributes: [
        "as" => "style"
      ]
    }
    3739 => Symfony\Component\WebLink\Link {#3739
      -href: "/build/cookie-style.css"
      -rel: [
        "preload" => "preload"
      ]
      -attributes: [
        "as" => "style"
      ]
    }
    3738 => Symfony\Component\WebLink\Link {#3738
      -href: "/build/term-condition-css.css"
      -rel: [
        "preload" => "preload"
      ]
      -attributes: [
        "as" => "style"
      ]
    }
    3737 => Symfony\Component\WebLink\Link {#3737
      -href: "/build/contact-css.css"
      -rel: [
        "preload" => "preload"
      ]
      -attributes: [
        "as" => "style"
      ]
    }
    3736 => Symfony\Component\WebLink\Link {#3736
      -href: "/build/comment-css.css"
      -rel: [
        "preload" => "preload"
      ]
      -attributes: [
        "as" => "style"
      ]
    }
  ]
}
_route
"article_show"
_route_params
[
  "category" => "technology"
  "slug" => "give-your-data-a-bath-ingesting-sql-as-rdf"
]
_security_firewall_run
"_security_main"
_stopwatch_token
"103140"
category
"technology"
slug
"give-your-data-a-bath-ingesting-sql-as-rdf"

Request Headers

Header Value
accept
"*/*"
accept-encoding
"gzip, br, zstd, deflate"
connection
"close"
cookie
"PHPSESSID=bgpctru46m6joml2vorkkglut1; care_did=a522a61a-de01-4211-9445-f269281b8137; tudorwatch_lang=tr"
host
"rct.dev.bbntimes.com"
user-agent
"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
x-php-ob-level
"1"

Request Content

Request content not available (it was retrieved as a resource).

Response

Response Headers

Header Value
cache-control
"no-cache, private"
content-type
"text/html; charset=UTF-8"
date
"Sat, 22 Feb 2025 08:56:38 GMT"
link
"</build/runtime.js>; rel="preload"; as="script",</build/644.js>; rel="preload"; as="script",</build/502.js>; rel="preload"; as="script",</build/app.js>; rel="preload"; as="script",</build/view-more.js>; rel="preload"; as="script",</build/term-condition.js>; rel="preload"; as="script",</build/contact.js>; rel="preload"; as="script",</build/scroll-infinite-article.js>; rel="preload"; as="script",</build/app.css>; rel="preload"; as="style",</build/cookie-style.css>; rel="preload"; as="style",</build/term-condition-css.css>; rel="preload"; as="style",</build/contact-css.css>; rel="preload"; as="style",</build/comment-css.css>; rel="preload"; as="style""
x-debug-token
"b351be"

Cookies

Request Cookies

Key Value
PHPSESSID
"bgpctru46m6joml2vorkkglut1"
care_did
"a522a61a-de01-4211-9445-f269281b8137"
tudorwatch_lang
"tr"

Response Cookies

No response cookies

Session 6

Session Metadata

Key Value
Created
"Sat, 22 Feb 25 08:56:23 +0000"
Last used
"Sat, 22 Feb 25 08:56:37 +0000"
Lifetime
0

Session Attributes

Attribute Value
_csrf/https-comment
"MfHhcl4wb7hJ8ncKw_fRiYb3aFR5hxnLHZH86Q0aBDk"
_csrf/https-cookie_accept
"twXZd96PrugCVxuoH--zUUlcNpjypG9M3xDak41VCIU"

Session Usage

6 Usages
Stateless check enabled
Usage
Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage:76
[
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/security-csrf/TokenStorage/SessionTokenStorage.php"
    "line" => 76
    "function" => "start"
    "class" => "Symfony\Component\HttpFoundation\Session\Session"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/security-csrf/CsrfTokenManager.php"
    "line" => 69
    "function" => "hasToken"
    "class" => "Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/Extension/Csrf/Type/FormTypeCsrfExtension.php"
    "line" => 82
    "function" => "getToken"
    "class" => "Symfony\Component\Security\Csrf\CsrfTokenManager"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/ResolvedFormType.php"
    "line" => 134
    "function" => "finishView"
    "class" => "Symfony\Component\Form\Extension\Csrf\Type\FormTypeCsrfExtension"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/Extension/DataCollector/Proxy/ResolvedTypeDataCollectorProxy.php"
    "line" => 95
    "function" => "finishView"
    "class" => "Symfony\Component\Form\ResolvedFormType"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/ResolvedFormType.php"
    "line" => 128
    "function" => "finishView"
    "class" => "Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeDataCollectorProxy"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/Extension/DataCollector/Proxy/ResolvedTypeDataCollectorProxy.php"
    "line" => 95
    "function" => "finishView"
    "class" => "Symfony\Component\Form\ResolvedFormType"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/Form.php"
    "line" => 908
    "function" => "finishView"
    "class" => "Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeDataCollectorProxy"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/src/Controller/ArticleController.php"
    "line" => 220
    "function" => "createView"
    "class" => "Symfony\Component\Form\Form"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/HttpKernel.php"
    "line" => 181
    "function" => "show"
    "class" => "App\Controller\ArticleController"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/HttpKernel.php"
    "line" => 76
    "function" => "handleRaw"
    "class" => "Symfony\Component\HttpKernel\HttpKernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/Kernel.php"
    "line" => 197
    "function" => "handle"
    "class" => "Symfony\Component\HttpKernel\HttpKernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php"
    "line" => 35
    "function" => "handle"
    "class" => "Symfony\Component\HttpKernel\Kernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/autoload_runtime.php"
    "line" => 29
    "function" => "run"
    "class" => "Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/public/index.php"
    "line" => 5
    "args" => [
      "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/autoload_runtime.php"
    ]
    "function" => "require_once"
  ]
]
Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage:79
[
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/security-csrf/TokenStorage/SessionTokenStorage.php"
    "line" => 79
    "function" => "has"
    "class" => "Symfony\Component\HttpFoundation\Session\Session"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/security-csrf/CsrfTokenManager.php"
    "line" => 69
    "function" => "hasToken"
    "class" => "Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/Extension/Csrf/Type/FormTypeCsrfExtension.php"
    "line" => 82
    "function" => "getToken"
    "class" => "Symfony\Component\Security\Csrf\CsrfTokenManager"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/ResolvedFormType.php"
    "line" => 134
    "function" => "finishView"
    "class" => "Symfony\Component\Form\Extension\Csrf\Type\FormTypeCsrfExtension"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/Extension/DataCollector/Proxy/ResolvedTypeDataCollectorProxy.php"
    "line" => 95
    "function" => "finishView"
    "class" => "Symfony\Component\Form\ResolvedFormType"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/ResolvedFormType.php"
    "line" => 128
    "function" => "finishView"
    "class" => "Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeDataCollectorProxy"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/Extension/DataCollector/Proxy/ResolvedTypeDataCollectorProxy.php"
    "line" => 95
    "function" => "finishView"
    "class" => "Symfony\Component\Form\ResolvedFormType"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/Form.php"
    "line" => 908
    "function" => "finishView"
    "class" => "Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeDataCollectorProxy"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/src/Controller/ArticleController.php"
    "line" => 220
    "function" => "createView"
    "class" => "Symfony\Component\Form\Form"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/HttpKernel.php"
    "line" => 181
    "function" => "show"
    "class" => "App\Controller\ArticleController"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/HttpKernel.php"
    "line" => 76
    "function" => "handleRaw"
    "class" => "Symfony\Component\HttpKernel\HttpKernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/Kernel.php"
    "line" => 197
    "function" => "handle"
    "class" => "Symfony\Component\HttpKernel\HttpKernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php"
    "line" => 35
    "function" => "handle"
    "class" => "Symfony\Component\HttpKernel\Kernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/autoload_runtime.php"
    "line" => 29
    "function" => "run"
    "class" => "Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/public/index.php"
    "line" => 5
    "args" => [
      "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/autoload_runtime.php"
    ]
    "function" => "require_once"
  ]
]
Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage:52
[
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/security-csrf/TokenStorage/SessionTokenStorage.php"
    "line" => 52
    "function" => "has"
    "class" => "Symfony\Component\HttpFoundation\Session\Session"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/security-csrf/CsrfTokenManager.php"
    "line" => 70
    "function" => "getToken"
    "class" => "Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/Extension/Csrf/Type/FormTypeCsrfExtension.php"
    "line" => 82
    "function" => "getToken"
    "class" => "Symfony\Component\Security\Csrf\CsrfTokenManager"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/ResolvedFormType.php"
    "line" => 134
    "function" => "finishView"
    "class" => "Symfony\Component\Form\Extension\Csrf\Type\FormTypeCsrfExtension"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/Extension/DataCollector/Proxy/ResolvedTypeDataCollectorProxy.php"
    "line" => 95
    "function" => "finishView"
    "class" => "Symfony\Component\Form\ResolvedFormType"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/ResolvedFormType.php"
    "line" => 128
    "function" => "finishView"
    "class" => "Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeDataCollectorProxy"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/Extension/DataCollector/Proxy/ResolvedTypeDataCollectorProxy.php"
    "line" => 95
    "function" => "finishView"
    "class" => "Symfony\Component\Form\ResolvedFormType"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/Form.php"
    "line" => 908
    "function" => "finishView"
    "class" => "Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeDataCollectorProxy"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/src/Controller/ArticleController.php"
    "line" => 220
    "function" => "createView"
    "class" => "Symfony\Component\Form\Form"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/HttpKernel.php"
    "line" => 181
    "function" => "show"
    "class" => "App\Controller\ArticleController"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/HttpKernel.php"
    "line" => 76
    "function" => "handleRaw"
    "class" => "Symfony\Component\HttpKernel\HttpKernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/Kernel.php"
    "line" => 197
    "function" => "handle"
    "class" => "Symfony\Component\HttpKernel\HttpKernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php"
    "line" => 35
    "function" => "handle"
    "class" => "Symfony\Component\HttpKernel\Kernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/autoload_runtime.php"
    "line" => 29
    "function" => "run"
    "class" => "Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/public/index.php"
    "line" => 5
    "args" => [
      "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/autoload_runtime.php"
    ]
    "function" => "require_once"
  ]
]
Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage:56
[
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/security-csrf/TokenStorage/SessionTokenStorage.php"
    "line" => 56
    "function" => "get"
    "class" => "Symfony\Component\HttpFoundation\Session\Session"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/security-csrf/CsrfTokenManager.php"
    "line" => 70
    "function" => "getToken"
    "class" => "Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/Extension/Csrf/Type/FormTypeCsrfExtension.php"
    "line" => 82
    "function" => "getToken"
    "class" => "Symfony\Component\Security\Csrf\CsrfTokenManager"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/ResolvedFormType.php"
    "line" => 134
    "function" => "finishView"
    "class" => "Symfony\Component\Form\Extension\Csrf\Type\FormTypeCsrfExtension"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/Extension/DataCollector/Proxy/ResolvedTypeDataCollectorProxy.php"
    "line" => 95
    "function" => "finishView"
    "class" => "Symfony\Component\Form\ResolvedFormType"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/ResolvedFormType.php"
    "line" => 128
    "function" => "finishView"
    "class" => "Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeDataCollectorProxy"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/Extension/DataCollector/Proxy/ResolvedTypeDataCollectorProxy.php"
    "line" => 95
    "function" => "finishView"
    "class" => "Symfony\Component\Form\ResolvedFormType"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/form/Form.php"
    "line" => 908
    "function" => "finishView"
    "class" => "Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeDataCollectorProxy"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/src/Controller/ArticleController.php"
    "line" => 220
    "function" => "createView"
    "class" => "Symfony\Component\Form\Form"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/HttpKernel.php"
    "line" => 181
    "function" => "show"
    "class" => "App\Controller\ArticleController"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/HttpKernel.php"
    "line" => 76
    "function" => "handleRaw"
    "class" => "Symfony\Component\HttpKernel\HttpKernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/Kernel.php"
    "line" => 197
    "function" => "handle"
    "class" => "Symfony\Component\HttpKernel\HttpKernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php"
    "line" => 35
    "function" => "handle"
    "class" => "Symfony\Component\HttpKernel\Kernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/autoload_runtime.php"
    "line" => 29
    "function" => "run"
    "class" => "Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/public/index.php"
    "line" => 5
    "args" => [
      "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/autoload_runtime.php"
    ]
    "function" => "require_once"
  ]
]
Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage:41
[
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/security-core/Authentication/Token/Storage/UsageTrackingTokenStorage.php"
    "line" => 41
    "function" => "getMetadataBag"
    "class" => "Symfony\Component\HttpFoundation\Session\Session"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/twig-bridge/AppVariable.php"
    "line" => 103
    "function" => "getToken"
    "class" => "Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/twig/twig/src/Extension/CoreExtension.php"
    "line" => 1635
    "function" => "getUser"
    "class" => "Symfony\Bridge\Twig\AppVariable"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/var/cache/dev/twig/a4/a456f2f504a18cd81037fa69e543310c.php"
    "line" => 200
    "function" => "twig_get_attribute"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/twig/twig/src/Template.php"
    "line" => 394
    "function" => "doDisplay"
    "class" => "__TwigTemplate_824a013e4f3f4a68e03a2d244e765025"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/twig/twig/src/Template.php"
    "line" => 367
    "function" => "displayWithErrorHandling"
    "class" => "Twig\Template"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/twig/twig/src/Template.php"
    "line" => 379
    "function" => "display"
    "class" => "Twig\Template"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/twig/twig/src/TemplateWrapper.php"
    "line" => 38
    "function" => "render"
    "class" => "Twig\Template"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/twig/twig/src/Environment.php"
    "line" => 280
    "function" => "render"
    "class" => "Twig\TemplateWrapper"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/framework-bundle/Controller/AbstractController.php"
    "line" => 448
    "function" => "render"
    "class" => "Twig\Environment"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/framework-bundle/Controller/AbstractController.php"
    "line" => 453
    "function" => "doRenderView"
    "class" => "Symfony\Bundle\FrameworkBundle\Controller\AbstractController"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/framework-bundle/Controller/AbstractController.php"
    "line" => 253
    "function" => "doRender"
    "class" => "Symfony\Bundle\FrameworkBundle\Controller\AbstractController"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/src/Controller/AppController.php"
    "line" => 126
    "function" => "render"
    "class" => "Symfony\Bundle\FrameworkBundle\Controller\AbstractController"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/HttpKernel.php"
    "line" => 181
    "function" => "renderHeader"
    "class" => "App\Controller\AppController"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/HttpKernel.php"
    "line" => 76
    "function" => "handleRaw"
    "class" => "Symfony\Component\HttpKernel\HttpKernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php"
    "line" => 86
    "function" => "handle"
    "class" => "Symfony\Component\HttpKernel\HttpKernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/Fragment/InlineFragmentRenderer.php"
    "line" => 78
    "function" => "handle"
    "class" => "Symfony\Component\HttpKernel\HttpCache\SubRequestHandler"
    "type" => "::"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/Fragment/FragmentHandler.php"
    "line" => 83
    "function" => "render"
    "class" => "Symfony\Component\HttpKernel\Fragment\InlineFragmentRenderer"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/DependencyInjection/LazyLoadingFragmentHandler.php"
    "line" => 47
    "function" => "render"
    "class" => "Symfony\Component\HttpKernel\Fragment\FragmentHandler"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/twig-bridge/Extension/HttpKernelRuntime.php"
    "line" => 44
    "function" => "render"
    "class" => "Symfony\Component\HttpKernel\DependencyInjection\LazyLoadingFragmentHandler"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/var/cache/dev/twig/b9/b9cb140abab7ef4ef8cb398831c75ac0.php"
    "line" => 207
    "function" => "renderFragment"
    "class" => "Symfony\Bridge\Twig\Extension\HttpKernelRuntime"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/twig/twig/src/Template.php"
    "line" => 171
    "function" => "block_header"
    "class" => "__TwigTemplate_dc67cdc305f050f0a27ba7ef152f05af"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/var/cache/dev/twig/b9/b9cb140abab7ef4ef8cb398831c75ac0.php"
    "line" => 91
    "function" => "displayBlock"
    "class" => "Twig\Template"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/twig/twig/src/Template.php"
    "line" => 394
    "function" => "doDisplay"
    "class" => "__TwigTemplate_dc67cdc305f050f0a27ba7ef152f05af"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/twig/twig/src/Template.php"
    "line" => 367
    "function" => "displayWithErrorHandling"
    "class" => "Twig\Template"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/var/cache/dev/twig/c3/c336f4e76fc20e4db84e3be131276b68.php"
    "line" => 52
    "function" => "display"
    "class" => "Twig\Template"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/twig/twig/src/Template.php"
    "line" => 394
    "function" => "doDisplay"
    "class" => "__TwigTemplate_3ce0324a396de697d1fad9fabd68df72"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/twig/twig/src/Template.php"
    "line" => 367
    "function" => "displayWithErrorHandling"
    "class" => "Twig\Template"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/twig/twig/src/Template.php"
    "line" => 379
    "function" => "display"
    "class" => "Twig\Template"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/twig/twig/src/TemplateWrapper.php"
    "line" => 38
    "function" => "render"
    "class" => "Twig\Template"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/twig/twig/src/Environment.php"
    "line" => 280
    "function" => "render"
    "class" => "Twig\TemplateWrapper"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/framework-bundle/Controller/AbstractController.php"
    "line" => 448
    "function" => "render"
    "class" => "Twig\Environment"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/framework-bundle/Controller/AbstractController.php"
    "line" => 453
    "function" => "doRenderView"
    "class" => "Symfony\Bundle\FrameworkBundle\Controller\AbstractController"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/framework-bundle/Controller/AbstractController.php"
    "line" => 253
    "function" => "doRender"
    "class" => "Symfony\Bundle\FrameworkBundle\Controller\AbstractController"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/src/Controller/ArticleController.php"
    "line" => 277
    "function" => "render"
    "class" => "Symfony\Bundle\FrameworkBundle\Controller\AbstractController"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/HttpKernel.php"
    "line" => 181
    "function" => "show"
    "class" => "App\Controller\ArticleController"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/HttpKernel.php"
    "line" => 76
    "function" => "handleRaw"
    "class" => "Symfony\Component\HttpKernel\HttpKernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/Kernel.php"
    "line" => 197
    "function" => "handle"
    "class" => "Symfony\Component\HttpKernel\HttpKernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php"
    "line" => 35
    "function" => "handle"
    "class" => "Symfony\Component\HttpKernel\Kernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/autoload_runtime.php"
    "line" => 29
    "function" => "run"
    "class" => "Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/public/index.php"
    "line" => 5
    "args" => [
      "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/autoload_runtime.php"
    ]
    "function" => "require_once"
  ]
]
Symfony\Component\Security\Http\Firewall\ContextListener:171
[
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/security-http/Firewall/ContextListener.php"
    "line" => 171
    "function" => "remove"
    "class" => "Symfony\Component\HttpFoundation\Session\Session"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/event-dispatcher/Debug/WrappedListener.php"
    "line" => 116
    "function" => "onKernelResponse"
    "class" => "Symfony\Component\Security\Http\Firewall\ContextListener"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/event-dispatcher/EventDispatcher.php"
    "line" => 220
    "function" => "__invoke"
    "class" => "Symfony\Component\EventDispatcher\Debug\WrappedListener"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/event-dispatcher/EventDispatcher.php"
    "line" => 56
    "function" => "callListeners"
    "class" => "Symfony\Component\EventDispatcher\EventDispatcher"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php"
    "line" => 139
    "function" => "dispatch"
    "class" => "Symfony\Component\EventDispatcher\EventDispatcher"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/HttpKernel.php"
    "line" => 214
    "function" => "dispatch"
    "class" => "Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/HttpKernel.php"
    "line" => 202
    "function" => "filterResponse"
    "class" => "Symfony\Component\HttpKernel\HttpKernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/HttpKernel.php"
    "line" => 76
    "function" => "handleRaw"
    "class" => "Symfony\Component\HttpKernel\HttpKernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/http-kernel/Kernel.php"
    "line" => 197
    "function" => "handle"
    "class" => "Symfony\Component\HttpKernel\HttpKernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php"
    "line" => 35
    "function" => "handle"
    "class" => "Symfony\Component\HttpKernel\Kernel"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/autoload_runtime.php"
    "line" => 29
    "function" => "run"
    "class" => "Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner"
    "type" => "->"
  ]
  [
    "file" => "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/public/index.php"
    "line" => 5
    "args" => [
      "/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/vendor/autoload_runtime.php"
    ]
    "function" => "require_once"
  ]
]

Flashes

Flashes

No flash messages were created.

Server Parameters

Server Parameters

Defined in .env

Key Value
APP_ENV
"dev"
APP_SECRET
"0a988e63f011514eaabfc650b599af4d"
CORS_ALLOW_ORIGIN
"*"
DATABASE_URL
"mysql://bbndb_rctuser:33F5W25z40or0f7@localhost:3306/rct_bbntimes"
GOOGLE_RECAPTCHA_SECRET_KEY
"6LdV5fgpAAAAANxzTG8ZMfIjil1wu-1vrQvnUt-x"
GOOGLE_RECAPTCHA_SITE_KEY
"6LdV5fgpAAAAAENKcn73MJAhQrbtQeqgyC4wDLMP"
MAILER_DSN
"smtp://no-reply%40rct.dev.bbntimes.com:Bl6%26gLD48%26Of919@rct.dev.bbntimes.com:465"
MARIADB_PASSWORD
"i!87pK&!85ezc8"

Defined as regular env variables

Key Value
APP_DEBUG
"1"
BASE
"/public"
CONTEXT_DOCUMENT_ROOT
"/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com"
CONTEXT_PREFIX
""
DOCUMENT_ROOT
"/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com"
FCGI_ROLE
"RESPONDER"
GATEWAY_INTERFACE
"CGI/1.1"
HTTPS
"on"
HTTP_ACCEPT
"*/*"
HTTP_ACCEPT_ENCODING
"gzip, br, zstd, deflate"
HTTP_CONNECTION
"close"
HTTP_COOKIE
"PHPSESSID=bgpctru46m6joml2vorkkglut1; care_did=a522a61a-de01-4211-9445-f269281b8137; tudorwatch_lang=tr"
HTTP_HOST
"rct.dev.bbntimes.com"
HTTP_USER_AGENT
"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
PASSENGER_COMPILE_NATIVE_SUPPORT_BINARY
"0"
PASSENGER_DOWNLOAD_NATIVE_SUPPORT_BINARY
"0"
PATH
"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
PHP_SELF
"/public/index.php"
PP_CUSTOM_PHP_CGI_INDEX
"plesk-php81-fastcgi"
PP_CUSTOM_PHP_INI
"/var/www/vhosts/system/rct.dev.bbntimes.com/etc/php.ini"
QUERY_STRING
""
REDIRECT_BASE
"/public"
REDIRECT_HTTPS
"on"
REDIRECT_PASSENGER_COMPILE_NATIVE_SUPPORT_BINARY
"0"
REDIRECT_PASSENGER_DOWNLOAD_NATIVE_SUPPORT_BINARY
"0"
REDIRECT_REDIRECT_HTTPS
"on"
REDIRECT_REDIRECT_PASSENGER_COMPILE_NATIVE_SUPPORT_BINARY
"0"
REDIRECT_REDIRECT_PASSENGER_DOWNLOAD_NATIVE_SUPPORT_BINARY
"0"
REDIRECT_REDIRECT_SCRIPT_URI
"https://rct.dev.bbntimes.com/technology/give-your-data-a-bath-ingesting-sql-as-rdf"
REDIRECT_REDIRECT_SCRIPT_URL
"/technology/give-your-data-a-bath-ingesting-sql-as-rdf"
REDIRECT_REDIRECT_SSL_TLS_SNI
"rct.dev.bbntimes.com"
REDIRECT_REDIRECT_STATUS
"200"
REDIRECT_REDIRECT_UNIQUE_ID
"Z7mRRpDyWLT8YV1VjBpCOAAAAIo"
REDIRECT_SCRIPT_URI
"https://rct.dev.bbntimes.com/technology/give-your-data-a-bath-ingesting-sql-as-rdf"
REDIRECT_SCRIPT_URL
"/technology/give-your-data-a-bath-ingesting-sql-as-rdf"
REDIRECT_SSL_TLS_SNI
"rct.dev.bbntimes.com"
REDIRECT_STATUS
"200"
REDIRECT_UNIQUE_ID
"Z7mRRpDyWLT8YV1VjBpCOAAAAIo"
REDIRECT_URL
"/public/technology/give-your-data-a-bath-ingesting-sql-as-rdf"
REMOTE_ADDR
"3.135.187.121"
REMOTE_PORT
"62671"
REQUEST_METHOD
"GET"
REQUEST_SCHEME
"https"
REQUEST_TIME
1740214598
REQUEST_TIME_FLOAT
1740214598.1504
REQUEST_URI
"/technology/give-your-data-a-bath-ingesting-sql-as-rdf"
SCRIPT_FILENAME
"/var/www/vhosts/dev.bbntimes.com/rct.dev.bbntimes.com/public/index.php"
SCRIPT_NAME
"/public/index.php"
SCRIPT_URI
"https://rct.dev.bbntimes.com/technology/give-your-data-a-bath-ingesting-sql-as-rdf"
SCRIPT_URL
"/technology/give-your-data-a-bath-ingesting-sql-as-rdf"
SERVER_ADDR
"5.196.1.209"
SERVER_ADMIN
"[no address given]"
SERVER_NAME
"rct.dev.bbntimes.com"
SERVER_PORT
"443"
SERVER_PROTOCOL
"HTTP/1.1"
SERVER_SIGNATURE
"<address>Apache Server at rct.dev.bbntimes.com Port 443</address>\n"
SERVER_SOFTWARE
"Apache"
SSL_TLS_SNI
"rct.dev.bbntimes.com"
SYMFONY_DOTENV_VARS
"APP_ENV,APP_SECRET,DATABASE_URL,MARIADB_PASSWORD,CORS_ALLOW_ORIGIN,MAILER_DSN,GOOGLE_RECAPTCHA_SECRET_KEY,GOOGLE_RECAPTCHA_SITE_KEY"
UNIQUE_ID
"Z7mRRpDyWLT8YV1VjBpCOAAAAIo"

Sub Requests 6

CookieController :: renderAnalysis (token = 8e7fe0)

Key Value
_controller
"App\Controller\CookieController::renderAnalysis"
_format
"html"
_locale
"en"
_stopwatch_token
"fab5ad"

AppController :: renderHeader (token = 83be62)

Key Value
_controller
"App\Controller\AppController::renderHeader"
_format
"html"
_locale
"en"
_stopwatch_token
"bf1fc5"
slug
"home"

ArticleController :: trendingArticle (token = e4420f)

Key Value
_controller
"App\Controller\ArticleController::trendingArticle"
_format
"html"
_locale
"en"
_stopwatch_token
"908b06"
category
"Technology"

ArticleController :: relatedArticles (token = 4d7e25)

Key Value
_controller
"App\Controller\ArticleController::relatedArticles"
_format
"html"
_locale
"en"
_stopwatch_token
"430cd8"
current_article
App\Entity\Article {#1094
  -id: 1609
  -title: "Give Your Data a Bath: Ingesting SQL as RDF"
  -slug: "give-your-data-a-bath-ingesting-sql-as-rdf"
  -introtext: "<p>In the era of Big Data, data quality - or how clean the data is - inevitably floats to the surface. Data scientists typically refer to data as dirty when it has a number of basic flaws:</p>\r\n"
  -content: """
    \r\n
    <ul>\r\n
    <li>Incompleteness. Certain fields of information are set to null, either because the source never provided a default or because the data model tried to mix two fairly distinct properties together.</li>\r\n
    <li>Poorly Bounded. Programmers who set certain fields created arbitrary values, such as -1 for a non-negative integer, or 99999 as a proxy for unbounded, or a date of 2999-12-31 for some time in the far future.</li>\r\n
    <li>Inconsistent. The same data may be represented in two different data fields with different values.</li>\r\n
    <li>Ambiguously Defined. Columns don't identify the units that data fields are in.</li>\r\n
    <li>Poor provenance. Data exists without any reference as to when it was taken or where it came from.</li>\r\n
    <li>Poorly referenced. A foreign key reference is given, but no primary key for that data can be found. Often occurs when data is taken out of the context of a given database.</li>\r\n
    </ul>\r\n
    <p>Working with such dirty data can be exasperating with SQL data, as in many cases the only thing that can be done with a row of such data is to throw it out. However, one advantage of working with data as triples is that you focus on your data at the level of individual properties and cells, and as such can retrieve the useful data from a dataset without having to throw everything out.</p>\r\n
    <p>Before digging deeply into such techniques, however, consider the bigger question about where such data comes from. Most data cleanup that occurs takes place because the data collected was application data that was focused on one particular use case. Sometimes you have no choice but to throw the baby out with the bathwater. One of the biggest issues involved with data cleanup is in ensuring that you are not in fact adding biases with any cleanup that you perform, that the data that you are adding does not in fact change the significance of the data you are working with.</p>\r\n
    <h2><span style="color: #10228b;">Converting SQL to RDF</span></h2>\r\n
    <p>There are a growing number of converters to take SQL and convert it into RDF.&nbsp;<a href="http://d2rq.org/" target="_blank" rel="nofollow noopener">D2RQ</a>, an open source Apache project, is a good place to start, both because it is open source and because it makes use of a number of W3C conversion specifications such as those given for R2RML.</p>\r\n
    <p>D2RQ itself is a set of Java based command line routines written around the core Jena library, the same library that powers the Jena-Fuseki web server that often serves as people's first introduction to the world of RDF and SPARQL. The core D2RQ is a Turtle based mapping file that either can be built by hand or can be generated from the schema of a relational database, and can work with Oracle, mySQL, SQL Server, Postgres, and (with some work) any database that supports the jdbc protocols. As an example, creating a mapping for the "world" database from a local mySQL instance , creating an output mapping file (mapping.ttl) would look like the following:</p>\r\n
    <pre class="jm-code" spellcheck="false">&gt; &nbsp;./generate-mapping -u root -p Password1 \\r\n
          -o mapping.ttl jdbc:mysql:/<span style="color: #999999;">//world\r\n
    </span></pre>\r\n
    <p><br />The mapping file itself (mapping.ttl) creates associations either in an application specific mapping language in Turtle, or uses the R2RML mappings from the W3C specification:</p>\r\n
    <pre class="jm-code" spellcheck="false"><span style="color: #999999;"># mapping.ttl</span>\r\n
    @prefix map: &lt;<span style="color: #999999;">#&gt;</span> .\r\n
    @prefix db: &lt;&gt; .prefix vocab: &lt;vocab/&gt; .  .prefix vocab\r\n
    @prefix rdf: &lt;http://www.w3.org/<span style="color: #999999;">1999</span>/<span style="color: #999999;">02</span>/<span style="color: #999999;">22</span>-rdf-syntax-ns<span style="color: #999999;">#&gt; .</span>\r\n
    @prefix rdfs: &lt;http://www.w3.org/<span style="color: #999999;">2000</span>/<span style="color: #999999;">01</span>/rdf-schema<span style="color: #999999;">#&gt; .</span>\r\n
    @prefix xsd: &lt;http://www.w3.org/<span style="color: #999999;">2001</span>/XMLSchema<span style="color: #999999;">#&gt; .</span>\r\n
    @prefix d2rq: &lt;http://www.wiwiss.fu-berlin.de/suhl/bizer/D2RQ/<span style="color: #999999;">0.1#&gt; .</span>\r\n
    @prefix jdbc: &lt;http://d2rq.org/terms/jdbc/&gt; .\r\n
    \r\n
    \r\n
     \r\n
    map:database a d2rq:Database;\r\n
    \td2rq:jdbcDriver "com.mysql.jdbc.Driver";\r\n
    \td2rq:jdbcDSN "jdbc:mysql:///world";\r\n
    \td2rq:username "root";\r\n
    \td2rq:password "Password1";\r\n
    \tjdbc:autoReconnect "true";\r\n
    \tjdbc:zeroDateTimeBehavior "convertToNull";\r\n
    \t.\r\n
    \r\n
    <span style="color: #999999;"># Table city</span>\r\n
    map:city a d2rq:ClassMap;\r\n
    \td2rq:dataStorage map:database;\r\n
    \td2rq:uriPattern "city/@@city.ID@@";\r\n
    \td2rq:<span style="color: #999999;">class</span> vocab:city;\r\n
    \td2rq:classDefinitionLabel "city";\r\n
    \t.\r\n
    map:city__label a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:city;\r\n
    \td2rq:property rdfs:label;\r\n
    \td2rq:pattern "city #@@city.ID@@";\r\n
    \t.\r\n
    map:city_ID a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:city;\r\n
    \td2rq:property vocab:city_ID;\r\n
    \td2rq:propertyDefinitionLabel "city ID";\r\n
    \td2rq:column "city.ID";\r\n
    \td2rq:datatype xsd:integer;\r\n
    \t.\r\n
    map:city_Name a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:city;\r\n
    \td2rq:property vocab:city_Name;\r\n
    \td2rq:propertyDefinitionLabel "city Name";\r\n
    \td2rq:column "city.Name";\r\n
    \t.\r\n
    map:city_District a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:city;\r\n
    \td2rq:property vocab:city_District;\r\n
    \td2rq:propertyDefinitionLabel "city District";\r\n
    \td2rq:column "city.District";\r\n
    \t.\r\n
    map:city_Population a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:city;\r\n
    \td2rq:property vocab:city_Population;\r\n
    \td2rq:propertyDefinitionLabel "city Population";\r\n
    \td2rq:column "city.Population";\r\n
    \td2rq:datatype xsd:integer;\r\n
    \t.\r\n
    map:city_CountryCode__ref a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:city;\r\n
    \td2rq:property vocab:city_CountryCode;\r\n
    \td2rq:refersToClassMap map:country;\r\n
    \td2rq:join "city.CountryCode =&gt; country.Code";\r\n
    \t.\r\n
    \r\n
    <span style="color: #999999;"># Table country</span>\r\n
    map:country a d2rq:ClassMap;\r\n
    \td2rq:dataStorage map:database;\r\n
    \td2rq:uriPattern "country/@@country.Code|urlify@@";\r\n
    \td2rq:<span style="color: #999999;">class</span> vocab:country;\r\n
    \td2rq:classDefinitionLabel "country";\r\n
    \t.\r\n
    map:country__label a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:country;\r\n
    \td2rq:property rdfs:label;\r\n
    \td2rq:pattern "country #@@country.Code@@";\r\n
    \t.\r\n
    map:country_Code a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:country;\r\n
    \td2rq:property vocab:country_Code;\r\n
    \td2rq:propertyDefinitionLabel "country Code";\r\n
    \td2rq:column "country.Code";\r\n
    \t.\r\n
    map:country_Name a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:country;\r\n
    \td2rq:property vocab:country_Name;\r\n
    \td2rq:propertyDefinitionLabel "country Name";\r\n
    \td2rq:column "country.Name";\r\n
    \t.\r\n
    map:country_Continent a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:country;\r\n
    \td2rq:property vocab:country_Continent;\r\n
    \td2rq:propertyDefinitionLabel "country Continent";\r\n
    \td2rq:column "country.Continent";\r\n
    \t.\r\n
    map:country_Region a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:country;\r\n
    \td2rq:property vocab:country_Region;\r\n
    \td2rq:propertyDefinitionLabel "country Region";\r\n
    \td2rq:column "country.Region";\r\n
    \t.\r\n
    map:country_SurfaceArea a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:country;\r\n
    \td2rq:property vocab:country_SurfaceArea;\r\n
    \td2rq:propertyDefinitionLabel "country SurfaceArea";\r\n
    \td2rq:column "country.SurfaceArea";\r\n
    \td2rq:datatype xsd:double;\r\n
    \t.\r\n
    map:country_IndepYear a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:country;\r\n
    \td2rq:property vocab:country_IndepYear;\r\n
    \td2rq:propertyDefinitionLabel "country IndepYear";\r\n
    \td2rq:column "country.IndepYear";\r\n
    \td2rq:datatype xsd:integer;\r\n
    \t.\r\n
    map:country_Population a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:country;\r\n
    \td2rq:property vocab:country_Population;\r\n
    \td2rq:propertyDefinitionLabel "country Population";\r\n
    \td2rq:column "country.Population";\r\n
    \td2rq:datatype xsd:integer;\r\n
    \t.\r\n
    map:country_LifeExpectancy a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:country;\r\n
    \td2rq:property vocab:country_LifeExpectancy;\r\n
    \td2rq:propertyDefinitionLabel "country LifeExpectancy";\r\n
    \td2rq:column "country.LifeExpectancy";\r\n
    \td2rq:datatype xsd:double;\r\n
    \t.\r\n
    map:country_GNP a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:country;\r\n
    \td2rq:property vocab:country_GNP;\r\n
    \td2rq:propertyDefinitionLabel "country GNP";\r\n
    \td2rq:column "country.GNP";\r\n
    \td2rq:datatype xsd:double;\r\n
    \t.\r\n
    map:country_GNPOld a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:country;\r\n
    \td2rq:property vocab:country_GNPOld;\r\n
    \td2rq:propertyDefinitionLabel "country GNPOld";\r\n
    \td2rq:column "country.GNPOld";\r\n
    \td2rq:datatype xsd:double;\r\n
    \t.\r\n
    map:country_LocalName a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:country;\r\n
    \td2rq:property vocab:country_LocalName;\r\n
    \td2rq:propertyDefinitionLabel "country LocalName";\r\n
    \td2rq:column "country.LocalName";\r\n
    \t.\r\n
    map:country_GovernmentForm a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:country;\r\n
    \td2rq:property vocab:country_GovernmentForm;\r\n
    \td2rq:propertyDefinitionLabel "country GovernmentForm";\r\n
    \td2rq:column "country.GovernmentForm";\r\n
    \t.\r\n
    map:country_HeadOfState a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:country;\r\n
    \td2rq:property vocab:country_HeadOfState;\r\n
    \td2rq:propertyDefinitionLabel "country HeadOfState";\r\n
    \td2rq:column "country.HeadOfState";\r\n
    \t.\r\n
    map:country_Capital a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:country;\r\n
    \td2rq:property vocab:country_Capital;\r\n
    \td2rq:propertyDefinitionLabel "country Capital";\r\n
    \td2rq:column "country.Capital";\r\n
    \td2rq:datatype xsd:integer;\r\n
    \t.\r\n
    map:country_Code2 a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:country;\r\n
    \td2rq:property vocab:country_Code2;\r\n
    \td2rq:propertyDefinitionLabel "country Code2";\r\n
    \td2rq:column "country.Code2";\r\n
    \t.\r\n
    \r\n
    <span style="color: #999999;"># Table countrylanguage</span>\r\n
    map:countrylanguage a d2rq:ClassMap;\r\n
    \td2rq:dataStorage map:database;\r\n
    \td2rq:uriPattern "countrylanguage/@@countrylanguage.CountryCode|urlify@@/@@countrylanguage.Lan\r\n
    guage|urlify@@";\r\n
    \td2rq:<span style="color: #999999;">class</span> vocab:countrylanguage;\r\n
    \td2rq:classDefinitionLabel "countrylanguage";\r\n
    \t.\r\n
    map:countrylanguage__label a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:countrylanguage;\r\n
    \td2rq:property rdfs:label;\r\n
    \td2rq:pattern "countrylanguage #@@countrylanguage.CountryCode@@/@@countrylanguage.Language@@";\r\n
    \t.\r\n
    map:countrylanguage_Language a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:countrylanguage;\r\n
    \td2rq:property vocab:countrylanguage_Language;\r\n
    \td2rq:propertyDefinitionLabel "countrylanguage Language";\r\n
    \td2rq:column "countrylanguage.Language";\r\n
    \t.\r\n
    map:countrylanguage_IsOfficial a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:countrylanguage;\r\n
    \td2rq:property vocab:countrylanguage_IsOfficial;\r\n
    \td2rq:propertyDefinitionLabel "countrylanguage IsOfficial";\r\n
    \td2rq:column "countrylanguage.IsOfficial";\r\n
    \t.\r\n
    map:countrylanguage_Percentage a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:countrylanguage;\r\n
    \td2rq:property vocab:countrylanguage_Percentage;\r\n
    \td2rq:propertyDefinitionLabel "countrylanguage Percentage";\r\n
    \td2rq:column "countrylanguage.Percentage";\r\n
    \td2rq:datatype xsd:double;\r\n
    \t.\r\n
    map:countrylanguage_CountryCode__ref a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:countrylanguage;\r\n
    \td2rq:property vocab:countrylanguage_CountryCode;\r\n
    \td2rq:refersToClassMap map:country;\r\n
    \td2rq:join "countrylanguage.CountryCode =&gt; country.Code";\r\n
    \t.</pre>\r\n
    <p><br />The mapping creates the relevant connection variables to the database, then from there identifies the mappings that convert tables into classes and fields into properties based upon the schema. This file can also be modified to generate different URIs based upon specified rules, allowing for a basic level of conversion that may produce additional keys, computed fields and so forth.</p>\r\n
    <p>Once the mapping is generated, it can be used to create RDF dumps of the SQL databases (through the appropriately named dump-rdf API:</p>\r\n
    <pre class="jm-code" spellcheck="false">&gt; ./dump-rdf -u root -f turtle \\r\n
        -b http:<span style="color: #999999;">//example.com/ns/world/ -o world.ttl mapping.ttl</span>\r\n
    \r\n
    ==&gt;\r\n
    \r\n
    # world.ttl\r\n
    \r\n
    <span style="color: #cc99ff;">@prefix</span> rdf: &nbsp; &nbsp; &lt;<span style="color: #999999;">http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt; .</span>\r\n
    <span style="color: #cc99ff;">@prefix</span> owl: &nbsp; &nbsp; &lt;<span style="color: #999999;">http://www.w3.org/2002/07/owl#&gt; .</span>\r\n
    <span style="color: #cc99ff;">@prefix</span> xsd: &nbsp; &nbsp; &lt;<span style="color: #999999;">http://www.w3.org/2001/XMLSchema#&gt; .</span>\r\n
    <span style="color: #cc99ff;">@prefix</span> vocab: &nbsp; &lt;<span style="color: #999999;">http://example.com/ns/world/vocab/&gt; .</span>\r\n
    <span style="color: #cc99ff;">@prefix</span> rdfs: &nbsp; &nbsp;&lt;<span style="color: #999999;">http://www.w3.org/2000/01/rdf-schema#&gt; .</span>\r\n
    <span style="color: #cc99ff;">@prefix</span> map: &nbsp; &nbsp; &lt;<span style="color: #999999;">http://example.com/ns/world/#&gt; .</span>\r\n
    <span style="color: #cc99ff;">@prefix</span> db: &nbsp; &nbsp; &nbsp;&lt;<span style="color: #999999;">http://example.com/ns/world/&gt; .</span>\r\n
    \r\n
    &lt;http:<span style="color: #999999;">//example.com/ns/world/city/3782&gt;</span>\r\n
    &nbsp; &nbsp; &nbsp; a &nbsp; &nbsp; &nbsp; vocab:city ;\r\n
    &nbsp; &nbsp; &nbsp; rdfs:label <span style="color: #cc99ff;">"city #3782"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_CountryCode\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;http:<span style="color: #999999;">//example.com/ns/world/country/VNM&gt; ;</span>\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_District <span style="color: #cc99ff;">"An Giang"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_ID <span style="color: #999999;">3782</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_Name <span style="color: #cc99ff;">"Long Xuyen"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_Population\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #999999;">132681</span> .\r\n
    \r\n
    &lt;http:<span style="color: #999999;">//example.com/ns/world/city/1252&gt;</span>\r\n
    &nbsp; &nbsp; &nbsp; a &nbsp; &nbsp; &nbsp; vocab:city ;\r\n
    &nbsp; &nbsp; &nbsp; rdfs:label <span style="color: #cc99ff;">"city #1252"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_CountryCode\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;http:<span style="color: #999999;">//example.com/ns/world/country/IND&gt;</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_District <span style="color: #cc99ff;">"Andhra Pradesh"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_ID <span style="color: #999999;">1252</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_Name <span style="color: #cc99ff;">"Malkajgiri"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_Population\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #999999;">126066</span> .\r\n
    \r\n
    &lt;http:<span style="color: #999999;">//example.com/ns/world/country/MAC&gt;</span>\r\n
    &nbsp; &nbsp; &nbsp; a &nbsp; &nbsp; &nbsp; vocab:country ;\r\n
    &nbsp; &nbsp; &nbsp; rdfs:label <span style="color: #cc99ff;">"country #MAC"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:country_Capital\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #999999;">2454</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:country_Code <span style="color: #cc99ff;">"MAC"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:country_Code2 <span style="color: #cc99ff;">"MO"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:country_Continent\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cc99ff;">"Asia"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:country_GNP <span style="color: #999999;">5749.0E0</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:country_GNPOld\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #999999;">5940.0E0</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:country_GovernmentForm\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cc99ff;">"Special Administrative Region of China"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:country_HeadOfState\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cc99ff;">"Jiang Zemin"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:country_LifeExpectancy\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #999999;">81.6E0</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:country_LocalName\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #cc99ff;"> "Macau/Aomen"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:country_Name <span style="color: #cc99ff;">"Macao"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:country_Population\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #999999;"> 473000</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:country_Region\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cc99ff;">"Eastern Asia"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:country_SurfaceArea\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #999999;">18.0E0</span> .\r\n
    \r\n
    &lt;http:<span style="color: #999999;">//example.com/ns/world/city/1385&gt;</span>\r\n
    &nbsp; &nbsp; &nbsp; a &nbsp; &nbsp; &nbsp; vocab:city ;\r\n
    &nbsp; &nbsp; &nbsp; rdfs:label <span style="color: #cc99ff;">"city #1385"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_CountryCode\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;http:<span style="color: #999999;">//example.com/ns/world/country/IRN&gt;</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_District <span style="color: #cc99ff;">"Teheran"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_ID <span style="color: #999999;">1385</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_Name <span style="color: #cc99ff;">"Karaj"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_Population\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #999999;">940968</span> .\r\n
    \r\n
    &lt;http:<span style="color: #999999;">//example.com/ns/world/city/589&gt;\r\n
    </span>&nbsp; &nbsp; &nbsp; a &nbsp; &nbsp; &nbsp; vocab:city ;\r\n
    &nbsp; &nbsp; &nbsp; rdfs:label <span style="color: #cc99ff;">"city #589"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_CountryCode\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;http:<span style="color: #999999;">//example.com/ns/world/country/DOM&gt; ;</span>\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_District <span style="color: #cc99ff;">"La Romana"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_ID <span style="color: #999999;">589</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_Name <span style="color: #cc99ff;">"La Romana"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_Population\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #999999;">140204</span> .\r\n
    ...\r\n
    \r\n
    </pre>\r\n
    <h2><span style="color: #10228b;"><br />Customizing the Maps</span></h2>\r\n
    <p>This mapping process can do a lot of your data cleansing. Fields that are set to NULL, for example, simply don't generate a corresponding triple for that row and column. Fields that are set to blank strings do, but you can modify an entry using a dt:condition property. For instance, to ensure that city names with blank values ("") don't generate triples, you would change the map:city entry from:</p>\r\n
    <pre class="jm-code" spellcheck="false">map:city_Name a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:city;\r\n
    \td2rq:property vocab:city_Name;\r\n
    \td2rq:propertyDefinitionLabel "city Name";\r\n
    \td2rq:column "city.Name";\r\n
    \t.\r\n
    </pre>\r\n
    <p><br />to</p>\r\n
    <pre class="jm-code" spellcheck="false">map:city_Name a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:city;\r\n
    \td2rq:property vocab:city_Name;\r\n
    \td2rq:propertyDefinitionLabel <span style="color: #cc99ff;">"city Name"</span>;\r\n
    \td2rq:column <span style="color: #cc99ff;">"city.Name"</span>;\r\n
        d2rq:condition city.Name &lt;&gt; ''; <span style="color: #999999;"># check to make sure the database doesn't</span>\r\n
                                        <span style="color: #999999;"># use a blanks string.</span>\r\n
    \t.\r\n
    </pre>\r\n
    <p><br />Similarly, the rdfs:label property currently defaults to "city #@@city.ID@@", where the expression within the ampersand corresponds to the ID of the specific city record. This can be changed so that it is the same as the city name followed by the country name by altering the property associated with rdfs:label for city:</p>\r\n
    <pre class="jm-code" spellcheck="false">map:city__label a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:city;\r\n
    \td2rq:property rdfs:label;\r\n
    \td2rq:pattern "@@<span style="color: #99ccff;">city</span>.<span style="color: #99ccff;">Name</span>@@";\r\n
    \t.\r\n
    </pre>\r\n
    <p><br />These and similar mapping transformations are covered in greater detail at <a href="http://d2rq.org/d2rq-language.">http://d2rq.org/d2rq-language.</a> The transformations in this case are the SQL transformations, so if you wanted the rdfs:label to be in upper case, you'd use the triples:</p>\r\n
    <pre class="jm-code" spellcheck="false">map:city__label a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:city;\r\n
    \td2rq:property rdfs:label;\r\n
    \td2rq:sqlExpression "ucase(city.Name)";\r\n
    .\r\n
    </pre>\r\n
    <h2><span style="color: #10228b;">Adding Metadata</span></h2>\r\n
    <p>You can also add new properties into the base set. For example, one very useful technique when working with updating content is to create a concatenated value from one or more changeable items in the table, then applying a hash function such as SHA1 to this concatenated value. If any of those fields change, the old computed hash will be different from the new hash. This way, the only time you would need to update a record would be when the old and new hashes diverge.</p>\r\n
    <pre class="jm-code" spellcheck="false">map:city__hash a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:city;\r\n
    \td2rq:property vocab:city_Hash;\r\n
    &nbsp; &nbsp; d2rq:sqlExpression "sha1(concat(city.Name,city.District,\r\n
             city.CountryCode,city.ID))";\r\n
    \t.\r\n
    </pre>\r\n
    <p><br />With these changes, a new entry now might look like the following:</p>\r\n
    <pre class="jm-code" spellcheck="false">http://example.com/ns/world/city/<span style="color: #999999;">3122</span>&gt;\r\n
    &nbsp; &nbsp; &nbsp; a &nbsp; &nbsp; &nbsp; vocab:city ;\r\n
    &nbsp; &nbsp; &nbsp; rdfs:label <span style="color: #cc99ff;">"POTSDAM"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_CountryCode vocab:country_DEU ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_District <span style="color: #cc99ff;">"Brandenburg"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_Hash <span style="color: #cc99ff;">"4958dc8728f5e4b4e0da9f8496a5a5c5b664d133"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_ID <span style="color: #999999;">3122</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_Name <span style="color: #cc99ff;">"Potsdam"</span> ;\r\n
    &nbsp; &nbsp; &nbsp; vocab:city_Population\r\n
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #999999;">128983</span> .\r\n
    </pre>\r\n
    <p><br />Even this comparatively simple process has done a lot to clean up the data. Null fields and empty string entries are eliminated. We have added the first critical pieces of metadata (type, labels and hash entries).</p>\r\n
    <p>The d2rq:sqlExpression property and d2rq:condition can also be used to do things like translate dates in the format MM/DD/YYYY into ISO YYYY-MM-DD formats, primarily by taking advantage of the SQL REGEX_REPLACE, REGEX_SUBSTR and SPLIT_PART functions. The conditional statement can then test whether the data in question is equal to or greater than a placeholder value (such as 9/9/9999 for a date, or -1 for a non-negative integer), and can eliminate that assertion prior to production of the RDF).</p>\r\n
    <p>This is also a good place to add other metadata,&nbsp;especially if you plan on importing the mapping RDF into a separate graph in the triples database.&nbsp;This could include information such as range and domain information, SHACL validation code, or units information. For instance, the new hash property that was introduced might include the following entry:</p>\r\n
    <pre class="jm-code" spellcheck="false">map:city__hash a d2rq:PropertyBridge;\r\n
    \td2rq:belongsToClassMap map:city;\r\n
    \td2rq:property vocab:city_Hash;\r\n
    &nbsp; &nbsp; d2rq:sqlExpression <span style="color: #cc99ff;">"sha1(concat(city.Name,city.District,\r\n
             city.CountryCode,city.ID))"</span>;\r\n
    \t.\r\n
    ex:HashPropertyShape\r\n
    \ta sh:PropertyShape ;\r\n
    \tsh:path vocab:city_Hash,vocab:country_Hash ;\r\n
        sh:name <span style="color: #cc99ff;">"Hash"</span>;\r\n
    \tsh:description <span style="color: #cc99ff;">"An SHA1 encoding of several properties to determine\r\n
             when relevent information in the resource has changed."</span> ;\r\n
    \tsh:pattern <span style="color: #cc99ff;">"[A-Fa-f0-9]{40}"</span>;\r\n
        sh:minCount 0;\r\n
        sh:maxCount 1\r\n
        .\r\n
    </pre>\r\n
    <p><br />This provides a label and description for the property, a regex pattern (here a forty character hexadecimal encoding), and an indication that the property may be optional (if no hash is provided, then the resource may be replaced automatically, or something similar).</p>\r\n
    <p>Other assertions (such as those for population or area related data) might be provided for unit analysis:</p>\r\n
    <pre class="jm-code" spellcheck="false">ex:PopulationPropertyShape\r\n
    \ta sh:PropertyShape ;\r\n
    \tsh:path vocab:city_Population,vocab:country_Population;\r\n
        sh:minValueInclusive 0;\r\n
        sh:datatype xsd:long;\r\n
        sh:minCount 0;\r\n
        sh:maxCount 1;\r\n
        ex:units units:People;\r\n
    .\r\n
    </pre>\r\n
    <p>This provides a way of indicating a common, consistent definition of units (number of people, or square kilometers), along with potential conversion factors between units of the same kind (area) but different types (square meters, square kilometers, square miles, acres, hectares, etc.). This unit analysis can go a long way towards ensuring consistency even when the base units are different.</p>\r\n
    <p>One other advantage that loading this mapping does is to provide provenance information, specifically what the source database for this information is. If you know a given class or property URI, you can automatically walk back from there to the database information (via the d2rq:belongsToClassMap and d2rq:dataStorage property).</p>\r\n
    <p>The d2rq.org package also includes both a web server that can be run either standalone or as as tomcat or jetty WAR package, and the d2r-query tool that allows you to query the original SQL database via SPARQL without the need to import the data into a separate triple-store. For instance, if you wanted to know the population of a given city or state in the US, this can be done as follows:</p>\r\n
    <pre class="jm-code" spellcheck="false"><span style="color: #000000;">&gt; cat query.sp\r\n
    \r\n
    @prefix <span style="color: #cc99ff;">vocab</span>: &lt;vocab/&gt; .\r\n
    \r\n
    var ?cityName ?countryName ?population where {\r\n
        ?city a <span style="color: #cc99ff;">vocab</span>:city;\r\n
        ?city <span style="color: #cc99ff;">vocab</span>:city_Name ?cityName.\r\n
        ?city <span style="color: #00ccff;">vocab</span>:city_Population ?population.\r\n
        ?city <span style="color: #00ccff;">vocab</span>:city_CountryCode ?countryCode.\r\n
        ?country <span style="color: #00ccff;">vocab</span>:country_Code ?countryCode.\r\n
        ?country <span style="color: #cc99ff;">vocab</span>:country_Name ?countryName.\r\n
        filter (?countryCode = '<span style="color: #99ccff;">USA</span>')\r\n
    }\r\n
    \r\n
    &gt; .d2r-query -f turtle mapping.ttl @query.sp\r\n
        cityName  |  ?countryName  |  ?population\r\n
    ------------------------------------------------\r\n
    Seattle       | United States  |   <span style="color: #999999;">1872201</span>\r\n
    Portland      | United States  |   <span style="color: #999999;">1256857\r\n
    </span>....    \r\n
    </span></pre>\r\n
    <p><br />Normally the query would be provided as a string after the mapping, but it can be passed as a file by using the @ symbol.</p>\r\n
    <h2><span style="color: #10228b;">Wrap Up</span></h2>\r\n
    <p>A final note - the above "cleaning" exercise was also a key part of the ingestion process of data into a larger scale data hub. The ability to generate mappings significantly reduces the overhead of building such maps, meaning that most of the work of finalizing such maps can then be done in a matter of days rather than potentially weeks or longer.</p>\r\n
    <p>As well - this process converts SQL data into RDF, but doesn't necessarily complete the round trip that many people would like to see with the ability to query such data using SQL (especially for analytics and visualization tools). While SPARQL is a powerful language (more powerful in many respects than SQL) it's not as widely deployed. Fortunately, many contemporary triple stores are now evolving ways of making specifically formatted RDF look like a relational database for query purposes. This will be discussed in more detail in a later post.</p>\r\n
    <div data-image-href="http://www.linkedin.com/search/results/content/?keywords=%23TheCagleReport"><a href="http://www.linkedin.com/search/results/content/?keywords=%23TheCagleReport" target="_blank" rel="noopener"><img src="https://media.licdn.com/dms/image/C4E12AQEetG_xn9Paiw/article-inline_image-shrink_1500_2232/0?e=2123769600&amp;v=beta&amp;t=TFHilBHu5Jv8jM74e4_Ob4A-F7-1lH5r9tr18hYUxh4" alt="" width="890" height="498" data-media-urn="urn:li:digitalmediaAsset:C4E12AQEetG_xn9Paiw" data-li-src="https://media.licdn.com/dms/image/C4E12AQEetG_xn9Paiw/article-inline_image-shrink_1500_2232/0?e=2123769600&amp;v=beta&amp;t=TFHilBHu5Jv8jM74e4_Ob4A-F7-1lH5r9tr18hYUxh4" /></a></div>
    """
  -user: Proxies\__CG__\App\Entity\User {#1092 …}
  -createdAt: DateTime @1524580730 {#1145
    date: 2018-04-24 14:38:50.0 UTC (+00:00)
  }
  -updatedAt: DateTime @1524581551 {#1150
    date: 2018-04-24 14:52:31.0 UTC (+00:00)
  }
  -deletedAt: null
  -category: App\Entity\Category {#445 …}
  -status: "published"
  -imageCard: Proxies\__CG__\App\Entity\File {#1184 …}
  -ImageHeader: Proxies\__CG__\App\Entity\File {#1184 …}
  -featured: false
  -mainView: false
  -clicks: 3457
  -comments: Doctrine\ORM\PersistentCollection {#1125 …}
  -reviewed_at: DateTime @1524580732 {#1148
    date: 2018-04-24 14:38:52.0 UTC (+00:00)
  }
  -metakey: ""
  -metadesc: "In the era of Big Data, data quality - or how clean the data is - inevitably floats to the surface. Data scientists typically refer to data as dirty when it has a number of basic flaws:"
  -robots: null
  -publishedAt: DateTime @1524580732 {#1147
    date: 2018-04-24 14:38:52.0 UTC (+00:00)
  }
  -canonical: null
  -superTag: null
}

AppController :: renderFooter (token = 656861)

Key Value
_controller
"App\Controller\AppController::renderFooter"
_format
"html"
_locale
"en"
_stopwatch_token
"c96d55"

CookieController :: renderCookie (token = 03aba6)

Key Value
_controller
"App\Controller\CookieController::renderCookie"
_format
"html"
_locale
"en"
_stopwatch_token
"a9d146"