Frage zur Query-Syntax: ISSN-Nummern für juristische Zeitschriften

Hallo zusammen,
ich will für deutschsprachige juristische Zeitschriften die ISSN-Nummern abfragen, zum Beispiel den „Betriebs-Berater“. Meine Abfrage bisher:

inCollection.id:"http://lobid.org/resources/HT014846970#!" 
AND _exists_:issn 
AND title:Betriebs-Berater

das ergibt 577 Treffer und eine Menge Informationen, die ich nicht brauche, wobei der genaue Ort der ISSN mir nicht klar ist.

Was ich gerne erreichen würde:

  • genaues Titel-Matching, sodass nur Datensätze für die Zeitschrift „Betriebs-Berater“ zurückgegeben werden.
  • Einschränkung des Ergebnisses auf Titel, Titelergänzung/Abkürzung, Print- und Online ISBN

Für Hinweise bin ich sehr dankbar!

1 Like

Hallo Christian,

herzlich willkommen im metadaten.community-Forum!

Genaues Titelmatching bekommst du mit einer Phrasensuche. In deinem Beispiel wäre das:

inCollection.id:"http://lobid.org/resources/HT014846970#!" AND _exists_:issn AND title:"Betriebs-Berater"

Dann kommen immerhin nur noch acht Treffer.

Ja, die JSON-Antwort ist mittlerweile recht unbersichtlich, wenn mensch sich nicht mit dem lobid-Datenmodell auskennt. Leider gibt die lobid-resources-API es meines Wissens momentan nicht her, die Antwort auf bestimmte Felder zu beschränken. Ich mache für solche Fälle deshalb ein Postprocessing mit jq. Das würde in deinem Beispiel wie folgt aussehen:

$ curl https://lobid.org/resources/search?q=inCollection.id%3A%22http%3A%2F%2Flobid.org%2Fresources%2FHT014846970%23%21%22++AND+_exists_%3Aissn+AND+title%3A%22Betriebs-Berater%22 | jq '[ .member[] | { id: .id, titel: .title, issn: .issn, titelErgaenzung: .otherTitleInformation, abkuerzung: .shortTitle }]'

BTW, die Antwort zu dieser Abfrage liefert Ergebnisse mit dubletten ISSNs. Ich habe Remove duplicate ISSNs · Issue #1949 · hbz/lobid-resources · GitHub angelegt, um das zu beheben.

Ganz herzlichen Dank! Mit Phrasensuche werden ca 60% der Titel gefunden. Ich gehe davon aus, dass auch die anderen Titel ISSN-Nummern haben und muss jetzt nachschauen woran es liegen könnte dass sie nicht gefunden werden. Findet die Phrasensuche auch IN Titeln, die länger sind als der Suchausdruck?

Ich habe mir jetzt mal alle „Law“ -Titel heruntergeladen mit dem folgenden Skript:

LOBID_URL='http://lobid.org/resources/search?q=inCollection.id%3A%22http%3A%2F%2Flobid.org%2Fresources%2FHT014846970%23%21%22+AND+_exists_%3Aissn&nested=subject:subject.notation:340+AND+subject.source.id:%22https://d-nb.info/gnd/4149423-4%22'
JQ_CMD='
[ .[] | {
  id: .id,
  titel: .title,
  issn: (.issn | join(" ")),
  alternativeTitle: (if .alternativeTitle then (.alternativeTitle | join("; ")) else null end),
  otherTitleInformation: (if .otherTitleInformation then (.otherTitleInformation | join("; ")) else null end),
  shortTitle: (if .shortTitle then (.shortTitle | join("; ")) else null end),
}]'
JQ_JSON_TO_CSV='(map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv'

curl -H "Accept: application/x-jsonlines" $LOBID_URL > data/zdb-law-issn-all.json
cat data/zdb-law-issn-all.json | jq -cs '.' | jq -r "${JQ_CMD}" > data/zdb-law-issn.json
cat data/zdb-law-issn.json | jq -r "${JQ_JSON_TO_CSV}" > data/zdb-law-issn.csv

So kann ich jetzt das matching lokal gegen eine CSV-Tabelle machen.

vielleicht ist das ja für jemand nützlich.

2 Likes

Wie könnte ich die Abfrage noch weiter einschränken auf deutschsprachige Titel?

D.h. Titel, die nicht genau dem Ausdruck entsprechen? Ja, das sieht man z.B. bei den ersten drei Treffern hier: http://lobid.org/resources/search?q=title%3A"Betriebs-Berater"

In den Daten findet sich ja sowas:

"language": [
  {
    "id": "http://id.loc.gov/vocabulary/iso639-2/ger",
    "label": "Deutsch"
  }
]

Darauf kann man z.B. so einschränken: http://lobid.org/resources/search?q=title%3A"Betriebs-Berater"+AND+language.label%3Adeutsch

Herzlichen Dank - ich habe mein Script angepasst und jetzt bekomme ich die Liste von 7407 deutschsprachigen Einträgen wie folgt:

# construct URL
LOBID_ENDPOINT="http://lobid.org/resources/search"
P_Q='inCollection.id:"http://lobid.org/resources/HT014846970#!" AND _exists_:issn AND language.label:deutsch'
P_NESTED='subject:subject.notation:340 AND subject.source.id:"https://d-nb.info/gnd/4149423-4"'
LOBID_URL="${LOBID_ENDPOINT}?q=$(jq -nr --arg str "${P_Q}" '$str|@uri')&nested=$(jq -nr --arg str "${P_NESTED}" '$str|@uri')"

# execute http request if file hasn't been already downloaded
[ -f data/zdb-ger-law-issn-all.json ] || curl -H "Accept: application/x-jsonlines" $LOBID_URL > data/zdb-ger-law-issn-all.json

# convert JSONLines into json and select wanted fields
JQ_CMD='
[ .[] | {
  id: .id,
  titel: .title,
  issn: (.issn | join(" ")),
  alternativeTitle: (if .alternativeTitle then (.alternativeTitle | join("; ")) else null end),
  otherTitleInformation: (if .otherTitleInformation then (.otherTitleInformation | join("; ")) else null end),
  shortTitle: (if .shortTitle then (.shortTitle | join("; ")) else null end),
}]'
cat data/zdb-ger-law-issn-all.json | jq -cs '.' | jq -r "${JQ_CMD}" > data/zdb-ger-law-issn.json

# convert JSON array into CSV
JQ_JSON_TO_CSV='(map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv'
cat data/zdb-ger-law-issn.json | jq -r "${JQ_JSON_TO_CSV}" > data/zdb-ger-law-issn.csv
2 Likes