Freebase に上場している証券取引所の Web サイトをリストすることを目的とした、次のコードがあります。
#if INTERACTIVE
#r @"C:\Users\kit\Documents\Visual Studio 11\Projects\Demo\packages\FSharpx.TypeProviders.1.7.4\lib\40\FSharpx.TypeProviders.dll"
#r @"C:\Users\kit\Documents\Visual Studio 11\Projects\Demo\packages\FSharpx.TypeProviders.Freebase.1.7.4\lib\40\FSharpx.TypeProviders.Freebase.dll"
#r @"C:\Users\kit\Documents\Visual Studio 11\Projects\Demo\packages\FSharpx.TypeProviders.Freebase.1.7.4\lib\40\FSharpx.TypeProviders.Freebase.DesignTime.dll"
#endif
let GetExchanges() =
let dc = FreebaseData.GetDataContext()
dc.DataContext.SendingRequest.Add(fun e -> printfn "url: %s" e.RequestUri.AbsoluteUri)
dc.``Products and Services``.Business.``Stock exchanges``
|> Seq.truncate 10
|> Seq.iter (fun exchange -> printfn "Exchange: %s" exchange.Name
exchange.``Official website``
|> Seq.iter (fun site -> printfn "%s" site.Name))
最後の 2 行 (つまり、Exchange 名をリストするだけ) がなくても、コードは正常に機能します。これらの行で、400 (Bad Request) が返されます。
その行によって生成される URL は次のとおりです。
...そして、それを参照すると、Freebase からこれを取得します。
{
"error": {
"errors": [
{
"domain": "global",
"reason": "badRequest",
"message": "Can't reverse /common/topic/official_website as it expects /type/uri, not an object"
}
],
"code": 400,
"message": "Can't reverse /common/topic/official_website as it expects /type/uri, not an object"
}
}
リンクされたエンティティにアクセスするための正しいアプローチを使用していますか? もしそうなら、これは Type Provider のバグですか? 他のリンクされたエンティティにアクセスしても同様のエラーが発生します。