> Excellent, Alex!
> 
> That is exactly what we need to do for Moose and Roassal. Are you using the 
> GTInspector for developing this? :)

I could not have done what I did without the GTInspector. Switching between 
different representations and navigating in the graph of objects is absolutely 
vital.

Alexandre

> 
> 
> On Mon, Mar 3, 2014 at 1:33 AM, Alexandre Bergel <[email protected]> 
> wrote:
> A followup from the previous post. Fetching country population and charting 
> them using GraphET:
> 
> -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
> | query data diagram |
> 
> query := DBPediaSearch new 
> setJsonFormat;
> setDebugOn;
> timeout: 3000;
> query: 'SELECT DISTINCT ?name ?population 
> WHERE {
> ?country a dbpedia-owl:Country . 
> ?country rdfs:label ?name . 
> FILTER 
> (langMatches(lang(?name), "en")) 
> values ?hasPopulation { dbpprop:populationEstimatedbpprop:populationCensus } 
> OPTIONAL { ?country ?hasPopulation ?population } 
> FILTER (isNumeric(?population)) 
> FILTER NOT EXISTS { ?country dbpedia-owl:dissolutionYear ?yearEnd } { 
> ?country dbpprop:iso3166code ?code . } 
> UNION { ?country dbpprop:iso31661Alpha ?code . } 
> UNION { ?country dbpprop:countryCode ?code . } 
> UNION { ?country a yago:MemberStatesOfTheUnitedNations . }}';
> execute.
> 
> data := (((NeoJSONReader fromString: query) at:#results) at: #bindings) 
> collect: [ :entry | Array with: ( (entry at: #name) at: #value ) with: ( 
> (entry at: #population) at: #value ) asInteger ].
> 
> "Use GraphET to render all this"
> diagram := GETDiagramBuilder new.
> diagram verticalBarDiagram
> models: (data reverseSortedAs: #second);
> y: #second;
> regularAxisAsInteger;
> titleLabel: 'Size of countries';
> yAxisLabel: 'Population'.
> diagram interaction popupText.
> 
> diagram open
> -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
> <Screen Shot 2014-03-02 at 9.30.58 PM.png>
> 
> 
> Cheers,
> Alexandre
> 
> 
> On Mar 2, 2014, at 9:22 PM, Alexandre Bergel <[email protected]> wrote:
> 
>> I’ve just tried and it works pretty well! Impressive!
>> 
>> Below I describe a small example that fetches some data about the US 
>> Universities from DBPedia and visualize them using Roassal2. 
>> 
>> Pick a fresh 3.0 image.
>> 
>> First, you need to load Hernán work, Sven’s NeoJSON, and Roassal 2 (If you 
>> are using a Moose Image, there is no need to load Roassal2 since it is 
>> already in):
>> -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>> Gofer it
>>   smalltalkhubUser: 'SvenVanCaekenberghe' project:  'Neo';
>>   package:  'ConfigurationOfNeoJSON';
>>   load.
>> ((Smalltalk at: #ConfigurationOfNeoJSON) load).
>> 
>> Gofer it
>>   smalltalkhubUser: 'hernan' project: 'DBPedia';
>>   package: 'DBPedia';
>>   load.
>> 
>> Gofer it
>>   smalltalkhubUser: 'ObjectProfile' project:  'Roassal2';
>>   package:  'ConfigurationOfRoassal2';
>>   load.
>> ((Smalltalk at: #ConfigurationOfRoassal2) loadBleedingEdge).
>> 
>> -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>> 
>> Using Roassal2, I was able to render some data extracted from dbpedia:
>> 
>> -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>> | map locations rawData rawData2 rawData3 |
>> map := RTMapBuilder new.
>> 
>> map countries: #('UnitedStates' 'Canada' 'Mexico').
>> map color: Color veryVeryLightGray.
>> 
>> rawData := DBPediaSearch universitiesInUS.
>> rawData2 := ((NeoJSONReader fromString: rawData) at: #results) at: #bindings.
>> rawData3 := rawData2 select: [ :d | d keys includesAll: #('label' 'long' 
>> 'lat') ] thenCollect: [ :d | { (Float readFrom: ((d at: 'long') at: 
>> 'value')) . (Float readFrom: ((d at: 'lat') at: 'value')) . (d at: 'label' ) 
>> at: 'value' } ].
>> 
>> 
>> locations := rawData3.
>> locations do: [ :array |
>>      map cities addCityNamed: array third location: array second @ array 
>> first ].
>> map cities shape size: 8; color: (Color blue alpha: 0.03).
>> map cities: (locations collect: #third).
>> 
>> map scale: 2.
>> 
>> map render.
>> map view openInWindowSized: 1000 @ 500.
>> -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>> 
>> This is what you get:
>> 
>> <Screen Shot 2014-03-02 at 9.09.57 PM.png>
>> 
>> 
>> This is a small example. Naturally, adding popup for locations is trivial to 
>> add.
>> 
>> I have described this on our Facebook page:
>> https://www.facebook.com/ObjectProfile/photos/a.341189379300999.82969.340543479365589/596623173757617/?type=1&theater
>> 
>> Hernán, since SPARQL is a bit obscure, it would be great if you could add 
>> some more example, and also, how to parametrize the examples. For example, 
>> now we can get data for the US, how to modify your example to get them for 
>> France or Chile? 
>> 
>> Cheers,
>> Alexandre
>> 
>> 
>> On Mar 2, 2014, at 3:43 PM, Hernán Morales Durand <[email protected]> 
>> wrote:
>> 
>>> I have uploaded a new configuration so you can query the english Wikipedia 
>>> dataset from Pharo 3 using SPARQL. Some examples follow:
>>> 
>>> 1) Retrieve in JSON movies from the beautiful Julianne Moore:
>>> 
>>> | jsonResults |
>>> jsonResults := DBPediaSearch new 
>>>         setJsonFormat;
>>>         timeout: 5000;
>>>         query: 'SELECT DISTINCT ?filmName WHERE {
>>>   ?film foaf:name ?filmName .
>>>   ?film dbpedia-owl:starring ?actress .
>>>   ?actress foaf:name ?name.
>>>   FILTER(contains(?name, "Julianne"))
>>>   FILTER(contains(?name, "Moore"))
>>> }';
>>>         execute
>>> 
>>> To actually get only the titles using NeoJSON:
>>> 
>>> ((((NeoJSONReader fromString: jsonResults) at: #results) at: #bindings) 
>>>     collect: [ : entry | entry at: #filmName ]) collect: [ : movie | movie 
>>> at: #value ]
>>> 
>>> 
>>> 2) Retrieve in XML which genre plays those crazy Dream Theater guys  :
>>> 
>>> DBPediaSearch new 
>>>         setXmlFormat;
>>>         setDebugOn;
>>>         timeout: 5000;
>>>         query: 'SELECT DISTINCT ?genreLabel
>>> WHERE {
>>>     ?resource dbpprop:genre ?genre.
>>>     ?resource rdfs:label "Dream Theater"@en.
>>>     ?genre rdfs:label ?genreLabel
>>>     FILTER (lang(?genreLabel)="en")
>>> }
>>>  LIMIT 100';
>>>         execute
>>> 
>>> More examples are available in DBPediaSearch class side. You can install it 
>>> from the Configuration Browser.
>>> If you want to contribute, just ask me and you will be added as contributor.
>>> Best regards,
>>> 
>>> Hernán
>>> 
>>> _______________________________________________
>>> Pharo-business mailing list
>>> [email protected]
>>> http://lists.pharo.org/mailman/listinfo/pharo-business_lists.pharo.org
>> 
>> -- 
>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>> Alexandre Bergel  http://www.bergel.eu
>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>> 
>> 
>> 
> 
> -- 
> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
> Alexandre Bergel  http://www.bergel.eu
> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
> 
> 
> 
> 
> 
> 
> -- 
> www.tudorgirba.com
> 
> "Every thing has its own flow"

-- 
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.




Reply via email to