Aller au contenu

Module:Wikidata/Chemin/Path

Cette page fait l’objet d’une mesure de semi-protection étendue.
Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 19 novembre 2016 à 16:01 et modifiée en dernier par TomT0m (discuter | contributions) (Nouvelle page : local path = {} local propt = require "Module:Propriétés" path.Node = {} function path.Node:new (o) o = o or {} setmetatable(o, self) self.__index = self return o end...). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

 Documentation[créer] [purger]
local path = {}
local propt = require "Module:Propriétés"

path.Node = {}

function path.Node:new (o)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  return o
end


path.PropertyNode = path.Node:new()

function path.PropertyNode:create(property)
	local newinst = {["property"] = property}
	setmetatable(newinst, self)
	self.__index = self
	return newinst
end

function path.PropertyNode:type()
	return "propertynode"
end

path.AlternativeNode = path.Node:new()

function path.AlternativeNode:create(nodes)
	local newinst = {["nodes"] = nodes}
	setmetatable(newinst, self)
	self.__index = self
	return newinst
end

function path.AlternativeNode:type()
	return "alternativenode"
end

path.SequenceNode = path.Node:new()

function path.SequenceNode:create(nodes)
	local newinst = {["nodes"] = nodes}
	setmetatable(newinst, self)
	self.__index = self
	return newinst
end

function path.SequenceNode:type()
	return "sequencenode"
end

path.StarNode = path.Node:new()
function path.StarNode:create(node)
	local newinst = {["node"] = node}
	setmetatable(newinst, self)
	self.__index = self
	return newinst
end

path.PlusNode = path.Node:new()
function path.PlusNode:create(node)
	local newinst = {["node"] = node}
	setmetatable(newinst, self)
	self.__index = self
	return newinst
end

path.MaybeNode = path.Node:new()
function path.MaybeNode:create(node)
	local newinst = {["node"] = node}
	setmetatable(newinst, self)
	self.__index = self
	return newinst
end

path.BetweenNode = path.Node:new()
function path.BetweenNode:create(node, min, max)
	local newinst = {
		["node"] = node, 
		["min"] = min,
		["max"] = max,
	}
	setmetatable(newinst, self)
	self.__index = self
	return newinst
end


path.InverseNode = path.Node:new()
function path.InverseNode:create(node)
	local newinst = {["node"] = node}
	setmetatable(newinst, self)
	self.__index = self
	return newinst
end

path.QualifiedStatementNode = path.Node:new()
function path.QualifiedStatementNode:create(main_prop_node, qual_node)
	local newinst = {
		["property"] = main_prop_node,
		["qualifier"] = qual_node
	}
	setmetatable(newinst, self)
	self.__index = self
	return newinst
end

path.PseudoPropertyNode = path.Node:new()
function path.PropertyNode:create(property)
end

path.PropertyNode = path.PseudoPropertyNode:new()
function path.PropertyNode:create(property)
	local newinst = {
		["property"] = propt.normalize(property)
	}
	setmetatable(newinst, self)
	self.__index = self
	return newinst
end

function path.PropertyNode:matches(property_str)
	return propt.normalize(property_str) == self.property
end

-- see https://www.w3.org/2009/sparql/docs/property-paths/Overview.xml
path.NegatedPropertySetNode = path.PseudoPropertyNode:new()
function path.NegatedPropertySetNode:create(negated_nodes)
	local newinst = {
		["negated_nodes"] = negated_nodes
	}
	setmetatable(newinst, self)
	self.__index = self
	self.props = {}
	
	for _, val in pairs(negated_nodes) do
		self.props[val.node.property] = true
	end
	
	return newinst
end

function path.NegatedPropertySetNode:inset(pid)
	return self.props[pid] ~= nil
end

function path.NegatedPropertySetNode:matches(property_str)
	return not self:inset(propt.normalize(property_str))
end

	
return path