Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Scala Steward: Reformat with scalafmt 3.7.17
dc0d4368f9742bdc645162c29f5d1fdddb065f60
2 changes: 1 addition & 1 deletion .scalafmt.conf
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version = "3.7.15"
version = "3.7.17"
style = defaultWithAlign
maxColumn = 120
runner.dialect = scala212source3
192 changes: 96 additions & 96 deletions modules/shacl/src/main/scala/es/weso/shacl/Component.scala
Original file line number Diff line number Diff line change
@@ -1,96 +1,96 @@
package es.weso.shacl
import es.weso.rdf.nodes.{IRI, Literal, RDFNode}
sealed abstract class Component {
val name: String
}
case class ClassComponent(value: RDFNode) extends Component {
override val name: String = "class"
}
case class Datatype(value: IRI) extends Component {
override val name: String = "datatype"
}
case class NodeKind(value: NodeKindType) extends Component {
override val name: String = "nodeKind"
}
case class MinCount(value: Int) extends Component {
override val name: String = "minCount"
}
case class MaxCount(value: Int) extends Component {
override val name: String = "maxCount"
}
case class MinExclusive(value: Literal) extends Component {
override val name: String = "minExclusive"
}
case class MinInclusive(value: Literal) extends Component {
override val name: String = "minInclusive"
}
case class MaxExclusive(value: Literal) extends Component {
override val name: String = "maxExclusive"
}
case class MaxInclusive(value: Literal) extends Component {
override val name: String = "maxInclusive"
}
case class MinLength(value: Int) extends Component {
override val name: String = "minLength"
}
case class MaxLength(value: Int) extends Component {
override val name: String = "maxLength"
}
case class Pattern(pattern: String, flags: Option[String]) extends Component {
override val name: String = "pattern"
}
case class UniqueLang(value: Boolean) extends Component {
override val name: String = "uniqueLang"
}
case class LanguageIn(langs: List[String]) extends Component {
override val name: String = "languageIn"
}
case class Equals(p: IRI) extends Component {
override val name: String = "equals"
}
case class Disjoint(p: IRI) extends Component {
override val name: String = "disjoint"
}
case class LessThan(p: IRI) extends Component {
override val name: String = "lessThan"
}
case class LessThanOrEquals(p: IRI) extends Component {
override val name: String = "lessThanOrEquals"
}
case class Or(shapes: List[RefNode]) extends Component {
override val name: String = "or"
}
case class And(shapes: List[RefNode]) extends Component {
override val name: String = "and"
}
case class Not(shape: RefNode) extends Component {
override val name: String = "not"
}
case class Xone(shapes: List[RefNode]) extends Component {
override val name: String = "xone"
}
case class Closed(isClosed: Boolean, ignoredProperties: List[IRI]) extends Component {
override val name: String = "closed"
}
case class NodeComponent(shape: RefNode) extends Component {
override val name: String = "node"
}
case class HasValue(value: Value) extends Component {
override val name: String = "hasValue"
}
case class In(list: List[Value]) extends Component {
override val name: String = "in"
}
// TODO: Change representation to include optional parent shape
case class QualifiedValueShape(
shape: RefNode,
qualifiedMinCount: Option[Int],
qualifiedMaxCount: Option[Int],
qualifiedValueShapesDisjoint: Option[Boolean]) extends Component {
override val name: String = "qualifiedValueShape"
}
package es.weso.shacl

import es.weso.rdf.nodes.{IRI, Literal, RDFNode}

sealed abstract class Component {
val name: String
}

