Как превратить запрос / правило SPARQL/SPIN в структуру RDF из Java?

Я использовал TopQuadrant Composer Free Edition (TBC FE) для встраивания правил SPARQL/SPIN (в первую очередь, конструкторов SPIN) в мои OWL-онтологии, хранящиеся как RDF. Частью этого процесса является то, что исходный код SPARQL маркируется / кодируется в структуре RDF в соответствии с http://spinrdf.org/sp.html схема которого указана в http://spinrdf.org/sp. Именно эта структура на самом деле интерпретируется RDF4J для запуска правил SPIN.

Я также использую RDF4J в качестве своего тройного хранилища, рассуждения, конечной точки SPARQL и механизма правил SPIN. Кроме того, я создаю собственный код Java и GUI для управления моими данными и правилами.

У меня вопрос, что я могу использовать в Java для кодирования исходного кода SPARQL/SPIN в виде RDF? Обратите внимание, что я спрашиваю не о том, как кодировать результаты запроса (на который был дан ответ в другом вопросе / ответе stackru), а о том, как кодировать сам запрос. Причина в том, что я хотел бы включить редактирование правил SPIN из своего собственного кода Java, а не полагаться исключительно на TBC FE.

Также обратите внимание, что мне известна опция сохранения исходного текста запроса SPARQL. Тем не менее, мой опыт показывает, что это неправильно интерпретируется, в то время как RDF с символами / структурами интерпретируется правильно. Поэтому я должен использовать структурированный RDF.

Я надеюсь, что большая часть кода Java для этой кодировки уже написана, возможно, как часть Apache Jena. Мне просто нужен указатель на то, где искать.

Спасибо!

PS: Вот начало примера конструктора SPIN, закодированного TBC FE. Он включает в себя как оригинальный sp: текст исходного кода SPARQL/SPIN, так и начало структурированного RDF (после блока sp:text). Это структурированный RDF, который мне нужно генерировать с помощью Java из исходного кода SPARQL.

     <sp:Construct>
        <sp:text rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
        ># [enabled] &lt;http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/Pub7#Pub7Proposal_makeRxSCMPointSurface&gt; construct an SCM Point Surface (zero radius) from supporting rx data items under an SCM receiver model
CONSTRUCT {
    ?this soo:hasSCMReceiverModel ?receiverModelURI . 
    ?receiverModelURI soo:hasSCMPointSurfaceLocation ?pointSurfaceURI .
    ?pointSurfaceURI soo:SCMPointSurfaceHasPoint ?pointURI .&#xD;
    ?pointSurfaceURI a soo:SCMPointSurfaceLocation .
}
WHERE {
    ?this pub7:pub7ProposalHasDataItem ?rxRadiusDataItem .
    ?rxRadiusDataItem a pub7:Pub7DataItem406 .
    ?rxRadiusDataItem soo:hasSCMRadius ?radiusURI .
    ?radiusURI Nuvio:hasDataValue ?radiusValue .
    FILTER (?radiusValue = 0.0000) .
    ?this pub7:pub7ProposalHasDataItem ?rxPointDataItem .
    ?rxPointDataItem a pub7:Pub7DataItem403 .
    ?rxPointDataItem soo:hasSCMPointLocation ?pointURI .
    BIND (URI(CONCAT(str(?this), "_rxModel")) AS ?newReceiverModelURI) .
    BIND (IF(bound(?existingReceiverModelURI), ?existingReceiverModelURI, ?newReceiverModelURI) AS ?receiverModelURI) .
    BIND (URI(CONCAT(str(?receiverModelURI), "_pointSurface")) AS ?pointSurfaceURI) .
}</sp:text>
        <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
        >[enabled] &lt;http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/Pub7#Pub7Proposal_makeRxSCMPointSurface&gt; construct an SCM Point Surface (zero radius) from supporting rx data items under an SCM receiver model</rdfs:comment>
        <sp:templates rdf:parseType="Collection">
          <rdf:Description>
            <sp:object rdf:parseType="Resource">
              <sp:varName rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
              >receiverModelURI</sp:varName>
            </sp:object>
            <sp:predicate rdf:resource="http://www.disa.mil/dso/a2i/ontologies/PBSM/Sharing/SpectrumOperationsOntology#hasSCMReceiverModel"/>
            <sp:subject rdf:resource="http://spinrdf.org/spin#_this"/>
          </rdf:Description>
          <rdf:Description>
            <sp:object rdf:parseType="Resource">
              <sp:varName rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
              >pointSurfaceURI</sp:varName>
            </sp:object>
            <sp:predicate rdf:resource="http://www.disa.mil/dso/a2i/ontologies/PBSM/Sharing/SpectrumOperationsOntology#hasSCMPointSurfaceLocation"/>
            <sp:subject rdf:parseType="Resource">
              <sp:varName rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
              >receiverModelURI</sp:varName>
            </sp:subject>
          </rdf:Description>
          <rdf:Description>
            <sp:object rdf:parseType="Resource">
              <sp:varName rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
              >pointURI</sp:varName>
            </sp:object>
            <sp:predicate rdf:resource="http://www.disa.mil/dso/a2i/ontologies/PBSM/Sharing/SpectrumOperationsOntology#SCMPointSurfaceHasPoint"/>
            <sp:subject rdf:parseType="Resource">
              <sp:varName rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
              >pointSurfaceURI</sp:varName>
            </sp:subject>
          </rdf:Description>
          <rdf:Description>
            <sp:object rdf:resource="http://www.disa.mil/dso/a2i/ontologies/PBSM/Sharing/SpectrumOperationsOntology#SCMPointSurfaceLocation"/>
            <sp:predicate rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#type"/>
            <sp:subject rdf:parseType="Resource">
              <sp:varName rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
              >pointSurfaceURI</sp:varName>
            </sp:subject>
          </rdf:Description>
        </sp:templates>

1 ответ

Решение

Как отметил @AKSW, API SPIN в сочетании с библиотеками Jena может выполнить то, что мне нужно. SPINParsingExample.java от TopBraid очень близок к тому, что я хочу сделать.

Мне нужно было добавить одну библиотеку SPIN и несколько файлов библиотеки Jena (.jar файлы) к моему проекту Eclipse и к пути сборки. Я знаю, что есть автоматизированные способы обработки этих зависимостей, но сейчас я делаю это вручную. Для тех, кто делает это вручную, эти файлы перечислены ниже...

Библиотека SPIN:

Библиотеки Apache Jena (лучше использовать 3.0.1, как предлагается в комментариях):

Другие вопросы по тегам