예제 #1
0
 def i_facet(fct: XSFacet, o: RDFTerm) -> bool:
     for f in fct:
         if f.pattern:
             rslt = bool(re.fullmatch(f.pattern, str(o.val)))
         elif f.not_:
             rslt = bool(re.fullmatch(f.not_, str(o.val)))
         elif f.minLength:
             rslt = len(str(o.val)) <= f.minLength
         elif f.maxLength:
             rslt = len(str(o.val)) >= f.maxLength
         elif f.length:
             rslt = len(str(o.val)) == f.length
         elif f.minValue:
             v = ShapeInterpreter._coerce_numtype(o, o.literal.value)
             f = ShapeInterpreter._coerce_numtype(o, f.minValue)
             rslt = False if v is None or f is None else f < v if f.minValue.open else f <= v
         elif f.maxValue:
             v = ShapeInterpreter._coerce_numtype(o, o.literal.value)
             f = ShapeInterpreter._coerce_numtype(o, f.maxValue)
             rslt = False if v is None or f is None else f > v if f.maxValue.open else f >= v
         elif f.totalDigits:
             rslt = bool(test_numeric_facet(o.literal.value, total_digits=f.totalDigits))
         elif f.fractionDigits:
             rslt = bool(test_numeric_facet(o.literal.value, fraction_digits=f.fractionDigits))
         else:
             assert False, "Unhandled facet"
         if not rslt:
             return False
     return True
예제 #2
0
 def test_fraction_digits(self):
     self.assertAlmostEqual(1, test_numeric_facet('1', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(1.2, test_numeric_facet('1.2', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(1.23, test_numeric_facet('1.23', total_digits=5, fraction_digits=2))
     self.assertRaises(1.234, test_numeric_facet('1.234', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(12, test_numeric_facet('12', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(12.3, test_numeric_facet('12.3', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(12.34, test_numeric_facet('12.34', total_digits=5, fraction_digits=2))
     self.assertRaises(12.345, test_numeric_facet('12.345', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(-1, test_numeric_facet('-1', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(-1.2, test_numeric_facet('-1.2', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(-1.23, test_numeric_facet('-1.23', total_digits=5, fraction_digits=2))
     self.assertRaises(-1.234, test_numeric_facet('-1.234', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(-12, test_numeric_facet('-12', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(-12.3, test_numeric_facet('-12.3', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(-12.34, test_numeric_facet('-12.34', total_digits=5, fraction_digits=2))
     self.assertRaises(-12.345, test_numeric_facet('-12.345', total_digits=5, fraction_digits=2))
예제 #3
0
 def test_total_digits(self):
     self.assertIsNone(test_numeric_facet('0.001', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(0.001, test_numeric_facet('0.001', total_digits=5))
     self.assertIsNone(test_numeric_facet('100000', total_digits=5))
     self.assertAlmostEqual(100000, test_numeric_facet('100000', fraction_digits=2))
     self.assertAlmostEqual(1, test_numeric_facet('1', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(1.2, test_numeric_facet('1.2', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(1.23, test_numeric_facet('1.23', total_digits=5, fraction_digits=2))
     self.assertIsNone(test_numeric_facet('1.234', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(12, test_numeric_facet('12', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(12.3, test_numeric_facet('12.3', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(12.34, test_numeric_facet('12.34', total_digits=5, fraction_digits=2))
     self.assertIsNone(test_numeric_facet('12.345', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(-1, test_numeric_facet('-1', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(-1.2, test_numeric_facet('-1.2', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(-1.23, test_numeric_facet('-1.23', total_digits=5, fraction_digits=2))
     self.assertIsNone(test_numeric_facet('-1.234', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(-12, test_numeric_facet('-12', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(-12.3, test_numeric_facet('-12.3', total_digits=5, fraction_digits=2))
     self.assertAlmostEqual(-12.34, test_numeric_facet('-12.34', total_digits=5, fraction_digits=2))
     self.assertIsNone(test_numeric_facet('-12.345', total_digits=5, fraction_digits=2))