case class ClassComponent(value: RDFNode) extends Component {
override val name: String = "class"
}
case class Datatype(value: IRI) extends Component {
override val name: String = "datatype"
}
case class NodeKind(value: NodeKindType) extends Component {
override val name: String = "nodeKind"
}
case class MinCount(value: Int) extends Component {
override val name: String = "minCount"
}
case class MaxCount(value: Int) extends Component {
override val name: String = "maxCount"
}
case class MinExclusive(value: Literal) extends Component {
override val name: String = "minExclusive"
}
case class MinInclusive(value: Literal) extends Component {
override val name: String = "minInclusive"
}
case class MaxExclusive(value: Literal) extends Component {
override val name: String = "maxExclusive"
}
case class MaxInclusive(value: Literal) extends Component {
override val name: String = "maxInclusive"
}
case class MinLength(value: Int) extends Component {
override val name: String = "minLength"
}
case class MaxLength(value: Int) extends Component {
override val name: String = "maxLength"
}
case class Pattern(pattern: String, flags: Option[String]) extends Component {
override val name: String = "pattern"
}
case class UniqueLang(value: Boolean) extends Component {
override val name: String = "uniqueLang"
}
case class LanguageIn(langs: List[String]) extends Component {
override val name: String = "languageIn"
}
case class Equals(p: IRI) extends Component {
override val name: String = "equals"
}
case class Disjoint(p: IRI) extends Component {
override val name: String = "disjoint"
}
case class LessThan(p: IRI) extends Component {
override val name: String = "lessThan"
}
case class LessThanOrEquals(p: IRI) extends Component {
override val name: String = "lessThanOrEquals"
}
case class Or(shapes: List[RefNode]) extends Component {
override val name: String = "or"
}
case class And(shapes: List[RefNode]) extends Component {
override val name: String = "and"
}
case class Not(shape: RefNode) extends Component {
override val name: String = "not"
}
case class Xone(shapes: List[RefNode]) extends Component {
override val name: String = "xone"
}
case class Closed(isClosed: Boolean, ignoredProperties: List[IRI]) extends Component {
override val name: String = "closed"
}
case class NodeComponent(shape: RefNode) extends Component {
override val name: String = "node"
}
case class HasValue(value: Value) extends Component {
override val name: String = "hasValue"
}
case class In(list: List[Value]) extends Component {
override val name: String = "in"
}

// TODO: Change representation to include optional parent shape
case class QualifiedValueShape(
shape: RefNode,
qualifiedMinCount: Option[Int],
qualifiedMaxCount: Option[Int],
qualifiedValueShapesDisjoint: Option[Boolean]
) extends Component {
override val name: String = "qualifiedValueShape"
}
137 changes: 70 additions & 67 deletions modules/shacl/src/main/scala/es/weso/shacl/MessageMap.scala
Original file line number Diff line number Diff line change
@@ -1,67 +1,70 @@
package es.weso.shacl
import cats._
import cats.implicits._
import es.weso.rdf.nodes.{Lang, LangLiteral, RDFNode, StringLiteral}

case class MessageMap(mmap: Map[Option[Lang], String]) {

def getRDFNodes: List[RDFNode] = mmap.toList.map {
case (maybeLang, str) =>
maybeLang match {
case None => StringLiteral(str)
case Some(lang) => LangLiteral(str, lang)
}
}

def addMessage(node: RDFNode): Either[String, MessageMap] = node match {
case StringLiteral(str) => mmap.get(None) match {
case None => Right(MessageMap(mmap.updated(None, str)))
case Some(other) => Left(s"Trying to create two messages without language tag: $other and $str")
}
case LangLiteral(str,lang) => mmap.get(Some(lang)) match {
case None => Right(MessageMap(mmap.updated(Some(lang), str)))
case Some(other) => Left(s"Trying to create two messages with same language tag ($lang): $other and $str")
}
case _ => Left(s"Node $node must be a string or a language tagged string to be a message")
}

override def toString(): String = Show[MessageMap].show(this)

}

object MessageMap {

def fromString(msg: String): MessageMap = {
MessageMap(Map(None -> msg))
}

def fromRDFNodes(nodes: List[RDFNode]): Either[String, MessageMap] = {
val zero: Either[String,MessageMap] = Right(MessageMap(Map()))
def cmb(rest: Either[String,MessageMap], x: RDFNode): Either[String,MessageMap] = for {
mmap <- rest
r <- mmap.addMessage(x)
} yield r
nodes.foldLeft(zero)(cmb)
}

implicit def monoidMessageMap: Monoid[MessageMap] = new Monoid[MessageMap] {
override def empty: MessageMap = MessageMap(Map())

override def combine(m1: MessageMap, m2: MessageMap): MessageMap =
MessageMap(m1.mmap |+| m2.mmap)
}

implicit def showMessageMap: Show[MessageMap] = new Show[MessageMap] {
override def show(m: MessageMap): String = {
m.mmap.toList.map { case (maybeLang,msg) =>
maybeLang match {
case None => msg
case Some(lang) => s"$msg@$lang"
}
}.mkString(",")
}
}

def empty: MessageMap = Monoid[MessageMap].empty

}
package es.weso.shacl
import cats._
import cats.implicits._
import es.weso.rdf.nodes.{Lang, LangLiteral, RDFNode, StringLiteral}

