0

Java WS を使用してリポジトリを照会しています。このリポジトリのデータを変更できません。何かをクエリすると、変数のいずれかに「データ型」プロパティがある場合、重複した結果が得られます。

クエリのみを使用して重複を削除する方法はありますか?

ご協力いただきありがとうございます。問題の例は次のとおりです。

私の固定名前空間

public static final String PREFIX = "prefix kb: <http://protege.stanford.edu/kb#>\n" +      
                                    "prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n" +
                                    "prefix owl: <http://www.w3.org/2002/07/owl#>\n" +
                                    "prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" +         
                                    "prefix xsd: <http://www.w3.org/2001/XMLSchema#>\n";

私のクエリ文字列

String query = "SELECT DISTINCT ?name WHERE {" +
            "?unit a kb:Unit ; " +
            "kb:hasName ?name ;" +
            "} ORDER BY ?name ";

このクエリを使用すると、次のような「データ型」で重複した値が得られます

    <?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
  <head>
    <variable name="name"/>
  </head>
  <results>
    <result>
      <binding name="name">
        <literal>Hours</literal>
      </binding>
    </result>
    <result>
      <binding name="name">
        <literal>Meters per Hour</literal>
      </binding>
    </result>
    <result>
      <binding name="name">
        <literal datatype="http://www.w3.org/2001/XMLSchema#string">Meters per Hour</literal>
      </binding>
    </result>
    <result>
      <binding name="name">
        <literal>Meters per Minute</literal>
      </binding>
    </result>
    <result>
      <binding name="name">
        <literal>PercentageCompleted</literal>
      </binding>
    </result>
    <result>
      <binding name="name">
        <literal>Pieces per Hour</literal>
      </binding>
    </result>
    <result>
      <binding name="name">
        <literal datatype="http://www.w3.org/2001/XMLSchema#string">Pieces per Hour</literal>
      </binding>
    </result>
    <result>
      <binding name="name">
        <literal>Pieces per Minute</literal>
      </binding>
    </result>
    <result>
      <binding name="name">
        <literal datatype="http://www.w3.org/2001/XMLSchema#string">Pieces per Minute</literal>
      </binding>
    </result>
    <result>
      <binding name="name">
        <literal>Product parts</literal>
      </binding>
    </result>
    <result>
      <binding name="name">
        <literal>Products per Day</literal>
      </binding>
    </result>
    <result>
      <binding name="name">
        <literal datatype="http://www.w3.org/2001/XMLSchema#string">Products per Day</literal>
      </binding>
    </result>
    <result>
      <binding name="name">
        <literal>SI Cubic Meter</literal>
      </binding>
    </result>
    <result>
      <binding name="name">
        <literal>€ per Hour</literal>
      </binding>
    </result>
    <result>
      <binding name="name">
        <literal>€ per Minute</literal>
      </binding>
    </result>
    <result>
      <binding name="name">
        <literal>€ per Product</literal>
      </binding>
    </result>
  </results>
</sparql>
4

1 に答える 1

1

あなたのクエリはこれに似ています

prefix xsd: <http://www.w3.org/2001/XMLSchema#>

select distinct ?name where {
  values ?name { "meters per hour"
                 "meters per hour"^^xsd:string }
}
---------------------------------
| name                          |
=================================
| "meters per hour"             |
| "meters per hour"^^xsd:string |
---------------------------------

str(?name)代わりに、次の個別の値(つまり、リテラルの文字列値)を選択する必要があります。

prefix xsd: <http://www.w3.org/2001/XMLSchema#>

select distinct (str(?name) as ?sname) where {
  values ?name { "meters per hour"
                 "meters per hour"^^xsd:string }
}
---------------------
| sname             |
=====================
| "meters per hour" |
---------------------

将来的には、これはおそらくそれほど問題にはならないことに注意してください。RDF 1.1 では、すべてのリテラルがデータ型を持つようになり、以前は単純なリテラル (例: ) であったものはデータ型(例: "meters per hour") を持つようになります。xsd:string"meters per hour"^^xsd:string

于 2013-11-06T13:11:49.680 に答える