Написание правила Jena для добавления свойств к ресурсу с определенными значениями свойств?

Я пытаюсь написать правило Jena, антецедент которого соответствует местоположению, где пропускная способность сети составляет 450^^xsd:float. Я пробовал следующие два правила. Первое не дает мне результатов. Второе совпадение для сетей, помеченных как Gate 23 и Gate 15, но должны совпадать только Gate 15.

[AdaptedModel: 
 (?d2 rdf:type perSys:NetworkCharacteristics),
 (?d2 perSys:Bandwidth '450'^^xsd:float)
 (?d2 perSys:SpecificLocation ?a)
->
 (?d2 perSys:AdaptedSpecificLocation ?a)]
[AdaptedModel: 
 (?d2 rdf:type perSys:NetworkCharacteristics),
 (?d2 perSys:Bandwidth '450'^^xsd:float)
 (?d3 perSys:SpecificLocation ?a)
->
 (?d3 perSys:AdaptedSpecificLocation ?a)]

Это мои данные RDF:

<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:perSys="http://localhost:8080/NetworkContextWS/onto/NetworkContextDescription#">
  <perSys:PervasiveContext>
    <perSys:HasNetworkContext>
      <perSys:NetworkContext rdf:about="file:///home/taylorj/n1111">
        <perSys:Rules>
          <perSys:NetworkSecurity>
            <perSys:NetworkSecurityState rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >Open Network</perSys:NetworkSecurityState>
            <perSys:NetworkKey rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >No Key</perSys:NetworkKey>
          </perSys:NetworkSecurity>
        </perSys:Rules>
        <perSys:Network>
          <perSys:NetworkCharacteristics>
            <perSys:SubNetworkType rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >HSDPA</perSys:SubNetworkType>
            <perSys:NetworkState rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >CONNECTED</perSys:NetworkState>
            <perSys:Bandwidth rdf:datatype="http://www.w3.org/2001/XMLSchema#float"
            >450</perSys:Bandwidth>
            <perSys:LinkSpeed rdf:datatype="http://www.w3.org/2001/XMLSchema#float"
            >65</perSys:LinkSpeed>
            <perSys:NetworkAvailability rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >Available</perSys:NetworkAvailability>
            <perSys:NetworkName rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >AF23_WI-FI_9F1B</perSys:NetworkName>
          </perSys:NetworkCharacteristics>
        </perSys:Network>
        <perSys:Network>
          <perSys:NetworkTraficStats>
            <perSys:NumberBytesReceived rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >15599522</perSys:NumberBytesReceived>
            <perSys:NumberPacketsReceived rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
            >24922</perSys:NumberPacketsReceived>
            <perSys:NumberBytesTransmited rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
            >4111415</perSys:NumberBytesTransmited>
            <perSys:NumberPacketsTransmited rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
            >26455</perSys:NumberPacketsTransmited>
            <perSys:NetworkUpload rdf:datatype="http://www.w3.org/2001/XMLSchema#float"
            >0</perSys:NetworkUpload>
            <perSys:NetworkType rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >Connected</perSys:NetworkType>
            <perSys:NetworkDownload rdf:datatype="http://www.w3.org/2001/XMLSchema#float"
            >1</perSys:NetworkDownload>
            <perSys:TotalData rdf:datatype="http://www.w3.org/2001/XMLSchema#float"
            >1</perSys:TotalData>
          </perSys:NetworkTraficStats>
        </perSys:Network>
        <perSys:Time>
          <perSys:TimeCharacteristics>
            <perSys:ConnexionTime rdf:datatype="http://www.w3.org/2001/XMLSchema#time"
            >15:00:00</perSys:ConnexionTime>
            <perSys:ConnexionDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date"
            >2015-02-06</perSys:ConnexionDate>
          </perSys:TimeCharacteristics>
        </perSys:Time>
        <perSys:Preferences>
          <perSys:PreferencesCharacteristics>
            <perSys:PreferencesName rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >preferencesName</perSys:PreferencesName>
            <perSys:PreferencesType rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >preferencesValue</perSys:PreferencesType>
          </perSys:PreferencesCharacteristics>
        </perSys:Preferences>
        <perSys:Device>
          <perSys:DeviceCharacteristics>
            <perSys:DeviceName rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >Bekri-Laptop</perSys:DeviceName>
            <perSys:DeviceType rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >Laptop</perSys:DeviceType>
          </perSys:DeviceCharacteristics>
        </perSys:Device>
        <perSys:Location>
          <perSys:LocationCharacteristics>
            <perSys:SpecificLocation rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >Gate 23</perSys:SpecificLocation>
            <perSys:FeatureName rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >Pittsburgh International Airport</perSys:FeatureName>
          </perSys:LocationCharacteristics>
        </perSys:Location>
      </perSys:NetworkContext>
    </perSys:HasNetworkContext>
    <perSys:HasNetworkContext>
      <perSys:NetworkContext rdf:about="file:///home/taylorj/lm333">
        <perSys:Rules>
          <perSys:NetworkSecurity>
            <perSys:NetworkSecurityState rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >Open Network</perSys:NetworkSecurityState>
            <perSys:NetworkKey rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >No Key</perSys:NetworkKey>
          </perSys:NetworkSecurity>
        </perSys:Rules>
        <perSys:Network>
          <perSys:NetworkCharacteristics>
            <perSys:SubNetworkType rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >HSDPA</perSys:SubNetworkType>
            <perSys:NetworkState rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >CONNECTED</perSys:NetworkState>
            <perSys:Bandwidth rdf:datatype="http://www.w3.org/2001/XMLSchema#float"
            >256</perSys:Bandwidth>
            <perSys:LinkSpeed rdf:datatype="http://www.w3.org/2001/XMLSchema#float"
            >65</perSys:LinkSpeed>
            <perSys:NetworkAvailability rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >Available</perSys:NetworkAvailability>
            <perSys:NetworkName rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >AF23_WI-FI_9F1B</perSys:NetworkName>
          </perSys:NetworkCharacteristics>
        </perSys:Network>
        <perSys:Network>
          <perSys:NetworkTraficStats>
            <perSys:NumberBytesReceived rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >15599522</perSys:NumberBytesReceived>
            <perSys:NumberPacketsReceived rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
            >24922</perSys:NumberPacketsReceived>
            <perSys:NumberBytesTransmited rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
            >4111415</perSys:NumberBytesTransmited>
            <perSys:NumberPacketsTransmited rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
            >26455</perSys:NumberPacketsTransmited>
            <perSys:NetworkUpload rdf:datatype="http://www.w3.org/2001/XMLSchema#float"
            >0</perSys:NetworkUpload>
            <perSys:NetworkType rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >Connected</perSys:NetworkType>
            <perSys:NetworkDownload rdf:datatype="http://www.w3.org/2001/XMLSchema#float"
            >1</perSys:NetworkDownload>
            <perSys:TotalData rdf:datatype="http://www.w3.org/2001/XMLSchema#float"
            >1</perSys:TotalData>
          </perSys:NetworkTraficStats>
        </perSys:Network>
        <perSys:Time>
          <perSys:TimeCharacteristics>
            <perSys:ConnexionTime rdf:datatype="http://www.w3.org/2001/XMLSchema#time"
            >15:00:00</perSys:ConnexionTime>
            <perSys:ConnexionDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date"
            >2015-02-06</perSys:ConnexionDate>
          </perSys:TimeCharacteristics>
        </perSys:Time>
        <perSys:Preferences>
          <perSys:PreferencesCharacteristics>
            <perSys:PreferencesName rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >preferencesName</perSys:PreferencesName>
            <perSys:PreferencesType rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >preferencesValue</perSys:PreferencesType>
          </perSys:PreferencesCharacteristics>
        </perSys:Preferences>
        <perSys:Device>
          <perSys:DeviceCharacteristics>
            <perSys:DeviceName rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >Bekri-Laptop</perSys:DeviceName>
            <perSys:DeviceType rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >Laptop</perSys:DeviceType>
          </perSys:DeviceCharacteristics>
        </perSys:Device>
        <perSys:Location>
          <perSys:LocationCharacteristics>
            <perSys:SpecificLocation rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >Gate 15</perSys:SpecificLocation>
            <perSys:FeatureName rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
            >Pittsburgh International Airport</perSys:FeatureName>
          </perSys:LocationCharacteristics>
        </perSys:Location>
      </perSys:NetworkContext>
    </perSys:HasNetworkContext>
  </perSys:PervasiveContext>
