Skip to content

Commit

Permalink
#429 extract placeholders, integrate module
Browse files Browse the repository at this point in the history
  • Loading branch information
luigi-asprino committed Nov 29, 2023
1 parent d8a147d commit 7ea9529
Show file tree
Hide file tree
Showing 7 changed files with 126 additions and 51 deletions.
6 changes: 6 additions & 0 deletions sparql-anything-engine/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,12 @@
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>io.github.sparql-anything</groupId>
<artifactId>sparql-anything-slides</artifactId>
<version>${project.version}</version>
</dependency>

<!-- https://mvnrepository.com/artifact/commons-cli/commons-cli -->
<dependency>
<groupId>commons-cli</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ public final class FacadeX {
Registry.registerTriplifier("io.github.sparqlanything.spreadsheet.SpreadsheetTriplifier", new String[]{"xls", "xlsx"}, new String[]{"application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});
Registry.registerTriplifier(RDFTriplifier.class.getCanonicalName(), new String[]{"rdf", "ttl", "nt", "jsonld", "owl", "trig", "nq", "trix", "trdf"}, new String[]{"application/rdf+thrift", "application/trix+xml", "application/n-quads", "text/trig", "application/owl+xml", "text/turtle", "application/rdf+xml", "application/n-triples", "application/ld+json"});
Registry.registerTriplifier("io.github.sparqlanything.binary.BinaryTriplifier", new String[]{"png", "jpeg", "jpg", "bmp", "tiff", "tif", "ico"}, new String[]{"image/png", "image/jpeg", "image/bmp", "image/tiff", "image/vnd.microsoft.icon"});
Registry.registerTriplifier("io.github.sparqlanything.slides.PptxTriplifier", new String[]{"pptx"}, new String[]{"application/vnd.openxmlformats-officedocument.presentationml.presentation"});

} catch (TriplifierRegisterException e) {
throw new RuntimeException(e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.xml.transform.Result;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
Expand All @@ -45,7 +46,7 @@ public class ItTest {
public void RegistryExtensionsTest() {
for (String ext : new String[]{"json", "html", "xml", "csv", "bin", "png", "jpeg", "jpg", "bmp", "tiff",
"tif", "ico", "txt", "xlsx", "xls", "rdf", "ttl", "nt", "jsonld", "owl", "trig", "nq", "trix", "trdf",
"zip", "tar", "docx", "bib", "bibtex"}) {
"zip", "tar", "docx", "bib", "bibtex", "pptx"}) {
Assert.assertNotNull(ext, FacadeX.Registry.getTriplifierForExtension(ext));
}
}
Expand All @@ -59,7 +60,7 @@ public void RegistryMimeTypesTest() {
"application/trix+xml", "application/n-quads", "text/trig", "application/owl+xml", "text/turtle",
"application/rdf+xml", "application/n-triples", "application/ld+json", "application/zip",
"application/x-tar", "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"application/x-bibtex"}) {
"application/x-bibtex", "application/vnd.openxmlformats-officedocument.presentationml.presentation"}) {
Assert.assertNotNull(mt, FacadeX.Registry.getTriplifierForMimeType(mt));
}
}
Expand Down Expand Up @@ -386,6 +387,28 @@ public void testFromArchive() throws IOException, URISyntaxException {

}

@Test
public void testPptx() throws URISyntaxException {
String pptx = Objects.requireNonNull(getClass().getClassLoader().getResource("Presentation1.pptx")).toURI().toString();

String q = "PREFIX xyz: <http://sparql.xyz/facade-x/data/> PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX fx: <http://sparql.xyz/facade-x/ns/> SELECT * {SERVICE <x-sparql-anything:> { fx:properties fx:location ?location . ?title a xyz:CENTERED_TITLE ; rdf:_1 ?o} }";

ParameterizedSparqlString pss = new ParameterizedSparqlString(q);
pss.setIri("location", pptx);
Dataset kb = DatasetFactory.createGeneral();
QC.setFactory(ARQ.getContext(), FacadeX.ExecutorFactory);

ResultSet rs = QueryExecutionFactory.create(pss.asQuery(), kb).execSelect();

String res = null;

if (rs.hasNext()) {
res = rs.next().get("o").asLiteral().getValue().toString();
}
assertEquals("This is a test presentation", res);

}

@Test
public void testXIP() throws IOException, URISyntaxException {
String archive = getClass().getClassLoader().getResource("test.tar").toURI().toString();
Expand Down Expand Up @@ -519,6 +542,8 @@ public void testBibtex() throws IOException, URISyntaxException {

}



@Test
public void testAnySlotMagicPropertyPropertyPath() throws IOException, URISyntaxException {
String location = getClass().getClassLoader().getResource("propertypath.json").toURI().toString();
Expand Down
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@
import io.github.sparqlanything.model.SPARQLAnythingConstants;
import io.github.sparqlanything.model.Triplifier;
import io.github.sparqlanything.model.TriplifierHTTPException;
import org.apache.commons.compress.utils.Sets;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFTextShape;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -34,26 +36,12 @@

public class PptxTriplifier implements Triplifier {

public final static String MERGE_PARAGRAPHS = "docs.merge-paragraphs";
public final static String TABLE_HEADERS = "docs.table-headers";

private static final Logger logger = LoggerFactory.getLogger(PptxTriplifier.class);

private static void addOptionalValue(FacadeXGraphBuilder builder, String dataSourceId, String containerId, AtomicInteger slotKey, String type, Object value){
if(value!=null){
String newContainer = containerId + "/" + type;
builder.addContainer(dataSourceId, containerId, slotKey.getAndIncrement(), newContainer );
builder.addType(dataSourceId, newContainer, type);
builder.addValue(dataSourceId, newContainer, 1, value);

}
}

@Override
public void triplify(Properties properties, FacadeXGraphBuilder builder) throws IOException, TriplifierHTTPException {
URL url = Triplifier.getLocation(properties);
if (url == null)
return;
if (url == null) return;
String dataSourceId = "";

builder.addRoot(dataSourceId);
Expand All @@ -65,36 +53,43 @@ public void triplify(Properties properties, FacadeXGraphBuilder builder) throws

builder.addType(dataSourceId, SPARQLAnythingConstants.ROOT_ID, "Presentation");

for(XSLFSlide slide : slides.getSlides()){
String slideId = dataSourceId + "_slide_" + slideNumber;
builder.addContainer(dataSourceId, SPARQLAnythingConstants.ROOT_ID, slideId, slideId);
slideNumber ++;
for (XSLFSlide slide : slides.getSlides()) {
String slideId = dataSourceId + "/Slide_" + slideNumber;
builder.addContainer(dataSourceId, SPARQLAnythingConstants.ROOT_ID, slideNumber, slideId);
slideNumber++;

AtomicInteger slideSlotNumber = new AtomicInteger(1);

builder.addType(dataSourceId, slideId, "Slide");
addOptionalValue(builder, dataSourceId, slideId, slideSlotNumber, "Title", slide.getTitle() );
addOptionalValue(builder, dataSourceId, slideId, slideSlotNumber,"SlideName", slide.getSlideName() );
addOptionalValue(builder, dataSourceId, slideId, slideSlotNumber, "SlideNumber", slide.getSlideNumber() );
// addOptionalValue(builder, dataSourceId, slideId, slideSlotNumber, "SlideNumber", slide.get );

for (XSLFTextShape shape : slide.getPlaceholders()) {
addOptionalValue(builder, dataSourceId, slideId, slideSlotNumber, shape.getTextType().toString(), shape.getText());
}

}
}


}

private static void addOptionalValue(FacadeXGraphBuilder builder, String dataSourceId, String containerId, AtomicInteger slotKey, String type, Object value) {
if (value != null) {
String newContainer = containerId + "/" + type;
builder.addContainer(dataSourceId, containerId, slotKey.getAndIncrement(), newContainer);
builder.addType(dataSourceId, newContainer, type);
builder.addValue(dataSourceId, newContainer, 1, value);

}
}

@Override
public Set<String> getMimeTypes() {
// return Sets.newHashSet("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
return null;
return Sets.newHashSet("application/vnd.openxmlformats-officedocument.presentationml.presentation");
}

@Override
public Set<String> getExtensions() {
// return Sets.newHashSet("docx");
return null;
return Sets.newHashSet("pptx");
}

}
Original file line number Diff line number Diff line change
@@ -1,39 +1,30 @@
package io.github.sparqlanything.slides.test;

import io.github.sparqlanything.model.BaseFacadeXGraphBuilder;
import io.github.sparqlanything.model.FacadeXGraphBuilder;
import io.github.sparqlanything.model.IRIArgument;
import io.github.sparqlanything.model.*;
import io.github.sparqlanything.slides.PptxTriplifier;
import io.github.sparqlanything.testutils.AbstractTriplifierTester;
import org.apache.jena.riot.Lang;
import org.apache.jena.riot.RDFDataMgr;
import org.apache.jena.sparql.core.DatasetGraph;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFTextShape;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicInteger;

public class PptxTest {
public class PptxTest extends AbstractTriplifierTester {

public static void main(String[] args) {
System.out.println("test");
public PptxTest() {
super(new PptxTriplifier(), new Properties(), "pptx");
}

@Test
public void test(){

PptxTriplifier st = new PptxTriplifier();
URL doc = st.getClass().getClassLoader().getResource("./Presentation1.pptx");
Properties p = new Properties();
DatasetGraph dg;
try {
p.setProperty(IRIArgument.LOCATION.toString(), doc.toString());
FacadeXGraphBuilder b = new BaseFacadeXGraphBuilder(p);
st.triplify(p, b);
dg = b.getDatasetGraph();
RDFDataMgr.write(System.out, dg, Lang.TRIG);
}catch (Exception ignored){

}

public void testPresentation1() {
this.assertResultIsIsomorphicWithExpected();
}
}
57 changes: 57 additions & 0 deletions sparql-anything-slides/src/test/resources/Presentation1.ttl
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix eg: <http://www.example.org/> .
@prefix fx: <http://sparql.xyz/facade-x/ns/> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rss: <http://purl.org/rss/1.0/> .
@prefix vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> .
@prefix whatwg: <https://html.spec.whatwg.org/#> .
@prefix xhtml: <http://www.w3.org/1999/xhtml#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix xyz: <http://sparql.xyz/facade-x/data/> .

<http://www.example.org/document/Slide_1/CENTERED_TITLE>
rdf:type xyz:CENTERED_TITLE ;
rdf:_1 "This is a test presentation" .

<http://www.example.org/document/Slide_2>
rdf:type xyz:Slide ;
rdf:_1 <http://www.example.org/document/Slide_2/TITLE> ;
rdf:_2 <http://www.example.org/document/Slide_2/CONTENT> .

eg:document rdf:type xyz:Presentation , fx:root ;
rdf:_1 <http://www.example.org/document/Slide_1> ;
rdf:_2 <http://www.example.org/document/Slide_2> ;
rdf:_3 <http://www.example.org/document/Slide_3> .

<http://www.example.org/document/Slide_3>
rdf:type xyz:Slide ;
rdf:_1 <http://www.example.org/document/Slide_3/TITLE> ;
rdf:_2 <http://www.example.org/document/Slide_3/CONTENT> .

<http://www.example.org/document/Slide_2/CONTENT>
rdf:type xyz:CONTENT ;
rdf:_1 "Bullet 1\nBullet 2" .

<http://www.example.org/document/Slide_1/SUBTITLE>
rdf:type xyz:SUBTITLE ;
rdf:_1 "This is the subtitle" .

<http://www.example.org/document/Slide_3/CONTENT>
rdf:type xyz:CONTENT ;
rdf:_1 "Bullet 1\nBullet 2" .

<http://www.example.org/document/Slide_1>
rdf:type xyz:Slide ;
rdf:_1 <http://www.example.org/document/Slide_1/CENTERED_TITLE> ;
rdf:_2 <http://www.example.org/document/Slide_1/SUBTITLE> .

<http://www.example.org/document/Slide_2/TITLE>
rdf:type xyz:TITLE ;
rdf:_1 "First slide" .

<http://www.example.org/document/Slide_3/TITLE>
rdf:type xyz:TITLE ;
rdf:_1 "Second slide" .

0 comments on commit 7ea9529

Please sign in to comment.