Skip to content

Commit

Permalink
Fix SWRL parsing
Browse files Browse the repository at this point in the history
Addes support for correct xslt transformation
for TOC and SWRL display. The transformation checks
if rdfs:label is defined if not the rules are generically
number as they appear in the XML serialization of the ontology.
  • Loading branch information
Victor Chavez committed Dec 11, 2023
1 parent 4da92b2 commit 23a1539
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 9 deletions.
17 changes: 11 additions & 6 deletions src/main/java/widoco/LODEParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -182,14 +182,13 @@ private void parse(String content, Properties langFile) {
"<h3 id=\"namedindividuals\" class=\"list\">"
+ langFile.getProperty(Constants.LANG_NAMED_INDIV) + "</h3>");
break;
/*missing: rules!*/
case "rules":
case "swrlrules":
ruleList = (getTermList(html.item(i)));
rules = (nodeToString(html.item(i)));
// rules = rules.replace(
// "<h2>" + langFile.getProperty(Constants.LANG_NAMED_INDIV) + "</h2>",
// "<h3 id=\"rules\" class=\"list\">"
// + langFile.getProperty(Constants.LANG_NAMED_INDIV) + "</h3>");
rules = rules.replace(
"<h2>" + langFile.getProperty(Constants.LANG_NAMED_INDIV) + "</h2>",
"<h3 id=\"rules\" class=\"list\">"
+ langFile.getProperty(Constants.LANG_NAMED_INDIV) + "</h3>");
break;
}
}
Expand Down Expand Up @@ -263,6 +262,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
// <a> and <h3>
if (Objects.equals(AttrID, "swrlrules")) {
return nodeToFix;
}
NodeList outerDiv = nodeToFix.getChildNodes();
for (int i = 0; i < outerDiv.getLength(); i++) {
Node currentNode = outerDiv.item(i);
Expand Down
Binary file modified src/main/resources/lode.zip
Binary file not shown.
48 changes: 45 additions & 3 deletions src/main/resources/lode/swrl-module.xsl
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2010-2013, Silvio Peroni <[email protected]>
Copyright (C) 2023, Victor Chavez <[email protected]>
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
Expand Down Expand Up @@ -28,18 +29,58 @@ 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">



<xsl:template match="rdf:Description" mode="toc">
<li>
<a href="#{generate-id()}">
<xsl:choose>
<xsl:when test="string(rdfs:label)">
<xsl:value-of select="rdfs:label"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>Rule #</xsl:text>
<xsl:value-of select="count(preceding-sibling::rdf:Description[rdf:type[@rdf:resource = 'http://www.w3.org/2003/11/swrl#Imp']]) + 1"/>
</xsl:otherwise>
</xsl:choose>
</a>
</li>
</xsl:template>

<xsl:template name="get.swrl.toc">
<ul class="hlist">
<xsl:apply-templates select="/rdf:RDF/rdf:Description[rdf:type[@rdf:resource='http://www.w3.org/2003/11/swrl#Imp']]" mode="toc">
<xsl:sort select="rdfs:comment" order="ascending" data-type="text"/>
</xsl:apply-templates>
</ul>
</xsl:template>

<xsl:template match="swrl:Imp | rdf:Description[rdf:type[@rdf:resource = 'http://www.w3.org/2003/11/swrl#Imp']]">
<div id="{generate-id()}" class="entity">
<h3>Rule #<xsl:value-of select="count(preceding-sibling::swrl:Imp | preceding-sibling::rdf:Description[rdf:type[@rdf:resource = 'http://www.w3.org/2003/11/swrl#Imp']]) + 1" /> <xsl:call-template name="get.backlink.to.top" /></h3>
<h3>
<xsl:choose>
<xsl:when test="string(rdfs:label)">
<xsl:value-of select="rdfs:label"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat('Rule #', count(preceding-sibling::swrl:Imp | preceding-sibling::rdf:Description[rdf:type[@rdf:resource = 'http://www.w3.org/2003/11/swrl#Imp']]) + 1)"/>
</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="get.backlink.to.top" />
</h3>
<p>
<!-- Add rdfs:comment -->
<xsl:if test="rdfs:comment">
<xsl:value-of select="rdfs:comment" /><br/><br/>
</xsl:if>
<!-- Continue with the existing content -->
<xsl:apply-templates select="swrl:body" />
<xsl:text> -> </xsl:text>
<xsl:apply-templates select="swrl:head" />
</p>
</div>
</xsl:template>

<xsl:template match="swrl:body | swrl:head | swrl:AtomList/rdf:first | rdf:Description[rdf:type[@rdf:resource = 'http://www.w3.org/2003/11/swrl#AtomList']]/rdf:first">
<xsl:apply-templates />
</xsl:template>
Expand Down Expand Up @@ -140,6 +181,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
<xsl:if test="exists(//(swrl:Imp | rdf:Description[rdf:type[@rdf:resource = 'http://www.w3.org/2003/11/swrl#Imp']]))">
<div id="swrlrules">
<h2>SWRL rules</h2>
<xsl:call-template name="get.swrl.toc"/>
<xsl:apply-templates select="//(swrl:Imp | rdf:Description[rdf:type[@rdf:resource = 'http://www.w3.org/2003/11/swrl#Imp']])" />
</div>
</xsl:if>
Expand Down

0 comments on commit 23a1539

Please sign in to comment.