</rdf:RDF>

1 ответ

Решение

Второе правило неверно

Ваше второе правило нарушено, потому что между значениями переменных d2 и d3 нет никакой связи:

[AdaptedModel: 
(?d2 rdf:type perSys:NetworkCharacteristics),
(?d2 perSys:Bandwidth '450'^^xsd:float)
(?d3 perSys:SpecificLocation ?a)
->
(?d3 perSys:AdaptedSpecificLocation ?a)]

Это примерно говорит:

Если некоторый X имеет тип NetworkCharacterstics и имеет полосу пропускания 450, а некоторые Y имеют определенное местоположение Z, тогда Y имеет адаптированное определенное местоположение Z.

Там нет никакой связи между X (который имеет ограничение около 450), поэтому все с определенным местоположением связано с адаптированным конкретным местоположением.

Почему первое правило не работает и как это исправить

Давайте посмотрим на часть ваших данных, где появляется 450, и где появляются perSys:SpecificLocations. В сериализации N3 легче читать:

<.../n1111>
        a                   perSys:NetworkContext ;
        perSys:Location     [ a                        perSys:LocationCharacteristics ;
                              perSys:FeatureName       "Pittsburgh International Airport"^^<http://www.w3.org/2001/XMLSchema#string> ;
                              perSys:SpecificLocation  "Gate 23"^^<http://www.w3.org/2001/XMLSchema#string>
                            ] ;
        perSys:Network      [ a                           perSys:NetworkCharacteristics ;
                              perSys:Bandwidth            "450"^^<http://www.w3.org/2001/XMLSchema#float> ;
                              perSys:LinkSpeed            "65"^^<http://www.w3.org/2001/XMLSchema#float> ;
                              perSys:NetworkAvailability  "Available"^^<http://www.w3.org/2001/XMLSchema#string> ;
                              perSys:NetworkName          "AF23_WI-FI_9F1B"^^<http://www.w3.org/2001/XMLSchema#string> ;
                              perSys:NetworkState         "CONNECTED"^^<http://www.w3.org/2001/XMLSchema#string> ;
                              perSys:SubNetworkType       "HSDPA"^^<http://www.w3.org/2001/XMLSchema#string>
                            ] ;

