lib/rdf/reasoner/schema.rb in rdf-reasoner-0.2.2 vs lib/rdf/reasoner/schema.rb in rdf-reasoner-0.3.0
- old
+ new
@@ -38,11 +38,11 @@
# Every domain must match some entailed type
resource_acceptable = Array(types).empty? || domains.any? {|d| types.include?(d)}
# Resource may still be acceptable if types include schema:Role, and any any other resource references `resource` using this property
resource_acceptable ||
- types.include?(RDF::SCHEMA.Role) &&
+ types.include?(RDF::Vocab::SCHEMA.Role) &&
!queryable.query(predicate: self, object: resource).empty?
end
##
# Schema.org requires that if the property has a range, and the resource has a type that some type matches some range. If the resource is a datatyped Literal, and the range includes a datatype, the resource must be consistent with that.
@@ -63,51 +63,51 @@
if respond_to?(:rangeIncludes) && !(ranges = Array(self.rangeIncludes) - [RDF::OWL.Thing]).empty?
if resource.literal?
ranges.any? do |range|
case range
when RDF::RDFS.Literal then true
- when RDF::SCHEMA.Text then resource.plain? || resource.datatype == RDF::SCHEMA.Text
- when RDF::SCHEMA.Boolean
- [RDF::SCHEMA.Boolean, RDF::XSD.boolean].include?(resource.datatype) ||
+ when RDF::Vocab::SCHEMA.Text then resource.plain? || resource.datatype == RDF::Vocab::SCHEMA.Text
+ when RDF::Vocab::SCHEMA.Boolean
+ [RDF::Vocab::SCHEMA.Boolean, RDF::XSD.boolean].include?(resource.datatype) ||
resource.plain? && RDF::Literal::Boolean.new(resource.value).valid?
- when RDF::SCHEMA.Date
+ when RDF::Vocab::SCHEMA.Date
# Schema.org date based on ISO 8601, mapped to appropriate XSD types for validation
case resource
when RDF::Literal::Date, RDF::Literal::Time, RDF::Literal::DateTime, RDF::Literal::Duration
resource.valid?
else
ISO_8601.match(resource.value)
end
- when RDF::SCHEMA.DateTime
- resource.datatype == RDF::SCHEMA.DateTime ||
+ when RDF::Vocab::SCHEMA.DateTime
+ resource.datatype == RDF::Vocab::SCHEMA.DateTime ||
resource.is_a?(RDF::Literal::DateTime) ||
resource.plain? && RDF::Literal::DateTime.new(resource.value).valid?
- when RDF::SCHEMA.Duration
+ when RDF::Vocab::SCHEMA.Duration
value = resource.value
value = "P#{value}" unless value.start_with?("P")
- resource.datatype == RDF::SCHEMA.Duration ||
+ resource.datatype == RDF::Vocab::SCHEMA.Duration ||
resource.is_a?(RDF::Literal::Duration) ||
resource.plain? && RDF::Literal::Duration.new(value).valid?
- when RDF::SCHEMA.Time
- resource.datatype == RDF::SCHEMA.Time ||
+ when RDF::Vocab::SCHEMA.Time
+ resource.datatype == RDF::Vocab::SCHEMA.Time ||
resource.is_a?(RDF::Literal::Time) ||
resource.plain? && RDF::Literal::Time.new(resource.value).valid?
- when RDF::SCHEMA.Number
+ when RDF::Vocab::SCHEMA.Number
resource.is_a?(RDF::Literal::Numeric) ||
- [RDF::SCHEMA.Number, RDF::SCHEMA.Float, RDF::SCHEMA.Integer].include?(resource.datatype) ||
+ [RDF::Vocab::SCHEMA.Number, RDF::Vocab::SCHEMA.Float, RDF::Vocab::SCHEMA.Integer].include?(resource.datatype) ||
resource.plain? && RDF::Literal::Integer.new(resource.value).valid? ||
resource.plain? && RDF::Literal::Double.new(resource.value).valid?
- when RDF::SCHEMA.Float
+ when RDF::Vocab::SCHEMA.Float
resource.is_a?(RDF::Literal::Double) ||
- [RDF::SCHEMA.Number, RDF::SCHEMA.Float].include?(resource.datatype) ||
+ [RDF::Vocab::SCHEMA.Number, RDF::Vocab::SCHEMA.Float].include?(resource.datatype) ||
resource.plain? && RDF::Literal::Double.new(resource.value).valid?
- when RDF::SCHEMA.Integer
+ when RDF::Vocab::SCHEMA.Integer
resource.is_a?(RDF::Literal::Integer) ||
- [RDF::SCHEMA.Number, RDF::SCHEMA.Integer].include?(resource.datatype) ||
+ [RDF::Vocab::SCHEMA.Number, RDF::Vocab::SCHEMA.Integer].include?(resource.datatype) ||
resource.plain? && RDF::Literal::Integer.new(resource.value).valid?
- when RDF::SCHEMA.URL
- resource.datatype == RDF::SCHEMA.URL ||
+ when RDF::Vocab::SCHEMA.URL
+ resource.datatype == RDF::Vocab::SCHEMA.URL ||
resource.datatype == RDF::XSD.anyURI ||
resource.plain? && RDF::Literal::AnyURI.new(resource.value).valid?
else
# If this is an XSD range, look for appropriate literal
if range.start_with?(RDF::XSD.to_s)
@@ -121,15 +121,15 @@
# Otherwise, presume that the range refers to a typed resource. This is allowed if the value is a plain literal
resource.plain?
end
end
end
- elsif %w(True False).map {|v| RDF::SCHEMA[v]}.include?(resource) && ranges.include?(RDF::SCHEMA.Boolean)
+ elsif %w(True False).map {|v| RDF::Vocab::SCHEMA[v]}.include?(resource) && ranges.include?(RDF::Vocab::SCHEMA.Boolean)
true # Special case for schema boolean resources
- elsif ranges.include?(RDF::SCHEMA.URL) && resource.uri?
+ elsif ranges.include?(RDF::Vocab::SCHEMA.URL) && resource.uri?
true # schema:URL matches URI resources
- elsif ranges.include?(RDF::SCHEMA.Text) && resource.uri?
+ elsif ranges.include?(RDF::Vocab::SCHEMA.Text) && resource.uri?
# Allowed if resource is untyped
# Fully entailed types of the resource
types = options.fetch(:types) do
queryable.query(:subject => resource, :predicate => RDF.type).
map {|s| (t = (RDF::Vocabulary.find_term(s.object) rescue nil)) && t.entail(:subClassOf)}.
@@ -155,11 +155,11 @@
# Resource may still be acceptable if it has the same property with an acceptable value
resource_acceptable ||
# Resource also acceptable if it is a Role, and the Role object contains the same predicate having a compatible object
- types.include?(RDF::SCHEMA.Role) &&
+ types.include?(RDF::Vocab::SCHEMA.Role) &&
queryable.query(subject: resource, predicate: self).any? do |stmt|
acc = self.range_compatible_schema?(stmt.object, queryable)
acc
end ||
# Resource also acceptable if it is a List, and every member of the list is range compatible with the predicate
@@ -176,12 +176,12 @@
# @param [Array<RDF::UR>] ranges
# @return [Boolean]
def literal_range?(ranges)
ranges.all? do |range|
case range
- when RDF::RDFS.Literal, RDF::SCHEMA.Text, RDF::SCHEMA.Boolean, RDF::SCHEMA.Date,
- RDF::SCHEMA.DateTime, RDF::SCHEMA.Time, RDF::SCHEMA.URL,
- RDF::SCHEMA.Number, RDF::SCHEMA.Float, RDF::SCHEMA.Integer
+ when RDF::RDFS.Literal, RDF::Vocab::SCHEMA.Text, RDF::Vocab::SCHEMA.Boolean, RDF::Vocab::SCHEMA.Date,
+ RDF::Vocab::SCHEMA.DateTime, RDF::Vocab::SCHEMA.Time, RDF::Vocab::SCHEMA.URL,
+ RDF::Vocab::SCHEMA.Number, RDF::Vocab::SCHEMA.Float, RDF::Vocab::SCHEMA.Integer
true
else
# If this is an XSD range, look for appropriate literal
range.start_with?(RDF::XSD.to_s)
end
\ No newline at end of file