> 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 ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
