This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit 410ab38b3c6cd39a503000b049c57ace31c659a5
Author: Andy Seaborne <[email protected]>
AuthorDate: Tue May 20 12:23:14 2025 +0100

    GH-2805: Model API operations for reifiers
---
 .../main/java/org/apache/jena/rdf/model/Model.java | 50 +++++++++++++++++++---
 .../java/org/apache/jena/rdf/model/Statement.java  |  2 +-
 .../org/apache/jena/rdf/model/impl/ModelCom.java   |  2 +-
 .../apache/jena/rdf/model/impl/ResourceImpl.java   |  2 -
 .../permissions/model/impl/SecuredModelImpl.java   | 13 +++++-
 5 files changed, 58 insertions(+), 11 deletions(-)

diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/Model.java 
b/jena-core/src/main/java/org/apache/jena/rdf/model/Model.java
index f84285016a..34c51e2c4a 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/Model.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/Model.java
@@ -24,6 +24,7 @@ import java.util.function.Supplier ;
 
 import org.apache.jena.datatypes.* ;
 import org.apache.jena.shared.* ;
+import org.apache.jena.vocabulary.RDF;
 
 /**
     An RDF Model.
@@ -210,11 +211,50 @@ public interface Model
        public Resource createResource( String uri ) ;
 
        /**
-        * Create a resource that represents a statement. This is in support of 
RDF-star.
-        * @param statement
-        * @return a new resource linked to this model.
-        */
-       public Resource createResource( Statement statement ) ;
+        * Create a resource that represents a statement.
+        * This is in support of RDF 1.2 triple terms.
+     * @deprecated Use {@link #createStatementTerm}
+     */
+    @Deprecated(forRemoval = true)
+       public default RDFNode createResource( Statement statement ) {
+        return createStatementTerm(statement);
+    }
+
+    /**
+     * Create an RDFNode for a statement.
+     * This is in support of RDF 1.2 triple terms.
+     * Triple terms can only appear in the object position.
+     * Use with predicate {@code rdf:reifies}
+     *
+     * @param statement
+     * @return a new resource linked to this model.
+     */
+    public RDFNode createStatementTerm( Statement statement );
+
+    /**
+     * Create an anonymous resource that reifies a statement (RDF 1.2)
+     *
+     * @param statement
+     * @return the reifier resource.
+     */
+    public default Resource createReifiedStmt( Statement statement ) {
+        Resource reifier = this.createResource();
+        return createReifiedStmt(reifier, statement);
+    }
+
+    /**
+     * Create a reification statement in the model.
+     * {@code reifier rdf:reifies statement}
+     *
+     * @param reifier
+     * @param statement
+     * @return the reifier
+     */
+    public default Resource createReifiedStmt( Resource reifier, Statement 
statement ) {
+        RDFNode n = createStatementTerm(statement);
+        this.add(reifier, RDF.reifies, n);
+        return reifier;
+    }
 
        /**
         Create a property with a given URI composed from a namespace part and a
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/Statement.java 
b/jena-core/src/main/java/org/apache/jena/rdf/model/Statement.java
index 79ab8fb359..6c71e57803 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/Statement.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/Statement.java
@@ -69,7 +69,7 @@ public interface Statement extends FrontsTriple
      */
     public Property getPredicate();
 
-    /** An accessor funtion to return the object of the statement.
+    /** An accessor function to return the object of the statement.
      * @return Return the object of the statement.
      */
     public RDFNode getObject();
diff --git 
a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java 
b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
index 7736760a66..704d6ceaca 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
@@ -524,7 +524,7 @@ public class ModelCom extends EnhGraph implements Model, 
PrefixMapping, Lock
     { return getResource( uri ).addProperty( RDF.type, type ); }
 
     @Override
-    public Resource createResource( Statement statement )
+    public RDFNode createStatementTerm( Statement statement )
     { return new ResourceImpl( statement, this ); }
 
     /** create a type literal from a boolean value.
diff --git 
a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ResourceImpl.java 
b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ResourceImpl.java
index d5630cd250..425e611bc0 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ResourceImpl.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ResourceImpl.java
@@ -138,8 +138,6 @@ public class ResourceImpl extends EnhNode implements 
Resource {
             return this;
         if ( isAnon() )
             return m.createResource( getId() );
-        if ( isStmtResource() )
-            return m.createResource( getStmtTerm() );
         if ( asNode().isConcrete() == false )
             return (Resource) m.getRDFNode( asNode() );
         // if isURIResource()
diff --git 
a/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredModelImpl.java
 
b/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredModelImpl.java
index ef1f784ef7..5b9d762652 100644
--- 
a/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredModelImpl.java
+++ 
b/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredModelImpl.java
@@ -1345,8 +1345,17 @@ public class SecuredModelImpl extends SecuredItemImpl 
implements SecuredModel {
     }
 
     @Override
-    public Resource createResource(Statement statement) {
-        return SecuredResourceImpl.getInstance(holder.getSecuredItem(), 
holder.getBaseItem().createResource(statement));
+    public RDFNode createStatementTerm(Statement statement) {
+        return SecuredResourceImpl.getInstance(holder.getSecuredItem(), 
holder.getBaseItem().createStatementTerm(statement));
+    }
+
+    @Override
+    public Resource createReifier( Resource reifier, Statement statement ) {
+        RDFNode n = createStatementTerm(statement);
+        Statement stmt = this.createStatement(reifier, RDF.reifies, n);
+        Statement stmtx =  SecuredStatementImpl.getInstance(this, stmt);
+        this.add(stmtx);
+        return reifier;
     }
 
     private void checkReadOrUpdate(Resource s, Property p, RDFNode o) {

Reply via email to