From c7befe173ed2b0f5fd82228fa45c7a105ac44818 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Fri, 20 Jan 2017 14:14:12 +0100 Subject: Auto-generate software list --- index.ttl | 443 +++++++++++++++++++++++++++++++++++++++++++++++- popularity.rst | 2 + software.rst | 44 +---- tools/formatSoftware.py | 123 ++++++++++++++ 4 files changed, 572 insertions(+), 40 deletions(-) create mode 100755 tools/formatSoftware.py diff --git a/index.ttl b/index.ttl index 536cd6f..569f68f 100644 --- a/index.ttl +++ b/index.ttl @@ -2162,9 +2162,19 @@ _:org_acm a s:Organization ; _:org_vieweg_teubner a s:Organization ; s:name "Vieweg+Teubner" . -_:org_gmd a s:Organization ; +_:org_gmd + a s:Organization ; s:name "Gesellschaft für Mathematik und Datenverarbeitung mbH" ; - s:alternateName "GMD" . + s:alternateName "GMD" ; + s:address [ + a s:PostalAddress ; + s:postOfficeBoxNumber "1240" ; + #s:addressLocality "Schloß Birlinghoven" ; + s:addressCountry "DE" ; + s:postalCode "5205" ; + s:addressLocality "Sankt Augustin 1" ; + ] + . _:org_unibi a s:EducationalOrganization ; @@ -2291,6 +2301,28 @@ _:com_webidata s:telephone "06 21/4 70 06-0" ; s:name "Webidata Softwareentwicklung GmbH" . +_:com_advodat + a s:Corporation ; + s:address [ + a s:PostalAddress ; + s:addressCountry "DE" ; + s:addressLocality "München" ; + s:postalCode "8000" ; + s:streetAddress "Arabellastraße 15" ] ; + s:name "Advodat GmbH" ; + . + +_:com_modsoft + a s:Corporation ; + s:address [ + a s:PostalAddress ; + s:addressCountry "DE" ; + s:addressLocality "Bonn 1" ; + s:postalCode "5300" ; + s:streetAddress "Bonngasse 4–6" ] ; + s:name "Modsoft – Organisation für Software und Computer-Anwendung GmbH" ; + . + ############## ### People ### ############## @@ -2530,3 +2562,410 @@ _:person_kleine s:givenName "Karl" ; . +################ +### Software ### +################ + +<#eumel17> + a s:SoftwareApplication ; + s:name "EUMEL" ; + s:softwareVersion "1.7" ; + s:datePublished "1984" ; + s:offers _:offer_eumelmulti , _:offer_eumelsingle, _:offer_eumelpd ; + s:author _:org_gmd ; + . + +<#eumel18> + a s:SoftwareApplication ; + s:name "EUMEL" ; + s:softwareVersion "1.8" ; + s:datePublished "1986-10" ; + s:offers _:offer_eumelmulti , _:offer_eumelsingle ; + s:author _:org_gmd ; + . + +_:offer_eumelmulti + a s:Offer ; + s:name "Multi-User-Version" ; + s:priceSpecification [ + a s:UnitPriceSpecification ; + s:price "750" ; + s:priceCurrency "DEM" ; + s:valueAddedTaxIncluded "False" ; + ] ; + s:validFrom "1985-11-08" ; # vertriebsinfos + s:validThrough "1987" ; # seyfert87 + s:offeredBy _:org_gmd ; + . + +_:offer_eumelsingle + a s:Offer ; + s:name "Single-User-Version" ; + s:priceSpecification [ + a s:UnitPriceSpecification ; + s:price "250" ; + s:priceCurrency "DEM" ; + s:valueAddedTaxIncluded "False" ; + ] ; + s:validFrom "1985-11-08" ; # vertriebsinfos + s:validThrough "1987" ; # seyfert87 + s:offeredBy _:org_gmd ; + . + +_:offer_eumelpd + a s:Offer ; + s:name "Public Domain" ; + s:priceSpecification [ + a s:UnitPriceSpecification ; + s:price "50" ; + s:priceCurrency "DEM" ; + s:valueAddedTaxIncluded "False" ; + ] ; + s:validFrom "1989-11-09" ; + s:offeredBy _:com_schoenbeck ; + . + +<#msdosdat> + a s:SoftwareApplication ; + s:name "MS-DOS-DAT" ; + s:description "MS-DOS interoperability layer" ; + s:author _:org_gmd ; + s:offers [ + a s:Offer ; + s:priceSpecification [ + a s:UnitPriceSpecification ; + s:price "200" ; + s:priceCurrency "DEM" ; + s:valueAddedTaxIncluded "False" ; + ] ; + s:validFrom "1985-11-08" ; # vertriebsinfos + s:validThrough "1987" ; # seyfert87 + s:offeredBy _:org_gmd ; + ] ; + s:datePublished "1986-01-01" ; # vertriebsinfos + . + +<#gmdtexteditor> + a s:SoftwareApplication ; + s:name "Texteditor" ; + s:author _:org_gmd ; + s:offers [ + a s:Offer ; + s:priceSpecification [ + a s:UnitPriceSpecification ; + s:price "850" ; + s:priceCurrency "DEM" ; + s:valueAddedTaxIncluded "False" ; + ] ; + s:validFrom "1985-11-08" ; # vertriebsinfos + s:validThrough "1987" ; # seyfert87 + s:offeredBy _:org_gmd ; + ] ; + . + +<#basicp6066> + a s:SoftwareApplication ; + s:name "BASIC P 6066 compiler" ; + s:author _:org_gmd ; + s:offers [ + a s:Offer ; + s:priceSpecification [ + a s:UnitPriceSpecification ; + s:price "400" ; + s:priceCurrency "DEM" ; + s:valueAddedTaxIncluded "False" ; + ] ; + s:validFrom "1985-11-08" ; # vertriebsinfos + s:offeredBy _:org_gmd ; + ] ; + . + +<#mbasic> + a s:SoftwareApplication ; + s:name "M-BASIC" ; + s:author _:org_gmd ; + s:offers [ + a s:Offer ; + s:priceSpecification [ + a s:UnitPriceSpecification ; + s:price "400" ; + s:priceCurrency "DEM" ; + s:valueAddedTaxIncluded "False" ; + ] ; + s:validFrom "1985-11-08" ; # vertriebsinfos + s:offeredBy _:org_gmd ; + ] ; + s:datePublished "1986-03" ; # vertriebsinfos + . + +<#eumelnetz> + a s:SoftwareApplication ; + s:name "EUMEL-Netz" ; + s:author _:org_gmd ; + s:offers [ + a s:Offer ; + s:priceSpecification [ + a s:UnitPriceSpecification ; + s:price "200" ; + s:priceCurrency "DEM" ; + s:valueAddedTaxIncluded "False" ; + ] ; + s:validFrom "1985-11-08" ; # vertriebsinfos + s:validThrough "1987" ; # seyfert87 + s:offeredBy _:org_gmd ; + ] ; + . + +<#dynamo> + a s:SoftwareApplication ; + s:name "DYNAMO" ; + s:author _:org_gmd ; + s:offers [ + a s:Offer ; + s:priceSpecification [ + a s:UnitPriceSpecification ; + s:price "200" ; + s:priceCurrency "DEM" ; + s:valueAddedTaxIncluded "False" ; + ] ; + s:validFrom "1985-11-08" ; # vertriebsinfos + s:validThrough "1987" ; # seyfert87 + s:offeredBy _:org_gmd ; + ] ; + . + +<#lisp> + a s:SoftwareApplication ; + s:name "LISP" ; + s:author _:org_gmd ; + s:offers [ + a s:Offer ; + s:priceSpecification [ + a s:UnitPriceSpecification ; + s:price "0" ; + s:priceCurrency "DEM" ; + s:valueAddedTaxIncluded "False" ; + ] ; + s:validFrom "1985-11-08" ; # vertriebsinfos + s:validThrough "1987" ; # seyfert87 + s:offeredBy _:org_gmd ; + ] ; + . + +<#dasys> + a s:SoftwareApplication ; + s:name "DASYS" ; + s:description "Statistics software" ; + s:author _:org_gmd ; + s:offers [ + a s:Offer ; + s:priceSpecification [ + a s:UnitPriceSpecification ; + s:price "200" ; + s:priceCurrency "DEM" ; + s:valueAddedTaxIncluded "False" ; + ] ; + s:validFrom "1985-11-08" ; # vertriebsinfos + s:validThrough "1987" ; # seyfert87 + s:offeredBy _:org_gmd ; + ] ; + . + +<#remis> + a s:SoftwareApplication ; + s:name "REMIS" ; + s:description "Relational database with SQL support" ; + s:author _:org_gmd ; + s:offers [ + a s:Offer ; + s:priceSpecification [ + a s:UnitPriceSpecification ; + s:price "200" ; + s:priceCurrency "DEM" ; + s:valueAddedTaxIncluded "False" ; + ] ; + s:validFrom "1985-11-08" ; # vertriebsinfos + s:validThrough "1987" ; # seyfert87 + s:offeredBy _:org_gmd ; + ] ; + . + +<#baisy> + a s:SoftwareApplication ; + s:name "BAISY" ; + s:description "Database" ; + s:author _:org_gmd ; + . + +<#eudas> + a s:SoftwareApplication ; + s:name "EUDAS" ; + s:author _:org_gmd ; + . + +<#moco> + a s:SoftwareApplication ; + s:name "MOCO" ; + s:description "Modellcomputer MOCO" ; + s:author _:org_gmd ; + s:offers [ + a s:Offer ; + s:priceSpecification [ + a s:UnitPriceSpecification ; + s:price "0" ; + s:priceCurrency "DEM" ; + s:valueAddedTaxIncluded "False" ; + ] ; + s:validFrom "1985-11-08" ; # vertriebsinfos + s:offeredBy _:org_gmd ; + ] ; + . + +<#hamster> + a s:SoftwareApplication ; + s:name "HAMSTER" ; + s:author _:org_gmd ; + s:offers [ + a s:Offer ; + s:priceSpecification [ + a s:UnitPriceSpecification ; + s:price "0" ; + s:priceCurrency "DEM" ; + s:valueAddedTaxIncluded "False" ; + ] ; + s:validFrom "1985-11-08" ; # vertriebsinfos + s:offeredBy _:org_gmd ; + ] ; + . + +<#multiline-superbase> + a s:SoftwareApplication ; + s:name "Multiline Superbase" ; + s:applicationCategory "database" ; + s:author _:com_webidata ; + . + +<#multiline-orgapac> + a s:SoftwareApplication ; + s:name "Multiline Orga Pac" ; + s:description "Organisationspaket" ; + s:author _:com_webidata ; + . + +<#multiline-btx> + a s:SoftwareApplication ; + s:name "Multiline BTX" ; + s:description "BTX-Inhouse-Lösung" ; + s:author _:com_webidata ; + . + +<#multiline-inkasso> + a s:SoftwareApplication ; + s:name "Multiline Inkasso" ; + s:description "software for debt collecting agencies" ; + s:author _:com_webidata ; + . + +<#multiline-hbg> + a s:SoftwareApplication ; + s:name "Multiline HGB Par.89ff." ; + s:description "Branchenpaket für Handelsvertreter" ; + s:author _:com_webidata ; + . + +<#dgs-grafik> + a s:SoftwareApplication ; + s:name "dgs Digitron-Grafik-System" ; + s:author _:com_digitron ; + s:offers [ + a s:Offer ; + s:priceSpecification [ + a s:UnitPriceSpecification ; + s:price "450" ; + s:priceCurrency "DEM" ; + s:valueAddedTaxIncluded "True" ; # ? + ] ; + s:validFrom "1990" ; # ambros90b + s:validThrough "1990" ; + s:offeredBy _:com_digitron ; + ] ; + . + +<#dgs-supervision> + a s:SoftwareApplication ; + s:name "dgs SUPER VISION" ; + s:author _:com_digitron ; + . + +<#dgs-superchart> + a s:SoftwareApplication ; + s:name "dgs Super Chart" ; + s:author _:com_digitron ; + s:offers [ + a s:Offer ; + s:priceSpecification [ + a s:UnitPriceSpecification ; + s:price "1200" ; + s:priceCurrency "DEM" ; + s:valueAddedTaxIncluded "True" ; # ? + ] ; + s:validFrom "1990" ; # ambros90b + s:validThrough "1990" ; + s:offeredBy _:com_digitron ; + ] ; + . + +<#eumelbase> + a s:SoftwareApplication ; + s:name "EUMELbase" ; + s:description "Relational database" ; + s:applicationCategory "database" ; + s:author _:com_isp ; + . + +<#eumelcalc> + a s:SoftwareApplication ; + s:name "EUMELcalc" ; + s:applicationCategory "spreadsheet" ; + s:author _:com_isp ; + . + +<#eumelwriter> + a s:SoftwareApplication ; + s:name "EUMELwriter" ; + s:applicationCategory "text processing" ; + s:author _:com_isp ; + . + +# see ende87 +<#laboris> + a s:SoftwareApplication ; + s:name "LABORIS" ; + s:description "Software suite for doctors" ; + s:author _:com_isp ; + . + +# see iur86 +<#ergojur> + a s:SoftwareApplication ; + s:name "Ergo JUR" ; + s:author _:com_modsoft ; + s:operatingSystem "EUMEL" ; + # see iur86 + s:memoryRequirements "512 KB" ; + s:storageRequirements "0.5 MB" ; + s:dateCreated "1986" ; + . + +# ~120 installs in 1986 [schuetz86]_ +<#advodat> + a s:SoftwareApplication ; + s:name "advodat" ; + s:author _:com_advodat ; + s:operatingSystem "EUMEL" ; + # see iur86 + s:memoryRequirements "512 KB" ; + s:storageRequirements "3 MB" ; + s:dateCreated "1984" ; + . + diff --git a/popularity.rst b/popularity.rst index c2a103c..a7e61fc 100644 --- a/popularity.rst +++ b/popularity.rst @@ -24,3 +24,5 @@ By mid 1985 support for the Japanese *Kanji* writing system was added to EUMEL [gmdspiegel85d]_. A newly founded corporation *NISSIN Products Corp. Tokyo* sold the product on the Japanese market [gmdbericht85]_. +.. _advodat: #advodat + diff --git a/software.rst b/software.rst index eb45b82..66cc528 100644 --- a/software.rst +++ b/software.rst @@ -1,45 +1,11 @@ Software ^^^^^^^^ -The following (commercial) software, grouped by vendor, was available for EUMEL: +The following (commercial) software, grouped by vendor, was available for +EUMEL. Prices excluding VAT/GST. -ERGOS - - MS DOS compatibility layer - - EUMEL-Netz - - Compiler for BASIC and DYNAMO - - Interpreter for LISP and PROLOG - - schulis-Software - - Simulationswerkzeug Simsel - - Modelldatenbank Biologie 1/2, Chemie 1/2, Physik 1 - - Mathematikpaket - - Kommstedt Gesellschaftskundliches Planspiel - - gs-DIALOG, -Menu-Generator, -Hamster und Robbi, -MP-BAP, -Warenhaus, -Prozess [ambros90a]_ - - schulis-Schulverwaltung: Grundsystem, Ausbaustufe 1/2/3, Stundenplanprogramm INTEGA (für DOS) - - DASYS, statistics software - - REMIS, a relational database with SQL support [remis84]_ [remis86]_ - - BAISY, database - - EUDAS, “Datenverwaltungssystem” -Webidata Softwareentwicklung GmbH - - Multiline Superbase, database - - Multiline Orga Pac, “Organisationspaket” - - Multiline BTX, “BTX-Inhouse-Lösung” - - Multiline Inkasso, software for debt collecting agencies - - Multiline HGB Par.89ff., “Branchenpaket für Handelsvertreter” -digitron - - dgs Digitron-Grafik-System - - dgs-SUPER VISION - - dgs Super Chart -ISP - - EUMELbase, relational database - - EUMELcalc/rap, spreadsheet - - EUMELwriter, word-processing - - LABORIS [ende87]_ -modsoft - - Ergo JUR, software for lawyers [iur86]_ -Advodat GmbH - - .. _advodat: - - advodat, software for lawyers [schuetz86]_ [iur86]_ +.. raw:: html + :file: software.html Sources: [praxis3]_ pp. 223–224, @@ -47,3 +13,5 @@ Sources: [computerwoche87a]_, [ambros90b]_, [software93]_ p. 294 and p. 376, +[vertriebsinfos]_, [seyfert87]_. + diff --git a/tools/formatSoftware.py b/tools/formatSoftware.py new file mode 100755 index 0000000..a54a740 --- /dev/null +++ b/tools/formatSoftware.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 + +from rdflib import URIRef, BNode, Literal, Graph, Namespace +from rdflib.namespace import RDF, NamespaceManager +from urllib.parse import urlparse +import sys +from itertools import chain, groupby +from jinja2 import Environment +from formatRefs import first + +class RDFWalker: + """ + Simple RDF graph walker + """ + + def __init__ (self, g, s, n, path=[]): + """ + :param g: Graph + :param s: Namespace + :param n: Start node + """ + self.g = g + self.n = n + self.s = s + self._path = path + + def __getattr__ (self, k): + """ + If k is underscore _, walk up tree one level, otherwise search for + direct descendents and get first one. + """ + if k == '_': + return RDFWalker (self.g, self.s, self._path[0], self._path[1:]) + yieldall = False + if k.endswith ('_'): + yieldall = True + k = k[:-1] + + if k == 'a': + attr = RDF.type + else: + attr = getattr (self.s, k) + + ret = [RDFWalker (self.g, self.s, n, [self.n] + self._path) for n in self.g.objects (self.n, attr)] + + if yieldall: + return ret + elif not ret: + return None + else: + return ret[0] + + def __eq__ (self, b): + return self.n == b.n + + def __lt__ (self, b): + return str (self) < str (b) + + def __str__ (self): + return str (self.n) + +if __name__ == '__main__': + env = Environment () + env.filters['urlparse'] = urlparse + template = env.from_string (""" +{% macro schemaval(n, name, tag='span') -%} +<{{ tag }} property="{{ name }}">{{ n|attr(name) }} +{%- endmacro %} +{%- for companyname, software in items %} + {% set company = companyname._ %} +
+ {{ schemaval(company, 'name', 'h3') }} + {% set addr = company.address %} +

+ {% if addr.streetAddress %}{{ schemaval(addr, 'streetAddress') }}
+ {% elif addr.postOfficeBoxNumber %}PO box {{ schemaval(addr, 'postOfficeBoxNumber') }}
+ {% endif %} + {{ schemaval(addr, 'postalCode') }} {{ schemaval(addr, 'addressLocality') }} +

+ {% set url = company.url %} + {% if url %} +

{{ url }}

+ {% endif %} +
+ {%- for s in software|sort(attribute='name') %} +
+

{{ schemaval(s, 'name') }}{% if s.softwareVersion %} ({{ schemaval(s, 'softwareVersion') }}){% endif %}

+

+ {% if s.dateCreated %}{{ schemaval(s, 'dateCreated') }} + {% if s.datePublished %}/{{ schemaval(s, 'datePublished') }}{% endif %} + {% elif s.datePublished %}{{ schemaval(s, 'datePublished') }} + {% endif %} +

+ {% if s.description %}{{ schemaval(s, 'description', 'p') }}{% endif %} +
    + {% for o in s.offers_|sort(attribute='name') %} +
  • + {% if o.name %}{{ schemaval(o, 'name') }}, {% endif %} + {{ schemaval(o.priceSpecification, 'price') }} + {{ schemaval(o.priceSpecification, 'priceCurrency') }}, + {{ schemaval(o, 'validFrom') }}{% if o.validThrough and o.validFrom != o.validThrough %}–{{ schemaval(o, 'validThrough') }}{% endif %} +
  • + {% endfor %} +
+
+ {% endfor -%} +
+
+{% endfor %}""") + g = Graph() + result = g.parse ("index.ttl", format='turtle') + s = Namespace ("https://schema.org/") + + items = [] + + for n in g.subjects (RDF.type, s.SoftwareApplication): + n = RDFWalker (g, s, n) + if n.author: + items.append (n) + + items = groupby (sorted (items, key=lambda x: str (x.author.name).lower ()), lambda x: x.author.name) + print (template.render(items=items)) + -- cgit v1.2.3