SaxonC 12.10.0
Saxon Processor library for C/C++, PHP and Python
Loading...
Searching...
No Matches
SaxonProcessor.h
1
2// Copyright (c) 2022 - 2023 Saxonica Limited.
3// This Source Code Form is subject to the terms of the Mozilla Public License,
4// v. 2.0. If a copy of the MPL was not distributed with this file, You can
5// obtain one at http://mozilla.org/MPL/2.0/. This Source Code Form is
6// "Incompatible With Secondary Licenses", as defined by the Mozilla Public
7// License, v. 2.0.
9
10#ifndef SAXON_PROCESSOR_H
11#define SAXON_PROCESSOR_H
12
13#if defined __linux__ || defined __APPLE__
14
15#include <dlfcn.h>
16#include <stdlib.h>
17#include <string>
18
19#define HANDLE void *
20#define LoadLibrary(x) dlopen(x, RTLD_LAZY)
21#define GetProcAddress(x, y) dlsym(x, y)
22#else
23#include <windows.h>
24#endif
25
26//#define DEBUG //remove
27//#define MEM_DEBUG //remove
28#define CVERSION_API_NO 1210
29
30#include <iostream>
31#include <map>
32#include <sstream>
33#include <stdexcept> // std::logic_error
34#include <string>
35#include <vector>
36
37#include "saxonc_export.h"
38#include "saxonc/DocumentBuilder.h"
39#include "saxonc/SaxonApiException.h"
40#include "saxonc/SaxonCGlue.h"
41#include "saxonc/SaxonCXPath.h"
42#include "saxonc/SchemaValidator.h"
43#include "saxonc/XPathProcessor.h"
44#include "saxonc/XQueryProcessor.h"
45#include "saxonc/Xslt30Processor.h"
46#include "saxonc/XsltExecutable.h"
47
48
49//#define MEM_DEBUG
50#if defined MEM_DEBUG
51
52#include <algorithm>
53#include <cstdlib>
54#include <new>
55
56static std::vector<void *> myAlloc;
57
58void *newImpl(std::size_t sz, char const *file, int line);
59
60void *operator new(std::size_t sz, char const *file, int line);
61
62void *operator new[](std::size_t sz, char const *file, int line);
63
64void operator delete(void *ptr) noexcept;
65
66void operator delete(void *, std::size_t) noexcept;
67
68#endif
69
70class Xslt30Processor;
71
72class XQueryProcessor;
73
74class XPathProcessor;
75
76class SchemaValidator;
77
78class XdmValue;
79
80class XdmNode;
81
82class XdmItem;
83
84class XdmAtomicValue;
85
86class XdmFunctionItem;
87
88class XdmArray;
89
90class XdmMap;
91
92class XsltExecutable;
93
94class DocumentBuilder;
95
97
98typedef enum eXdmType {
99 XDM_VALUE = 0,
100 XDM_ATOMIC_VALUE = 1,
101 XDM_NODE = 2,
102 XDM_ARRAY = 3,
103 XDM_MAP = 4,
104 XDM_FUNCTION_ITEM = 5,
105 XDM_EMPTY = 6,
106 XDM_ITEM = 7,
107} XDM_TYPE;
108
109//==========================================
110
117class SAXONC_EXPORT SaxonProcessor {
118
119 friend class DocumentBuilder;
120
121 friend class Xslt30Processor;
122
123 friend class XsltExecutable;
124
125 friend class XQueryProcessor;
126
127 friend class SchemaValidator;
128
129 friend class XPathProcessor;
130
131 friend class XdmValue;
132
133 friend class XdmItem;
134
135 friend class XdmAtomicValue;
136
137 friend class XdmFunctionItem;
138
139 friend class XdmNode;
140
141 friend class XdmMap;
142
143 friend class XdmArray;
144
145public:
151
153
154
160
161 SaxonProcessor(const char *configFile);
162
169 SaxonProcessor(bool l);
170
177
182 SaxonProcessor(const SaxonProcessor &other);
183
188
195 const char *getErrorMessage();
196
203 DocumentBuilder *newDocumentBuilder();
204
211 Xslt30Processor *newXslt30Processor();
212
219 XQueryProcessor *newXQueryProcessor();
220
227 XPathProcessor *newXPathProcessor();
228
235 SchemaValidator *newSchemaValidator();
236
237
238 void setExtensionLibrary(const char * libraryName);
239
247 XdmAtomicValue *makeStringValue(std::string str,
248 const char *encoding = nullptr);
249
257 XdmAtomicValue *makeStringValue(const char *str,
258 const char *encoding = nullptr);
259
268 XdmAtomicValue *makeIntegerValue(int i);
269
275 XdmAtomicValue *makeDoubleValue(double d);
276
282 XdmAtomicValue *makeFloatValue(float f);
283
292 XdmAtomicValue *makeLongValue(long l);
293
299 XdmAtomicValue *makeBooleanValue(bool b);
300
306 XdmAtomicValue *makeQNameValue(const char *str);
307
315 XdmAtomicValue *makeAtomicValue(const char *type, const char *value);
316
324 XdmArray *makeArray(char **input, int length);
325
333 XdmArray *makeArray(short *input, int length);
334
342 XdmArray *makeArray(int *input, int length);
343
351 XdmArray *makeArray(long long *input, int length);
352
360 XdmArray *makeArray(bool *input, int length);
361
369 XdmArray *makeArray(XdmValue **values, int length);
370
371
372 static void * makeInternalArray(void **inputs, int length);
373
381 XdmMap *makeMap(std::map<XdmAtomicValue *, XdmValue *> dataMap);
382
390 static XdmMap *makeMap2(std::map<std::string, XdmValue *> dataMap);
391
400 XdmMap *makeMap3(XdmAtomicValue **keys, XdmValue **values, int len);
401
413 const char *clarkNameToEQName(const char *name);
414
422 const char *EQNameToClarkName(const char *name);
423
429 const char *getStringValue(XdmItem *item);
430
458 XdmNode *parseXmlFromString(const char *source,
459 const char *encoding = nullptr,
460 SchemaValidator *validator = nullptr);
461
471 XdmNode *parseXmlFromFile(const char *source,
472 SchemaValidator *validator = nullptr);
473
483 XdmNode *parseXmlFromUri(const char *source,
484 SchemaValidator *validator = nullptr);
485
494 XdmValue *parseJsonFromString(const char *source,
495 const char *encoding = NULL);
496
505 XdmValue *parseJsonFromFile(const char *source);
506
512 int getNodeKind(int64_t obj);
513
520
526 bool exceptionOccurred();
527
534 void exceptionClear();
535
539 XdmValue **createXdmValueArray(int len) { return (new XdmValue *[len]); }
540
547 void deleteXdmValueArray(XdmValue **arr, int len);
548
552 XdmAtomicValue **createXdmAtomicValueArray(int len) {
553 return (new XdmAtomicValue *[len]);
554 }
555
562 void deleteXdmAtomicValueArray(XdmAtomicValue **arr, int len);
563
568 static SaxonApiException *checkForExceptionCPP();
569
570
574 static const char * encodeString(const char * stringValue, const char * toCharSetName);
575
579 static void release();
580
584 static void attachCurrentThread();
585
589 static graal_isolatethread_t * getOrAttachCurrentThread(sxnc_environment * sxn);
590
594 static void detachCurrentThread();
595
599 static void attachCurrentThread(sxnc_environment * sxn);
600
604 static void detachCurrentThread(sxnc_environment * sxn);
605
610 void setcwd(const char *cwd);
611
616 const char *getcwd();
617
623 const char *getResourcesDirectory();
624
630 void setResourcesDirectory(const char *dir);
631
638 void setCatalog(const char *catalogFile);
639
646 void setCatalogFiles(const char **catalogFiles, int length);
647
656 void setConfigurationProperty(const char *name, const char *value);
657
661 void clearConfigurationProperties();
662
667 bool isLicensed();
668
676 const char * getSaxonEdition();
677
682 const char *version();
683
684
685 static int jvmCreatedCPP;
687 static sxnc_environment
690 std::string cwd;
691
696 static void deleteString(const char *data) {
697 if (data != nullptr) {
698 operator delete((char *)data);
699 data = nullptr;
700 }
701 }
702
706 static void createHeapDump(bool live);
707
708protected:
709
710
718 SaxonProcessor(int64_t procRef, bool license=false);
719
720 std::string cwdV;
721 // std::string resources_dir; /*!< Saxon resources directory */
722 std::string versionStr;
723 std::map<std::string, XdmValue *>
726 //std::map<std::string, std::string>
727 // configProperties; /*!< Map of properties used for the transformation as
728 // (string, string) pairs */
729 bool licensei;
732 int64_t procRef;
733
737private:
738 // void createException(const char *message = nullptr);
739
740 void initialize(bool l);
741
742 void applyConfigurationProperties();
743
744 // SaxonC method for internal use
745 static int64_t
746 createParameterJArray(std::map<std::string, XdmValue *> parameters,
747 std::map<std::string, std::string> properties,
748 int additions = 0);
749
750 static int64_t
751 createParameterJArray2(std::map<std::string, XdmValue *> parameters);
752
753 static int64_t createJArray(XdmValue **values, int length);
754
755 static XdmValue *makeXdmValueFromRef(int64_t valueRef);
756
757 static XdmItem *makeXdmItemFromRef(int64_t valueRef);
758
759 static const char *checkException();
760
764 static void destroyHandle(int64_t handleRef);
765
769 static void getInfo();
770};
771
772//===============================================================================================
773
774#endif /* SAXON_PROCESSOR_H */
This C header file contains a number of factory functions for running SaxonC C/C++ APIs,...
EXTERN_SAXONC SAXONC_EXPORT const char * version(sxnc_environment *environi, sxnc_processor *proc)
Get the Saxon version.
Definition SaxonCProcessor.c:6
SAXONC_EXPORT void setCatalog(sxnc_environment *environi, sxnc_processor *proc, char *cwd, char *catalogFileName)
Set a catalog file to be used in Saxon.
Definition SaxonCProcessor.c:49
SAXONC_EXPORT void setCatalogFiles(sxnc_environment *environi, sxnc_processor *proc, char *cwd, char **catalogFileName, int length)
Set multiple catalog files to be used in Saxon.
Definition SaxonCProcessor.c:67
SAXONC_EXPORT void setConfigurationProperty(sxnc_environment *environi, sxnc_processor *proc, char *name, char *value)
Set a configuration property specific to the processor in use.
Definition SaxonCProcessor.c:38
SaxonCXPath.h provides the C API for XPath processing. This file contains a set of functions to compi...
SAXONC_EXPORT const char * getStringValue(sxnc_environment *environi, sxnc_value value)
Get the string value of the item.
Definition SaxonCXPath.c:223
A document builder holds properties controlling how a Saxon document tree should be built,...
Definition DocumentBuilder.h:35
SaxonApiException.
Definition SaxonApiException.h:24
The SaxonProcessor class acts as a factory for generating XQuery, XPath, Schema and XSLT compilers.
Definition SaxonProcessor.h:117
XdmAtomicValue * makeStringValue(std::string str, const char *encoding=nullptr)
Factory method to create an xs:string atomic value as a new XdmAtomicValue.
Definition SaxonProcessor.cpp:1063
XdmNode * parseXmlFromFile(const char *source, SchemaValidator *validator=nullptr)
Parse a source document file and return it as an XdmNode.
Definition SaxonProcessor.cpp:941
XdmMap * makeMap3(XdmAtomicValue **keys, XdmValue **values, int len)
Make an XdmMap from arrays of keys and values in XDM form.
Definition SaxonProcessor.cpp:1348
std::string cwdV
Definition SaxonProcessor.h:720
XdmAtomicValue * makeAtomicValue(const char *type, const char *value)
Create an XDM atomic value from its lexical representation and the name of the required built-in atom...
Definition SaxonProcessor.cpp:1119
XdmNode * parseXmlFromUri(const char *source, SchemaValidator *validator=nullptr)
Parse a source document available by URI and return it as an XdmNode.
Definition SaxonProcessor.cpp:960
const char * getErrorMessage()
Deprecated.
Definition SaxonProcessor.cpp:109
XdmValue * parseJsonFromString(const char *source, const char *encoding=NULL)
Parse a lexical representation of a source JSON document and return it as an XdmValue.
Definition SaxonProcessor.cpp:873
static sxnc_environment * sxn_environ
Definition SaxonProcessor.h:688
static XdmMap * makeMap2(std::map< std::string, XdmValue * > dataMap)
Make an XdmMap by supplying a map from the standard template library, with keys in primitive form.
Definition SaxonProcessor.cpp:1312
void exceptionClear()
Deprecated.
Definition SaxonProcessor.cpp:116
XdmAtomicValue * makeBooleanValue(bool b)
Factory method to create an xs:boolean atomic value as a new XdmAtomicValue.
Definition SaxonProcessor.cpp:1104
SaxonProcessor()
Default constructor.
Definition SaxonProcessor.cpp:244
std::map< std::string, XdmValue * > parameters
Definition SaxonProcessor.h:724
XdmAtomicValue * makeQNameValue(const char *str)
Create an xs:QName atomic value, from the string representation in clark notation.
Definition SaxonProcessor.cpp:1112
SchemaValidator * newSchemaValidator()
Create a SchemaValidator.
Definition SaxonProcessor.cpp:773
const char * clarkNameToEQName(const char *name)
Convert a string representing a QName value in clark notation to a string representing the QName in E...
Definition SaxonProcessor.cpp:1135
XdmAtomicValue * makeDoubleValue(double d)
Factory method to create an xs:double atomic value as a new XdmAtomicValue.
Definition SaxonProcessor.cpp:1080
XdmAtomicValue * makeIntegerValue(int i)
Factory method to create an xs:integer atomic value as a new XdmAtomicValue.
Definition SaxonProcessor.cpp:1072
XdmValue * parseJsonFromFile(const char *source)
Parse a source JSON file and return it as an XdmValue.
Definition SaxonProcessor.cpp:894
XdmArray * makeArray(char **input, int length)
Make an XdmArray whose members are xs:string values.
Definition SaxonProcessor.cpp:1265
bool exceptionOccurred()
Deprecated.
Definition SaxonProcessor.cpp:86
const char * EQNameToClarkName(const char *name)
Convert a string representing a QName value in EQName notation to a string representing the QName in ...
Definition SaxonProcessor.cpp:1143
XdmValue ** createXdmValueArray(int len)
Utility method for working with SaxonC on Python - internal use only.
Definition SaxonProcessor.h:539
XdmAtomicValue ** createXdmAtomicValueArray(int len)
Utility method for working with SaxonC on Python - internal use only.
Definition SaxonProcessor.h:552
XQueryProcessor * newXQueryProcessor()
Create an XQueryProcessor.
Definition SaxonProcessor.cpp:765
Xslt30Processor * newXslt30Processor()
Create an Xslt30Processor.
Definition SaxonProcessor.cpp:761
std::string cwd
Definition SaxonProcessor.h:690
std::string versionStr
Definition SaxonProcessor.h:722
XdmAtomicValue * makeLongValue(long l)
Factory method to create an xs:long atomic value as a new XdmAtomicValue.
Definition SaxonProcessor.cpp:1096
bool licensei
Definition SaxonProcessor.h:729
static void deleteString(const char *data)
Utility method required for the python and PHP extensions to delete a string created in the C++ code-...
Definition SaxonProcessor.h:696
bool isSchemaAwareProcessor()
Test whether this processor is schema-aware.
Definition SaxonProcessor.cpp:453
SaxonProcessor & operator=(const SaxonProcessor &other)
The copy assignment= operator.
Definition SaxonProcessor.cpp:719
int getNodeKind(int64_t obj)
Get the kind of node - internal use only.
Definition SaxonProcessor.cpp:934
SaxonApiException * exception
Definition SaxonProcessor.h:735
DocumentBuilder * newDocumentBuilder()
Create a DocumentBuilder.
Definition SaxonProcessor.cpp:752
XdmMap * makeMap(std::map< XdmAtomicValue *, XdmValue * > dataMap)
Make an XdmMap by supplying a map from the standard template library, with keys in XDM form.
Definition SaxonProcessor.cpp:1282
static int jvmCreatedCPP
Definition SaxonProcessor.h:685
XdmNode * parseXmlFromString(const char *source, const char *encoding=nullptr, SchemaValidator *validator=nullptr)
Parse a lexical representation of a source XML document and return it as an XdmNode.
Definition SaxonProcessor.cpp:915
XPathProcessor * newXPathProcessor()
Create an XPathProcessor.
Definition SaxonProcessor.cpp:769
int64_t procRef
Definition SaxonProcessor.h:732
XdmAtomicValue * makeFloatValue(float f)
Factory method to create an xs:float atomic value as a new XdmAtomicValue.
Definition SaxonProcessor.cpp:1088
Definition SchemaValidator.h:26
An XPathProcessor represents a factory to compile, load and execute XPath expressions.
Definition XPathProcessor.h:64
An XQueryProcessor represents a factory to compile, load and execute queries.
Definition XQueryProcessor.h:25
An array in the XDM data model.
Definition XdmArray.h:27
The class XdmAtomicValue represents an item in an XPath sequence that is an atomic value.
Definition XdmAtomicValue.h:27
The class XdmFunctionItem represents a function item.
Definition XdmFunctionItem.h:26
The class XdmItem represents an item in a sequence, as defined by the XDM data model.
Definition XdmItem.h:31
A map in the XDM data model.
Definition XdmMap.h:30
This class represents a node in the XDM data model.
Definition XdmNode.h:57
An XdmValue represents a value in the XDM data model.
Definition XdmValue.h:33
An Xslt30Processor represents a factory to compile, load and execute stylesheets.
Definition Xslt30Processor.h:29
An XsltExecutable represents the compiled form of a stylesheet.
Definition XsltExecutable.h:33
sxnc_environment.
Definition SaxonCGlue.h:80