This file is indexed.

/usr/share/doc/python-rdflib-doc/html/_modules/rdflib/plugins/parsers/pyRdfa.html is in python-rdflib-doc 4.1.2-3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 278
 279
 280
 281
 282
 283
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 354
 355
 356
 357
 358
 359
 360
 361
 362
 363
 364
 365
 366
 367
 368
 369
 370
 371
 372
 373
 374
 375
 376
 377
 378
 379
 380
 381
 382
 383
 384
 385
 386
 387
 388
 389
 390
 391
 392
 393
 394
 395
 396
 397
 398
 399
 400
 401
 402
 403
 404
 405
 406
 407
 408
 409
 410
 411
 412
 413
 414
 415
 416
 417
 418
 419
 420
 421
 422
 423
 424
 425
 426
 427
 428
 429
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 731
 732
 733
 734
 735
 736
 737
 738
 739
 740
 741
 742
 743
 744
 745
 746
 747
 748
 749
 750
 751
 752
 753
 754
 755
 756
 757
 758
 759
 760
 761
 762
 763
 764
 765
 766
 767
 768
 769
 770
 771
 772
 773
 774
 775
 776
 777
 778
 779
 780
 781
 782
 783
 784
 785
 786
 787
 788
 789
 790
 791
 792
 793
 794
 795
 796
 797
 798
 799
 800
 801
 802
 803
 804
 805
 806
 807
 808
 809
 810
 811
 812
 813
 814
 815
 816
 817
 818
 819
 820
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    

    <title>rdflib.plugins.parsers.pyRdfa &mdash; rdflib 4.1.2 documentation</title>

<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>


    
    <link rel="stylesheet" href="../../../../_static/rtd.css" type="text/css" />
    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
    
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '../../../../',
        VERSION:     '4.1.2',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
    <script type="text/javascript" src="../../../../../../../../_static/searchtools.js"></script>
    <link rel="top" title="rdflib 4.1.2 documentation" href="../../../../index.html" />
    <link rel="up" title="Module code" href="../../../index.html" /> 
  </head>
  <body>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../../../../genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="../../../../py-modindex.html" title="Python Module Index"
             >modules</a> |</li>
        <li><a href="../../../../index.html">rdflib 4.1.2 documentation</a> &raquo;</li>
          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <h1>Source code for rdflib.plugins.parsers.pyRdfa</h1><div class="highlight"><pre>
