diff --git a/src/main/java/widoco/CreateResources.java b/src/main/java/widoco/CreateResources.java
index 04b106c5..16d0b95a 100644
--- a/src/main/java/widoco/CreateResources.java
+++ b/src/main/java/widoco/CreateResources.java
@@ -95,7 +95,7 @@ public static void generateDocumentation(String outFolder, Configuration c, File
if (c.isIncludeOverview()) {
overview = createOverviewSection(folderOut + File.separator + "sections", c, lode.getClassList(),
lode.getPropertyList(), lode.getDataPropList(), lode.getAnnotationPropList(),
- lode.getNamedIndividualList(), lode.getRuleList(), languageFile);
+ lode.getNamedIndividualList(), lode.getRuleList(), lode.getSwrlruleslist(),languageFile);
}
if (c.isIncludeDescription()) {
description = createDescriptionSection(folderOut + File.separator + "sections", c, languageFile);
@@ -253,7 +253,7 @@ private static String createIntroductionSection(String path, Configuration c,Pro
// the lists passed onto this method are the fixed lists
private static String createOverviewSection(String path, Configuration c, String classesList, String propList,
- String dataPropList, String annotationProps, String namedIndividuals, String rules, Properties lang) {
+ String dataPropList, String annotationProps, String namedIndividuals, String rules, String swrlRules, Properties lang) {
String textToWrite = "";
if ((c.getOverviewPath() != null) && (!"".equals(c.getOverviewPath()))) {
textToWrite = WidocoUtils.readExternalResource(c.getOverviewPath());
@@ -279,11 +279,16 @@ private static String createOverviewSection(String path, Configuration c, String
textToWrite += ("
" + lang.getProperty(Constants.LANG_NAMED_INDIV) + "
");
textToWrite += (namedIndividuals);
}
- if (!"".equals(rules) && rules != null ) {
- //only eng support for now
- textToWrite += (" Rules
");
- textToWrite += (rules);
- }
+ if (!"".equals(rules) && rules != null ) {
+ //only eng support for now
+ textToWrite += (" Rules
");
+ textToWrite += (rules);
+ }
+ if (!"".equals(swrlRules) && swrlRules != null ) {
+ //only eng support for now
+ textToWrite += (" SWRL Rules
");
+ textToWrite += (swrlRules);
+ }
// add the webvowl diagram, if selected
if (c.isCreateWebVowlVisualization()) {
textToWrite += " ";
@@ -342,11 +347,15 @@ private static String createCrossReferenceSection(String path, LODEParser lodePa
if (includesNamedIndividual) {
textToWrite += lodeParser.getNamedIndividuals();
}
- //since rules are an edge case, if they exist we add them
+ //since rules and swrl rules are an edge case, if they exist we add them
if(lodeParser.getRuleList()!=null && !lodeParser.getRuleList().isEmpty()){
textToWrite += lodeParser.getRules();
}
+ if(lodeParser.getSwrlruleslist()!=null && !lodeParser.getSwrlruleslist().isEmpty()){
+ textToWrite += lodeParser.getSwrlrules();
+ }
+
// Add legend (for ontology components actually used).
textToWrite += Constants.getLegend(lang, includesClass, includesProperty,
includesDatatypeProperty, includesAnnotation, includesNamedIndividual);
diff --git a/src/main/java/widoco/LODEParser.java b/src/main/java/widoco/LODEParser.java
index f27d770c..2c583158 100644
--- a/src/main/java/widoco/LODEParser.java
+++ b/src/main/java/widoco/LODEParser.java
@@ -21,6 +21,7 @@
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Properties;
+import java.util.Objects;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
@@ -43,7 +44,7 @@
/**
* Class made for parsing and manipulating LODE's html. This class contains most
* of the TemplateGeneratorOLD class
- *
+ *
* @author Daniel Garijo
*/
public class LODEParser {
@@ -65,12 +66,14 @@ public class LODEParser {
private String namedIndividualList;
private String rules;
private String ruleList;
+ private String swrlrules;
+ private String swrlruleslist;
Configuration c;
/**
* Constructor for the LODE parser. The reason for creating this class is to reuse certain parts of
* the generated HTML.
- *
+ *
* @param lodeContent
* text obtained as a response from LODE.
* @param c
@@ -133,6 +136,42 @@ public String getRuleList() {
return ruleList;
}
+ public String getSwrlrules() {
+ return swrlrules;
+ }
+
+ public String getSwrlruleslist() {
+ return swrlruleslist;
+ }
+
+ /**
+ * Check if rules are really defined or if the xslt
+ * generated an empty rule list.
+ * @return
+ */
+ private boolean rulesDefined(){
+
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder = null;
+ try {
+ builder = factory.newDocumentBuilder();
+ } catch (ParserConfigurationException e) {
+ throw new RuntimeException(e);
+ }
+ // Parse the HTML string as XML
+ Document doc = null;
+ try {
+ doc = builder.parse(new ByteArrayInputStream(ruleList.getBytes()));
+ } catch (SAXException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ // Get the list of elements
+ NodeList ruleNodes = doc.getElementsByTagName("li");
+ return ruleNodes.getLength()>0;
+ }
+
private void parse(String content, Properties langFile) {
try {
@@ -185,12 +224,28 @@ private void parse(String content, Properties langFile) {
/*missing: rules!*/
case "rules":
ruleList = (getTermList(html.item(i)));
- rules = (nodeToString(html.item(i)));
+ if (rulesDefined()){
+ rules = (nodeToString(html.item(i)));
+ } else {
+ // No rules defined, false positive
+ // this happens if owl:NamedIndividuals are defined
+ // that do not meet the requirements set in
+ // src/main/resources/lode/extraction.xsl
+ //
+ ruleList="";
+ rules ="";
+ }
// rules = rules.replace(
// "" + langFile.getProperty(Constants.LANG_NAMED_INDIV) + "
",
// ""
// + langFile.getProperty(Constants.LANG_NAMED_INDIV) + "
");
break;
+ case "swrlrules":
+ swrlruleslist = (getTermList(html.item(i)));
+ swrlrules = (nodeToString(html.item(i)));
+ swrlrules = swrlrules.replace("SWRL rules
",
+ "SWRL rules
");
+ break;
}
}
// fix ids
@@ -221,6 +276,10 @@ private void parse(String content, Properties langFile) {
rules = rules.replace("Named Individual ToC",
"Rules ToC");
}
+ if (!"".equals(swrlruleslist) && swrlruleslist != null) {
+ swrlruleslist = fixIds(swrlruleslist);
+ swrlrules = fixIds(swrlrules);
+ }
logger.info("Parsing Complete!");
} catch (ParserConfigurationException | DOMException ex) {
logger.error("Exception interpreting the resource: " + ex.getMessage());
@@ -263,6 +322,12 @@ private String nodeToString(Node n) {
// (the second one)
private Node fixAnchor(Node nodeToFix) {
try {
+ String AttrID = nodeToFix.getAttributes().item(0).getTextContent();
+ // Do nothing for swrl rules, they do not have
+ // and
+ if (Objects.equals(AttrID, "swrlrules")) {
+ return nodeToFix;
+ }
NodeList outerDiv = nodeToFix.getChildNodes();
for (int i = 0; i < outerDiv.getLength(); i++) {
Node currentNode = outerDiv.item(i);
@@ -307,7 +372,7 @@ private Node fixAnchor(Node nodeToFix) {
/**
* Method to fix the ids generated automatically by LODE with the URIs of the
* classes and properties.
- *
+ *
* @param textToBeFixed
* The input text with the links to be fixed
* @return
diff --git a/src/main/resources/lode.zip b/src/main/resources/lode.zip
index 9d55f377..02b46e60 100644
Binary files a/src/main/resources/lode.zip and b/src/main/resources/lode.zip differ
diff --git a/src/main/resources/lode/extraction.xsl b/src/main/resources/lode/extraction.xsl
index ed318795..2dafcced 100644
--- a/src/main/resources/lode/extraction.xsl
+++ b/src/main/resources/lode/extraction.xsl
@@ -1723,7 +1723,7 @@ http://www.oxygenxml.com/ns/doc/xsl ">
-
+
diff --git a/src/main/resources/lode/swrl-module.xsl b/src/main/resources/lode/swrl-module.xsl
index 7079e708..78c30fa7 100644
--- a/src/main/resources/lode/swrl-module.xsl
+++ b/src/main/resources/lode/swrl-module.xsl
@@ -28,18 +28,61 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
xmlns:f="http://www.essepuntato.it/xslt/function"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns="http://www.w3.org/1999/xhtml">
-
+
+
+
+
+
+
+
+
+
+
+ Rule #
+
+
+
+
+
+
+
+
+
+
+
+
-
Rule #
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
->
-
+
@@ -140,6 +183,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
SWRL rules
+