Wikidata talk:Book sources
see talk:Q131283 the talk page of Wikipedia:Book sources (Q131283) . לערי ריינהארט (talk) 09:08, 18 November 2013 (UTC)
SPARQL query to improve
[edit]This one: https://www.wikidata.org/wiki/Wikidata:Book_sources#Find_on_Wikidata
Maybe this will help: SUBSTR( ?name,2,3 ) and https://stackoverflow.com/questions/30501124/or-in-a-sparql-query
ISBN10 example: 0-7621-0072-9
ISBN-10 format - /\d{9}(\d|X))|(\d{1,5}-\d{1,7}-\d{1,6}-[0-9X]/ - syntax clarification: blocks of digits separated by dashes or 10 digits, the last one optionally replaced by an X --User123o987name (talk) 12:22, 28 May 2020 (UTC)
ISBN 10 enumeration - All ways three numbers add up to 9:
- Numbers 000-999, 1 number per lines (via https://pinetools.com/generate-list-numbers), /(.)(.)(.)\n/$1+$2+$3,/ (via https://pinetools.com/find-and-replace), /999/9+9+9/, /^/<p id="o"><\/p><script>var th = [/, /$/];var txt = "";var i;for (i = 0; i < th.length; i++) txt += th[i] + "
";document.getElementById("o").innerHTML = txt;<\/script>/, it's now a modification of JavaScript https://www.w3schools.com/js/tryit.asp?filename=tryjs_loop_for, each line summed with HTML rendered via http://htmledit.squarefree.com, lines numbered with https://www.browserling.com/tools/number-lines, remove lines not containing /\s9$/ with https://textmechanic.com/text-tools/basic-text-tools/remove-lines-containing/, subtract 1 from each: 009, 018, 027, 036, 045, 054, 063, 072, 081, 090, 108, 117, 126, 135, 144, 153, 162, 171, 180, 207, 216, 225, 234, 243, 252, 261, 270, 306, 315, 324, 333, 342, 351, 360, 405, 414, 423, 432, 441, 450, 504, 513, 522, 531, 540, 603, 612, 621, 630, 702, 711, 720, 801, 810, 900 - none of them say "\d{0,#}", so zeros are removed; 1st number can't be >5; 2nd number can't be >7, 3d number can't be >6: 117, 126, 135, 144, 153, 162, 171, 216, 225, 234, 243, 252, 261, 315, 324, 333, 342, 351, 414, 423, 432, 441, 513, 522, 531
- . means regex .: 012345678. (form 0), 0-1-2345678-. (117), 0-12-345678-. (126), 0-123-45678-. (135), 0-1234-5678-. (144), 0-12345-678-. (153), 0-123456-78-. (162), 0-1234567-8-. (171), 01-2-345678-. (216), 01-23-45678-. (225), 01-234-5678-. (234), 01-2345-678-. (243), 01-23456-78-. (252), 01-234567-8-. (261), 012-3-45678-. (315), 012-34-5678-. (324), 012-345-678-. (333), 012-3456-78-. (342), 012-34567-8-. (351), 0123-4-5678-. (414), 0123-45-678-. (423), 0123-456-78-. (432), 0123-4567-8-. (441), 01234-5-678-. (513), 01234-56-78-. (522), 01234-567-8-. (531)
--User123o987name (talk) 08:49, 29 May 2020 (UTC)
I made the code to find all variants of ISBN10 from MAGICNUMBER:
SELECT ?isbn10 ?statement WHERE{ ?statement prov:wasDerivedFrom ?ref . ?ref pr:P957 ?isbn10 . BIND(lcase(?isbn10)AS?l) BIND(lcase("123456789X")AS?i)#067187120X BIND(SUBSTR(?i,1,1)AS?i11) BIND(SUBSTR(?i,1,2)AS?i12) BIND(SUBSTR(?i,1,3)AS?i13) BIND(SUBSTR(?i,1,4)AS?i14) BIND(SUBSTR(?i,1,5)AS?i15) BIND(SUBSTR(?i,2,1)AS?i21) BIND(SUBSTR(?i,2,2)AS?i22) BIND(SUBSTR(?i,2,3)AS?i23) BIND(SUBSTR(?i,2,4)AS?i24) BIND(SUBSTR(?i,2,5)AS?i25) BIND(SUBSTR(?i,2,6)AS?i26) BIND(SUBSTR(?i,2,7)AS?i27) BIND(SUBSTR(?i,3,1)AS?i31) BIND(SUBSTR(?i,3,2)AS?i32) BIND(SUBSTR(?i,3,3)AS?i33) BIND(SUBSTR(?i,3,4)AS?i34) BIND(SUBSTR(?i,3,5)AS?i35) BIND(SUBSTR(?i,3,6)AS?i36) BIND(SUBSTR(?i,3,7)AS?i37) BIND(SUBSTR(?i,4,1)AS?i41) BIND(SUBSTR(?i,4,2)AS?i42) BIND(SUBSTR(?i,4,3)AS?i43) BIND(SUBSTR(?i,4,4)AS?i44) BIND(SUBSTR(?i,4,5)AS?i45) BIND(SUBSTR(?i,4,6)AS?i46) BIND(SUBSTR(?i,5,1)AS?i51) BIND(SUBSTR(?i,5,2)AS?i52) BIND(SUBSTR(?i,5,3)AS?i53) BIND(SUBSTR(?i,5,4)AS?i54) BIND(SUBSTR(?i,5,5)AS?i55) BIND(SUBSTR(?i,6,1)AS?i61) BIND(SUBSTR(?i,6,2)AS?i62) BIND(SUBSTR(?i,6,3)AS?i63) BIND(SUBSTR(?i,6,4)AS?i64) BIND(SUBSTR(?i,7,3)AS?i73) BIND(SUBSTR(?i,8,2)AS?i82) BIND(SUBSTR(?i,9,1)AS?i91) BIND("-"AS?h) BIND(CONCAT(?h,SUBSTR(?i,10,1))AS?x) FILTER(CONTAINS(?l, ?i)|| CONTAINS(?l,CONCAT(?i11,?h,?i21,?h,?i37,?x))||#117 CONTAINS(?l,CONCAT(?i11,?h,?i22,?h,?i46,?x))||#126 CONTAINS(?l,CONCAT(?i11,?h,?i23,?h,?i55,?x))||#135 CONTAINS(?l,CONCAT(?i11,?h,?i24,?h,?i64,?x))||#144 CONTAINS(?l,CONCAT(?i11,?h,?i25,?h,?i73,?x))||#153 CONTAINS(?l,CONCAT(?i11,?h,?i26,?h,?i82,?x))||#162 CONTAINS(?l,CONCAT(?i11,?h,?i27,?h,?i91,?x))||#171 CONTAINS(?l,CONCAT(?i12,?h,?i31,?h,?i46,?x))||#216 CONTAINS(?l,CONCAT(?i12,?h,?i32,?h,?i55,?x))||#225 CONTAINS(?l,CONCAT(?i12,?h,?i33,?h,?i64,?x))||#234 CONTAINS(?l,CONCAT(?i12,?h,?i34,?h,?i73,?x))||#243 CONTAINS(?l,CONCAT(?i12,?h,?i35,?h,?i82,?x))||#252 CONTAINS(?l,CONCAT(?i12,?h,?i36,?h,?i91,?x))||#261 CONTAINS(?l,CONCAT(?i13,?h,?i41,?h,?i55,?x))||#315 CONTAINS(?l,CONCAT(?i13,?h,?i42,?h,?i64,?x))||#324 CONTAINS(?l,CONCAT(?i13,?h,?i43,?h,?i73,?x))||#333 CONTAINS(?l,CONCAT(?i13,?h,?i44,?h,?i82,?x))||#342 CONTAINS(?l,CONCAT(?i13,?h,?i45,?h,?i91,?x))||#351 CONTAINS(?l,CONCAT(?i14,?h,?i51,?h,?i64,?x))||#414 CONTAINS(?l,CONCAT(?i14,?h,?i52,?h,?i73,?x))||#423 CONTAINS(?l,CONCAT(?i14,?h,?i53,?h,?i82,?x))||#432 CONTAINS(?l,CONCAT(?i14,?h,?i54,?h,?i91,?x))||#441 CONTAINS(?l,CONCAT(?i15,?h,?i61,?h,?i73,?x))||#513 CONTAINS(?l,CONCAT(?i15,?h,?i62,?h,?i82,?x))||#522 CONTAINS(?l,CONCAT(?i15,?h,?i63,?h,?i91,?x))#531 ) }#e
It seems like a bit too much text to be in a URL, so I made it even better quality by removing one-use-only variables (left column=common variable, middle column=rare variable, right column=common variable), comments, and some line breaks:
SELECT ?isbn10 ?statement WHERE{ ?statement prov:wasDerivedFrom ?ref . ?ref pr:P957 ?isbn10 . BIND(lcase(?isbn10)AS?l)BIND(lcase("067187120X")AS?i)BIND(SUBSTR(?i,1,1)AS?i11) BIND(SUBSTR(?i,1,2)AS?i12)BIND(SUBSTR(?i,1,3)AS?i13)BIND(SUBSTR(?i,1,4)AS?i14)BIND(SUBSTR(?i,1,5)AS?i15) BIND(SUBSTR(?i,4,6)AS?i46)BIND(SUBSTR(?i,5,5)AS?i55)BIND(SUBSTR(?i,6,4)AS?i64)BIND(SUBSTR(?i,7,3)AS?i73) BIND(SUBSTR(?i,8,2)AS?i82)BIND(SUBSTR(?i,9,1)AS?i91)BIND("-"AS?h)BIND(CONCAT(?h,SUBSTR(?i,10,1))AS?x) FILTER(CONTAINS(?l, ?i)||CONTAINS(?i,CONCAT(?i11,?h,SUBSTR(?i,2,1),?h,SUBSTR(?i,3,7),?x))|| CONTAINS(?i,CONCAT(?i11,?h,SUBSTR(?i,2,2),?h,?i46,?x))||CONTAINS(?l,CONCAT(?i11,?h,SUBSTR(?i,2,3),?h,?i55,?x))|| CONTAINS(?l,CONCAT(?i11,?h,SUBSTR(?i,2,4),?h,?i64,?x))||CONTAINS(?l,CONCAT(?i11,?h,SUBSTR(?i,2,5),?h,?i73,?x))|| CONTAINS(?l,CONCAT(?i11,?h,SUBSTR(?i,2,6),?h,?i82,?x))||CONTAINS(?l,CONCAT(?i11,?h,SUBSTR(?i,2,7),?h,?i91,?x))|| CONTAINS(?l,CONCAT(?i12,?h,SUBSTR(?i,3,1),?h,?i46,?x))||CONTAINS(?l,CONCAT(?i12,?h,SUBSTR(?i,3,2),?h,?i55,?x))|| CONTAINS(?l,CONCAT(?i12,?h,SUBSTR(?i,3,3),?h,?i64,?x))||CONTAINS(?l,CONCAT(?i12,?h,SUBSTR(?i,3,4),?h,?i73,?x))|| CONTAINS(?l,CONCAT(?i12,?h,SUBSTR(?i,3,5),?h,?i82,?x))||CONTAINS(?l,CONCAT(?i12,?h,SUBSTR(?i,3,6),?h,?i91,?x))|| CONTAINS(?l,CONCAT(?i13,?h,SUBSTR(?i,4,1),?h,?i55,?x))||CONTAINS(?l,CONCAT(?i13,?h,SUBSTR(?i,4,2),?h,?i64,?x))|| CONTAINS(?l,CONCAT(?i13,?h,SUBSTR(?i,4,3),?h,?i73,?x))||CONTAINS(?l,CONCAT(?i13,?h,SUBSTR(?i,4,4),?h,?i82,?x))|| CONTAINS(?l,CONCAT(?i13,?h,SUBSTR(?i,4,5),?h,?i91,?x))||CONTAINS(?l,CONCAT(?i14,?h,SUBSTR(?i,5,1),?h,?i64,?x))|| CONTAINS(?l,CONCAT(?i14,?h,SUBSTR(?i,5,2),?h,?i73,?x))||CONTAINS(?l,CONCAT(?i14,?h,SUBSTR(?i,5,3),?h,?i82,?x))|| CONTAINS(?l,CONCAT(?i14,?h,SUBSTR(?i,5,4),?h,?i91,?x))||CONTAINS(?l,CONCAT(?i15,?h,SUBSTR(?i,6,1),?h,?i73,?x))|| CONTAINS(?l,CONCAT(?i15,?h,SUBSTR(?i,6,2),?h,?i82,?x))||CONTAINS(?l,CONCAT(?i15,?h,SUBSTR(?i,6,3),?h,?i91,?x)))}
Now all we or I have to do is write the thing to search for all variants of ISBN-13. --User123o987name (talk) 19:04, 29 May 2020 (UTC)
ISBN13 example: 978-0-310-43566-2
ISBN-13 format (from https://www.wikidata.org/wiki/Property:P212): /97[89]-([0-57]-(\d-\d{7}|\d\d-\d{6}|\d\d\d-\d{5}|\d{4}-\d{4}|\d{5}-\d\d\d|\d{6}-\d\d|\d{7}-\d)|[89]\d-(\d-\d{6}|\d\d-\d{5}|\d\d\d-\d{4}|\d{4}-\d\d\d|\d{5}-\d\d|\d{6}-\d)|[69]\d\d-(\d-\d{5}|\d\d-\d{4}|\d\d\d-\d\d\d|\d{4}-\d\d|\d{5}-\d)|99[0-8]\d-\d-\d{4}|99[0-8]\d-\d\d-\d\d\d|99[0-8]\d-\d\d\d-\d\d|99[0-8]\d-\d{4}-\d|999\d\d-\d-\d\d\d|999\d\d-\d\d-\d\d|999\d\d-\d\d\d-\d)-\d|/ - why does it end with "\d|"? The last vertical bar (|) doesn't seem to do anything.
ISBN format, each version on a line:
- 97[89]-
- ([0-57]-
- (\d-\d{7}
- |\d\d-\d{6}
- |\d\d\d-\d{5}
- |\d{4}-\d{4}
- |\d{5}-\d\d\d
- |\d{6}-\d\d
- |\d{7}-\d)
- |[89]\d-
- (\d-\d{6}
- |\d\d-\d{5}
- |\d\d\d-\d{4}
- |\d{4}-\d\d\d
- |\d{5}-\d\d
- |\d{6}-\d)
- |[69]\d\d-
- (\d-\d{5}
- |\d\d-\d{4}
- |\d\d\d-\d\d\d
- |\d{4}-\d\d
- |\d{5}-\d)
- |99[0-8]\d-\d-\d{4}
- |99[0-8]\d-\d\d-\d\d\d
- |99[0-8]\d-\d\d\d-\d\d
- |99[0-8]\d-\d{4}-\d
- |999\d\d-\d-\d\d\d
- |999\d\d-\d\d-\d\d
- |999\d\d-\d\d\d-\d)
- ([0-57]-
- -\d
ISBN 13 enumeration: oof. If I wrote the code for it then maybe the URL would be to long and thus not work. --User123o987name (talk) 20:02, 29 May 2020 (UTC)
query 1
[edit]If the total has to be 13 number, this is a correct representation (* means bullet point):
123456789abcdefghijklmnop * 97[89]- 1234567 ** ([0-57]- 1 *** (\d-\d{7} 2 *** |\d\d-\d{6} 3 *** |\d\d\d-\d{5} 4 *** |\d{4}-\d{4} 5 *** |\d{5}-\d\d\d 6 *** |\d{6}-\d\d 7 *** |\d{7}-\d) 89abcd ** |[89]\d- 8 *** (\d-\d{6} 9 *** |\d\d-\d{5} a *** |\d\d\d-\d{4} b *** |\d{4}-\d\d\d c *** |\d{5}-\d\d d *** |\d{6}-\d) efghi ** |[69]\d\d- e *** (\d-\d{5} f *** |\d\d-\d{4} g *** |\d\d\d-\d\d\d h *** |\d{4}-\d\d i *** |\d{5}-\d) j ** |99[0-8]\d-\d-\d{4} k ** |99[0-8]\d-\d\d-\d\d\d l ** |99[0-8]\d-\d\d\d-\d\d m ** |99[0-8]\d-\d{4}-\d n ** |999\d\d-\d-\d\d\d o ** |999\d\d-\d\d-\d\d p ** |999\d\d-\d\d\d-\d) 123456789abcdefghijklmnop * -\d
query 2
[edit]1=123-4-5-6789012-3 2=123-4-56-789012-3 3=123-4-567-89012-3 4=123-4-5678-9012-3 5=123-4-56789-012-3 6=123-4-567890-12-3 7=123-4-5678901-2-3 8=123-45-6-789012-3 9=123-45-67-89012-3 a=123-45-678-9012-3 b=123-45-6789-012-3 c=123-45-67890-12-3 d=123-45-678901-2-3 e=123-456-7-89012-3 f=123-456-78-9012-3 g=123-456-789-012-3 h=123-456-7890-12-3 i=123-456-78901-2-3 j=123-4567-8-9012-3 k=123-4567-89-012-3 l=123-4557-890-12-3 m=123-4567-8901-2-3 n=123-45678-9-012-3 o=123-45678-90-12-3 p=123-45678-901-2-3
Anyone else think that this structure (ISBN 13) looks aesthetic af? The data represented by the regex looks neat and has a neat pattern. "And these points of data make a beautiful datagram." ["line", alternatively, what was actually said] --https://www.youtube.com/watch?v=Y6ljFaKRTrI
query 3
[edit]ISBN 10 has 26 variants. ISBN 13 has 25 variants, so I think this will fit into a URL. Here is the code:
SELECT ?isbn13 ?statement WHERE{ ?statement prov:wasDerivedFrom ?ref . ?ref pr:P212 ?isbn13 . BIND(lcase(?isbn13)AS?l) BIND(lcase("1234567890123")AS?i) BIND(SUBSTR(?i,4,1)AS?i41)BIND(SUBSTR(?i,4,2)AS?i42) BIND(SUBSTR(?i,4,3)AS?i43)BIND(SUBSTR(?i,4,4)AS?i44) BIND(SUBSTR(?i,4,5)AS?i45)BIND(SUBSTR(?i,6,7)AS?i67) BIND(SUBSTR(?i,7,6)AS?i76)BIND(SUBSTR(?i,8,5)AS?i85) BIND(SUBSTR(?i,9,4)AS?i94)BIND(SUBSTR(?i,10,3)AS?i103) BIND(SUBSTR(?i,11,2)AS?i112)BIND(SUBSTR(?i,12,1)AS?i121) BIND("-"AS?h)BIND(CONCAT(SUBSTR(?i,1,3),?h)AS?i13) BIND(CONCAT(?h,SUBSTR(?i,13,1))AS?x) FILTER(CONTAINS(?l, ?i)|| CONTAINS(?l,CONCAT(?i13,?i41,?h,SUBSTR(?i,5,1),?h,?i67,?x))|| CONTAINS(?l,CONCAT(?i13,?i41,?h,SUBSTR(?i,5,2),?h,?i76,?x))|| CONTAINS(?l,CONCAT(?i13,?i41,?h,SUBSTR(?i,5,3),?h,?i85,?x))|| CONTAINS(?l,CONCAT(?i13,?i41,?h,SUBSTR(?i,5,4),?h,?i94,?x))|| CONTAINS(?l,CONCAT(?i13,?i41,?h,SUBSTR(?i,5,5),?h,?i103,?x))|| CONTAINS(?l,CONCAT(?i13,?i41,?h,SUBSTR(?i,5,6),?h,?i112,?x))|| CONTAINS(?l,CONCAT(?i13,?i41,?h,SUBSTR(?i,5,7),?h,?i121,?x))|| CONTAINS(?l,CONCAT(?i13,?i42,?h,SUBSTR(?i,6,1),?h,?i76,?x))|| CONTAINS(?l,CONCAT(?i13,?i42,?h,SUBSTR(?i,6,2),?h,?i85,?x))|| CONTAINS(?l,CONCAT(?i13,?i42,?h,SUBSTR(?i,6,3),?h,?i94,?x))|| CONTAINS(?l,CONCAT(?i13,?i42,?h,SUBSTR(?i,6,4),?h,?i103,?x))|| CONTAINS(?l,CONCAT(?i13,?i42,?h,SUBSTR(?i,6,5),?h,?i112,?x))|| CONTAINS(?l,CONCAT(?i13,?i42,?h,SUBSTR(?i,6,6),?h,?i121,?x))|| CONTAINS(?l,CONCAT(?i13,?i43,?h,SUBSTR(?i,7,1),?h,?i85,?x))|| CONTAINS(?l,CONCAT(?i13,?i43,?h,SUBSTR(?i,7,2),?h,?i94,?x))|| CONTAINS(?l,CONCAT(?i13,?i43,?h,SUBSTR(?i,7,3),?h,?i103,?x))|| CONTAINS(?l,CONCAT(?i13,?i43,?h,SUBSTR(?i,7,4),?h,?i112,?x))|| CONTAINS(?l,CONCAT(?i13,?i43,?h,SUBSTR(?i,7,5),?h,?i121,?x))|| CONTAINS(?l,CONCAT(?i13,?i44,?h,SUBSTR(?i,8,1),?h,?i94,?x))|| CONTAINS(?l,CONCAT(?i13,?i44,?h,SUBSTR(?i,8,2),?h,?i103,?x))|| CONTAINS(?l,CONCAT(?i13,?i44,?h,SUBSTR(?i,8,3),?h,?i112,?x))|| CONTAINS(?l,CONCAT(?i13,?i44,?h,SUBSTR(?i,8,4),?h,?i121,?x))|| CONTAINS(?l,CONCAT(?i13,?i45,?h,SUBSTR(?i,9,1),?h,?i103,?x))|| CONTAINS(?l,CONCAT(?i13,?i45,?h,SUBSTR(?i,9,2),?h,?i112,?x))|| CONTAINS(?l,CONCAT(?i13,?i45,?h,SUBSTR(?i,9,3),?h,?i121,?x)) ) }
These queries work way better than the Wikimedia search I think. --User123o987name (talk) 00:31, 30 May 2020 (UTC)