From c1d44c5477939e41c2a7beeb3db8dcfb3b6896cb Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Thu, 12 Mar 2026 14:51:51 -0700 Subject: [PATCH 01/13] feat: Simplifying JSONLD module scaffolding ( Fixes #15 ) --- .github/workflows/JSON-LD-Build.yml | 19 ++++------------ JSON-LD.ps.psm1 | 26 --------------------- JSON-LD.psm1 | 35 ++--------------------------- 3 files changed, 6 insertions(+), 74 deletions(-) delete mode 100644 JSON-LD.ps.psm1 diff --git a/.github/workflows/JSON-LD-Build.yml b/.github/workflows/JSON-LD-Build.yml index e9d134e..aa451c8 100644 --- a/.github/workflows/JSON-LD-Build.yml +++ b/.github/workflows/JSON-LD-Build.yml @@ -35,7 +35,7 @@ jobs: Install-Module -Name Pester -Repository PSGallery -Force -Scope CurrentUser -MaximumVersion $PesterMaxVersion -SkipPublisherCheck -AllowClobber Import-Module Pester -Force -PassThru -MaximumVersion $PesterMaxVersion} @Parameters - name: Check out repository - uses: actions/checkout@v4 + uses: actions/checkout@v2 - name: RunPester id: RunPester shell: pwsh @@ -92,6 +92,9 @@ jobs: $result = Invoke-Pester -PassThru -Verbose -OutputFile ".\$moduleName.TestResults.xml" -OutputFormat NUnitXml @codeCoverageParameters + "::set-output name=TotalCount::$($result.TotalCount)", + "::set-output name=PassedCount::$($result.PassedCount)", + "::set-output name=FailedCount::$($result.FailedCount)" | Out-Host if ($result.FailedCount -gt 0) { "::debug:: $($result.FailedCount) tests failed" foreach ($r in $result.TestResult) { @@ -491,20 +494,6 @@ jobs: steps: - name: Check out repository uses: actions/checkout@v2 - - name: GitLogger - uses: GitLogging/GitLoggerAction@main - id: GitLogger - - name: Use PSSVG Action - uses: StartAutomating/PSSVG@main - id: PSSVG - - name: Use PipeScript Action - uses: StartAutomating/PipeScript@main - id: PipeScript - name: UseEZOut uses: StartAutomating/EZOut@master - - name: UseHelpOut - uses: StartAutomating/HelpOut@master - - name: Use PSJekyll Action - uses: PowerShellWeb/PSJekyll@main - id: PSJekyll diff --git a/JSON-LD.ps.psm1 b/JSON-LD.ps.psm1 deleted file mode 100644 index 562e155..0000000 --- a/JSON-LD.ps.psm1 +++ /dev/null @@ -1,26 +0,0 @@ -$commandsPath = Join-Path $PSScriptRoot Commands -[include('*-*')]$commandsPath - -$myModule = $MyInvocation.MyCommand.ScriptBlock.Module -$ExecutionContext.SessionState.PSVariable.Set($myModule.Name, $myModule) -$myModule.pstypenames.insert(0, $myModule.Name) - -New-PSDrive -Name $MyModule.Name -PSProvider FileSystem -Scope Global -Root $PSScriptRoot -ErrorAction Ignore - -if ($home) { - $MyModuleProfileDirectory = Join-Path ([Environment]::GetFolderPath("LocalApplicationData")) $MyModule.Name - if (-not (Test-Path $MyModuleProfileDirectory)) { - $null = New-Item -ItemType Directory -Path $MyModuleProfileDirectory -Force - } - New-PSDrive -Name "My$($MyModule.Name)" -PSProvider FileSystem -Scope Global -Root $MyModuleProfileDirectory -ErrorAction Ignore -} - -# Set a script variable of this, set to the module -# (so all scripts in this scope default to the correct `$this`) -$script:this = $myModule - -#region Custom -#endregion Custom - -Export-ModuleMember -Alias * -Function * -Variable $myModule.Name - diff --git a/JSON-LD.psm1 b/JSON-LD.psm1 index 41a1efb..42917d9 100644 --- a/JSON-LD.psm1 +++ b/JSON-LD.psm1 @@ -1,36 +1,5 @@ -$commandsPath = Join-Path $PSScriptRoot Commands -:ToIncludeFiles foreach ($file in (Get-ChildItem -Path "$commandsPath" -Filter "*-*" -Recurse)) { - if ($file.Extension -ne '.ps1') { continue } # Skip if the extension is not .ps1 - foreach ($exclusion in '\.[^\.]+\.ps1$') { - if (-not $exclusion) { continue } - if ($file.Name -match $exclusion) { - continue ToIncludeFiles # Skip excluded files - } - } - . $file.FullName -} +. $PSScriptRoot/Commands/Get-JsonLD.ps1 -$myModule = $MyInvocation.MyCommand.ScriptBlock.Module -$ExecutionContext.SessionState.PSVariable.Set($myModule.Name, $myModule) -$myModule.pstypenames.insert(0, $myModule.Name) - -New-PSDrive -Name $MyModule.Name -PSProvider FileSystem -Scope Global -Root $PSScriptRoot -ErrorAction Ignore - -if ($home) { - $MyModuleProfileDirectory = Join-Path ([Environment]::GetFolderPath("LocalApplicationData")) $MyModule.Name - if (-not (Test-Path $MyModuleProfileDirectory)) { - $null = New-Item -ItemType Directory -Path $MyModuleProfileDirectory -Force - } - New-PSDrive -Name "My$($MyModule.Name)" -PSProvider FileSystem -Scope Global -Root $MyModuleProfileDirectory -ErrorAction Ignore -} - -# Set a script variable of this, set to the module -# (so all scripts in this scope default to the correct `$this`) -$script:this = $myModule - -#region Custom -#endregion Custom - -Export-ModuleMember -Alias * -Function * -Variable $myModule.Name +Export-ModuleMember -Alias * -Function * From 82e7cf5068f408cbc1cd30db6fc25d4f209bbe49 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Thu, 12 Mar 2026 15:10:38 -0700 Subject: [PATCH 02/13] feat: Updating examples ( Fixes #13 ) --- JSON-LD.tests.ps1 | 6 ++++-- README.md | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/JSON-LD.tests.ps1 b/JSON-LD.tests.ps1 index 2a6e0f6..a18e5e3 100644 --- a/JSON-LD.tests.ps1 +++ b/JSON-LD.tests.ps1 @@ -1,10 +1,12 @@ describe 'JSON-LD' { context 'JSON-LD is a standard for embedding information in web pages' { it 'can get information about a movie' { - $result = Get-JsonLD -Url 'https://www.imdb.com/title/tt0211915/' + + $result = Get-JsonLD -Url 'https://letterboxd.com/film/amelie/' + $result.pstypenames | Should -Not -BeNullOrEmpty $result.pstypenames | Should -Contain 'https://schema.org/Movie' - + } it 'can get information a schema' { Get-JsonLD https://schema.org/Movie | diff --git a/README.md b/README.md index 77845e0..02d222d 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ This information can be useful in any number of fun and useful PowerShell scenar For example, let's get information about a movie. ~~~PowerShell -Get-JsonLD https://www.imdb.com/title/tt0211915/ +Get-JsonLD -Url https://letterboxd.com/film/amelie/ ~~~ Let's take things a step further, and get the information we can know about any movie: From 01f0f2b2fdd04342a585651d1a1d17961caa740c Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Thu, 12 Mar 2026 15:12:28 -0700 Subject: [PATCH 03/13] feat: Get-JSONLD -As and updates ( Fixes #13, Fixes #16, Fixes #17, Fixes #18, Fixes #19 ) --- Commands/Get-JsonLD.ps1 | 89 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 78 insertions(+), 11 deletions(-) diff --git a/Commands/Get-JsonLD.ps1 b/Commands/Get-JsonLD.ps1 index c69504e..3bdb257 100644 --- a/Commands/Get-JsonLD.ps1 +++ b/Commands/Get-JsonLD.ps1 @@ -8,7 +8,7 @@ function Get-JsonLD { This is a format used by many websites to provide structured data about their content. .EXAMPLE # Want to get information about a movie? Linked Data to the rescue! - Get-JsonLD -Url https://www.imdb.com/title/tt0211915/ + Get-JsonLD -Url https://letterboxd.com/film/amelie/ .EXAMPLE # Want information about an article? Lots of news sites use this format. Get-JsonLD https://www.thebulwark.com/p/mahmoud-khalil-immigration-detention-first-amendment-free-speech-rights @@ -21,9 +21,31 @@ function Get-JsonLD { param( # The URL that may contain JSON-LD data [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] + [Alias('href')] [Uri] $Url, + <# + + If set, will the output as: + + |as|is| + |-|-| + |html|the response as text| + |json|the match as json| + |*jsonld`|ld`|linkedData*|the match as linked data|' + |script|the script tag| + |xml|the script tag, as xml| + + #> + + [ValidateSet('html', 'json', 'jsonld', 'ld', 'linkedData', 'script', 'xml')] + [string] + $as = 'jsonld', + + [switch] + $RawHtml, + # If set, will force the request to be made even if the URL has already been cached. [switch] $Force @@ -46,39 +68,84 @@ application/ld\+json # The type that indicates linked d '@, 'IgnoreCase,IgnorePatternWhitespace','00:00:00.1') # Initialize the cache for JSON-LD requests - if (-not $script:JsonLDRequestCache) { - $script:JsonLDRequestCache = [Ordered]@{} + if (-not $script:Cache) { + $script:Cache = [Ordered]@{} } } process { $restResponse = - if ($Force -or -not $script:JsonLDRequestCache[$url]) { - $script:JsonLDRequestCache[$url] = Invoke-RestMethod -Uri $Url - $script:JsonLDRequestCache[$url] + if ($Force -or -not $script:Cache[$url]) { + $script:Cache[$url] = Invoke-RestMethod -Uri $Url + $script:Cache[$url] } else { - $script:JsonLDRequestCache[$url] + $script:Cache[$url] } + + if ($as -eq 'html') { + return $restResponse + } + + + # Find all linked data tags within the response foreach ($match in $linkedDataRegex.Matches("$restResponse")) { + # If we want the result as xml + if ($As -eq 'xml') { + # try to cast it + $matchXml ="$match" -as [xml] + if ($matchXml) { + # and output it if found. + $matchXml + continue + } else { + # otherwise, fall back to the ` + + + + \ No newline at end of file From 5eff6a12fc87294b4ec5605515d4728d64afbbe6 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Thu, 12 Mar 2026 19:06:44 -0700 Subject: [PATCH 08/13] feat: `application/ld+json.GetLexicon()` ( Fixes #22 ) --- Types/JsonLD/GetLexicon.ps1 | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Types/JsonLD/GetLexicon.ps1 diff --git a/Types/JsonLD/GetLexicon.ps1 b/Types/JsonLD/GetLexicon.ps1 new file mode 100644 index 0000000..d875812 --- /dev/null +++ b/Types/JsonLD/GetLexicon.ps1 @@ -0,0 +1,32 @@ + +param($graph = $this) + +$jsonSchema = $this.GetJsonSchema($graph) +if (-not $jsonSchema.'$id') { + throw "Missing $jsonSchema.$id" + return +} + +$domain, $relativePath = $jsonSchema.'$id' -replace '^$' -split '/' +if (-not $domain) { return} +if (-not $relativePath ) { return } +$domain = @($domain -split '\.') +[Array]::Reverse($domain) +$nsid = $domain, $relativePath -join '.' + + +$jsonSchema.psobject.properties.Remove('$id') + +[Ordered]@{ + lexicon = 1 + id = $nsid + defs = [Ordered]@{ + main = [Ordered]@{ + type = 'record' + description = $jsonSchema.description + record = $jsonSchema + } + } +} + + From 22d8c6bac4ce2036aa6b2ba4f1dea5ca2ee1c399 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Fri, 13 Mar 2026 02:07:00 +0000 Subject: [PATCH 09/13] feat: `application/ld+json.GetLexicon()` ( Fixes #22 ) --- JSON-LD.types.ps1xml | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/JSON-LD.types.ps1xml b/JSON-LD.types.ps1xml index fa91a60..0628d54 100644 --- a/JSON-LD.types.ps1xml +++ b/JSON-LD.types.ps1xml @@ -102,6 +102,44 @@ foreach ($rdfProperty in $graphTypes['rdf:property']) { $jsonSchema + + + + GetLexicon + From da767646b4f4f0e265d9ff8ff2d00e8fe07e483a Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Sat, 14 Mar 2026 11:01:40 -0700 Subject: [PATCH 10/13] feat: Get-JSONLD file support ( Fixes #23 ) --- Commands/Get-JsonLD.ps1 | 115 ++++++++++++++++++++++++++++++---------- 1 file changed, 88 insertions(+), 27 deletions(-) diff --git a/Commands/Get-JsonLD.ps1 b/Commands/Get-JsonLD.ps1 index 3bdb257..a7a5b71 100644 --- a/Commands/Get-JsonLD.ps1 +++ b/Commands/Get-JsonLD.ps1 @@ -8,7 +8,7 @@ function Get-JsonLD { This is a format used by many websites to provide structured data about their content. .EXAMPLE # Want to get information about a movie? Linked Data to the rescue! - Get-JsonLD -Url https://letterboxd.com/film/amelie/ + Get-JsonLD -Url https://letterboxd.com/film/amelie/ .EXAMPLE # Want information about an article? Lots of news sites use this format. Get-JsonLD https://www.thebulwark.com/p/mahmoud-khalil-immigration-detention-first-amendment-free-speech-rights @@ -37,8 +37,7 @@ function Get-JsonLD { |script|the script tag| |xml|the script tag, as xml| - #> - + #> [ValidateSet('html', 'json', 'jsonld', 'ld', 'linkedData', 'script', 'xml')] [string] $as = 'jsonld', @@ -71,9 +70,85 @@ application/ld\+json # The type that indicates linked d if (-not $script:Cache) { $script:Cache = [Ordered]@{} } + + filter output { + $in = $_ + $mySelf = $MyInvocation.MyCommand + if ($in.'@context' -is [string]) { + $context = $in.'@context' + } + if ($in.'@graph') { + if ($in.pstypenames -ne 'application/ld+json') { + $in.pstypenames.insert(0,'application/ld+json') + } + foreach ($graphObject in $in.'@graph') { + $null = $graphObject | + & $mySelf + } + } + elseif ($in.'@type') { + + $typeName = if ($context) { + $context, $in.'@type' -join '/' + } else { + $in.'@type' + } + + if ($in.pstypenames -ne 'application/ld+json') { + $in.pstypenames.insert(0,'application/ld+json') + } + if ($in.pstypenames -ne $typeName) { + $in.pstypenames.insert(0,$typeName) + } + + foreach ($property in $in.psobject.properties) { + if ($property.value.'@type') { + $null = $property.value | + & $mySelf + } + } + } + $in + } + + $foreachFile = { + $inFile = $_.FullName + try { + + Get-Content -LiteralPath $_.FullName -Raw | + ConvertFrom-Json | + output + } catch { + Write-Verbose "$($inFile.FullName) : $_" + } + } } process { + if ($url.IsFile -or + -not $url.AbsoluteUri + ) { + if (Test-Path $url.OriginalString) { + Get-ChildItem $url.OriginalString -File | + Foreach-Object $foreachFile + } elseif ($MyInvocation.MyCommand.Module -and + (Test-Path ( + Join-Path ( + $MyInvocation.MyCommand.Module | Split-Path + ) $url.OriginalString + )) + ) { + Get-ChildItem -Path ( + Join-Path ( + $MyInvocation.MyCommand.Module | Split-Path + ) $url.OriginalString + ) -File | + Foreach-Object $foreachFile + } + + return + } + $restResponse = if ($Force -or -not $script:Cache[$url]) { $script:Cache[$url] = Invoke-RestMethod -Uri $Url @@ -84,8 +159,7 @@ application/ld\+json # The type that indicates linked d if ($as -eq 'html') { return $restResponse - } - + } # Find all linked data tags within the response foreach ($match in $linkedDataRegex.Matches("$restResponse")) { @@ -119,28 +193,15 @@ application/ld\+json # The type that indicates linked d $match.Groups['JsonContent'].Value | ConvertFrom-Json ) { - # If there was a `@type` property - if ($jsonObject.'@type') { - # all we need to do is decorate the object - # If we combine the `@context` and `@type` property, we should have a schema url - $schemaType = $jsonObject.'@context',$jsonObject.'@type' -ne '' -join '/' - # and we can make that the typename - $jsonObject.pstypenames.insert(0, $schemaType) - # and show the object. - $jsonObject - } - # If there was a `@graph` property - elseif ($jsonObject.'@graph') { - # we can display all items in the graph - foreach ($graphObject in $jsonObject.'@graph') { - # each of them will tell us it's `@type` - if ($graphObject.'@type') { - # and we can decorate each object appropriately - $graphObject.pstypenames.insert(0, $graphObject.'@type') - } - $graphObject - } - } + # If there was a `@type` or `@graph` property + if ( + $jsonObject.'@type' -or + $jsonObject.'@graph' + ) { + # output the object as jsonld + $jsonObject | output + continue + } # If there is neither a `@type` or a `@graph` else { # just output the object. From d6655d560641885fdb8920f04978be6b1606b908 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Sat, 14 Mar 2026 11:20:47 -0700 Subject: [PATCH 11/13] feat: JSON-LD test updates --- JSON-LD.tests.ps1 | 1 + 1 file changed, 1 insertion(+) diff --git a/JSON-LD.tests.ps1 b/JSON-LD.tests.ps1 index 8a8b8ab..bdb8619 100644 --- a/JSON-LD.tests.ps1 +++ b/JSON-LD.tests.ps1 @@ -11,6 +11,7 @@ describe 'JSON-LD' { } it 'can get information a schema' { Get-JsonLD https://schema.org/Movie | + Select-Object -ExpandProperty '@graph' | Select-Object -ExpandProperty pstypenames -Unique | Should -Contain 'rdf:Property' } From cec1f5919737ea6404c9933a1045ce32e3f279e5 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Sat, 14 Mar 2026 11:28:22 -0700 Subject: [PATCH 12/13] feat: JSON-LD.ezout.ps1 ( Fixes #5 ) --- Build/JSON-LD.ezout.ps1 | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Build/JSON-LD.ezout.ps1 diff --git a/Build/JSON-LD.ezout.ps1 b/Build/JSON-LD.ezout.ps1 new file mode 100644 index 0000000..6b9d2fa --- /dev/null +++ b/Build/JSON-LD.ezout.ps1 @@ -0,0 +1,39 @@ +#requires -Module EZOut +# Install-Module EZOut or https://github.com/StartAutomating/EZOut +$myFile = $MyInvocation.MyCommand.ScriptBlock.File +$myModuleName = $MyInvocation.MyCommand.Name -replace '\.ezout.ps1$' +$myRoot = $myFile | Split-Path | Split-Path +Push-Location $myRoot +$formatting = @( + # Add your own Write-FormatView here, + # or put them in a Formatting or Views directory + foreach ($potentialDirectory in 'Formatting','Views','Types') { + Join-Path $myRoot $potentialDirectory | + Get-ChildItem -ea ignore | + Import-FormatView -FilePath {$_.Fullname} + } +) + +$destinationRoot = $myRoot + +if ($formatting) { + $myFormatFilePath = Join-Path $destinationRoot "$myModuleName.format.ps1xml" + # You can also output to multiple paths by passing a hashtable to -OutputPath. + $formatting | Out-FormatData -Module $MyModuleName -OutputPath $myFormatFilePath +} + +$types = @( + # Add your own Write-TypeView statements here + # or declare them in the 'Types' directory + Join-Path $myRoot Types | + Get-Item -ea ignore | + Import-TypeView + +) + +if ($types) { + $myTypesFilePath = Join-Path $destinationRoot "$myModuleName.types.ps1xml" + # You can also output to multiple paths by passing a hashtable to -OutputPath. + $types | Out-TypeData -OutputPath $myTypesFilePath +} +Pop-Location From 8ca2315f52ba625173129bd212e566aa495892f5 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Sat, 14 Mar 2026 11:38:17 -0700 Subject: [PATCH 13/13] release: JSON-LD 0.1.1 Updating Module Manifest and CHANGELOG --- CHANGELOG.md | 26 ++++++++++++++++++++++++-- JSON-LD.psd1 | 38 ++++++++++++++++++++++++-------------- 2 files changed, 48 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3830db..049b0d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,32 @@ -> Like It? [Star It](https://github.com/PowerShellWeb/JSON-LD) -> Love It? [Support It](https://github.com/sponsors/StartAutomating) +Please: + +* [Like, Share, and Subscribe](https://github.com/PowerShellWeb/JSON-LD) +* [Support Us](https://github.com/sponsors/StartAutomating) + +--- + +## JSON-LD 0.1.1 + +* Updating Examples (#13) +* Simplfiying module scaffolding (#15) +* Building types with EZOut (#5) +* Supporting file input (#23) +* `Get-JSONLD -as` + * `Get-JSONLD -as json` (#16) + * `Get-JSONLD -as html` (#17) + * `Get-JSONLD -as script` (#18) + * `Get-JSONLD -as xml` (#19) +* Adding conversion to JsonSchema (#21) +* Adding conversion to At Protocol Lexicons (#22) + +--- ## JSON-LD 0.1 Caching JSON-LD requests +--- + ## JSON-LD 0.0.1 Get Linked Data from any page diff --git a/JSON-LD.psd1 b/JSON-LD.psd1 index d4fc7b3..c55b799 100644 --- a/JSON-LD.psd1 +++ b/JSON-LD.psd1 @@ -1,36 +1,46 @@ @{ RootModule = 'JSON-LD.psm1' - ModuleVersion = '0.1' + ModuleVersion = '0.1.1' GUID = '4e65477c-012c-4077-87c7-3e07964636ce' Author = 'James Brundage' CompanyName = 'Start-Automating' - Copyright = '(c) 2025 Start-Automating.' + Copyright = '(c) 2025-2026 Start-Automating.' Description = 'Get JSON Linked Data with PowerShell' FunctionsToExport = 'Get-JsonLD' AliasesToExport = 'jsonLD', 'json-ld' + TypesToProcess = 'JSON-LD.types.ps1xml' PrivateData = @{ PSData = @{ # Tags applied to this module. These help with module discovery in online galleries. - Tags = @('json-ld','SEO','Web','PowerShellWeb') + Tags = @('json-ld','SEO','Web','PoshWeb','LinkedData','schema.org') # A URL to the license for this module. - ProjectURI = 'https://github.com/PowerShellWeb/JSON-LD' - LicenseURI = 'https://github.com/PowerShellWeb/JSON-LD/blob/main/LICENSE' + ProjectURI = 'https://github.com/PoshWeb/JSON-LD' + LicenseURI = 'https://github.com/PoshWeb/JSON-LD/blob/main/LICENSE' ReleaseNotes = @' +--- -> Like It? [Star It](https://github.com/PowerShellWeb/JSON-LD) -> Love It? [Support It](https://github.com/sponsors/StartAutomating) +## JSON-LD 0.1.1 -## JSON-LD 0.1 +* Updating Examples (#13) +* Simplfiying module scaffolding (#15) +* Building types with EZOut (#5) +* Supporting file input (#23) +* `Get-JSONLD -as` + * `Get-JSONLD -as json` (#16) + * `Get-JSONLD -as html` (#17) + * `Get-JSONLD -as script` (#18) + * `Get-JSONLD -as xml` (#19) +* Adding conversion to JsonSchema (#21) +* Adding conversion to At Protocol Lexicons (#22) -Caching JSON-LD requests +--- -Get Linked Data from any page +Please: -## JSON-LD 0.0.1 +* [Like, Share, and Subscribe](https://github.com/PowerShellWeb/JSON-LD) +* [Support Us](https://github.com/sponsors/StartAutomating) -* Initial Release of JSON-LD Module (#1) - * `Get-JsonLD` gets linked data (#2) - * `Get-JsonLD` is aliased to `jsonLD` and `json-ld` +Additional History in [CHANGELOG](https://github.com/PoshWeb/JSON-LD/blob/main/CHANGELOG.md) '@ } }