代码之家  ›  专栏  ›  技术社区  ›  Fatma Fatma

编写Jena规则以向具有某些特定属性值的资源添加属性?

  •  1
  • Fatma Fatma  · 技术社区  · 9 年前

    我正在尝试编写一个Jena规则,它的先行项与网络带宽为450^^xsd:float的位置相匹配。我尝试了以下两条规则。第一个没有给我任何结果。第二个匹配标记为Gate 23的网络 15号门,但只有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 回复  |  直到 6 年前
        1
  •  0
  •   Joshua Taylor    9 年前

    第二条规则是错误的

    第二条规则被打破,因为d2和d3变量的值之间没有联系:

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

    这大致说明:

    如果 一些X具有NetworkCharacteristics类型并具有带宽450, 然后 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)]
    

    如果要绘制图形结构,它将如下所示。实线是数据中的关系,虚线是规则将推断的关系。

    depiction of rule

    看到您必须匹配整个数据结构吗?有一个上下文,它有一个位置和一个网络。位置具有特定位置,网络具有带宽。当所有这些匹配时,您可以说该位置有一个经过调整的特定位置。这就是如何“连接”变量;他们需要以某种方式相互联系。