<span class="c"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">RDFa 1.1 parser, also referred to as a “RDFa Distiller”. It is</span>
<span class="sd">deployed, via a CGI front-end, on the U{W3C RDFa 1.1 Distiller page&lt;http://www.w3.org/2012/pyRdfa/&gt;}.</span>

<span class="sd">For details on RDFa, the reader should consult the U{RDFa Core 1.1&lt;http://www.w3.org/TR/rdfa-core/&gt;}, U{XHTML+RDFa1.1&lt;http://www.w3.org/TR/2010/xhtml-rdfa&gt;}, and the U{RDFa 1.1 Lite&lt;http://www.w3.org/TR/rdfa-lite/&gt;} documents.</span>
<span class="sd">The U{RDFa 1.1 Primer&lt;http://www.w3.org/TR/owl2-primer/&gt;} may also prove helpful.</span>

<span class="sd">This package can also be downloaded U{from GitHub&lt;https://github.com/RDFLib/pyrdfa3&gt;}. The</span>
<span class="sd">distribution also includes the CGI front-end and a separate utility script to be run locally.</span>

<span class="sd">Note that this package is an updated version of a U{previous RDFa distiller&lt;http://www.w3.org/2007/08/pyRdfa&gt;} that was developed</span>
<span class="sd">for RDFa 1.0. Although it reuses large portions of that code, it has been quite thoroughly rewritten, hence put in a completely</span>
<span class="sd">different project. (The version numbering has been continued, though, to avoid any kind of misunderstandings. This version has version numbers &quot;3.0.0&quot; or higher.)</span>

<span class="sd">(Simple) Usage</span>
<span class="sd">==============</span>
<span class="sd">From a Python file, expecting a Turtle output::</span>
<span class="sd"> from pyRdfa import pyRdfa</span>
<span class="sd"> print pyRdfa().rdf_from_source(&#39;filename&#39;)</span>
<span class="sd">Other output formats are also possible. E.g., to produce RDF/XML output, one could use::</span>
<span class="sd"> from pyRdfa import pyRdfa</span>
<span class="sd"> print pyRdfa().rdf_from_source(&#39;filename&#39;, outputFormat=&#39;pretty-xml&#39;)</span>
<span class="sd">It is also possible to embed an RDFa processing. Eg, using::</span>
<span class="sd"> from pyRdfa import pyRdfa</span>
<span class="sd"> graph = pyRdfa().graph_from_source(&#39;filename&#39;)</span>
<span class="sd">returns an RDFLib.Graph object instead of a serialization thereof. See the the description of the</span>
<span class="sd">L{pyRdfa class&lt;pyRdfa.pyRdfa&gt;} for further possible entry points details.</span>

<span class="sd">There is also, as part of this module, a L{separate entry for CGI calls&lt;processURI&gt;}.</span>

<span class="sd">Return (serialization) formats</span>
<span class="sd">------------------------------</span>

<span class="sd">The package relies on RDFLib. By default, it relies therefore on the serializers coming with the local RDFLib distribution. However, there has been some issues with serializers of older RDFLib releases; also, some output formats, like JSON-LD, are not (yet) part of the standard RDFLib distribution. A companion package, called pyRdfaExtras, is part of the download, and it includes some of those extra serializers. The extra format (not part of the RDFLib core) is U{JSON-LD&lt;http://json-ld.org/spec/latest/json-ld-syntax/&gt;}, whose &#39;key&#39; is &#39;json&#39;, when used in the &#39;parse&#39; method of an RDFLib graph.</span>

<span class="sd">Options</span>
<span class="sd">=======</span>

<span class="sd">The package also implements some optional features that are not part of the RDFa recommendations. At the moment these are:</span>

<span class="sd"> - possibility for plain literals to be normalized in terms of white spaces. Default: false. (The RDFa specification requires keeping the white spaces and leave applications to normalize them, if needed)</span>
<span class="sd"> - inclusion of embedded RDF: Turtle content may be enclosed in a C{script} element and typed as C{text/turtle}, U{defined by the RDF Working Group&lt;http://www.w3.org/TR/turtle/&gt;}. Alternatively, some XML dialects (e.g., SVG) allows the usage of RDF/XML as part of their core content to define metadata in RDF. For both of these cases pyRdfa parses these serialized RDF content and adds the resulting triples to the output Graph. Default: true.</span>
<span class="sd"> - extra, built-in transformers are executed on the DOM tree prior to RDFa processing (see below). These transformers can be provided by the end user.</span>
<span class="sd"> </span>
<span class="sd">Options are collected in an instance of the L{Options} class and may be passed to the processing functions as an extra argument. E.g., to allow the inclusion of embedded content::</span>
<span class="sd"> from pyRdfa.options import Options</span>
<span class="sd"> options = Options(embedded_rdf=True)</span>
<span class="sd"> print pyRdfa(options=options).rdf_from_source(&#39;filename&#39;)</span>
<span class="sd"> </span>
<span class="sd">See the description of the L{Options} class for the details.</span>


<span class="sd">Host Languages</span>
<span class="sd">==============</span>

<span class="sd">RDFa 1.1. Core is defined for generic XML; there are specific documents to describe how the generic specification is applied to</span>
<span class="sd">XHTML and HTML5.</span>

<span class="sd">pyRdfa makes an automatic switch among these based on the content type of the source as returned by an HTTP request. The following are the</span>
<span class="sd">possible host languages:</span>
<span class="sd"> - if the content type is C{text/html}, the content is HTML5</span>
<span class="sd"> - if the content type is C{application/xhtml+xml} I{and} the right DTD is used, the content is XHTML1</span>
<span class="sd"> - if the content type is C{application/xhtml+xml} and no or an unknown DTD is used, the content is XHTML5</span>
<span class="sd"> - if the content type is C{application/svg+xml}, the content type is SVG</span>
<span class="sd"> - if the content type is C{application/atom+xml}, the content type is SVG</span>
<span class="sd"> - if the content type is C{application/xml} or C{application/xxx+xml} (but &#39;xxx&#39; is not &#39;atom&#39; or &#39;svg&#39;), the content type is XML</span>

<span class="sd">If local files are used, pyRdfa makes a guess on the content type based on the file name suffix: C{.html} is for HTML5, C{.xhtml} for XHTML1, C{.svg} for SVG, anything else is considered to be general XML. Finally, the content type may be set by the caller when initializing the L{pyRdfa class&lt;pyRdfa.pyRdfa&gt;}.</span>

<span class="sd">Beyond the differences described in the RDFa specification, the main difference is the parser used to parse the source. In the case of HTML5, pyRdfa uses an U{HTML5 parser&lt;http://code.google.com/p/html5lib/&gt;}; for all other cases the simple XML parser, part of the core Python environment, is used. This may be significant in the case of erronuous sources: indeed, the HTML5 parser may do adjustments on</span>
<span class="sd">the DOM tree before handing it over to the distiller. Furthermore, SVG is also recognized as a type that allows embedded RDF in the form of RDF/XML.</span>

<span class="sd">See the variables in the L{host} module if a new host language is added to the system. The current host language information is available for transformers via the option argument, too, and can be used to control the effect of the transformer.</span>

<span class="sd">Vocabularies</span>
<span class="sd">============</span>

<span class="sd">RDFa 1.1 has the notion of vocabulary files (using the C{@vocab} attribute) that may be used to expand the generated RDF graph. Expansion is based on some very simply RDF Schema and OWL statements on sub-properties and sub-classes, and equivalences.</span>

<span class="sd">pyRdfa implements this feature, although it does not do this by default. The extra C{vocab_expansion} parameter should be used for this extra step, for example::</span>
<span class="sd"> from pyRdfa.options import Options</span>
<span class="sd"> options = Options(vocab_expansion=True)</span>
<span class="sd"> print pyRdfa(options=options).rdf_from_source(&#39;filename&#39;)</span>

<span class="sd">The triples in the vocabulary files themselves (i.e., the small ontology in RDF Schema and OWL) are removed from the result, leaving the inferred property and type relationships only (additionally to the “core” RDF content).</span>

<span class="sd">Vocabulary caching</span>
<span class="sd">------------------</span>

<span class="sd">By default, pyRdfa uses a caching mechanism instead of fetching the vocabulary files each time their URI is met as a C{@vocab} attribute value. (This behavior can be switched off setting the C{vocab_cache} option to false.) </span>

<span class="sd">Caching happens in a file system directory. The directory itself is determined by the platform the tool is used on, namely:</span>
<span class="sd"> - On Windows, it is the C{pyRdfa-cache} subdirectory of the C{%APPDATA%} environment variable</span>
<span class="sd"> - On MacOS, it is the C{~/Library/Application Support/pyRdfa-cache}</span>
<span class="sd"> - Otherwise, it is the C{~/.pyRdfa-cache}</span>
<span class="sd"> </span>
<span class="sd">This automatic choice can be overridden by the C{PyRdfaCacheDir} environment variable. </span>

<span class="sd">Caching can be set to be read-only, i.e., the setup might generate the cache files off-line instead of letting the tool writing its own cache when operating, e.g., as a service on the Web. This can be achieved by making the cache directory read only. </span>

<span class="sd">If the directories are neither readable nor writable, the vocabulary files are retrieved via HTTP every time they are hit. This may slow down processing, it is advised to avoid such a setup for the package.</span>

<span class="sd">The cache includes a separate index file and a file for each vocabulary file. Cache control is based upon the C{EXPIRES} header of a vocabulary file’s HTTP return header: when first seen, this data is stored in the index file and controls whether the cache has to be renewed or not. If the HTTP return header does not have this entry, the date is artificially set ot the current date plus one day.</span>

<span class="sd">(The cache files themselves are dumped and loaded using U{Python’s built in cPickle package&lt;http://docs.python.org/release/2.7/library/pickle.html#module-cPickle&gt;}. These are binary files. Care should be taken if they are managed by CVS: they must be declared as binary files when adding them to the repository.)</span>

<span class="sd">RDFa 1.1 vs. RDFa 1.0</span>
<span class="sd">=====================</span>

<span class="sd">Unfortunately, RDFa 1.1 is I{not} fully backward compatible with RDFa 1.0, meaning that, in a few cases, the triples generated from an RDFa 1.1 source are not the same as for RDFa 1.0. (See the separate  U{section in the RDFa 1.1 specification&lt;http://www.w3.org/TR/rdfa-core/#major-differences-with-rdfa-syntax-1.0&gt;} for some further details.)</span>

<span class="sd">This distiller’s default behavior is RDFa 1.1. However, if the source includes, in the top element of the file (e.g., the C{html} element) a C{@version} attribute whose value contains the C{RDFa 1.0} string, then the distiller switches to a RDFa 1.0 mode. (Although the C{@version} attribute is not required in RDFa 1.0, it is fairly commonly used.) Similarly, if the RDFa 1.0 DTD is used in the XHTML source, it will be taken into account (a very frequent setup is that an XHTML file is defined with that DTD and is served as text/html; pyRdfa will consider that file as XHTML5, i.e., parse it with the HTML5 parser, but interpret the RDFa attributes under the RDFa 1.0 rules).</span>

<span class="sd">Transformers</span>
<span class="sd">============</span>

<span class="sd">The package uses the concept of &#39;transformers&#39;: the parsed DOM tree is possibly</span>
<span class="sd">transformed I{before} performing the real RDFa processing. This transformer structure makes it possible to</span>
<span class="sd">add additional &#39;services&#39; without distoring the core code of RDFa processing.</span>

<span class="sd">A transformer is a function with three arguments:</span>

<span class="sd"> - C{node}: a DOM node for the top level element of the DOM tree</span>
<span class="sd"> - C{options}: the current L{Options} instance</span>
<span class="sd"> - C{state}: the current L{ExecutionContext} instance, corresponding to the top level DOM Tree element</span>

<span class="sd">The function may perform any type of change on the DOM tree; the typical behaviour is to add or remove attributes on specific elements. Some transformations are included in the package and can be used as examples; see the L{transform} module of the distribution. These are:</span>

<span class="sd"> - The C{@name} attribute of the C{meta} element is copied into a C{@property} attribute of the same element</span>
<span class="sd"> - Interpreting the &#39;openid&#39; references in the header. See L{transform.OpenID} for further details.</span>
<span class="sd"> - Implementing the Dublin Core dialect to include DC statements from the header.  See L{transform.DublinCore} for further details.</span>

<span class="sd">The user of the package may refer add these transformers to L{Options} instance. Here is a possible usage with the “openid” transformer added to the call::</span>
<span class="sd"> from pyRdfa.options import Options</span>
<span class="sd"> from pyRdfa.transform.OpenID import OpenID_transform</span>
<span class="sd"> options = Options(transformers=[OpenID_transform])</span>
<span class="sd"> print pyRdfa(options=options).rdf_from_source(&#39;filename&#39;)</span>
<span class="sd"> </span>

<span class="sd">@summary: RDFa parser (distiller)</span>
<span class="sd">@requires: Python version 2.5 or up; 2.7 is preferred</span>
<span class="sd">@requires: U{RDFLib&lt;http://rdflib.net&gt;}; version 3.X is preferred.</span>
<span class="sd">@requires: U{html5lib&lt;http://code.google.com/p/html5lib/&gt;} for the HTML5 parsing.</span>
<span class="sd">@requires: U{httpheader&lt;http://deron.meranda.us/python/httpheader/&gt;}; however, a small modification had to make on the original file, so for this reason and to make distribution easier this module (single file) is added to the package.</span>
<span class="sd">@organization: U{World Wide Web Consortium&lt;http://www.w3.org&gt;}</span>
<span class="sd">@author: U{Ivan Herman&lt;a href=&quot;http://www.w3.org/People/Ivan/&quot;&gt;}</span>
<span class="sd">@license: This software is available for use under the</span>
<span class="sd">U{W3C® SOFTWARE NOTICE AND LICENSE&lt;href=&quot;http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231&quot;&gt;}</span>
<span class="sd">@copyright: W3C</span>

<span class="sd">@var builtInTransformers: List of built-in transformers that are to be run regardless, because they are part of the RDFa spec</span>
<span class="sd">@var CACHE_DIR_VAR: Environment variable used to define cache directories for RDFa vocabularies in case the default setting does not work or is not appropriate. </span>
<span class="sd">@var rdfa_current_version: Current &quot;official&quot; version of RDFa that this package implements by default. This can be changed at the invocation of the package</span>
<span class="sd">@var uri_schemes: List of registered (or widely used) URI schemes; used for warnings...</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> $Id: __init__.py,v 1.91 2013-10-16 11:48:54 ivan Exp $</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="n">__version__</span> <span class="o">=</span> <span class="s">&quot;3.4.3&quot;</span>
<span class="n">__author__</span>  <span class="o">=</span> <span class="s">&#39;Ivan Herman&#39;</span>
<span class="n">__contact__</span> <span class="o">=</span> <span class="s">&#39;Ivan Herman, ivan@w3.org&#39;</span>
<span class="n">__license__</span> <span class="o">=</span> <span class="s">&#39;W3C® SOFTWARE NOTICE AND LICENSE, http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231&#39;</span>

<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">PY3</span> <span class="o">=</span> <span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&gt;=</span> <span class="mi">3</span><span class="p">)</span>

<span class="k">if</span> <span class="n">PY3</span> <span class="p">:</span>
	<span class="kn">from</span> <span class="nn">io</span> <span class="kn">import</span> <span class="n">StringIO</span>
<span class="k">else</span> <span class="p">:</span>
	<span class="kn">from</span> <span class="nn">StringIO</span> <span class="kn">import</span> <span class="n">StringIO</span>

<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">xml.dom.minidom</span>
<span class="k">if</span> <span class="n">PY3</span> <span class="p">:</span>
	<span class="kn">from</span> <span class="nn">urllib.parse</span> <span class="kn">import</span> <span class="n">urlparse</span>
<span class="k">else</span> <span class="p">:</span>
	<span class="kn">from</span> <span class="nn">urlparse</span> <span class="kn">import</span> <span class="n">urlparse</span>

<span class="kn">import</span> <span class="nn">rdflib</span>
<span class="kn">from</span> <span class="nn">rdflib</span>	<span class="kn">import</span> <span class="n">URIRef</span>
<span class="kn">from</span> <span class="nn">rdflib</span>	<span class="kn">import</span> <span class="n">Literal</span>
<span class="kn">from</span> <span class="nn">rdflib</span>	<span class="kn">import</span> <span class="n">BNode</span>
<span class="kn">from</span> <span class="nn">rdflib</span>	<span class="kn">import</span> <span class="n">Namespace</span>
<span class="k">if</span> <span class="n">rdflib</span><span class="o">.</span><span class="n">__version__</span> <span class="o">&gt;=</span> <span class="s">&quot;3.0.0&quot;</span> <span class="p">:</span>
	<span class="kn">from</span> <span class="nn">rdflib</span>	<span class="kn">import</span> <span class="n">RDF</span>  <span class="k">as</span> <span class="n">ns_rdf</span>
	<span class="kn">from</span> <span class="nn">rdflib</span>	<span class="kn">import</span> <span class="n">RDFS</span> <span class="k">as</span> <span class="n">ns_rdfs</span>
	<span class="kn">from</span> <span class="nn">rdflib</span>	<span class="kn">import</span> <span class="n">Graph</span>
<span class="k">else</span> <span class="p">:</span>
	<span class="kn">from</span> <span class="nn">rdflib.RDFS</span>  <span class="kn">import</span> <span class="n">RDFSNS</span> <span class="k">as</span> <span class="n">ns_rdfs</span>
	<span class="kn">from</span> <span class="nn">rdflib.RDF</span>	  <span class="kn">import</span> <span class="n">RDFNS</span>  <span class="k">as</span> <span class="n">ns_rdf</span>
	<span class="kn">from</span> <span class="nn">rdflib.Graph</span> <span class="kn">import</span> <span class="n">Graph</span>

<span class="c"># Namespace, in the RDFLib sense, for the rdfa vocabulary</span>
<span class="n">ns_rdfa</span>		<span class="o">=</span> <span class="n">Namespace</span><span class="p">(</span><span class="s">&quot;http://www.w3.org/ns/rdfa#&quot;</span><span class="p">)</span>

<span class="kn">from</span> <span class="nn">.extras.httpheader</span>   <span class="kn">import</span> <span class="n">acceptable_content_type</span><span class="p">,</span> <span class="n">content_type</span>
<span class="kn">from</span> <span class="nn">.transform.prototype</span> <span class="kn">import</span> <span class="n">handle_prototypes</span>

<span class="c"># Vocabulary terms for vocab reporting</span>
<span class="n">RDFA_VOCAB</span>  <span class="o">=</span> <span class="n">ns_rdfa</span><span class="p">[</span><span class="s">&quot;usesVocabulary&quot;</span><span class="p">]</span>

<span class="c"># Namespace, in the RDFLib sense, for the XSD Datatypes</span>
<span class="n">ns_xsd</span>		<span class="o">=</span> <span class="n">Namespace</span><span class="p">(</span><span class="s">&#39;http://www.w3.org/2001/XMLSchema#&#39;</span><span class="p">)</span>

<span class="c"># Namespace, in the RDFLib sense, for the distiller vocabulary, used as part of the processor graph</span>
<span class="n">ns_distill</span>	<span class="o">=</span> <span class="n">Namespace</span><span class="p">(</span><span class="s">&quot;http://www.w3.org/2007/08/pyRdfa/vocab#&quot;</span><span class="p">)</span>

<span class="n">debug</span> <span class="o">=</span> <span class="bp">False</span>

<span class="c">#########################################################################################################</span>

<span class="c"># Exception/error handling. Essentially, all the different exceptions are re-packaged into</span>
<span class="c"># separate exception class, to allow for an easier management on the user level</span>

<div class="viewcode-block" id="RDFaError"><a class="viewcode-back" href="../../../../apidocs/rdflib.plugins.parsers.pyRdfa.html#rdflib.plugins.parsers.pyRdfa.RDFaError">[docs]</a><span class="k">class</span> <span class="nc">RDFaError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">)</span> <span class="p">:</span>
	<span class="sd">&quot;&quot;&quot;Superclass exceptions representing error conditions defined by the RDFa 1.1 specification.</span>
<span class="sd">	It does not add any new functionality to the</span>
<span class="sd">	Exception class.&quot;&quot;&quot;</span>
<div class="viewcode-block" id="RDFaError.__init__"><a class="viewcode-back" href="../../../../apidocs/rdflib.plugins.parsers.pyRdfa.html#rdflib.plugins.parsers.pyRdfa.RDFaError.__init__">[docs]</a>	<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span> <span class="p">:</span>
		<span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="n">msg</span>
		<span class="ne">Exception</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
</div></div>
<div class="viewcode-block" id="FailedSource"><a class="viewcode-back" href="../../../../apidocs/rdflib.plugins.parsers.pyRdfa.html#rdflib.plugins.parsers.pyRdfa.FailedSource">[docs]</a><span class="k">class</span> <span class="nc">FailedSource</span><span class="p">(</span><span class="n">RDFaError</span><span class="p">)</span> <span class="p">:</span>
	<span class="sd">&quot;&quot;&quot;Raised when the original source cannot be accessed. It does not add any new functionality to the</span>
<span class="sd">	Exception class.&quot;&quot;&quot;</span>
<div class="viewcode-block" id="FailedSource.__init__"><a class="viewcode-back" href="../../../../apidocs/rdflib.plugins.parsers.pyRdfa.html#rdflib.plugins.parsers.pyRdfa.FailedSource.__init__">[docs]</a>	<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">http_code</span> <span class="o">=</span> <span class="bp">None</span><span class="p">)</span> <span class="p">:</span>
		<span class="bp">self</span><span class="o">.</span><span class="n">msg</span>		<span class="o">=</span> <span class="n">msg</span>
		<span class="bp">self</span><span class="o">.</span><span class="n">http_code</span> 	<span class="o">=</span> <span class="n">http_code</span>
		<span class="n">RDFaError</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
		</div></div>
<div class="viewcode-block" id="HTTPError"><a class="viewcode-back" href="../../../../apidocs/rdflib.plugins.parsers.pyRdfa.html#rdflib.plugins.parsers.pyRdfa.HTTPError">[docs]</a><span class="k">class</span> <span class="nc">HTTPError</span><span class="p">(</span><span class="n">RDFaError</span><span class="p">)</span> <span class="p">:</span>
	<span class="sd">&quot;&quot;&quot;Raised when HTTP problems are detected. It does not add any new functionality to the</span>
<span class="sd">	Exception class.&quot;&quot;&quot;</span>
<div class="viewcode-block" id="HTTPError.__init__"><a class="viewcode-back" href="../../../../apidocs/rdflib.plugins.parsers.pyRdfa.html#rdflib.plugins.parsers.pyRdfa.HTTPError.__init__">[docs]</a>	<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">http_msg</span><span class="p">,</span> <span class="n">http_code</span><span class="p">)</span> <span class="p">:</span>
		<span class="bp">self</span><span class="o">.</span><span class="n">msg</span>		<span class="o">=</span> <span class="n">http_msg</span>
		<span class="bp">self</span><span class="o">.</span><span class="n">http_code</span>	<span class="o">=</span> <span class="n">http_code</span>
		<span class="n">RDFaError</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">http_msg</span><span class="p">)</span>
</div></div>
<div class="viewcode-block" id="ProcessingError"><a class="viewcode-back" href="../../../../apidocs/rdflib.plugins.parsers.pyRdfa.html#rdflib.plugins.parsers.pyRdfa.ProcessingError">[docs]</a><span class="k">class</span> <span class="nc">ProcessingError</span><span class="p">(</span><span class="n">RDFaError</span><span class="p">)</span> <span class="p">:</span>
	<span class="sd">&quot;&quot;&quot;Error found during processing. It does not add any new functionality to the</span>
<span class="sd">	Exception class.&quot;&quot;&quot;</span>
	<span class="k">pass</span>
</div>
<div class="viewcode-block" id="pyRdfaError"><a class="viewcode-back" href="../../../../apidocs/rdflib.plugins.parsers.pyRdfa.html#rdflib.plugins.parsers.pyRdfa.pyRdfaError">[docs]</a><span class="k">class</span> <span class="nc">pyRdfaError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">)</span> <span class="p">:</span>
	<span class="sd">&quot;&quot;&quot;Superclass exceptions representing error conditions outside the RDFa 1.1 specification.&quot;&quot;&quot;</span>
	<span class="k">pass</span>

<span class="c"># Error and Warning RDFS classes</span></div>
<span class="n">RDFA_Error</span>                  <span class="o">=</span> <span class="n">ns_rdfa</span><span class="p">[</span><span class="s">&quot;Error&quot;</span><span class="p">]</span>
<span class="n">RDFA_Warning</span>                <span class="o">=</span> <span class="n">ns_rdfa</span><span class="p">[</span><span class="s">&quot;Warning&quot;</span><span class="p">]</span>
<span class="n">RDFA_Info</span>                   <span class="o">=</span> <span class="n">ns_rdfa</span><span class="p">[</span><span class="s">&quot;Information&quot;</span><span class="p">]</span>
<span class="n">NonConformantMarkup</span>         <span class="o">=</span> <span class="n">ns_rdfa</span><span class="p">[</span><span class="s">&quot;DocumentError&quot;</span><span class="p">]</span>
<span class="n">UnresolvablePrefix</span>          <span class="o">=</span> <span class="n">ns_rdfa</span><span class="p">[</span><span class="s">&quot;UnresolvedCURIE&quot;</span><span class="p">]</span>
<span class="n">UnresolvableReference</span>       <span class="o">=</span> <span class="n">ns_rdfa</span><span class="p">[</span><span class="s">&quot;UnresolvedCURIE&quot;</span><span class="p">]</span>
<span class="n">UnresolvableTerm</span>            <span class="o">=</span> <span class="n">ns_rdfa</span><span class="p">[</span><span class="s">&quot;UnresolvedTerm&quot;</span><span class="p">]</span>
<span class="n">VocabReferenceError</span>         <span class="o">=</span> <span class="n">ns_rdfa</span><span class="p">[</span><span class="s">&quot;VocabReferenceError&quot;</span><span class="p">]</span>
<span class="n">PrefixRedefinitionWarning</span>   <span class="o">=</span> <span class="n">ns_rdfa</span><span class="p">[</span><span class="s">&quot;PrefixRedefinition&quot;</span><span class="p">]</span>

<span class="n">FileReferenceError</span>          <span class="o">=</span> <span class="n">ns_distill</span><span class="p">[</span><span class="s">&quot;FileReferenceError&quot;</span><span class="p">]</span>
<span class="n">HTError</span>                     <span class="o">=</span> <span class="n">ns_distill</span><span class="p">[</span><span class="s">&quot;HTTPError&quot;</span><span class="p">]</span>
<span class="n">IncorrectPrefixDefinition</span>   <span class="o">=</span> <span class="n">ns_distill</span><span class="p">[</span><span class="s">&quot;IncorrectPrefixDefinition&quot;</span><span class="p">]</span>
<span class="n">IncorrectBlankNodeUsage</span>     <span class="o">=</span> <span class="n">ns_distill</span><span class="p">[</span><span class="s">&quot;IncorrectBlankNodeUsage&quot;</span><span class="p">]</span>
<span class="n">IncorrectLiteral</span>            <span class="o">=</span> <span class="n">ns_distill</span><span class="p">[</span><span class="s">&quot;IncorrectLiteral&quot;</span><span class="p">]</span>

<span class="c"># Error message texts</span>
<span class="n">err_no_blank_node</span>                    <span class="o">=</span> <span class="s">&quot;Blank node in </span><span class="si">%s</span><span class="s"> position is not allowed; ignored&quot;</span>

<span class="n">err_redefining_URI_as_prefix</span>        <span class="o">=</span> <span class="s">&quot;&#39;</span><span class="si">%s</span><span class="s">&#39; a registered or an otherwise used URI scheme, but is defined as a prefix here; is this a mistake? (see, eg, http://en.wikipedia.org/wiki/URI_scheme or http://www.iana.org/assignments/uri-schemes.html for further information for most of the URI schemes)&quot;</span>
<span class="n">err_xmlns_deprecated</span>                <span class="o">=</span> <span class="s">&quot;The usage of &#39;xmlns&#39; for prefix definition is deprecated; please use the &#39;prefix&#39; attribute instead (definition for &#39;</span><span class="si">%s</span><span class="s">&#39;)&quot;</span>
<span class="n">err_bnode_local_prefix</span>              <span class="o">=</span> <span class="s">&quot;The &#39;_&#39; local CURIE prefix is reserved for blank nodes, and cannot be defined as a prefix&quot;</span>
<span class="n">err_col_local_prefix</span>                <span class="o">=</span> <span class="s">&quot;The character &#39;:&#39; is not valid in a CURIE Prefix, and cannot be used in a prefix definition (definition for &#39;</span><span class="si">%s</span><span class="s">&#39;)&quot;</span>
<span class="n">err_missing_URI_prefix</span>              <span class="o">=</span> <span class="s">&quot;Missing URI in prefix declaration for &#39;</span><span class="si">%s</span><span class="s">&#39; (in &#39;</span><span class="si">%s</span><span class="s">&#39;)&quot;</span>
<span class="n">err_invalid_prefix</span>                  <span class="o">=</span> <span class="s">&quot;Invalid prefix declaration &#39;</span><span class="si">%s</span><span class="s">&#39; (in &#39;</span><span class="si">%s</span><span class="s">&#39;)&quot;</span>
<span class="n">err_no_default_prefix</span>               <span class="o">=</span> <span class="s">&quot;Default prefix cannot be changed (in &#39;</span><span class="si">%s</span><span class="s">&#39;)&quot;</span>
<span class="n">err_prefix_and_xmlns</span>                <span class="o">=</span> <span class="s">&quot;@prefix setting for &#39;</span><span class="si">%s</span><span class="s">&#39; overrides the &#39;xmlns:</span><span class="si">%s</span><span class="s">&#39; setting; may be a source of problem if same file is run through RDFa 1.0&quot;</span>
<span class="n">err_non_ncname_prefix</span>               <span class="o">=</span> <span class="s">&quot;Non NCNAME &#39;</span><span class="si">%s</span><span class="s">&#39; in prefix definition (in &#39;</span><span class="si">%s</span><span class="s">&#39;); ignored&quot;</span>
<span class="n">err_absolute_reference</span>              <span class="o">=</span> <span class="s">&quot;CURIE Reference part contains an authority part: </span><span class="si">%s</span><span class="s"> (in &#39;</span><span class="si">%s</span><span class="s">&#39;); ignored&quot;</span>     
<span class="n">err_query_reference</span>                 <span class="o">=</span> <span class="s">&quot;CURIE Reference query part contains an unauthorized character: </span><span class="si">%s</span><span class="s"> (in &#39;</span><span class="si">%s</span><span class="s">&#39;); ignored&quot;</span>     
<span class="n">err_fragment_reference</span>              <span class="o">=</span> <span class="s">&quot;CURIE Reference fragment part contains an unauthorized character: </span><span class="si">%s</span><span class="s"> (in &#39;</span><span class="si">%s</span><span class="s">&#39;); ignored&quot;</span>     
<span class="n">err_lang</span>                            <span class="o">=</span> <span class="s">&quot;There is a problem with language setting; either both xml:lang and lang used on an element with different values, or, for (X)HTML5, only xml:lang is used.&quot;</span>
<span class="n">err_URI_scheme</span>                      <span class="o">=</span> <span class="s">&quot;Unusual URI scheme used in &lt;</span><span class="si">%s</span><span class="s">&gt;; may that be a mistake, e.g., resulting from using an undefined CURIE prefix or an incorrect CURIE?&quot;</span>
<span class="n">err_illegal_safe_CURIE</span>              <span class="o">=</span> <span class="s">&quot;Illegal safe CURIE: </span><span class="si">%s</span><span class="s">; ignored&quot;</span>
<span class="n">err_no_CURIE_in_safe_CURIE</span>          <span class="o">=</span> <span class="s">&quot;Safe CURIE is used, but the value does not correspond to a defined CURIE: [</span><span class="si">%s</span><span class="s">]; ignored&quot;</span>
<span class="n">err_undefined_terms</span>                 <span class="o">=</span> <span class="s">&quot;&#39;</span><span class="si">%s</span><span class="s">&#39; is used as a term, but has not been defined as such; ignored&quot;</span>
<span class="n">err_non_legal_CURIE_ref</span>             <span class="o">=</span> <span class="s">&quot;Relative URI is not allowed in this position (or not a legal CURIE reference) &#39;</span><span class="si">%s</span><span class="s">&#39;; ignored&quot;</span>
<span class="n">err_undefined_CURIE</span>                 <span class="o">=</span> <span class="s">&quot;Undefined CURIE: &#39;</span><span class="si">%s</span><span class="s">&#39;; ignored&quot;</span>
<span class="n">err_prefix_redefinition</span>             <span class="o">=</span> <span class="s">&quot;Prefix &#39;</span><span class="si">%s</span><span class="s">&#39; (defined in the initial RDFa context or in an ancestor) is redefined&quot;</span>

<span class="n">err_unusual_char_in_URI</span>             <span class="o">=</span> <span class="s">&quot;Unusual character in uri: </span><span class="si">%s</span><span class="s">; possible error?&quot;</span>

<span class="c">#############################################################################################</span>

<span class="kn">from</span> <span class="nn">.state</span>            <span class="kn">import</span> <span class="n">ExecutionContext</span>
<span class="kn">from</span> <span class="nn">.parse</span>            <span class="kn">import</span> <span class="n">parse_one_node</span>
<span class="kn">from</span> <span class="nn">.options</span>          <span class="kn">import</span> <span class="n">Options</span>
<span class="kn">from</span> <span class="nn">.transform</span>        <span class="kn">import</span> <span class="n">top_about</span><span class="p">,</span> <span class="n">empty_safe_curie</span><span class="p">,</span> <span class="n">vocab_for_role</span>
<span class="kn">from</span> <span class="nn">.utils</span>            <span class="kn">import</span> <span class="n">URIOpener</span>
<span class="kn">from</span> <span class="nn">.host</span>             <span class="kn">import</span> <span class="n">HostLanguage</span><span class="p">,</span> <span class="n">MediaTypes</span><span class="p">,</span> <span class="n">preferred_suffixes</span><span class="p">,</span> <span class="n">content_to_host_language</span>

<span class="c"># Environment variable used to characterize cache directories for RDFa vocabulary files. </span>
<span class="n">CACHE_DIR_VAR</span>           <span class="o">=</span> <span class="s">&quot;PyRdfaCacheDir&quot;</span>

<span class="c"># current &quot;official&quot; version of RDFa that this package implements. This can be changed at the invocation of the package</span>
<span class="n">rdfa_current_version</span>    <span class="o">=</span> <span class="s">&quot;1.1&quot;</span>

<span class="c"># I removed schemes that would not appear as a prefix anyway, like iris.beep</span>
<span class="c"># http://en.wikipedia.org/wiki/URI_scheme seems to be a good source of information</span>
<span class="c"># as well as http://www.iana.org/assignments/uri-schemes.html</span>
<span class="c"># There are some overlaps here, but better more than not enough...</span>

<span class="c"># This comes from wikipedia</span>
<span class="n">registered_iana_schemes</span> <span class="o">=</span> <span class="p">[</span>
	<span class="s">&quot;aaa&quot;</span><span class="p">,</span><span class="s">&quot;aaas&quot;</span><span class="p">,</span><span class="s">&quot;acap&quot;</span><span class="p">,</span><span class="s">&quot;cap&quot;</span><span class="p">,</span><span class="s">&quot;cid&quot;</span><span class="p">,</span><span class="s">&quot;crid&quot;</span><span class="p">,</span><span class="s">&quot;data&quot;</span><span class="p">,</span><span class="s">&quot;dav&quot;</span><span class="p">,</span><span class="s">&quot;dict&quot;</span><span class="p">,</span><span class="s">&quot;dns&quot;</span><span class="p">,</span><span class="s">&quot;fax&quot;</span><span class="p">,</span><span class="s">&quot;file&quot;</span><span class="p">,</span> <span class="s">&quot;ftp&quot;</span><span class="p">,</span><span class="s">&quot;geo&quot;</span><span class="p">,</span><span class="s">&quot;go&quot;</span><span class="p">,</span>
	<span class="s">&quot;gopher&quot;</span><span class="p">,</span><span class="s">&quot;h323&quot;</span><span class="p">,</span><span class="s">&quot;http&quot;</span><span class="p">,</span><span class="s">&quot;https&quot;</span><span class="p">,</span><span class="s">&quot;iax&quot;</span><span class="p">,</span><span class="s">&quot;icap&quot;</span><span class="p">,</span><span class="s">&quot;im&quot;</span><span class="p">,</span><span class="s">&quot;imap&quot;</span><span class="p">,</span><span class="s">&quot;info&quot;</span><span class="p">,</span><span class="s">&quot;ipp&quot;</span><span class="p">,</span><span class="s">&quot;iris&quot;</span><span class="p">,</span><span class="s">&quot;ldap&quot;</span><span class="p">,</span> <span class="s">&quot;lsid&quot;</span><span class="p">,</span>
	<span class="s">&quot;mailto&quot;</span><span class="p">,</span><span class="s">&quot;mid&quot;</span><span class="p">,</span><span class="s">&quot;modem&quot;</span><span class="p">,</span><span class="s">&quot;msrp&quot;</span><span class="p">,</span><span class="s">&quot;msrps&quot;</span><span class="p">,</span> <span class="s">&quot;mtqp&quot;</span><span class="p">,</span> <span class="s">&quot;mupdate&quot;</span><span class="p">,</span><span class="s">&quot;news&quot;</span><span class="p">,</span><span class="s">&quot;nfs&quot;</span><span class="p">,</span><span class="s">&quot;nntp&quot;</span><span class="p">,</span><span class="s">&quot;opaquelocktoken&quot;</span><span class="p">,</span>
	<span class="s">&quot;pop&quot;</span><span class="p">,</span><span class="s">&quot;pres&quot;</span><span class="p">,</span> <span class="s">&quot;prospero&quot;</span><span class="p">,</span><span class="s">&quot;rstp&quot;</span><span class="p">,</span><span class="s">&quot;rsync&quot;</span><span class="p">,</span> <span class="s">&quot;service&quot;</span><span class="p">,</span><span class="s">&quot;shttp&quot;</span><span class="p">,</span><span class="s">&quot;sieve&quot;</span><span class="p">,</span><span class="s">&quot;sip&quot;</span><span class="p">,</span><span class="s">&quot;sips&quot;</span><span class="p">,</span> <span class="s">&quot;sms&quot;</span><span class="p">,</span> <span class="s">&quot;snmp&quot;</span><span class="p">,</span> <span class="s">&quot;soap&quot;</span><span class="p">,</span> <span class="s">&quot;tag&quot;</span><span class="p">,</span>
	<span class="s">&quot;tel&quot;</span><span class="p">,</span><span class="s">&quot;telnet&quot;</span><span class="p">,</span> <span class="s">&quot;tftp&quot;</span><span class="p">,</span> <span class="s">&quot;thismessage&quot;</span><span class="p">,</span><span class="s">&quot;tn3270&quot;</span><span class="p">,</span><span class="s">&quot;tip&quot;</span><span class="p">,</span><span class="s">&quot;tv&quot;</span><span class="p">,</span><span class="s">&quot;urn&quot;</span><span class="p">,</span><span class="s">&quot;vemmi&quot;</span><span class="p">,</span><span class="s">&quot;wais&quot;</span><span class="p">,</span><span class="s">&quot;ws&quot;</span><span class="p">,</span> <span class="s">&quot;wss&quot;</span><span class="p">,</span> <span class="s">&quot;xmpp&quot;</span>
<span class="p">]</span>

<span class="c"># This comes from wikipedia, too</span>
<span class="n">unofficial_common</span> <span class="o">=</span> <span class="p">[</span>
	<span class="s">&quot;about&quot;</span><span class="p">,</span> <span class="s">&quot;adiumxtra&quot;</span><span class="p">,</span> <span class="s">&quot;aim&quot;</span><span class="p">,</span> <span class="s">&quot;apt&quot;</span><span class="p">,</span> <span class="s">&quot;afp&quot;</span><span class="p">,</span> <span class="s">&quot;aw&quot;</span><span class="p">,</span> <span class="s">&quot;bitcoin&quot;</span><span class="p">,</span> <span class="s">&quot;bolo&quot;</span><span class="p">,</span> <span class="s">&quot;callto&quot;</span><span class="p">,</span> <span class="s">&quot;chrome&quot;</span><span class="p">,</span> <span class="s">&quot;coap&quot;</span><span class="p">,</span>
	<span class="s">&quot;content&quot;</span><span class="p">,</span> <span class="s">&quot;cvs&quot;</span><span class="p">,</span> <span class="s">&quot;doi&quot;</span><span class="p">,</span> <span class="s">&quot;ed2k&quot;</span><span class="p">,</span> <span class="s">&quot;facetime&quot;</span><span class="p">,</span> <span class="s">&quot;feed&quot;</span><span class="p">,</span> <span class="s">&quot;finger&quot;</span><span class="p">,</span> <span class="s">&quot;fish&quot;</span><span class="p">,</span> <span class="s">&quot;git&quot;</span><span class="p">,</span> <span class="s">&quot;gg&quot;</span><span class="p">,</span>
	<span class="s">&quot;gizmoproject&quot;</span><span class="p">,</span> <span class="s">&quot;gtalk&quot;</span><span class="p">,</span> <span class="s">&quot;irc&quot;</span><span class="p">,</span> <span class="s">&quot;ircs&quot;</span><span class="p">,</span> <span class="s">&quot;irc6&quot;</span><span class="p">,</span> <span class="s">&quot;itms&quot;</span><span class="p">,</span> <span class="s">&quot;jar&quot;</span><span class="p">,</span> <span class="s">&quot;javascript&quot;</span><span class="p">,</span>
	<span class="s">&quot;keyparc&quot;</span><span class="p">,</span> <span class="s">&quot;lastfm&quot;</span><span class="p">,</span> <span class="s">&quot;ldaps&quot;</span><span class="p">,</span> <span class="s">&quot;magnet&quot;</span><span class="p">,</span> <span class="s">&quot;maps&quot;</span><span class="p">,</span> <span class="s">&quot;market&quot;</span><span class="p">,</span> <span class="s">&quot;message&quot;</span><span class="p">,</span> <span class="s">&quot;mms&quot;</span><span class="p">,</span>
	<span class="s">&quot;msnim&quot;</span><span class="p">,</span> <span class="s">&quot;mumble&quot;</span><span class="p">,</span> <span class="s">&quot;mvn&quot;</span><span class="p">,</span> <span class="s">&quot;notes&quot;</span><span class="p">,</span> <span class="s">&quot;palm&quot;</span><span class="p">,</span> <span class="s">&quot;paparazzi&quot;</span><span class="p">,</span> <span class="s">&quot;psync&quot;</span><span class="p">,</span> <span class="s">&quot;rmi&quot;</span><span class="p">,</span>
	<span class="s">&quot;secondlife&quot;</span><span class="p">,</span> <span class="s">&quot;sgn&quot;</span><span class="p">,</span> <span class="s">&quot;skype&quot;</span><span class="p">,</span> <span class="s">&quot;spotify&quot;</span><span class="p">,</span> <span class="s">&quot;ssh&quot;</span><span class="p">,</span> <span class="s">&quot;sftp&quot;</span><span class="p">,</span> <span class="s">&quot;smb&quot;</span><span class="p">,</span> <span class="s">&quot;soldat&quot;</span><span class="p">,</span>
	<span class="s">&quot;steam&quot;</span><span class="p">,</span> <span class="s">&quot;svn&quot;</span><span class="p">,</span> <span class="s">&quot;teamspeak&quot;</span><span class="p">,</span> <span class="s">&quot;things&quot;</span><span class="p">,</span> <span class="s">&quot;udb&quot;</span><span class="p">,</span> <span class="s">&quot;unreal&quot;</span><span class="p">,</span> <span class="s">&quot;ut2004&quot;</span><span class="p">,</span>
	<span class="s">&quot;ventrillo&quot;</span><span class="p">,</span> <span class="s">&quot;view-source&quot;</span><span class="p">,</span> <span class="s">&quot;webcal&quot;</span><span class="p">,</span> <span class="s">&quot;wtai&quot;</span><span class="p">,</span> <span class="s">&quot;wyciwyg&quot;</span><span class="p">,</span> <span class="s">&quot;xfire&quot;</span><span class="p">,</span> <span class="s">&quot;xri&quot;</span><span class="p">,</span> <span class="s">&quot;ymsgr&quot;</span>
<span class="p">]</span>

<span class="c"># These come from the IANA page</span>
<span class="n">historical_iana_schemes</span> <span class="o">=</span> <span class="p">[</span>
	<span class="s">&quot;fax&quot;</span><span class="p">,</span> <span class="s">&quot;mailserver&quot;</span><span class="p">,</span> <span class="s">&quot;modem&quot;</span><span class="p">,</span> <span class="s">&quot;pack&quot;</span><span class="p">,</span> <span class="s">&quot;prospero&quot;</span><span class="p">,</span> <span class="s">&quot;snews&quot;</span><span class="p">,</span> <span class="s">&quot;videotex&quot;</span><span class="p">,</span> <span class="s">&quot;wais&quot;</span>
<span class="p">]</span>

<span class="n">provisional_iana_schemes</span> <span class="o">=</span> <span class="p">[</span>
	<span class="s">&quot;afs&quot;</span><span class="p">,</span> <span class="s">&quot;dtn&quot;</span><span class="p">,</span> <span class="s">&quot;dvb&quot;</span><span class="p">,</span> <span class="s">&quot;icon&quot;</span><span class="p">,</span> <span class="s">&quot;ipn&quot;</span><span class="p">,</span> <span class="s">&quot;jms&quot;</span><span class="p">,</span> <span class="s">&quot;oid&quot;</span><span class="p">,</span> <span class="s">&quot;rsync&quot;</span><span class="p">,</span> <span class="s">&quot;ni&quot;</span> 
<span class="p">]</span>

<span class="n">other_used_schemes</span> <span class="o">=</span> <span class="p">[</span>
	<span class="s">&quot;hdl&quot;</span><span class="p">,</span> <span class="s">&quot;isbn&quot;</span><span class="p">,</span> <span class="s">&quot;issn&quot;</span><span class="p">,</span> <span class="s">&quot;mstp&quot;</span><span class="p">,</span> <span class="s">&quot;rtmp&quot;</span><span class="p">,</span> <span class="s">&quot;rtspu&quot;</span><span class="p">,</span> <span class="s">&quot;stp&quot;</span> 
<span class="p">]</span>

<span class="n">uri_schemes</span> <span class="o">=</span> <span class="n">registered_iana_schemes</span> <span class="o">+</span> <span class="n">unofficial_common</span> <span class="o">+</span> <span class="n">historical_iana_schemes</span> <span class="o">+</span> <span class="n">provisional_iana_schemes</span> <span class="o">+</span> <span class="n">other_used_schemes</span>

<span class="c"># List of built-in transformers that are to be run regardless, because they are part of the RDFa spec</span>
<span class="n">builtInTransformers</span> <span class="o">=</span> <span class="p">[</span>
	<span class="n">empty_safe_curie</span><span class="p">,</span> <span class="n">top_about</span><span class="p">,</span> <span class="n">vocab_for_role</span>
<span class="p">]</span>
	
<span class="c">#########################################################################################################</span>
<div class="viewcode-block" id="pyRdfa"><a class="viewcode-back" href="../../../../apidocs/rdflib.plugins.parsers.pyRdfa.html#rdflib.plugins.parsers.pyRdfa.pyRdfa">[docs]</a><span class="k">class</span> <span class="nc">pyRdfa</span> <span class="p">:</span>
	<span class="sd">&quot;&quot;&quot;Main processing class for the distiller</span>
<span class="sd">	</span>
<span class="sd">	@ivar options: an instance of the L{Options} class</span>
<span class="sd">	@ivar media_type: the preferred default media type, possibly set at initialization</span>
<span class="sd">	@ivar base: the base value, possibly set at initialization</span>
<span class="sd">	@ivar http_status: HTTP Status, to be returned when the package is used via a CGI entry. Initially set to 200, may be modified by exception handlers</span>
<span class="sd">	&quot;&quot;&quot;</span>
<div class="viewcode-block" id="pyRdfa.__init__"><a class="viewcode-back" href="../../../../apidocs/rdflib.plugins.parsers.pyRdfa.html#rdflib.plugins.parsers.pyRdfa.pyRdfa.__init__">[docs]</a>	<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">options</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">base</span> <span class="o">=</span> <span class="s">&quot;&quot;</span><span class="p">,</span> <span class="n">media_type</span> <span class="o">=</span> <span class="s">&quot;&quot;</span><span class="p">,</span> <span class="n">rdfa_version</span> <span class="o">=</span> <span class="bp">None</span><span class="p">)</span> <span class="p">:</span>
		<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">		@keyword options: Options for the distiller</span>
<span class="sd">		@type options: L{Options}</span>
<span class="sd">		@keyword base: URI for the default &quot;base&quot; value (usually the URI of the file to be processed)</span>
<span class="sd">		@keyword media_type: explicit setting of the preferred media type (a.k.a. content type) of the the RDFa source</span>
<span class="sd">		@keyword rdfa_version: the RDFa version that should be used. If not set, the value of the global L{rdfa_current_version} variable is used</span>
<span class="sd">		&quot;&quot;&quot;</span>
		<span class="bp">self</span><span class="o">.</span><span class="n">http_status</span> <span class="o">=</span> <span class="mi">200</span>
		
		<span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">=</span> <span class="n">base</span>
		<span class="k">if</span> <span class="n">base</span> <span class="o">==</span> <span class="s">&quot;&quot;</span> <span class="p">:</span>
			<span class="bp">self</span><span class="o">.</span><span class="n">required_base</span> <span class="o">=</span> <span class="bp">None</span>
		<span class="k">else</span> <span class="p">:</span>
			<span class="bp">self</span><span class="o">.</span><span class="n">required_base</span>	<span class="o">=</span> <span class="n">base</span>
		<span class="bp">self</span><span class="o">.</span><span class="n">charset</span> 		<span class="o">=</span> <span class="bp">None</span>

		<span class="c"># predefined content type</span>
		<span class="bp">self</span><span class="o">.</span><span class="n">media_type</span> <span class="o">=</span> <span class="n">media_type</span>

		<span class="k">if</span> <span class="n">options</span> <span class="o">==</span> <span class="bp">None</span> <span class="p">:</span>
			<span class="bp">self</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="n">Options</span><span class="p">()</span>
		<span class="k">else</span> <span class="p">:</span>
			<span class="bp">self</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="n">options</span>

		<span class="k">if</span> <span class="n">media_type</span> <span class="o">!=</span> <span class="s">&quot;&quot;</span> <span class="p">:</span>
			<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">set_host_language</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">media_type</span><span class="p">)</span>
			
		<span class="k">if</span> <span class="n">rdfa_version</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="p">:</span>
			<span class="bp">self</span><span class="o">.</span><span class="n">rdfa_version</span> <span class="o">=</span> <span class="n">rdfa_version</span>
		<span class="k">else</span> <span class="p">:</span>
			<span class="bp">self</span><span class="o">.</span><span class="n">rdfa_version</span> <span class="o">=</span> <span class="bp">None</span>
		</div>
	<span class="k">def</span> <span class="nf">_get_input</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span> <span class="p">:</span>
		<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">		Trying to guess whether &quot;name&quot; is a URI or a string (for a file); it then tries to open this source accordingly,</span>
<span class="sd">		returning a file-like object. If name is none of these, it returns the input argument (that should</span>
<span class="sd">		be, supposedly, a file-like object already).</span>
<span class="sd">		</span>
<span class="sd">		If the media type has not been set explicitly at initialization of this instance,</span>
<span class="sd">		the method also sets the media_type based on the HTTP GET response or the suffix of the file. See</span>
<span class="sd">		L{host.preferred_suffixes} for the suffix to media type mapping. </span>
<span class="sd">		</span>
<span class="sd">		@param name: identifier of the input source</span>
<span class="sd">		@type name: string or a file-like object</span>
<span class="sd">		@return: a file like object if opening &quot;name&quot; is possible and successful, &quot;name&quot; otherwise</span>
<span class="sd">		&quot;&quot;&quot;</span>
		<span class="k">try</span> <span class="p">:</span>
			<span class="c"># Python 2 branch</span>
			<span class="n">isstring</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="nb">basestring</span><span class="p">)</span>
		<span class="k">except</span> <span class="p">:</span>
			<span class="c"># Python 3 branch</span>
			<span class="n">isstring</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span>

		<span class="k">try</span> <span class="p">:</span>
			<span class="k">if</span> <span class="n">isstring</span> <span class="p">:</span>
				<span class="c"># check if this is a URI, ie, if there is a valid &#39;scheme&#39; part</span>
				<span class="c"># otherwise it is considered to be a simple file</span>
				<span class="k">if</span> <span class="n">urlparse</span><span class="p">(</span><span class="n">name</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s">&quot;&quot;</span> <span class="p">:</span>
					<span class="n">url_request</span> 	  <span class="o">=</span> <span class="n">URIOpener</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
					<span class="bp">self</span><span class="o">.</span><span class="n">base</span> 		  <span class="o">=</span> <span class="n">url_request</span><span class="o">.</span><span class="n">location</span>
					<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">media_type</span> <span class="o">==</span> <span class="s">&quot;&quot;</span> <span class="p">:</span>
						<span class="k">if</span> <span class="n">url_request</span><span class="o">.</span><span class="n">content_type</span> <span class="ow">in</span> <span class="n">content_to_host_language</span> <span class="p">:</span>
							<span class="bp">self</span><span class="o">.</span><span class="n">media_type</span> <span class="o">=</span> <span class="n">url_request</span><span class="o">.</span><span class="n">content_type</span>
						<span class="k">else</span> <span class="p">:</span>
							<span class="bp">self</span><span class="o">.</span><span class="n">media_type</span> <span class="o">=</span> <span class="n">MediaTypes</span><span class="o">.</span><span class="n">xml</span>
						<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">set_host_language</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">media_type</span><span class="p">)</span>
					<span class="bp">self</span><span class="o">.</span><span class="n">charset</span> <span class="o">=</span> <span class="n">url_request</span><span class="o">.</span><span class="n">charset</span>
					<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">required_base</span> <span class="o">==</span> <span class="bp">None</span> <span class="p">:</span>
						<span class="bp">self</span><span class="o">.</span><span class="n">required_base</span> <span class="o">=</span> <span class="n">name</span>
					<span class="k">return</span> <span class="n">url_request</span><span class="o">.</span><span class="n">data</span>
				<span class="k">else</span> <span class="p">:</span>
					<span class="c"># Creating a File URI for this thing</span>
					<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">required_base</span> <span class="o">==</span> <span class="bp">None</span> <span class="p">:</span>
						<span class="bp">self</span><span class="o">.</span><span class="n">required_base</span> <span class="o">=</span> <span class="s">&quot;file://&quot;</span> <span class="o">+</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">(),</span><span class="n">name</span><span class="p">)</span>
					<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">media_type</span> <span class="o">==</span> <span class="s">&quot;&quot;</span> <span class="p">:</span>
						<span class="bp">self</span><span class="o">.</span><span class="n">media_type</span> <span class="o">=</span> <span class="n">MediaTypes</span><span class="o">.</span><span class="n">xml</span>
						<span class="c"># see if the default should be overwritten</span>
						<span class="k">for</span> <span class="n">suffix</span> <span class="ow">in</span> <span class="n">preferred_suffixes</span> <span class="p">:</span>
							<span class="k">if</span> <span class="n">name</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="n">suffix</span><span class="p">)</span> <span class="p">:</span>
								<span class="bp">self</span><span class="o">.</span><span class="n">media_type</span> <span class="o">=</span> <span class="n">preferred_suffixes</span><span class="p">[</span><span class="n">suffix</span><span class="p">]</span>
								<span class="bp">self</span><span class="o">.</span><span class="n">charset</span> <span class="o">=</span> <span class="s">&#39;utf-8&#39;</span>
								<span class="k">break</span>
						<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">set_host_language</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">media_type</span><span class="p">)</span>
					<span class="k">return</span> <span class="nb">open</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="s">&#39;rb&#39;</span><span class="p">)</span>
			<span class="k">else</span> <span class="p">:</span>
				<span class="k">return</span> <span class="n">name</span>
		<span class="k">except</span> <span class="n">HTTPError</span> <span class="p">:</span>
			<span class="k">raise</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()[</span><span class="mi">1</span><span class="p">]</span>
		<span class="k">except</span> <span class="p">:</span>
			<span class="p">(</span><span class="nb">type</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">traceback</span><span class="p">)</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()</span>
			<span class="k">raise</span> <span class="n">FailedSource</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
	
	<span class="c">####################################################################################################################</span>
	<span class="c"># Externally used methods</span>
	<span class="c">#</span>
<div class="viewcode-block" id="pyRdfa.graph_from_DOM"><a class="viewcode-back" href="../../../../apidocs/rdflib.plugins.parsers.pyRdfa.html#rdflib.plugins.parsers.pyRdfa.pyRdfa.graph_from_DOM">[docs]</a>	<span class="k">def</span> <span class="nf">graph_from_DOM</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dom</span><span class="p">,</span> <span class="n">graph</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">pgraph</span> <span class="o">=</span> <span class="bp">None</span><span class="p">)</span> <span class="p">:</span>
		<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">		Extract the RDF Graph from a DOM tree. This is where the real processing happens. All other methods get down to this</span>
<span class="sd">		one, eventually (e.g., after opening a URI and parsing it into a DOM).</span>
<span class="sd">		@param dom: a DOM Node element, the top level entry node for the whole tree (i.e., the C{dom.documentElement} is used to initiate processing down the node hierarchy)</span>
<span class="sd">		@keyword graph: an RDF Graph (if None, than a new one is created)</span>
<span class="sd">		@type graph: rdflib Graph instance.</span>
<span class="sd">		@keyword pgraph: an RDF Graph to hold (possibly) the processor graph content. If None, and the error/warning triples are to be generated, they will be added to the returned graph. Otherwise they are stored in this graph.</span>
<span class="sd">		@type pgraph: rdflib Graph instance</span>
<span class="sd">		@return: an RDF Graph</span>
<span class="sd">		@rtype: rdflib Graph instance</span>
<span class="sd">		&quot;&quot;&quot;</span>
		<span class="k">def</span> <span class="nf">copyGraph</span><span class="p">(</span><span class="n">tog</span><span class="p">,</span> <span class="n">fromg</span><span class="p">)</span> <span class="p">:</span>
			<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">fromg</span> <span class="p">:</span>
				<span class="n">tog</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
			<span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">ns</span> <span class="ow">in</span> <span class="n">fromg</span><span class="o">.</span><span class="n">namespaces</span><span class="p">()</span> <span class="p">:</span>
				<span class="n">tog</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">k</span><span class="p">,</span><span class="n">ns</span><span class="p">)</span>

		<span class="k">if</span> <span class="n">graph</span> <span class="o">==</span> <span class="bp">None</span> <span class="p">:</span>
			<span class="c"># Create the RDF Graph, that will contain the return triples...</span>
			<span class="n">graph</span>   <span class="o">=</span> <span class="n">Graph</span><span class="p">()</span>
			
		<span class="c"># this will collect the content, the &#39;default graph&#39;, as called in the RDFa spec</span>
		<span class="n">default_graph</span> <span class="o">=</span> <span class="n">Graph</span><span class="p">()</span>
	
		<span class="c"># get the DOM tree</span>
		<span class="n">topElement</span> <span class="o">=</span> <span class="n">dom</span><span class="o">.</span><span class="n">documentElement</span>
		
		<span class="c"># Create the initial state. This takes care of things</span>
		<span class="c"># like base, top level namespace settings, etc.</span>
		<span class="n">state</span> <span class="o">=</span> <span class="n">ExecutionContext</span><span class="p">(</span><span class="n">topElement</span><span class="p">,</span> <span class="n">default_graph</span><span class="p">,</span> <span class="n">base</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">required_base</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">required_base</span> <span class="o">!=</span> <span class="bp">None</span> <span class="k">else</span> <span class="s">&quot;&quot;</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">,</span> <span class="n">rdfa_version</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">rdfa_version</span><span class="p">)</span>

		<span class="c"># Perform the built-in and external transformations on the HTML tree. </span>
		<span class="k">for</span> <span class="n">trans</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">transformers</span> <span class="o">+</span> <span class="n">builtInTransformers</span> <span class="p">:</span>
			<span class="n">trans</span><span class="p">(</span><span class="n">topElement</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">,</span> <span class="n">state</span><span class="p">)</span>
		
		<span class="c"># This may have changed if the state setting detected an explicit version information:</span>
		<span class="bp">self</span><span class="o">.</span><span class="n">rdfa_version</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">rdfa_version</span>

		<span class="c"># The top level subject starts with the current document; this</span>
		<span class="c"># is used by the recursion</span>
		<span class="c"># this function is the real workhorse</span>
		<span class="n">parse_one_node</span><span class="p">(</span><span class="n">topElement</span><span class="p">,</span> <span class="n">default_graph</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="p">[])</span>

		<span class="c"># Massage the output graph in term of rdfa:Pattern and rdfa:copy</span>
		<span class="n">handle_prototypes</span><span class="p">(</span><span class="n">default_graph</span><span class="p">)</span>
		
		<span class="c"># If the RDFS expansion has to be made, here is the place...</span>
		<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">vocab_expansion</span> <span class="p">:</span>
			<span class="kn">from</span> <span class="nn">.rdfs.process</span> <span class="kn">import</span> <span class="n">process_rdfa_sem</span>
			<span class="n">process_rdfa_sem</span><span class="p">(</span><span class="n">default_graph</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">)</span>

		<span class="c"># Experimental feature: nothing for now, this is kept as a placeholder</span>
		<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">experimental_features</span> <span class="p">:</span>
			<span class="k">pass</span>
	
		<span class="c"># What should be returned depends on the way the options have been set up</span>
		<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">output_default_graph</span> <span class="p">:</span>
			<span class="n">copyGraph</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">default_graph</span><span class="p">)</span>
			<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">output_processor_graph</span> <span class="p">:</span>
				<span class="k">if</span> <span class="n">pgraph</span> <span class="o">!=</span> <span class="bp">None</span> <span class="p">:</span>
					<span class="n">copyGraph</span><span class="p">(</span><span class="n">pgraph</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">processor_graph</span><span class="o">.</span><span class="n">graph</span><span class="p">)</span>
				<span class="k">else</span> <span class="p">:</span>					
					<span class="n">copyGraph</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">processor_graph</span><span class="o">.</span><span class="n">graph</span><span class="p">)</span>
		<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">output_processor_graph</span> <span class="p">:</span>
			<span class="k">if</span> <span class="n">pgraph</span> <span class="o">!=</span> <span class="bp">None</span> <span class="p">:</span>
				<span class="n">copyGraph</span><span class="p">(</span><span class="n">pgraph</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">processor_graph</span><span class="o">.</span><span class="n">graph</span><span class="p">)</span>
			<span class="k">else</span> <span class="p">:</span>
				<span class="n">copyGraph</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">processor_graph</span><span class="o">.</span><span class="n">graph</span><span class="p">)</span>

		<span class="c"># this is necessary if several DOM trees are handled in a row...</span>
		<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">reset_processor_graph</span><span class="p">()</span>

		<span class="k">return</span> <span class="n">graph</span>
	</div>
<div class="viewcode-block" id="pyRdfa.graph_from_source"><a class="viewcode-back" href="../../../../apidocs/rdflib.plugins.parsers.pyRdfa.html#rdflib.plugins.parsers.pyRdfa.pyRdfa.graph_from_source">[docs]</a>	<span class="k">def</span> <span class="nf">graph_from_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">graph</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">rdfOutput</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span> <span class="n">pgraph</span> <span class="o">=</span> <span class="bp">None</span><span class="p">)</span> <span class="p">:</span>
		<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">		Extract an RDF graph from an RDFa source. The source is parsed, the RDF extracted, and the RDFa Graph is</span>
<span class="sd">		returned. This is a front-end to the L{pyRdfa.graph_from_DOM} method.</span>
<span class="sd">				</span>
<span class="sd">		@param name: a URI, a file name, or a file-like object</span>
<span class="sd">		@param graph: rdflib Graph instance. If None, a new one is created.</span>
<span class="sd">		@param pgraph: rdflib Graph instance for the processor graph. If None, and the error/warning triples are to be generated, they will be added to the returned graph. Otherwise they are stored in this graph.</span>
<span class="sd">		@param rdfOutput: whether runtime exceptions should be turned into RDF and returned as part of the processor graph</span>
<span class="sd">		@return: an RDF Graph</span>
<span class="sd">		@rtype: rdflib Graph instance</span>
<span class="sd">		&quot;&quot;&quot;</span>
		<span class="k">def</span> <span class="nf">copyErrors</span><span class="p">(</span><span class="n">tog</span><span class="p">,</span> <span class="n">options</span><span class="p">)</span> <span class="p">:</span>
			<span class="k">if</span> <span class="n">tog</span> <span class="o">==</span> <span class="bp">None</span> <span class="p">:</span>
				<span class="n">tog</span> <span class="o">=</span> <span class="n">Graph</span><span class="p">()</span>
			<span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">output_processor_graph</span> <span class="p">:</span>
				<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">options</span><span class="o">.</span><span class="n">processor_graph</span><span class="o">.</span><span class="n">graph</span> <span class="p">:</span>
					<span class="n">tog</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
					<span class="k">if</span> <span class="n">pgraph</span> <span class="o">!=</span> <span class="bp">None</span> <span class="p">:</span> <span class="n">pgraph</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
				<span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">ns</span> <span class="ow">in</span> <span class="n">options</span><span class="o">.</span><span class="n">processor_graph</span><span class="o">.</span><span class="n">graph</span><span class="o">.</span><span class="n">namespaces</span><span class="p">()</span> <span class="p">:</span>
					<span class="n">tog</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">k</span><span class="p">,</span><span class="n">ns</span><span class="p">)</span>
					<span class="k">if</span> <span class="n">pgraph</span> <span class="o">!=</span> <span class="bp">None</span> <span class="p">:</span> <span class="n">pgraph</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">k</span><span class="p">,</span><span class="n">ns</span><span class="p">)</span>
			<span class="n">options</span><span class="o">.</span><span class="n">reset_processor_graph</span><span class="p">()</span>
			<span class="k">return</span> <span class="n">tog</span>		

		<span class="c"># Separating this for a forward Python 3 compatibility</span>
		<span class="k">try</span> <span class="p">:</span>
			<span class="c"># Python 2 branch</span>
			<span class="n">isstring</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="nb">basestring</span><span class="p">)</span>
		<span class="k">except</span> <span class="p">:</span>
			<span class="c"># Python 3 branch</span>
			<span class="n">isstring</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span>
		
		<span class="k">try</span> <span class="p">:</span>
			<span class="c"># First, open the source... Possible HTTP errors are returned as error triples</span>
			<span class="nb">input</span> <span class="o">=</span> <span class="bp">None</span>
			<span class="k">try</span> <span class="p">:</span>
				<span class="nb">input</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_input</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
			<span class="k">except</span> <span class="n">FailedSource</span> <span class="p">:</span>
				<span class="n">f</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()[</span><span class="mi">1</span><span class="p">]</span>
				<span class="bp">self</span><span class="o">.</span><span class="n">http_status</span> <span class="o">=</span> <span class="mi">400</span>
				<span class="k">if</span> <span class="ow">not</span> <span class="n">rdfOutput</span> <span class="p">:</span> <span class="k">raise</span> <span class="n">f</span>
				<span class="n">err</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">add_error</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">msg</span><span class="p">,</span> <span class="n">FileReferenceError</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
				<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">processor_graph</span><span class="o">.</span><span class="n">add_http_context</span><span class="p">(</span><span class="n">err</span><span class="p">,</span> <span class="mi">400</span><span class="p">)</span>
				<span class="k">return</span> <span class="n">copyErrors</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">)</span>
			<span class="k">except</span> <span class="n">HTTPError</span> <span class="p">:</span>
				<span class="n">h</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()[</span><span class="mi">1</span><span class="p">]</span>
				<span class="bp">self</span><span class="o">.</span><span class="n">http_status</span> <span class="o">=</span> <span class="n">h</span><span class="o">.</span><span class="n">http_code</span>
				<span class="k">if</span> <span class="ow">not</span> <span class="n">rdfOutput</span> <span class="p">:</span> <span class="k">raise</span> <span class="n">h</span>
				<span class="n">err</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">add_error</span><span class="p">(</span><span class="s">&quot;HTTP Error: </span><span class="si">%s</span><span class="s"> (</span><span class="si">%s</span><span class="s">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">h</span><span class="o">.</span><span class="n">http_code</span><span class="p">,</span><span class="n">h</span><span class="o">.</span><span class="n">msg</span><span class="p">),</span> <span class="n">HTError</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
				<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">processor_graph</span><span class="o">.</span><span class="n">add_http_context</span><span class="p">(</span><span class="n">err</span><span class="p">,</span> <span class="n">h</span><span class="o">.</span><span class="n">http_code</span><span class="p">)</span>
				<span class="k">return</span> <span class="n">copyErrors</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">)</span>
			<span class="k">except</span> <span class="ne">Exception</span> <span class="p">:</span>
				<span class="n">e</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()[</span><span class="mi">1</span><span class="p">]</span>
				<span class="bp">self</span><span class="o">.</span><span class="n">http_status</span> <span class="o">=</span> <span class="mi">500</span>
				<span class="c"># Something nasty happened:-(</span>
				<span class="k">if</span> <span class="ow">not</span> <span class="n">rdfOutput</span> <span class="p">:</span> <span class="k">raise</span> <span class="n">e</span>
				<span class="n">err</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">add_error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">context</span> <span class="o">=</span> <span class="n">name</span><span class="p">)</span>
				<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">processor_graph</span><span class="o">.</span><span class="n">add_http_context</span><span class="p">(</span><span class="n">err</span><span class="p">,</span> <span class="mi">500</span><span class="p">)</span>
				<span class="k">return</span> <span class="n">copyErrors</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">)</span>

			<span class="n">dom</span> <span class="o">=</span> <span class="bp">None</span>
			<span class="k">try</span> <span class="p">:</span>
				<span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
				<span class="n">parser</span> <span class="o">=</span> <span class="bp">None</span>
				<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">host_language</span> <span class="o">==</span> <span class="n">HostLanguage</span><span class="o">.</span><span class="n">html5</span> <span class="p">:</span>
					<span class="kn">import</span> <span class="nn">warnings</span>
					<span class="n">warnings</span><span class="o">.</span><span class="n">filterwarnings</span><span class="p">(</span><span class="s">&quot;ignore&quot;</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="ne">DeprecationWarning</span><span class="p">)</span>
					<span class="kn">import</span> <span class="nn">html5lib</span>
					<span class="n">parser</span> <span class="o">=</span> <span class="n">html5lib</span><span class="o">.</span><span class="n">HTMLParser</span><span class="p">(</span><span class="n">tree</span><span class="o">=</span><span class="n">html5lib</span><span class="o">.</span><span class="n">treebuilders</span><span class="o">.</span><span class="n">getTreeBuilder</span><span class="p">(</span><span class="s">&quot;dom&quot;</span><span class="p">))</span>
					<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">charset</span> <span class="p">:</span>
						<span class="c"># This means the HTTP header has provided a charset, or the</span>
						<span class="c"># file is a local file when we suppose it to be a utf-8</span>
						<span class="n">dom</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="nb">input</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">charset</span><span class="p">)</span>
					<span class="k">else</span> <span class="p">:</span>
						<span class="c"># No charset set. The HTMLLib parser tries to sniff into the</span>
						<span class="c"># the file to find a meta header for the charset; if that</span>
						<span class="c"># works, fine, otherwise it falls back on window-...</span>
						<span class="n">dom</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="nb">input</span><span class="p">)</span>
						
					<span class="k">try</span> <span class="p">:</span>
						<span class="k">if</span> <span class="n">isstring</span> <span class="p">:</span>
							<span class="nb">input</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
							<span class="nb">input</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_input</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
						<span class="k">else</span> <span class="p">:</span>
							<span class="nb">input</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
						<span class="kn">from</span> <span class="nn">.host</span> <span class="kn">import</span> <span class="n">adjust_html_version</span>
						<span class="bp">self</span><span class="o">.</span><span class="n">rdfa_version</span> <span class="o">=</span> <span class="n">adjust_html_version</span><span class="p">(</span><span class="nb">input</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rdfa_version</span><span class="p">)</span>
					<span class="k">except</span> <span class="p">:</span>
						<span class="c"># if anyting goes wrong, it is not really important; rdfa version stays what it was...</span>
						<span class="k">pass</span>
					
				<span class="k">else</span> <span class="p">:</span>
					<span class="c"># in other cases an XML parser has to be used</span>
					<span class="kn">from</span> <span class="nn">.host</span> <span class="kn">import</span> <span class="n">adjust_xhtml_and_version</span>
					<span class="n">parse</span> <span class="o">=</span> <span class="n">xml</span><span class="o">.</span><span class="n">dom</span><span class="o">.</span><span class="n">minidom</span><span class="o">.</span><span class="n">parse</span>
					<span class="n">dom</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="nb">input</span><span class="p">)</span>
					<span class="p">(</span><span class="n">adjusted_host_language</span><span class="p">,</span> <span class="n">version</span><span class="p">)</span> <span class="o">=</span> <span class="n">adjust_xhtml_and_version</span><span class="p">(</span><span class="n">dom</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">host_language</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rdfa_version</span><span class="p">)</span>
					<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">host_language</span> <span class="o">=</span> <span class="n">adjusted_host_language</span>
					<span class="bp">self</span><span class="o">.</span><span class="n">rdfa_version</span>          <span class="o">=</span> <span class="n">version</span>
			<span class="k">except</span> <span class="ne">ImportError</span> <span class="p">:</span>
				<span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;HTML5 parser not available. Try installing html5lib &lt;http://code.google.com/p/html5lib&gt;&quot;</span>
				<span class="k">raise</span> <span class="ne">ImportError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
			<span class="k">except</span> <span class="ne">Exception</span> <span class="p">:</span>
				<span class="n">e</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()[</span><span class="mi">1</span><span class="p">]</span>
				<span class="c"># These are various parsing exception. Per spec, this is a case when</span>
				<span class="c"># error triples MUST be returned, ie, the usage of rdfOutput (which switches between an HTML formatted</span>
				<span class="c"># return page or a graph with error triples) does not apply</span>
				<span class="n">err</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">add_error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">context</span> <span class="o">=</span> <span class="n">name</span><span class="p">)</span>
				<span class="bp">self</span><span class="o">.</span><span class="n">http_status</span> <span class="o">=</span> <span class="mi">400</span>
				<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">processor_graph</span><span class="o">.</span><span class="n">add_http_context</span><span class="p">(</span><span class="n">err</span><span class="p">,</span> <span class="mi">400</span><span class="p">)</span>
				<span class="k">return</span> <span class="n">copyErrors</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">)</span>

			<span class="c"># If we got here, we have a DOM tree to operate on...	</span>
			<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">graph_from_DOM</span><span class="p">(</span><span class="n">dom</span><span class="p">,</span> <span class="n">graph</span><span class="p">,</span> <span class="n">pgraph</span><span class="p">)</span>
		<span class="k">except</span> <span class="ne">Exception</span> <span class="p">:</span>
			<span class="c"># Something nasty happened during the generation of the graph...</span>
			<span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">,</span><span class="n">c</span><span class="p">)</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()</span>
			<span class="n">sys</span><span class="o">.</span><span class="n">excepthook</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">,</span><span class="n">c</span><span class="p">)</span>
			<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="ne">ImportError</span><span class="p">)</span> <span class="p">:</span>
				<span class="bp">self</span><span class="o">.</span><span class="n">http_status</span> <span class="o">=</span> <span class="bp">None</span>
			<span class="k">else</span> <span class="p">:</span>
				<span class="bp">self</span><span class="o">.</span><span class="n">http_status</span> <span class="o">=</span> <span class="mi">500</span>
			<span class="k">if</span> <span class="ow">not</span> <span class="n">rdfOutput</span> <span class="p">:</span> <span class="k">raise</span> <span class="n">b</span>
			<span class="n">err</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">add_error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">b</span><span class="p">),</span> <span class="n">context</span> <span class="o">=</span> <span class="n">name</span><span class="p">)</span>
			<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">processor_graph</span><span class="o">.</span><span class="n">add_http_context</span><span class="p">(</span><span class="n">err</span><span class="p">,</span> <span class="mi">500</span><span class="p">)</span>
			<span class="k">return</span> <span class="n">copyErrors</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">)</span>
	</div>
<div class="viewcode-block" id="pyRdfa.rdf_from_sources"><a class="viewcode-back" href="../../../../apidocs/rdflib.plugins.parsers.pyRdfa.html#rdflib.plugins.parsers.pyRdfa.pyRdfa.rdf_from_sources">[docs]</a>	<span class="k">def</span> <span class="nf">rdf_from_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">names</span><span class="p">,</span> <span class="n">outputFormat</span> <span class="o">=</span> <span class="s">&quot;turtle&quot;</span><span class="p">,</span> <span class="n">rdfOutput</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span> <span class="p">:</span>
		<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">		Extract and RDF graph from a list of RDFa sources and serialize them in one graph. The sources are parsed, the RDF</span>
<span class="sd">		extracted, and serialization is done in the specified format.</span>
<span class="sd">		@param names: list of sources, each can be a URI, a file name, or a file-like object</span>
<span class="sd">		@keyword outputFormat: serialization format. Can be one of &quot;turtle&quot;, &quot;n3&quot;, &quot;xml&quot;, &quot;pretty-xml&quot;, &quot;nt&quot;. &quot;xml&quot;, &quot;pretty-xml&quot;, &quot;json&quot; or &quot;json-ld&quot;. &quot;turtle&quot; and &quot;n3&quot;, &quot;xml&quot; and &quot;pretty-xml&quot;, and &quot;json&quot; and &quot;json-ld&quot; are synonyms, respectively. Note that the JSON-LD serialization works with RDFLib 3.* only.</span>
<span class="sd">		@keyword rdfOutput: controls what happens in case an exception is raised. If the value is False, the caller is responsible handling it; otherwise a graph is returned with an error message included in the processor graph</span>
<span class="sd">		@type rdfOutput: boolean</span>
<span class="sd">		@return: a serialized RDF Graph</span>
<span class="sd">		@rtype: string</span>
<span class="sd">		&quot;&quot;&quot;</span>
		<span class="c"># This is better because it gives access to the various, non-standard serializations</span>
		<span class="c"># If it does not work because the extra are not installed, fall back to the standard</span>
		<span class="c"># rdlib distribution...</span>
		<span class="k">try</span> <span class="p">:</span>
			<span class="kn">from</span> <span class="nn">pyRdfaExtras</span> <span class="kn">import</span> <span class="n">MyGraph</span>
			<span class="n">graph</span> <span class="o">=</span> <span class="n">MyGraph</span><span class="p">()</span>
		<span class="k">except</span> <span class="p">:</span>
			<span class="n">graph</span> <span class="o">=</span> <span class="n">Graph</span><span class="p">()</span>

		<span class="c"># graph.bind(&quot;xsd&quot;, Namespace(&#39;http://www.w3.org/2001/XMLSchema#&#39;))</span>
		<span class="c"># the value of rdfOutput determines the reaction on exceptions...</span>
		<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span> <span class="p">:</span>
			<span class="bp">self</span><span class="o">.</span><span class="n">graph_from_source</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">graph</span><span class="p">,</span> <span class="n">rdfOutput</span><span class="p">)</span>
		<span class="n">retval</span> <span class="o">=</span> <span class="n">graph</span><span class="o">.</span><span class="n">serialize</span><span class="p">(</span><span class="n">format</span><span class="o">=</span><span class="n">outputFormat</span><span class="p">)</span>
		<span class="k">return</span> <span class="n">retval</span>
</div>
<div class="viewcode-block" id="pyRdfa.rdf_from_source"><a class="viewcode-back" href="../../../../apidocs/rdflib.plugins.parsers.pyRdfa.html#rdflib.plugins.parsers.pyRdfa.pyRdfa.rdf_from_source">[docs]</a>	<span class="k">def</span> <span class="nf">rdf_from_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">outputFormat</span> <span class="o">=</span> <span class="s">&quot;turtle&quot;</span><span class="p">,</span> <span class="n">rdfOutput</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span> <span class="p">:</span>
		<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">		Extract and RDF graph from an RDFa source and serialize it in one graph. The source is parsed, the RDF</span>
<span class="sd">		extracted, and serialization is done in the specified format.</span>
<span class="sd">		@param name: a URI, a file name, or a file-like object</span>
<span class="sd">		@keyword outputFormat: serialization format. Can be one of &quot;turtle&quot;, &quot;n3&quot;, &quot;xml&quot;, &quot;pretty-xml&quot;, &quot;nt&quot;. &quot;xml&quot;, &quot;pretty-xml&quot;, &quot;json&quot; or &quot;json-ld&quot;. &quot;turtle&quot; and &quot;n3&quot;, &quot;xml&quot; and &quot;pretty-xml&quot;, and &quot;json&quot; and &quot;json-ld&quot; are synonyms, respectively. Note that the JSON-LD serialization works with RDFLib 3.* only.</span>
<span class="sd">		@keyword rdfOutput: controls what happens in case an exception is raised. If the value is False, the caller is responsible handling it; otherwise a graph is returned with an error message included in the processor graph</span>
<span class="sd">		@type rdfOutput: boolean</span>
<span class="sd">		@return: a serialized RDF Graph</span>
<span class="sd">		@rtype: string</span>
<span class="sd">		&quot;&quot;&quot;</span>
		<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">rdf_from_sources</span><span class="p">([</span><span class="n">name</span><span class="p">],</span> <span class="n">outputFormat</span><span class="p">,</span> <span class="n">rdfOutput</span><span class="p">)</span>

<span class="c">################################################# CGI Entry point</span></div></div>
<div class="viewcode-block" id="processURI"><a class="viewcode-back" href="../../../../apidocs/rdflib.plugins.parsers.pyRdfa.html#rdflib.plugins.parsers.pyRdfa.processURI">[docs]</a><span class="k">def</span> <span class="nf">processURI</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span> <span class="n">outputFormat</span><span class="p">,</span> <span class="n">form</span><span class="o">=</span><span class="p">{})</span> <span class="p">:</span>
	<span class="sd">&quot;&quot;&quot;The standard processing of an RDFa uri options in a form; used as an entry point from a CGI call.</span>

<span class="sd">	The call accepts extra form options (i.e., HTTP GET options) as follows:</span>
<span class="sd">	</span>
<span class="sd">	 - C{graph=[output|processor|output,processor|processor,output]} specifying which graphs are returned. Default: C{output}</span>
<span class="sd">	 - C{space_preserve=[true|false]} means that plain literals are normalized in terms of white spaces. Default: C{false}</span>
<span class="sd">	 - C{rfa_version} provides the RDFa version that should be used for distilling. The string should be of the form &quot;1.0&quot; or &quot;1.1&quot;. Default is the highest version the current package implements, currently &quot;1.1&quot;</span>
<span class="sd">	 - C{host_language=[xhtml,html,xml]} : the host language. Used when files are uploaded or text is added verbatim, otherwise the HTTP return header should be used. Default C{xml}</span>
<span class="sd">	 - C{embedded_rdf=[true|false]} : whether embedded turtle or RDF/XML content should be added to the output graph. Default: C{false}</span>
<span class="sd">	 - C{vocab_expansion=[true|false]} : whether the vocabularies should be expanded through the restricted RDFS entailment. Default: C{false}</span>
<span class="sd">	 - C{vocab_cache=[true|false]} : whether vocab caching should be performed or whether it should be ignored and vocabulary files should be picked up every time. Default: C{false}</span>
<span class="sd">	 - C{vocab_cache_report=[true|false]} : whether vocab caching details should be reported. Default: C{false}</span>
<span class="sd">	 - C{vocab_cache_bypass=[true|false]} : whether vocab caches have to be regenerated every time. Default: C{false}</span>
<span class="sd">	 - C{rdfa_lite=[true|false]} : whether warnings should be generated for non RDFa Lite attribute usage. Default: C{false}</span>

<span class="sd">	@param uri: URI to access. Note that the C{text:} and C{uploaded:} fake URI values are treated separately; the former is for textual intput (in which case a StringIO is used to get the data) and the latter is for uploaded file, where the form gives access to the file directly. </span>
<span class="sd">	@param outputFormat: serialization format, as defined by the package. Currently &quot;xml&quot;, &quot;turtle&quot;, &quot;nt&quot;, or &quot;json&quot;. Default is &quot;turtle&quot;, also used if any other string is given.</span>
<span class="sd">	@param form: extra call options (from the CGI call) to set up the local options</span>
<span class="sd">	@type form: cgi FieldStorage instance</span>
<span class="sd">	@return: serialized graph</span>
<span class="sd">	@rtype: string</span>
<span class="sd">	&quot;&quot;&quot;</span>
	<span class="k">def</span> <span class="nf">_get_option</span><span class="p">(</span><span class="n">param</span><span class="p">,</span> <span class="n">compare_value</span><span class="p">,</span> <span class="n">default</span><span class="p">)</span> <span class="p">:</span>
		<span class="n">param_old</span> <span class="o">=</span> <span class="n">param</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;_&#39;</span><span class="p">,</span><span class="s">&#39;-&#39;</span><span class="p">)</span>
		<span class="k">if</span> <span class="n">param</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="p">:</span>
			<span class="n">val</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getfirst</span><span class="p">(</span><span class="n">param</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
			<span class="k">return</span> <span class="n">val</span> <span class="o">==</span> <span class="n">compare_value</span>
		<span class="k">elif</span> <span class="n">param_old</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="p">:</span>
			<span class="c"># this is to ensure the old style parameters are still valid...</span>
			<span class="c"># in the old days I used &#39;-&#39; in the parameters, the standard favours &#39;_&#39;</span>
			<span class="n">val</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getfirst</span><span class="p">(</span><span class="n">param_old</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
			<span class="k">return</span> <span class="n">val</span> <span class="o">==</span> <span class="n">compare_value</span>
		<span class="k">else</span> <span class="p">:</span>
			<span class="k">return</span> <span class="n">default</span>

	<span class="k">if</span> <span class="n">uri</span> <span class="o">==</span> <span class="s">&quot;uploaded:&quot;</span> <span class="p">:</span>
		<span class="nb">input</span>	<span class="o">=</span> <span class="n">form</span><span class="p">[</span><span class="s">&quot;uploaded&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">file</span>
		<span class="n">base</span>	<span class="o">=</span> <span class="s">&quot;&quot;</span>
	<span class="k">elif</span> <span class="n">uri</span> <span class="o">==</span> <span class="s">&quot;text:&quot;</span> <span class="p">:</span>
		<span class="nb">input</span>	<span class="o">=</span> <span class="n">StringIO</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">getfirst</span><span class="p">(</span><span class="s">&quot;text&quot;</span><span class="p">))</span>
		<span class="n">base</span>	<span class="o">=</span> <span class="s">&quot;&quot;</span>
	<span class="k">else</span> <span class="p">:</span>
		<span class="nb">input</span>	<span class="o">=</span> <span class="n">uri</span>
		<span class="n">base</span>	<span class="o">=</span> <span class="n">uri</span>
		
	<span class="k">if</span> <span class="s">&quot;rdfa_version&quot;</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="p">:</span>
		<span class="n">rdfa_version</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getfirst</span><span class="p">(</span><span class="s">&quot;rdfa_version&quot;</span><span class="p">)</span>
	<span class="k">else</span> <span class="p">:</span>
		<span class="n">rdfa_version</span> <span class="o">=</span> <span class="bp">None</span>
	
	<span class="c"># working through the possible options</span>
	<span class="c"># Host language: HTML, XHTML, or XML</span>
	<span class="c"># Note that these options should be used for the upload and inline version only in case of a form</span>
	<span class="c"># for real uris the returned content type should be used</span>
	<span class="k">if</span> <span class="s">&quot;host_language&quot;</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="p">:</span>
		<span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">getfirst</span><span class="p">(</span><span class="s">&quot;host_language&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;xhtml&quot;</span> <span class="p">:</span>
			<span class="n">media_type</span> <span class="o">=</span> <span class="n">MediaTypes</span><span class="o">.</span><span class="n">xhtml</span>
		<span class="k">elif</span> <span class="n">form</span><span class="o">.</span><span class="n">getfirst</span><span class="p">(</span><span class="s">&quot;host_language&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;html&quot;</span> <span class="p">:</span>
			<span class="n">media_type</span> <span class="o">=</span> <span class="n">MediaTypes</span><span class="o">.</span><span class="n">html</span>
		<span class="k">elif</span> <span class="n">form</span><span class="o">.</span><span class="n">getfirst</span><span class="p">(</span><span class="s">&quot;host_language&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;svg&quot;</span> <span class="p">:</span>
			<span class="n">media_type</span> <span class="o">=</span> <span class="n">MediaTypes</span><span class="o">.</span><span class="n">svg</span>
		<span class="k">elif</span> <span class="n">form</span><span class="o">.</span><span class="n">getfirst</span><span class="p">(</span><span class="s">&quot;host_language&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;atom&quot;</span> <span class="p">:</span>
			<span class="n">media_type</span> <span class="o">=</span> <span class="n">MediaTypes</span><span class="o">.</span><span class="n">atom</span>
		<span class="k">else</span> <span class="p">:</span>
			<span class="n">media_type</span> <span class="o">=</span> <span class="n">MediaTypes</span><span class="o">.</span><span class="n">xml</span>
	<span class="k">else</span> <span class="p">:</span>
		<span class="n">media_type</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
		
	<span class="n">transformers</span> <span class="o">=</span> <span class="p">[]</span>
	
	<span class="n">check_lite</span> <span class="o">=</span> <span class="s">&quot;rdfa_lite&quot;</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="ow">and</span> <span class="n">form</span><span class="o">.</span><span class="n">getfirst</span><span class="p">(</span><span class="s">&quot;rdfa_lite&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;true&quot;</span>

	<span class="c"># The code below is left for backward compatibility only. In fact, these options are not exposed any more,</span>
	<span class="c"># they are not really in use</span>
	<span class="k">if</span> <span class="s">&quot;extras&quot;</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="ow">and</span> <span class="n">form</span><span class="o">.</span><span class="n">getfirst</span><span class="p">(</span><span class="s">&quot;extras&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;true&quot;</span> <span class="p">:</span>
		<span class="kn">from</span> <span class="nn">.transform.metaname</span>              	<span class="kn">import</span> <span class="n">meta_transform</span>
		<span class="kn">from</span> <span class="nn">.transform.OpenID</span>                	<span class="kn">import</span> <span class="n">OpenID_transform</span>
		<span class="kn">from</span> <span class="nn">.transform.DublinCore</span>            	<span class="kn">import</span> <span class="n">DC_transform</span>
		<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="p">[</span><span class="n">OpenID_transform</span><span class="p">,</span> <span class="n">DC_transform</span><span class="p">,</span> <span class="n">meta_transform</span><span class="p">]</span> <span class="p">:</span>
			<span class="n">transformers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
	<span class="k">else</span> <span class="p">:</span>
		<span class="k">if</span> <span class="s">&quot;extra-meta&quot;</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="ow">and</span> <span class="n">form</span><span class="o">.</span><span class="n">getfirst</span><span class="p">(</span><span class="s">&quot;extra-meta&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;true&quot;</span> <span class="p">:</span>
			<span class="kn">from</span> <span class="nn">.transform.metaname</span> <span class="kn">import</span> <span class="n">meta_transform</span>
			<span class="n">transformers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">meta_transform</span><span class="p">)</span>
		<span class="k">if</span> <span class="s">&quot;extra-openid&quot;</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="ow">and</span> <span class="n">form</span><span class="o">.</span><span class="n">getfirst</span><span class="p">(</span><span class="s">&quot;extra-openid&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;true&quot;</span> <span class="p">:</span>
			<span class="kn">from</span> <span class="nn">.transform.OpenID</span> <span class="kn">import</span> <span class="n">OpenID_transform</span>
			<span class="n">transformers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">OpenID_transform</span><span class="p">)</span>
		<span class="k">if</span> <span class="s">&quot;extra-dc&quot;</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="ow">and</span> <span class="n">form</span><span class="o">.</span><span class="n">getfirst</span><span class="p">(</span><span class="s">&quot;extra-dc&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;true&quot;</span> <span class="p">:</span>
			<span class="kn">from</span> <span class="nn">.transform.DublinCore</span> <span class="kn">import</span> <span class="n">DC_transform</span>
			<span class="n">transformers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">DC_transform</span><span class="p">)</span>

	<span class="n">output_default_graph</span> 	<span class="o">=</span> <span class="bp">True</span>
	<span class="n">output_processor_graph</span> 	<span class="o">=</span> <span class="bp">False</span>
	<span class="c"># Note that I use the &#39;graph&#39; and the &#39;rdfagraph&#39; form keys here. Reason is that</span>
	<span class="c"># I used &#39;graph&#39; in the previous versions, including the RDFa 1.0 processor,</span>
	<span class="c"># so if I removed that altogether that would create backward incompatibilities</span>
	<span class="c"># On the other hand, the RDFa 1.1 doc clearly refers to &#39;rdfagraph&#39; as the standard</span>
	<span class="c"># key.</span>
	<span class="n">a</span> <span class="o">=</span> <span class="bp">None</span>
	<span class="k">if</span> <span class="s">&quot;graph&quot;</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="p">:</span>
		<span class="n">a</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getfirst</span><span class="p">(</span><span class="s">&quot;graph&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
	<span class="k">elif</span> <span class="s">&quot;rdfagraph&quot;</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="p">:</span>
		<span class="n">a</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">getfirst</span><span class="p">(</span><span class="s">&quot;rdfagraph&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
	<span class="k">if</span> <span class="n">a</span> <span class="o">!=</span> <span class="bp">None</span> <span class="p">:</span>
		<span class="k">if</span> <span class="n">a</span> <span class="o">==</span> <span class="s">&quot;processor&quot;</span> <span class="p">:</span>
			<span class="n">output_default_graph</span> 	<span class="o">=</span> <span class="bp">False</span>
			<span class="n">output_processor_graph</span> 	<span class="o">=</span> <span class="bp">True</span>
		<span class="k">elif</span> <span class="n">a</span> <span class="o">==</span> <span class="s">&quot;processor,output&quot;</span> <span class="ow">or</span> <span class="n">a</span> <span class="o">==</span> <span class="s">&quot;output,processor&quot;</span> <span class="p">:</span>
			<span class="n">output_processor_graph</span> 	<span class="o">=</span> <span class="bp">True</span>
		
	<span class="n">embedded_rdf</span>        <span class="o">=</span> <span class="n">_get_option</span><span class="p">(</span> <span class="s">&quot;embedded_rdf&quot;</span><span class="p">,</span> <span class="s">&quot;true&quot;</span><span class="p">,</span> <span class="bp">False</span><span class="p">)</span>
	<span class="n">space_preserve</span>      <span class="o">=</span> <span class="n">_get_option</span><span class="p">(</span> <span class="s">&quot;space_preserve&quot;</span><span class="p">,</span> <span class="s">&quot;true&quot;</span><span class="p">,</span> <span class="bp">True</span><span class="p">)</span>
	<span class="n">vocab_cache</span>         <span class="o">=</span> <span class="n">_get_option</span><span class="p">(</span> <span class="s">&quot;vocab_cache&quot;</span><span class="p">,</span> <span class="s">&quot;true&quot;</span><span class="p">,</span> <span class="bp">True</span><span class="p">)</span>
	<span class="n">vocab_cache_report</span>  <span class="o">=</span> <span class="n">_get_option</span><span class="p">(</span> <span class="s">&quot;vocab_cache_report&quot;</span><span class="p">,</span> <span class="s">&quot;true&quot;</span><span class="p">,</span> <span class="bp">False</span><span class="p">)</span>
	<span class="n">refresh_vocab_cache</span> <span class="o">=</span> <span class="n">_get_option</span><span class="p">(</span> <span class="s">&quot;vocab_cache_refresh&quot;</span><span class="p">,</span> <span class="s">&quot;true&quot;</span><span class="p">,</span> <span class="bp">False</span><span class="p">)</span>
	<span class="n">vocab_expansion</span>     <span class="o">=</span> <span class="n">_get_option</span><span class="p">(</span> <span class="s">&quot;vocab_expansion&quot;</span><span class="p">,</span> <span class="s">&quot;true&quot;</span><span class="p">,</span> <span class="bp">False</span><span class="p">)</span>
	<span class="k">if</span> <span class="n">vocab_cache_report</span> <span class="p">:</span> <span class="n">output_processor_graph</span> <span class="o">=</span> <span class="bp">True</span>

	<span class="n">options</span> <span class="o">=</span> <span class="n">Options</span><span class="p">(</span><span class="n">output_default_graph</span>   <span class="o">=</span> <span class="n">output_default_graph</span><span class="p">,</span>
					  <span class="n">output_processor_graph</span> <span class="o">=</span> <span class="n">output_processor_graph</span><span class="p">,</span>
					  <span class="n">space_preserve</span>         <span class="o">=</span> <span class="n">space_preserve</span><span class="p">,</span>
					  <span class="n">transformers</span>           <span class="o">=</span> <span class="n">transformers</span><span class="p">,</span>
					  <span class="n">vocab_cache</span>            <span class="o">=</span> <span class="n">vocab_cache</span><span class="p">,</span>
					  <span class="n">vocab_cache_report</span>     <span class="o">=</span> <span class="n">vocab_cache_report</span><span class="p">,</span>
					  <span class="n">refresh_vocab_cache</span>    <span class="o">=</span> <span class="n">refresh_vocab_cache</span><span class="p">,</span>
					  <span class="n">vocab_expansion</span>        <span class="o">=</span> <span class="n">vocab_expansion</span><span class="p">,</span>
					  <span class="n">embedded_rdf</span>           <span class="o">=</span> <span class="n">embedded_rdf</span><span class="p">,</span>
					  <span class="n">check_lite</span>             <span class="o">=</span> <span class="n">check_lite</span>
					  <span class="p">)</span>
	<span class="n">processor</span> <span class="o">=</span> <span class="n">pyRdfa</span><span class="p">(</span><span class="n">options</span> <span class="o">=</span> <span class="n">options</span><span class="p">,</span> <span class="n">base</span> <span class="o">=</span> <span class="n">base</span><span class="p">,</span> <span class="n">media_type</span> <span class="o">=</span> <span class="n">media_type</span><span class="p">,</span> <span class="n">rdfa_version</span> <span class="o">=</span> <span class="n">rdfa_version</span><span class="p">)</span>

	<span class="c"># Decide the output format; the issue is what should happen in case of a top level error like an inaccessibility of</span>
	<span class="c"># the html source: should a graph be returned or an HTML page with an error message?</span>

	<span class="c"># decide whether HTML or RDF should be sent. </span>
	<span class="n">htmlOutput</span> <span class="o">=</span> <span class="bp">False</span>
	<span class="c">#if &#39;HTTP_ACCEPT&#39; in os.environ :</span>
	<span class="c">#	acc = os.environ[&#39;HTTP_ACCEPT&#39;]</span>
	<span class="c">#	possibilities = [&#39;text/html&#39;,</span>
	<span class="c">#					 &#39;application/rdf+xml&#39;,</span>
	<span class="c">#					 &#39;text/turtle; charset=utf-8&#39;,</span>
	<span class="c">#					 &#39;application/json&#39;,</span>
	<span class="c">#					 &#39;application/ld+json&#39;,</span>
	<span class="c">#					 &#39;text/rdf+n3&#39;]</span>
	<span class="c">#</span>
	<span class="c">#	# this nice module does content negotiation and returns the preferred format</span>
	<span class="c">#	sg = acceptable_content_type(acc, possibilities)</span>
	<span class="c">#	htmlOutput = (sg != None and sg[0] == content_type(&#39;text/html&#39;))</span>
	<span class="c">#	os.environ[&#39;rdfaerror&#39;] = &#39;true&#39;</span>
		
	<span class="c"># This is really for testing purposes only, it is an unpublished flag to force RDF output no</span>
	<span class="c"># matter what</span>
	<span class="k">try</span> <span class="p">:</span>
		<span class="n">graph</span> <span class="o">=</span> <span class="n">processor</span><span class="o">.</span><span class="n">rdf_from_source</span><span class="p">(</span><span class="nb">input</span><span class="p">,</span> <span class="n">outputFormat</span><span class="p">,</span> <span class="n">rdfOutput</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;forceRDFOutput&quot;</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">htmlOutput</span><span class="p">)</span>
		<span class="k">if</span> <span class="n">outputFormat</span> <span class="o">==</span> <span class="s">&quot;n3&quot;</span> <span class="p">:</span>
			<span class="n">retval</span> <span class="o">=</span> <span class="s">&#39;Content-Type: text/rdf+n3; charset=utf-8</span><span class="se">\n</span><span class="s">&#39;</span>
		<span class="k">elif</span> <span class="n">outputFormat</span> <span class="o">==</span> <span class="s">&quot;nt&quot;</span> <span class="ow">or</span> <span class="n">outputFormat</span> <span class="o">==</span> <span class="s">&quot;turtle&quot;</span> <span class="p">:</span>
			<span class="n">retval</span> <span class="o">=</span> <span class="s">&#39;Content-Type: text/turtle; charset=utf-8</span><span class="se">\n</span><span class="s">&#39;</span>
		<span class="k">elif</span> <span class="n">outputFormat</span> <span class="o">==</span> <span class="s">&quot;json-ld&quot;</span> <span class="ow">or</span> <span class="n">outputFormat</span> <span class="o">==</span> <span class="s">&quot;json&quot;</span> <span class="p">:</span>
			<span class="n">retval</span> <span class="o">=</span> <span class="s">&#39;Content-Type: application/ld+json; charset=utf-8</span><span class="se">\n</span><span class="s">&#39;</span>
		<span class="k">else</span> <span class="p">:</span>
			<span class="n">retval</span> <span class="o">=</span> <span class="s">&#39;Content-Type: application/rdf+xml; charset=utf-8</span><span class="se">\n</span><span class="s">&#39;</span>
		<span class="n">retval</span> <span class="o">+=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span>
		<span class="n">retval</span> <span class="o">+=</span> <span class="n">graph</span>
		<span class="k">return</span> <span class="n">retval</span>
	<span class="k">except</span> <span class="n">HTTPError</span> <span class="p">:</span>
		<span class="p">(</span><span class="nb">type</span><span class="p">,</span><span class="n">h</span><span class="p">,</span><span class="n">traceback</span><span class="p">)</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()</span>
		<span class="kn">import</span> <span class="nn">cgi</span>
		
		<span class="n">retval</span> <span class="o">=</span> <span class="s">&#39;Content-type: text/html; charset=utf-8</span><span class="se">\n</span><span class="s">Status: </span><span class="si">%s</span><span class="s"> </span><span class="se">\n\n</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">h</span><span class="o">.</span><span class="n">http_code</span>
		<span class="n">retval</span> <span class="o">+=</span> <span class="s">&quot;&lt;html&gt;</span><span class="se">\n</span><span class="s">&quot;</span>		
		<span class="n">retval</span> <span class="o">+=</span> <span class="s">&quot;&lt;head&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="n">retval</span> <span class="o">+=</span> <span class="s">&quot;&lt;title&gt;HTTP Error in distilling RDFa content&lt;/title&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="n">retval</span> <span class="o">+=</span> <span class="s">&quot;&lt;/head&gt;&lt;body&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="n">retval</span> <span class="o">+=</span> <span class="s">&quot;&lt;h1&gt;HTTP Error in distilling RDFa content&lt;/h1&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="n">retval</span> <span class="o">+=</span> <span class="s">&quot;&lt;p&gt;HTTP Error: </span><span class="si">%s</span><span class="s"> (</span><span class="si">%s</span><span class="s">)&lt;/p&gt;</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">h</span><span class="o">.</span><span class="n">http_code</span><span class="p">,</span><span class="n">h</span><span class="o">.</span><span class="n">msg</span><span class="p">)</span>
		<span class="n">retval</span> <span class="o">+=</span> <span class="s">&quot;&lt;p&gt;On URI: &lt;code&gt;&#39;</span><span class="si">%s</span><span class="s">&#39;&lt;/code&gt;&lt;/p&gt;</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">cgi</span><span class="o">.</span><span class="n">escape</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
		<span class="n">retval</span> <span class="o">+=</span><span class="s">&quot;&lt;/body&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="n">retval</span> <span class="o">+=</span><span class="s">&quot;&lt;/html&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="k">return</span> <span class="n">retval</span>
	<span class="k">except</span> <span class="p">:</span>
		<span class="c"># This branch should occur only if an exception is really raised, ie, if it is not turned</span>
		<span class="c"># into a graph value.</span>
		<span class="p">(</span><span class="nb">type</span><span class="p">,</span><span class="n">value</span><span class="p">,</span><span class="n">traceback</span><span class="p">)</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()</span>

		<span class="kn">import</span> <span class="nn">traceback</span><span class="o">,</span> <span class="nn">cgi</span>

		<span class="n">retval</span> <span class="o">=</span> <span class="s">&#39;Content-type: text/html; charset=utf-8</span><span class="se">\n</span><span class="s">Status: </span><span class="si">%s</span><span class="se">\n\n</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">processor</span><span class="o">.</span><span class="n">http_status</span>
		<span class="n">retval</span> <span class="o">+=</span> <span class="s">&quot;&lt;html&gt;</span><span class="se">\n</span><span class="s">&quot;</span>		
		<span class="n">retval</span> <span class="o">+=</span> <span class="s">&quot;&lt;head&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="n">retval</span> <span class="o">+=</span> <span class="s">&quot;&lt;title&gt;Exception in RDFa processing&lt;/title&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="n">retval</span> <span class="o">+=</span> <span class="s">&quot;&lt;/head&gt;&lt;body&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="n">retval</span> <span class="o">+=</span> <span class="s">&quot;&lt;h1&gt;Exception in distilling RDFa&lt;/h1&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="n">retval</span> <span class="o">+=</span> <span class="s">&quot;&lt;pre&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="n">strio</span>  <span class="o">=</span> <span class="n">StringIO</span><span class="p">()</span>
		<span class="n">traceback</span><span class="o">.</span><span class="n">print_exc</span><span class="p">(</span><span class="nb">file</span><span class="o">=</span><span class="n">strio</span><span class="p">)</span>
		<span class="n">retval</span> <span class="o">+=</span> <span class="n">strio</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>
		<span class="n">retval</span> <span class="o">+=</span><span class="s">&quot;&lt;/pre&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="n">retval</span> <span class="o">+=</span><span class="s">&quot;&lt;pre&gt;</span><span class="si">%s</span><span class="s">&lt;/pre&gt;</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">value</span>
		<span class="n">retval</span> <span class="o">+=</span><span class="s">&quot;&lt;h1&gt;Distiller request details&lt;/h1&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="n">retval</span> <span class="o">+=</span><span class="s">&quot;&lt;dl&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="k">if</span> <span class="n">uri</span> <span class="o">==</span> <span class="s">&quot;text:&quot;</span> <span class="ow">and</span> <span class="s">&quot;text&quot;</span> <span class="ow">in</span> <span class="n">form</span> <span class="ow">and</span> <span class="n">form</span><span class="p">[</span><span class="s">&quot;text&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">!=</span> <span class="bp">None</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">form</span><span class="p">[</span><span class="s">&quot;text&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> <span class="o">!=</span> <span class="mi">0</span> <span class="p">:</span>
			<span class="n">retval</span> <span class="o">+=</span><span class="s">&quot;&lt;dt&gt;Text input:&lt;/dt&gt;&lt;dd&gt;</span><span class="si">%s</span><span class="s">&lt;/dd&gt;</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">cgi</span><span class="o">.</span><span class="n">escape</span><span class="p">(</span><span class="n">form</span><span class="p">[</span><span class="s">&quot;text&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">,</span><span class="s">&#39;&lt;br/&gt;&#39;</span><span class="p">)</span>
		<span class="k">elif</span> <span class="n">uri</span> <span class="o">==</span> <span class="s">&quot;uploaded:&quot;</span> <span class="p">:</span>
			<span class="n">retval</span> <span class="o">+=</span><span class="s">&quot;&lt;dt&gt;Uploaded file&lt;/dt&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="k">else</span> <span class="p">:</span>
			<span class="n">retval</span> <span class="o">+=</span><span class="s">&quot;&lt;dt&gt;URI received:&lt;/dt&gt;&lt;dd&gt;&lt;code&gt;&#39;</span><span class="si">%s</span><span class="s">&#39;&lt;/code&gt;&lt;/dd&gt;</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">cgi</span><span class="o">.</span><span class="n">escape</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
		<span class="k">if</span> <span class="s">&quot;host_language&quot;</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="p">:</span>
			<span class="n">retval</span> <span class="o">+=</span><span class="s">&quot;&lt;dt&gt;Media Type:&lt;/dt&gt;&lt;dd&gt;</span><span class="si">%s</span><span class="s">&lt;/dd&gt;</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">media_type</span>
		<span class="k">if</span> <span class="s">&quot;graph&quot;</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="p">:</span>
			<span class="n">retval</span> <span class="o">+=</span><span class="s">&quot;&lt;dt&gt;Requested graphs:&lt;/dt&gt;&lt;dd&gt;</span><span class="si">%s</span><span class="s">&lt;/dd&gt;</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">form</span><span class="o">.</span><span class="n">getfirst</span><span class="p">(</span><span class="s">&quot;graph&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
		<span class="k">else</span> <span class="p">:</span>
			<span class="n">retval</span> <span class="o">+=</span><span class="s">&quot;&lt;dt&gt;Requested graphs:&lt;/dt&gt;&lt;dd&gt;default&lt;/dd&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="n">retval</span> <span class="o">+=</span><span class="s">&quot;&lt;dt&gt;Output serialization format:&lt;/dt&gt;&lt;dd&gt; </span><span class="si">%s</span><span class="s">&lt;/dd&gt;</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">outputFormat</span>
		<span class="k">if</span> <span class="s">&quot;space_preserve&quot;</span> <span class="ow">in</span> <span class="n">form</span> <span class="p">:</span> <span class="n">retval</span> <span class="o">+=</span><span class="s">&quot;&lt;dt&gt;Space preserve:&lt;/dt&gt;&lt;dd&gt; </span><span class="si">%s</span><span class="s">&lt;/dd&gt;</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">form</span><span class="p">[</span><span class="s">&quot;space_preserve&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
		<span class="n">retval</span> <span class="o">+=</span><span class="s">&quot;&lt;/dl&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="n">retval</span> <span class="o">+=</span><span class="s">&quot;&lt;/body&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="n">retval</span> <span class="o">+=</span><span class="s">&quot;&lt;/html&gt;</span><span class="se">\n</span><span class="s">&quot;</span>
		<span class="k">return</span> <span class="n">retval</span></div>
</pre></div>

          </div>
        </div>
      </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
            <p class="logo"><a href="../../../../index.html">
              <img class="logo" src="../../../../_static/logo.svg" alt="Logo"/>
            </a></p>
<div id="searchbox" style="display: none">
  <h3>Quick search</h3>
    <form class="search" action="../../../../search.html" method="get">
      <input type="text" name="q" />
      <input type="submit" value="Go" />
      <input type="hidden" name="check_keywords" value="yes" />
      <input type="hidden" name="area" value="default" />
    </form>
    <p class="searchtip" style="font-size: 90%">
    Enter search terms or a module, class or function name.
    </p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../../../../genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="../../../../py-modindex.html" title="Python Module Index"
             >modules</a> |</li>
        <li><a href="../../../../index.html">rdflib 4.1.2 documentation</a> &raquo;</li>
          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
      </ul>
    </div>
<div class="footer">
    &copy; Copyright 2009 - 2013, RDFLib Team.
  Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.2.2.
  <br />Theme based on <a href="http://readthedocs.org/">Read The Docs</a>

</div>





  </body>
</html>