Hi Sanjeev,
You get no results for ?preferredlabel because CONCAT returns nothing if *any*
of its arguments is nothing. So, CONCAT("x", "y", "z", ?nothing) is going to
return nothing, and not "xyz".
The easiest way around that is to use the TopBraid-specific function ui:concat,
which is identical to SPARQL’s built-in CONCAT function except that unbound
inputs are treated as empty strings. So, ui:concat("x", "y", "z", ?nothing) is
"xyz".
Another useful SPARQL built-in function is COALESCE. It can be called with 2+
arguments and will return the first one that is *not* unbound. So you could do
something like this:
COALESCE(CONCAT(?en, ", ", ?ko), ?en, ?ko)
Richard
> On 22 Aug 2017, at 16:25, sanjeev devireddy <[email protected]>
> wrote:
>
> Thanks Richard, it works. But the SPARQL(with CONCAT) fails to return
> expected preferred labels, when a language is specified in SPARQL and the
> concept(s) doesn't have that language's preferred label in the vocabulary.
>
> Example:
> BIND(CONCAT( search:nestedObjectsList(?result, skos:prefLabel, "result",
> ?none, "en") , search:nestedObjectsList(?result, skos:prefLabel, "result",
> ?none, "ko")) AS ?preferredlabel)
> In this example English and Korean Languages are specified. What is
> expected here is to return the English language preferred label and/or Korean
> language preferred label, based on the those languages preferred labels
> availability in the vocabulary. But zero/empty results are returned for the
> preferred language column for all the concepts (please check the below screen
> shot). This might be because that the concepts doesn't have Korean language
> preferred labels in the Geography vocabulary.
>
> Why am I trying this is, in our actual vocabulary all concepts don't have the
> same number of languages for preferred labels. For example, some concepts
> have only English language preferred labels and other concepts have different
> languages preferred labels also. In this case, the SPARQL(with CONCAT)
> returns zero/empty results for the preferred language column for the
> concept(s), which doesn't have the preferred label for language, which is
> specified in the SPARQL(with CONCAT).
>
>
> So, I just want to check, in this scenario, what could be the best way write
> the SPARQL to fetch preferred labels?
>
>
> <Auto Generated Inline Image 1.png>
>
>
>
>
> Thanks,
> sanjeev
>
> On Tuesday, August 22, 2017 at 5:08:51 PM UTC+5:30, Richard Cyganiak wrote:
> Hi Sanjeev,
>
> search:nestedObjectsList has an extra undocumented fifth argument that
> specifies a language. So you can do something like:
>
> BIND (search:nestedObjectsList(?result, skos:prefLabel, "result", ?none,
> "en") AS ?preferredlabel) .
>
> This would only return English results. The argument is just a single
> language tag. To get English and French, you could get both separately, and
> string-concatenate the results.
>
> Hope that helps,
> Richard
>
>
>> On 22 Aug 2017, at 11:11, sanjeev devireddy <[email protected]
>> <javascript:>> wrote:
>>
>> Hi,
>> The below SPARQL returns preferred labels of all languages available in
>> the vocabulary by default(please check the below SPARQL). When I try FILTER
>> to get only specific languages preferred labels then it doesn't return/place
>> all those resulted preferred labels of a concept in a single row. Could some
>> one please help?
>>
>>
>> SPARQL
>>
>> SELECT DISTINCT ?result ?label ?latitude ?preferredlabel
>> WHERE {
>> GRAPH <urn:x-evn-master:geo> {
>> {
>> ?result a <http://topquadrant.com/ns/examples/geography#Continent
>> <http://topquadrant.com/ns/examples/geography#Continent>> .
>> } .
>> BIND (search:nestedObjectsList(?result, geo:lat, "result") AS ?latitude)
>> .
>> BIND (search:nestedObjectsList(?result, skos:prefLabel, "result") AS
>> ?preferredlabel) .
>> BIND (ui:label(?result) AS ?label) .
>> }
>> }
>> ORDER BY (LCASE(?label))
>>
>>
>>
>> FYI..
>>
>> <Auto Generated Inline Image 1.png>
>>
>> Using FILTER (FILTER(lang(?preferredlabel) = "en" || lang(?preferredlabel) =
>> "fr"))
>>
>> <Auto Generated Inline Image 2.png>
>>
>>
>>
>> Thanks,
>> sanjeev
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "TopBraid Suite Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout
>> <https://groups.google.com/d/optout>.
>> <Auto Generated Inline Image 1.png><Auto Generated Inline Image 2.png>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "TopBraid Suite Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected]
> <mailto:[email protected]>.
> For more options, visit https://groups.google.com/d/optout
> <https://groups.google.com/d/optout>.
> <Auto Generated Inline Image 1.png>
--
You received this message because you are subscribed to the Google Groups
"TopBraid Suite Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.