|
@@ -46,7 +46,7 @@ static int
|
|
Term_iriref_init (TermObject *self, PyObject *args, PyObject *kwargs)
|
|
Term_iriref_init (TermObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
{
|
|
char *data = NULL;
|
|
char *data = NULL;
|
|
- LSUP_NSMap *nsm = NULL;
|
|
|
|
|
|
+ NSMapObject *nsm = NULL;
|
|
|
|
|
|
static char *kwlist[] = {"data", "nsm", NULL};
|
|
static char *kwlist[] = {"data", "nsm", NULL};
|
|
|
|
|
|
@@ -73,33 +73,21 @@ Term_iriref_init (TermObject *self, PyObject *args, PyObject *kwargs)
|
|
static int
|
|
static int
|
|
Term_literal_init (TermObject *self, PyObject *args, PyObject *kwargs)
|
|
Term_literal_init (TermObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
{
|
|
- char *data = NULL, *datatype = NULL;
|
|
|
|
|
|
+ char *data = NULL, *datatype = NULL, *lang = NULL;
|
|
|
|
|
|
- static char *kwlist[] = {"", "datatype", NULL};
|
|
|
|
|
|
+ static char *kwlist[] = {"", "datatype", "lang", NULL};
|
|
|
|
|
|
if (!PyArg_ParseTupleAndKeywords (
|
|
if (!PyArg_ParseTupleAndKeywords (
|
|
- args, kwargs, "s|z", kwlist, &data, &datatype))
|
|
|
|
|
|
+ args, kwargs, "s|zz", kwlist, &data, &datatype, &lang))
|
|
return -1;
|
|
return -1;
|
|
|
|
|
|
- self->ob_struct = LSUP_term_new (LSUP_TERM_LITERAL, data, datatype);
|
|
|
|
- if (!self->ob_struct) {
|
|
|
|
- PyErr_SetString (PyExc_ValueError, "Could not create term.");
|
|
|
|
- return -1;
|
|
|
|
|
|
+ if (lang)
|
|
|
|
+ self->ob_struct = LSUP_lt_literal_new (data, lang);
|
|
|
|
+ else {
|
|
|
|
+ LSUP_Term *dtype = (datatype) ? LSUP_iriref_new (datatype, NULL) : NULL;
|
|
|
|
+ self->ob_struct = LSUP_literal_new (data, dtype);
|
|
}
|
|
}
|
|
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-static int
|
|
|
|
-Term_lt_literal_init (TermObject *self, PyObject *args, PyObject *kwargs)
|
|
|
|
-{
|
|
|
|
- char *data = NULL, *lang = NULL;
|
|
|
|
-
|
|
|
|
- if (!PyArg_ParseTuple (args, "sz", &data, &lang))
|
|
|
|
- return -1;
|
|
|
|
-
|
|
|
|
- self->ob_struct = LSUP_term_new (LSUP_TERM_LT_LITERAL, data, lang);
|
|
|
|
if (!self->ob_struct) {
|
|
if (!self->ob_struct) {
|
|
PyErr_SetString (PyExc_ValueError, "Could not create term.");
|
|
PyErr_SetString (PyExc_ValueError, "Could not create term.");
|
|
return -1;
|
|
return -1;
|
|
@@ -139,63 +127,98 @@ Term_dealloc (TermObject *self)
|
|
static PyObject *
|
|
static PyObject *
|
|
Term_get_type (TermObject *self, void *closure)
|
|
Term_get_type (TermObject *self, void *closure)
|
|
{
|
|
{
|
|
- PyObject *type = PyLong_FromLong (self->ob_struct->type);
|
|
|
|
-
|
|
|
|
- Py_INCREF (type);
|
|
|
|
- return type;
|
|
|
|
|
|
+ return PyLong_FromLong (self->ob_struct->type);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
static PyObject *
|
|
static PyObject *
|
|
Term_get_data (TermObject *self, void *closure)
|
|
Term_get_data (TermObject *self, void *closure)
|
|
|
|
+{ return PyUnicode_FromString (self->ob_struct->data); }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+static PyObject *
|
|
|
|
+Term_iriref_get_nsm (TermObject *self, void *closure)
|
|
{
|
|
{
|
|
- PyObject *data = PyUnicode_FromString (self->ob_struct->data);
|
|
|
|
|
|
+ LSUP_Term *term = self->ob_struct;
|
|
|
|
+ if (!LSUP_IS_IRI(term))
|
|
|
|
+ Py_RETURN_NONE;
|
|
|
|
|
|
- Py_INCREF (data);
|
|
|
|
- return data;
|
|
|
|
|
|
+ LSUP_NSMap *nsm = LSUP_iriref_nsm (term);
|
|
|
|
+ if (!nsm) Py_RETURN_NONE;
|
|
|
|
+
|
|
|
|
+ NSMapObject *nsm_obj = PyObject_New (NSMapObject, &NSMapType);
|
|
|
|
+ if (UNLIKELY (!nsm_obj)) return PyErr_NoMemory();
|
|
|
|
+
|
|
|
|
+ nsm_obj->ob_struct = nsm;
|
|
|
|
+
|
|
|
|
+ Py_INCREF (nsm_obj);
|
|
|
|
+ return (PyObject *) nsm_obj;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
static PyObject *
|
|
static PyObject *
|
|
-Term_get_datatype (TermObject *self, void *closure)
|
|
|
|
|
|
+Term_iriref_get_prefix (TermObject *self, void *closure)
|
|
{
|
|
{
|
|
- if (!self->ob_struct->datatype) Py_RETURN_NONE;
|
|
|
|
|
|
+ LSUP_Term *term = self->ob_struct;
|
|
|
|
+ if (! LSUP_IS_IRI (term))
|
|
|
|
+ Py_RETURN_NONE;
|
|
|
|
|
|
- const LSUP_Term *dtype = LSUP_tcache_get (self->ob_struct->datatype);
|
|
|
|
- if (!dtype) Py_RETURN_NONE;
|
|
|
|
|
|
+ return PyUnicode_FromString (LSUP_iriref_prefix (term));
|
|
|
|
+}
|
|
|
|
|
|
- PyObject *datatype = PyUnicode_FromString (dtype->data);
|
|
|
|
|
|
|
|
- Py_INCREF (datatype);
|
|
|
|
- return datatype;
|
|
|
|
|
|
+static PyObject *
|
|
|
|
+Term_iriref_get_path (TermObject *self, void *closure)
|
|
|
|
+{
|
|
|
|
+ LSUP_Term *term = self->ob_struct;
|
|
|
|
+ if (! LSUP_IS_IRI (term))
|
|
|
|
+ Py_RETURN_NONE;
|
|
|
|
+
|
|
|
|
+ return PyUnicode_FromString (LSUP_iriref_path (term));
|
|
}
|
|
}
|
|
|
|
|
|
-/*
|
|
|
|
- * This is the same value for all language-tagged literals.
|
|
|
|
- */
|
|
|
|
|
|
+
|
|
static PyObject *
|
|
static PyObject *
|
|
-LTLiteral_get_datatype (TermObject *self, void *closure)
|
|
|
|
|
|
+Term_iriref_get_frag (TermObject *self, void *closure)
|
|
{
|
|
{
|
|
- const LSUP_Term *dtype = LSUP_default_datatype;
|
|
|
|
|
|
+ LSUP_Term *term = self->ob_struct;
|
|
|
|
+ if (! LSUP_IS_IRI (term))
|
|
|
|
+ Py_RETURN_NONE;
|
|
|
|
+
|
|
|
|
+ return PyUnicode_FromString (LSUP_iriref_frag (term));
|
|
|
|
+}
|
|
|
|
|
|
- PyObject *datatype = PyUnicode_FromString (dtype->data);
|
|
|
|
|
|
+
|
|
|
|
+static PyObject *
|
|
|
|
+Term_lit_get_datatype (TermObject *self, void *closure)
|
|
|
|
+{
|
|
|
|
+ if (!self->ob_struct->datatype) Py_RETURN_NONE;
|
|
|
|
+
|
|
|
|
+ char *dtype_data =
|
|
|
|
+ self->ob_struct->type == LSUP_TERM_LT_LITERAL ? DEFAULT_DTYPE :
|
|
|
|
+ self->ob_struct->datatype->data;
|
|
|
|
+
|
|
|
|
+ TermObject *datatype = (TermObject *) Py_TYPE (self)->tp_alloc (
|
|
|
|
+ Py_TYPE (self), 0);
|
|
|
|
+ if (!datatype) return PyErr_NoMemory();
|
|
|
|
+
|
|
|
|
+ datatype->ob_struct = LSUP_iriref_new (dtype_data, NULL);
|
|
|
|
|
|
Py_INCREF (datatype);
|
|
Py_INCREF (datatype);
|
|
- return datatype;
|
|
|
|
|
|
+ return (PyObject *) datatype;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
static PyObject *
|
|
static PyObject *
|
|
-Term_get_lang (TermObject *self, void *closure)
|
|
|
|
|
|
+Term_lit_get_lang (TermObject *self, void *closure)
|
|
{
|
|
{
|
|
if (
|
|
if (
|
|
- !self->ob_struct->datatype || !self->ob_struct->lang ||
|
|
|
|
- strlen (self->ob_struct->lang) == 0)
|
|
|
|
|
|
+ self->ob_struct->type != LSUP_TERM_LT_LITERAL
|
|
|
|
+ || ! self->ob_struct->lang
|
|
|
|
+ || strlen (self->ob_struct->lang) == 0)
|
|
Py_RETURN_NONE;
|
|
Py_RETURN_NONE;
|
|
|
|
|
|
- PyObject *lang = PyUnicode_FromString (self->ob_struct->lang);
|
|
|
|
-
|
|
|
|
- Py_INCREF (lang);
|
|
|
|
- return lang;
|
|
|
|
|
|
+ return PyUnicode_FromString (self->ob_struct->lang);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -203,11 +226,27 @@ static PyGetSetDef Term_getsetters[] = {
|
|
{"_type", (getter) Term_get_type, NULL, "Term type.", NULL},
|
|
{"_type", (getter) Term_get_type, NULL, "Term type.", NULL},
|
|
{"_data", (getter) Term_get_data, NULL, "Term data.", NULL},
|
|
{"_data", (getter) Term_get_data, NULL, "Term data.", NULL},
|
|
{
|
|
{
|
|
- "_datatype", (getter) Term_get_datatype,
|
|
|
|
|
|
+ "_nsm", (getter) Term_iriref_get_nsm,
|
|
|
|
+ NULL, "IRI ref namespace map.", NULL
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "_prefix", (getter) Term_iriref_get_prefix,
|
|
|
|
+ NULL, "IRI ref prefix.", NULL
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "_path", (getter) Term_iriref_get_path,
|
|
|
|
+ NULL, "IRI ref path after prefix.", NULL
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "_frag", (getter) Term_iriref_get_frag,
|
|
|
|
+ NULL, "IRI ref fragment.", NULL
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "_datatype", (getter) Term_lit_get_datatype,
|
|
NULL, "Literal term data type.", NULL
|
|
NULL, "Literal term data type.", NULL
|
|
},
|
|
},
|
|
{
|
|
{
|
|
- "_lang", (getter) Term_get_lang,
|
|
|
|
|
|
+ "_lang", (getter) Term_lit_get_lang,
|
|
NULL, "Literal term language tag.", NULL
|
|
NULL, "Literal term language tag.", NULL
|
|
},
|
|
},
|
|
{NULL}
|
|
{NULL}
|
|
@@ -216,28 +255,34 @@ static PyGetSetDef Term_getsetters[] = {
|
|
|
|
|
|
static PyGetSetDef IRIRef_getsetters[] = {
|
|
static PyGetSetDef IRIRef_getsetters[] = {
|
|
{"data", (getter) Term_get_data, NULL, "IRI string.", NULL},
|
|
{"data", (getter) Term_get_data, NULL, "IRI string.", NULL},
|
|
- {NULL}
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-static PyGetSetDef Literal_getsetters[] = {
|
|
|
|
- {"data", (getter) Term_get_data, NULL, "Literal data.", NULL},
|
|
|
|
{
|
|
{
|
|
- "datatype", (getter) Term_get_datatype,
|
|
|
|
- NULL, "Data type.", NULL
|
|
|
|
|
|
+ "nsm", (getter) Term_iriref_get_nsm,
|
|
|
|
+ NULL, "Namespace map.", NULL
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "prefix", (getter) Term_iriref_get_prefix,
|
|
|
|
+ NULL, "IRI ref prefix.", NULL
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "path", (getter) Term_iriref_get_path,
|
|
|
|
+ NULL, "IRI ref path after prefix.", NULL
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "frag", (getter) Term_iriref_get_frag,
|
|
|
|
+ NULL, "IRI ref fragment.", NULL
|
|
},
|
|
},
|
|
{NULL}
|
|
{NULL}
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
-static PyGetSetDef LTLiteral_getsetters[] = {
|
|
|
|
|
|
+static PyGetSetDef Literal_getsetters[] = {
|
|
{"data", (getter) Term_get_data, NULL, "Literal data.", NULL},
|
|
{"data", (getter) Term_get_data, NULL, "Literal data.", NULL},
|
|
{
|
|
{
|
|
- "datatype", (getter) LTLiteral_get_datatype,
|
|
|
|
|
|
+ "datatype", (getter) Term_lit_get_datatype,
|
|
NULL, "Data type.", NULL
|
|
NULL, "Data type.", NULL
|
|
},
|
|
},
|
|
{
|
|
{
|
|
- "lang", (getter) Term_get_lang,
|
|
|
|
|
|
+ "lang", (getter) Term_lit_get_lang,
|
|
NULL, "Language tag.", NULL
|
|
NULL, "Language tag.", NULL
|
|
},
|
|
},
|
|
{NULL}
|
|
{NULL}
|
|
@@ -297,17 +342,6 @@ PyTypeObject LiteralType = {
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
-PyTypeObject LTLiteralType = {
|
|
|
|
- PyVarObject_HEAD_INIT(NULL, 0)
|
|
|
|
- .tp_name = "term.LTLiteral",
|
|
|
|
- .tp_doc = "RDF language-tagged Literal.",
|
|
|
|
- .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
|
|
|
|
- .tp_base = &LiteralType,
|
|
|
|
- .tp_init = (initproc) Term_lt_literal_init,
|
|
|
|
- .tp_getset = LTLiteral_getsetters,
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-
|
|
|
|
PyTypeObject BNodeType = {
|
|
PyTypeObject BNodeType = {
|
|
PyVarObject_HEAD_INIT(NULL, 0)
|
|
PyVarObject_HEAD_INIT(NULL, 0)
|
|
.tp_name = "term.BNode",
|
|
.tp_name = "term.BNode",
|