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

    +