簡體   English   中英

SHACL在新實例上執行規則?

[英]SHACL Rule Execution on New Instances?

我有一個應用程序,其中我使用SPIN構造函數作為實現事件/條件/動作(ECA)策略的手段。 ECA是政策的一種經典構造。 在這種情況下,事件始終是在某個個體上聲明一個類,這導致該類的SPIN構造函數在該新個體上運行。 條件是在我的SPARQL WHERE子句中表達的模式,而Action是由SPARQL CONSTRUCT子句中的斷言提供的。 我的理解是SPIN構造函數只能在該類的新個體上運行,而不能在該類的所有個體上運行。

我現在正在考慮切換到SHACL作為SPIN的后繼者。 我正在使用TopBraid Composer Maestro Edition開發,並且可以使用Jena SHACL API進行實施。

假設我將ECA策略表示為SHACL形狀,並通過sh:targetClass SHACL謂詞指定了一個類。 假設我的目標課程是family:Person 每次我斷言一個新的family:Person個人,我想新個體經營我的ECA策略(表示為SHACL形狀)。 我知道可以使用偵聽器來感知新的類成員身份。 我還知道,一旦感知到更改即可在所有目標節點(在我的示例中為family:Person類的個體)上執行所有規則,就可以使用諸如RuleUtil.executeRules()類的方法。 但是, 是否有一種方法可以將SHACL形狀應用於目標類別的新個人? 在我的應用程序中,個體會隨着時間的推移而積累,並且可能會變得非常多。 我擔心,針對相同的,老的,不變的個人反復運行形狀的計算量會變得很大。

解決問題的一種可能方法是使用“第三方”關系標記已被規則處理的個人,並在規則引用的sh:條件中使用此類標記。

您將獲得類似的內容:

:MyCondition
    a sh:NodeShape ;
    rdfs:comment "The condition preventing re-application of the rule";
    sh:targetClass :MyClass ;
    sh:sparql [
        sh:select """
        PREFIX : <http://example.com/ns#>
        PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
        SELECT $this
        WHERE {
            # Here, the $this will be the focus node of the target class
            $this :hasMarking "true"^^xsd:boolean.
        }
        """;
    ].

:MyRule
    a sh:NodeShape ;
    rdfs:comment "The rule should be applied only once";
    sh:targetClass :MyClass ;
    sh:rule [
        a sh:SPARQLRule ;
        sh:condition :MyCondition ;
        sh:construct """
            PREFIX : <http://example.com/ns#>

            CONSTRUCT {
                $this :hasMarking "true"^^xsd:boolean.
            } WHERE {
                $this :property :object.
                # Here, the body of the rule
                # ...
            }
        """;
    ].

在這種情況下,標記是基於簡單的布爾屬性,但也可以基於規則主體捕獲的更有用的信息,並代表規則結果,即$this :property :Object ,其中property僅根據您的規則推斷。

“新個人”的概念聽起來是特定於應用程序的,並且取決於執行邏輯。 沒有人會強迫任何人使用sh:targetClass,也不需要一直運行所有規則。 您可以在API級別上進行控制。 除了sh:targetClass之外,您還可以使用其他選擇的屬性,例如ex:constructedClass,並實現一個基於Java的函數,該函數將新實例作為輸入並跟隨該屬性查找所有適用的形狀。 如果您認為這里有一個通用模式,可以將它們添加到事實上的擴展名稱空間中,例如破折號:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM