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) {
