See also:
@@which release?
Used for Sets
Cwm can now run as a SPARQL server. This includes:
A few strange bugs in rdf:xml serialization, many related to the rdf: prefix or xml: prefix, have been fixed
delta now returns with similar exit statuses as the diff utility for
plaintext files. An exit status of 0 means no differences between the
from
and to
graphs were found. An exit status of 1 means some
differences were found. An exit status of 2 means differences were not
computed for some reason.
Fixes in decimal support
A bug introduced into 0.8.0 where cwm crashed if no input files were specified has been fixed
A crude hack in WebAccess.py allows a local file system to be used instead of a given website. The intent is to clean this up in the future.
There has been much work on a grammar for n3. grammar/n3.n3 is the grammar, grammar/predictiveParser.n3 can understand it.
Performance work has resulted in some tasks taking 1/10 the time that they used to. Much more work is planned in this regard.
Cwm now uses python's distutils for distribution. This allows for installation of cwm. As an added bonus, there are now rpm's, windows installers.
--flatten and --unflatten have been rewritten, replacing the old --flat. Flatten minimally reifies an n3 file to make it an rdf graph. Note that the graph may still fail to serialize as rdf, due to literals as subjects.
This release has some bugfixes, as well as some changed and new functionality.
Cwm will now do the expected thing on log:uri if given an invalid URI string.
An integer over the platforms native integer size will no longer crash Cwm.
Cwm now understands most xsd datatyped for use in builtins.
By setting the environment variable CWM_RDFLIB to 1, cwm will use rdflib to parse rdf/xml files. Note that this is unsupported, may break in the future, and requrires rdflib be installed. Rdflib supports some rdf features Cwm's parser does not, so this may be useful to you notwithstanding
BNodes given names using the _: notation now have formula scope, not document scope.
Cwm is now released in a new file, cwm.tar.gz, which, while being a fraction of the size of the old cwm.tgz, still includes a complete set of tests. It was discovered that Cwm was not actually running all of its tests. This has been fixed, and the tests have been split into tests guarenteed to work in the .tar.gz file (offline) and those which will not.
N3QL support. Initial support for N3QL query language handling in
cwm. command line looks like: cwm myKB.n3
--query=myquery.n3ql
. Initial test case in swap/test/ql/detailed.tests
The default output form is @forAll
, not this
log:forAll
, @forSome
, not this log:forSome
.
Use --n3=v to force the old obsolete form for variable declations. The parser
has for a long time and will for some time support both forms.
Reification, after being broken for almost a year, has been rewritten and is better than ever. See reify/detailed.testsThe options, as always, are --reify and --dereify. The tests for this are now in. There is insufficient documentation for this feature, and it has not been completely tested, so there may yet be bugs in it. If there is demand for it, fixing the --flatten feature should be possible now.
2004/6/23:
Mime type for Notation3 switched to text/rdf+n3. This could be a major change. The application for application/n3 never seemed to get anywhere with IANA anyway. Text has the advantage that browsers will by default dispaly it, and N3 is designed to be readable. Downside is that if it not ASCII, then you must include the charset specification in the mime type. This must be UTF-8, and notation3 is always utf-8.
Cwm now correctly identifies HTTP 404 errors, throwing an exception, and does not try to parse the returned (HTML) file.
An n3 statement which references the same universal quantifier twice now does the right thing.
Ooops - nodeID was misspelled nodeid on RDF/XML output.
The --patch=patchfile
command line argument allows a
patch file to be applied to the knowledge base (current working formula). See
the Diff, Patch, Update and Sync
note in the Design Issues series on the motivation for exchanging
difference files, and how they work. Diff files can in certain specific
circumstances (a well-labeled graph) be produced by the diff.py program
included with this distribution. The new tests are in
$SWAP/test/delta/detailed.tests
The i18n/detailed.tests have been removed from the test harness. They were not right, and URI/ IRI issues are not clear yet. It is not clear whether cwm should URI-canonicalize, or IRI-canonicalize. (My instinct is that it should - Tim).
Cwm does not canonicalize numerical (xsd:double and xsd:integer) values on N3 output. It uses python's str(float(s)) and str(int(s)). The effect is to reduce some over-precision in the output.
The cwm regresssion test now incorporates the RDF Core Positive Parser Tests except for those which deal with reification or with XML literals. In the process, xml:base supposrt was added in the parser.
A new test found in the updated core tests requires RDF to be parsed even when there is no enveloping <rdf:RDF> tag, even if the outermost element is a typed node production, and so not something in the RDF namespace at all. This makes rdf much less self-describing, and makes it more dangerous that one might parse say an HTML file as RDF by accident. Use with care. If need this feature, use the --rdf=R flag.
The RDF core tests are done with --rdf=RT to make the parser parse naked RDF or RDF buried in foreign XML..
This has been a missing feature of the RDF generator for a while. The nodeid feature allows bnodes to be output in RDF/XML. I may not have got this right, as I don't have RDF generation tests, only RDF parse tests.
The ordering of Terms has been changed. Automatically generated terms with no URIs sort after anything which has a URI.
This will change the order of N3 and RDF/XML output but does not change its semantics.s
Cwm now does output in a two-pass process. This makes its counting of the number of occurrences of namespaces more acurate, which determines the default namespace it choses. This does take more time, though not as long as the previous method of working out which was going to be most common. To skip this process, use the "d" flag on output (N3 or RDF/XML) to suppress the use of a default namespace.
Because this counting is now accurate, it now suppresses namespace prefix declarations which are not actually needed in the output.
Cwm will also make up prefixes when it needs them for a namespace, and none of the input data uses one. It peeks into the the namespace URI, and looks around for a short string after the last "/", adding numbers if necessary to make the prefix unique.
Cwm when writing N3 not normally use namespace names for URIs which do not have a "#". Including a "/" in the flags overrides this.
cwm mydcdata.n3 --n3="/"
Namespaces which end in "/" lead (in my opinion) to an unfortunate confusion between the RDF propoerties and the HTTP document they identify. This is related to W3C TAG Issue httpRange-14.
The "this" syntax in a formula refers to the formula itself. It was used for thr pseudo-statements this log:forSome x, and this log;forAll y.
In a few rare cases it actually was used to refer logically to the formula itself. A classic is of course { this a log:falseHood }. I decided that this was going to make more problems than it would solve. The psudostatements have gone anway (in response to popular request), they became just syntax. And the @forAll syntax has been introduced as the way to go. So with this release, while you can still like many N3 files use this to qualify variables, you can't use it for anything else.
Release 0.7. 2004-02-04: This is a first numbered release. After much discussion we picked 0.7 as the number. Added a CVS tag rel-0-7, so that if you have the source through CVS, you up- or down-grade to this by
cvs update -r rel-0-7
The idea is that this release has a well-defined set of bugs, and that we work toward a more community-supported platform with time.
(code is formula.compareTerm())
At this point cwm made a number of changes at once, so we document them here.
@prefix test:
<http://www.w3.org/2000/10/swap/test/regression#>.
The namespaces used for lists changed from DAML to RDF. The namespace used for "=" switched to OWL. DAML and DAML+OIL are used no more, though we remember them fondly. This change actually shouldn't change much in many applications, where files use the collection syntax in RDF or the () and = syntaxes in N3. It does affect the order of statements cwm uses to pretty-print files.
test:t1018b2
) with
that - and wrapping my head round that caused me to decide it was
time for the change. It is nowsimpler in that regard.CWM_RUN_NS
to something like "#", which
will create the original behaviour, or a specific namespace you know you
won't reuse in related work.More changes 2003-08-25
You can get the old version before these 2.0 changes using CVS, by checking out with the tag oldLists .
cvs update -r oldLists
Done ==== - sucking in the schema (http library?)
--schemas ; - to know about r1 see r2;
- split Query engine out as subclass of RDFStore? (DWC) SQL-equivalent client
- split out separate modules: CGI interface, command-line stuff, built-ins (DWC 30Aug2001)
- (test/retest.sh is another/better list of completed functionality --DWC)
- BUG: a [ b c ] d. gets improperly output. See anon-pred
- Separate the store hash table from the parser.
- DONE - regeneration of genids on output.
- DONE - repreentation of genids and foralls in model - regression test
- DONE (once!) Manipulation: { } as notation for bag of statements - DONE - filter -DONE - graph match
-DONE - recursive dump of nested bags
- DONE - semi-reification - reifying only subexpressions
- DONE - Bug :x :y :z as data should match [ :y :z ] as query. Fixed by stripping forSomes from top of query.
- BUG: {} is a context but that is lost on output!!! statements not enough. See foo2.n3 - change existential representation :-( to make context a real conjunction again? (the forSome triple is special in that you can't remove it and reduce info) - filter out duplicate conclusions
- BUG! - DONE - Validation: validate domain and range constraints against closure of classes and mutually disjoint classes.
- Use unambiguous property to infer synomnyms (see sameDan.n3 test case in test/retest.sh)
- schema validation - done partly but no "no schema for xx predicate". ULTILS WE HAVE DONE
- includes(expr1, expr2) (cf >= , dixitInterAlia )
- indirectlyImplies(expr1, expr2)
- startsWith(x,y)
- uri(x, str)
- usesNamespace(x,y) # find transitive closure for validation - awful function in reality