|
| 1 | +@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . |
| 2 | +@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . |
| 3 | +@prefix ff: <https://foerderfunke.org/default#> . |
| 4 | + |
| 5 | +# MATERIALIZATION RULES |
| 6 | + |
| 7 | +ff:CalculateAgeFromBirthdate a ff:MaterializationRule, ff:SparqlRule ; |
| 8 | + rdfs:label "Berechnung des Alters basierend auf dem Geburtsdatum"@de, "Calculate the age from the birthdate"@en ; |
| 9 | + ff:input ff:geburtsdatum ; |
| 10 | + ff:output ff:hasAge ; |
| 11 | + ff:sparqlConstructQuery """ |
| 12 | + PREFIX ff: <https://foerderfunke.org/default#> |
| 13 | + CONSTRUCT { |
| 14 | + ?person ff:hasAge ?age . |
| 15 | + } WHERE { |
| 16 | + ?person ff:geburtsdatum ?bday . |
| 17 | + BIND(YEAR(NOW()) - YEAR(?bday) - IF(MONTH(NOW()) < MONTH(?bday) || (MONTH(NOW()) = MONTH(?bday) && DAY(NOW()) < DAY(?bday)), 1, 0) AS ?age) . |
| 18 | + } |
| 19 | + """ . |
| 20 | + |
| 21 | +ff:PensionableFromBirthdate a ff:MaterializationRule, ff:SparqlRule ; |
| 22 | + rdfs:label "Feststellung der Pensionsberechtigung basierend auf dem Geburtsdatum"@de, "Determining qualification for pension from the birthdate"@en ; |
| 23 | + ff:input ff:geburtsdatum ; |
| 24 | + ff:output ff:isPensionable ; |
| 25 | + ff:sparqlConstructQuery """ |
| 26 | + PREFIX ff: <https://foerderfunke.org/default#> |
| 27 | + PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> |
| 28 | + CONSTRUCT { |
| 29 | + ?person ff:pensionable ?pensionable . |
| 30 | + } WHERE { |
| 31 | + ?person ff:geburtsdatum ?bday . |
| 32 | + BIND(YEAR(?bday) AS ?birthYear) BIND(MONTH(?bday) AS ?birthMonth) BIND(DAY(?bday) AS ?birthDay) |
| 33 | + OPTIONAL { |
| 34 | + ?yearRow ff:appliesToBirthYear ?birthYear ; |
| 35 | + ff:hasPensionAgeYears ?pensionAgeYears ; |
| 36 | + ff:hasPensionAgeMonths ?pensionAgeMonths . |
| 37 | + } |
| 38 | + BIND(COALESCE(?pensionAgeYears, 67) AS ?finalPensionAgeYears) |
| 39 | + BIND(COALESCE(?pensionAgeMonths, 0) AS ?finalPensionAgeMonths) |
| 40 | + BIND(?birthYear + ?finalPensionAgeYears AS ?pensionYear) |
| 41 | + BIND(?birthMonth + ?finalPensionAgeMonths AS ?monthsSum) |
| 42 | + BIND(IF(?monthsSum > 12, ?monthsSum - 12, ?monthsSum) AS ?pensionMonth) |
| 43 | + BIND(IF(?monthsSum > 12, ?pensionYear + 1, ?pensionYear) AS ?adjustedPensionYear) |
| 44 | + BIND(CONCAT( |
| 45 | + STR(?adjustedPensionYear), "-", |
| 46 | + IF(STRLEN(STR(?pensionMonth)) = 1, CONCAT("0", STR(?pensionMonth)), STR(?pensionMonth)), "-", |
| 47 | + IF(STRLEN(STR(?birthDay)) = 1, CONCAT("0", STR(?birthDay)), STR(?birthDay)), |
| 48 | + "T00:00:00" |
| 49 | + ) AS ?pensionDateStr) |
| 50 | + BIND(xsd:dateTime(?pensionDateStr) AS ?pensionDate) |
| 51 | + BIND(IF(NOW() >= ?pensionDate, true, false) AS ?pensionable) |
| 52 | + } |
| 53 | + """ . |
| 54 | + |
| 55 | +ff:PensionAgeTable a ff:TableOfConstants ; |
| 56 | + ff:hasRow ff:Year1947 ; ff:hasRow ff:Year1948 ; ff:hasRow ff:Year1949 ; ff:hasRow ff:Year1950 ; ff:hasRow ff:Year1951 ; |
| 57 | + ff:hasRow ff:Year1952 ; ff:hasRow ff:Year1953 ; ff:hasRow ff:Year1954 ; ff:hasRow ff:Year1955 ; ff:hasRow ff:Year1956 ; |
| 58 | + ff:hasRow ff:Year1957 ; ff:hasRow ff:Year1958 ; ff:hasRow ff:Year1959 ; ff:hasRow ff:Year1960 ; ff:hasRow ff:Year1961 ; |
| 59 | + ff:hasRow ff:Year1962 ; ff:hasRow ff:Year1963 ; ff:hasRow ff:Year1964 . |
| 60 | +ff:Year1947 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 0 ; ff:appliesToBirthYear 1947 . |
| 61 | +ff:Year1948 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 1 ; ff:appliesToBirthYear 1948 . |
| 62 | +ff:Year1949 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 2 ; ff:appliesToBirthYear 1949 . |
| 63 | +ff:Year1950 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 3 ; ff:appliesToBirthYear 1950 . |
| 64 | +ff:Year1951 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 4 ; ff:appliesToBirthYear 1951 . |
| 65 | +ff:Year1952 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 5 ; ff:appliesToBirthYear 1952 . |
| 66 | +ff:Year1953 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 6 ; ff:appliesToBirthYear 1953 . |
| 67 | +ff:Year1954 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 7 ; ff:appliesToBirthYear 1954 . |
| 68 | +ff:Year1955 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 8 ; ff:appliesToBirthYear 1955 . |
| 69 | +ff:Year1956 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 9 ; ff:appliesToBirthYear 1956 . |
| 70 | +ff:Year1957 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 10 ; ff:appliesToBirthYear 1957 . |
| 71 | +ff:Year1958 ff:hasPensionAgeYears 65 ; ff:hasPensionAgeMonths 11 ; ff:appliesToBirthYear 1958 . |
| 72 | +ff:Year1959 ff:hasPensionAgeYears 66 ; ff:hasPensionAgeMonths 0 ; ff:appliesToBirthYear 1959 . |
| 73 | +ff:Year1960 ff:hasPensionAgeYears 66 ; ff:hasPensionAgeMonths 2 ; ff:appliesToBirthYear 1960 . |
| 74 | +ff:Year1961 ff:hasPensionAgeYears 66 ; ff:hasPensionAgeMonths 4 ; ff:appliesToBirthYear 1961 . |
| 75 | +ff:Year1962 ff:hasPensionAgeYears 66 ; ff:hasPensionAgeMonths 6 ; ff:appliesToBirthYear 1962 . |
| 76 | +ff:Year1963 ff:hasPensionAgeYears 66 ; ff:hasPensionAgeMonths 8 ; ff:appliesToBirthYear 1963 . |
| 77 | +ff:Year1964 ff:hasPensionAgeYears 66 ; ff:hasPensionAgeMonths 10 ; ff:appliesToBirthYear 1964 . |
0 commit comments