То, что имеет пропускную способность 450, является пустым узлом и имеет тип perSys:NetworkCharacteristics, поэтому он может соответствовать первым двум частям правила. Однако у него нет perSys:SpecificLocation, так что вы не можете сопоставить третью часть. У вещи, которая имеет perSys:SpecificLocation, есть еще один пустой узел.

Я не знаю, куда вы на самом деле хотите поместить тройку perSys:AdaptedSpecificLocation (т. Е. Я не знаю, каким должен быть субъект), но вам нужно будет сопоставить форму ваших данных с чем-то вроде этого:

[(?context perSys:Location ?location)
 (?location perSys:SpecificLocation ?specificLocation)
 (?context perSys:Network ?network)
 (?network perSys:Bandwidth '450'^^xsd:float)
->
 (?location perSys:AdaptedSpecificLocation ?specificLocation)]

Если бы вы нарисовали структуру графика, это выглядело бы следующим образом. Сплошные линии - это отношения в ваших данных, а пунктирные линии - это те, которые будут выведены из правила.

изображение правила

Видите, что вы должны соответствовать всей структуре данных? Там есть контекст, и у него есть местоположение и сеть. Местоположение имеет определенное местоположение, а сеть имеет пропускную способность. Когда все они совпадают, вы можете сказать, что у местоположения есть адаптированное определенное местоположение. Вот как вы должны "соединить" переменные; они должны быть как-то связаны друг с другом.

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