case class MessageMap(mmap: Map[Option[Lang], String]) {

def getRDFNodes: List[RDFNode] = mmap.toList.map { case (maybeLang, str) =>
maybeLang match {
case None => StringLiteral(str)
case Some(lang) => LangLiteral(str, lang)
}
}

def addMessage(node: RDFNode): Either[String, MessageMap] = node match {
case StringLiteral(str) =>
mmap.get(None) match {
case None => Right(MessageMap(mmap.updated(None, str)))
case Some(other) => Left(s"Trying to create two messages without language tag: $other and $str")
}
case LangLiteral(str, lang) =>
mmap.get(Some(lang)) match {
case None => Right(MessageMap(mmap.updated(Some(lang), str)))
case Some(other) => Left(s"Trying to create two messages with same language tag ($lang): $other and $str")
}
case _ => Left(s"Node $node must be a string or a language tagged string to be a message")
}

override def toString(): String = Show[MessageMap].show(this)

}

object MessageMap {

def fromString(msg: String): MessageMap = {
MessageMap(Map(None -> msg))
}

def fromRDFNodes(nodes: List[RDFNode]): Either[String, MessageMap] = {
val zero: Either[String, MessageMap] = Right(MessageMap(Map()))
def cmb(rest: Either[String, MessageMap], x: RDFNode): Either[String, MessageMap] = for {
mmap <- rest
r <- mmap.addMessage(x)
} yield r
nodes.foldLeft(zero)(cmb)
}

implicit def monoidMessageMap: Monoid[MessageMap] = new Monoid[MessageMap] {
override def empty: MessageMap = MessageMap(Map())

override def combine(m1: MessageMap, m2: MessageMap): MessageMap =
MessageMap(m1.mmap |+| m2.mmap)
}

implicit def showMessageMap: Show[MessageMap] = new Show[MessageMap] {
override def show(m: MessageMap): String = {
m.mmap.toList
.map { case (maybeLang, msg) =>
maybeLang match {
case None => msg
case Some(lang) => s"$msg@$lang"
}
}
.mkString(",")
}
}

def empty: MessageMap = Monoid[MessageMap].empty

}
52 changes: 26 additions & 26 deletions modules/shacl/src/main/scala/es/weso/shacl/NodeKindType.scala
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
package es.weso.shacl
import es.weso.rdf.nodes.IRI
import es.weso.shacl.SHACLPrefixes._
sealed trait NodeKindType {
def id: IRI
}
case object IRIKind extends NodeKindType {
override def id = `sh:IRI`
}
case object LiteralKind extends NodeKindType {
override def id = `sh:Literal`
}
case object BlankNodeKind extends NodeKindType {
override def id = `sh:BlankNode`
}
case object BlankNodeOrIRI extends NodeKindType {
override def id = `sh:BlankNodeOrIRI`
}
case object BlankNodeOrLiteral extends NodeKindType {
override def id = `sh:BlankNodeOrLiteral`
}
case object IRIOrLiteral extends NodeKindType {
override def id = `sh:IRIOrLiteral`
}
package es.weso.shacl

import es.weso.rdf.nodes.IRI
import es.weso.shacl.SHACLPrefixes._

sealed trait NodeKindType {
def id: IRI
}
case object IRIKind extends NodeKindType {
override def id = `sh:IRI`
}
case object LiteralKind extends NodeKindType {
override def id = `sh:Literal`
}
case object BlankNodeKind extends NodeKindType {
override def id = `sh:BlankNode`
}
case object BlankNodeOrIRI extends NodeKindType {
override def id = `sh:BlankNodeOrIRI`
}
case object BlankNodeOrLiteral extends NodeKindType {
override def id = `sh:BlankNodeOrLiteral`
}
case object IRIOrLiteral extends NodeKindType {
override def id = `sh:IRIOrLiteral`
}
Loading