All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Legend: 🔒️ security fixes; ⚡️ major features/updates; ❗️ breaking changes; 👉 important notes.
UNRELEASED - YYYY-MM-DD
No security updates are included in this release.
OslcQuery.SubmitPost()now submits form-encoded OSLC queries over HTTP POST.RootServicesHelpernow resolves OSLC Root Services documents from direct/rootservicesor/rootservices.xmlURIs, the standard/.well-known/oslc/rootservices.xmllocation, and the legacy relative/rootservicesfallback.- ⚡️ The IBM Jazz ERM (also known as Doors NG), ETM, and EWM samples now target .NET 10 and have been tested against Jazz.net. Run them with
OSLC4Net_SDK\Examples\scripts\test-jazz_net.ps1. - Added an opt-in SharpFuzz harness for the OSLC query parsers under
OSLC4Net_SDK/Tests/OSLC4Net.Fuzzing, with a 90-second CI smoke run and weekly or manually triggered extended campaigns.
OSLC4Net.Corenow requires .NET 10 to use the[Experimental]annotation.OSLC4Net.Clientnow requires .NET 10.- ❗️
SignedByteNodenow mapsxsd:byteto C#sbyte(signed byte) instead ofbyte. - 👉 Core
Propertyno longer implementsIComparable<T>because it is mutable. UsePropertyNameComparerto sort properties by name.- Code that creates
Propertycollections must prevent duplicates, including collections inAutomationPlan.
- Code that creates
- ❗️ Generated OSLC domain models now declare each RDF property once, based on
OslcPropertyDefinition, instead of redeclaring inherited properties on derived classes. Update binary consumers and reflection code that depend on a derived declaration; source code can continue to access the property through the derived type.ChangeNotice.AffectedByDefectnow comes fromChangeRequest.ChangeSetSelections.Selectsnow comes fromSelections.KerML.AssociationStructurenow inherits the relevant properties fromAssociation.
- ❗️ Generated CLR property names are now namespace-qualified when distinct RDF predicates have the same local name:
- KerML:
Element.Sourceis nowElement.SourceDcterms.Association.Source2,Connector.Source2, andRelationship.Source2are nowSourceKerml.
- SysMLV2:
Element.Sourceis nowElement.SourceDcterms.Association.Source2,Connector.Source2,Relationship.Source2,FlowDefinition.Source,FlowUsage.Source, andTransitionUsage.Source2are nowSourceSysml.
- SPDX:
Core.Artifact.IntendedUseis nowIntendedUseCore.Dataset.DatasetPackage.IntendedUseis nowIntendedUseDataset.
- KerML:
- The RDF type getters and setters,
GetRdfTypes()andGetTypes(), are deprecated; use the.Typesproperty instead.
No features are removed in this release.
Meziantou.Analyzernow usesPrivateAssets="all", so it is not exposed as a transitive dependency of built NuGet packages.- Query results now recognize membership predicates declared through
ldp:hasMemberRelationor supplied explicitly toOslcQuery, and they supportldp:containsquery containers. - Query result total counts are now parsed from RDF literal nodes.
- OSLC shapes now reflect properties backed by URI collections correctly (thanks to @ZUOXIANGE).
- When RDF graph parsing produces malformed URI nodes in a query response,
OslcQueryResult.GetMembersUrls(),GetMembers<T>(),GetNextPageUrl(), andGetTotalCount()now return empty results ornullinstead of throwingArgumentNullException. Property.csnow usesInvalidOperationExceptioninstead ofSystemException, resolving compiler warning CA2201.OslcRdfOutputFormatternow serializes server-side OSLC query responses without paging by keeping a missingResponseInfonext page asnullinstead of passing an empty string tonew Uri("").DotNetRdfHelper.CreateDotNetRdfGraphnow serializes an emptyResponseInfocontainer for queries that match no members, even when theoslcnamespace prefix is not already registered.OslcRdfOutputFormatternow builds theResponseInfocontainer subject URI withUriHelper.BuildAbsolute, so requests using a non-default port no longer produce an invalidhost:port:portauthority or throwUriFormatException.EnumerableWrappernow disposes wrapped enumerators throughIDisposableinstead of reflecting a publicDisposemethod. Serializing aResponseInfocontainer whose members are wrapped no longer throwsNullReferenceExceptionfor enumerators that implementIDisposableexplicitly.- OSLC query parsing now reports malformed property trees, unknown or duplicate prefixes, duplicate selected properties, and malformed search terms as parse failures instead of leaking implementation exceptions.
- The AFL++ helper now opts out of external core-pattern crash notification checks in CI and local test runs.
0.6.3 - 2025-11-15
This release does not contain security updates.
This release does not contain new features.
- StringValue interface is now publicly accessible and inherits from the Value interface (#422)
- 👉 Support for .NET 8 and 9 is deprecated. Going forward, only .NET 10 will be supported.
This release does not remove any features.
This release does not contain bug fixes.
0.6.2 - 2025-08-13
This release does not contain security updates.
This release does not contain new features.
- RDF/XML output is now produced using
PrettyRdfXmlWriterinstead ofRdfXmlWriter. Pretty-printing is still configurable withOslcOutputFormatConfig.
This release does not introduce deprecations.
This release does not remove any features.
This release does not contain bug fixes.
0.6.1 - 2025-08-13
This release does not contain security updates.
- The
QNameclass now has propertiesNamespaceUri,LocalPart, andPrefix. - ⚡️
OslcOutputFormatConfigconfigure RDF output formatting (pretty-printing, DTD, JSON-LD mode)
This release does not contain other significant changes.
- 👉
QNamegettersGetNamespaceURI,GetLocalPart, andGetPrefixare deprecated in favor of C# properties and are scheduled for removal in the next release.
This release does not remove any features.
This release does not contain bug fixes.
0.6.0 - 2025-07-06
This release does not contain security updates.
- ⚡️
TextOutputFormatter/TextInputFormatterimplementations for OSLC RDF, enabling the use of OSLC4Net in ASP.NET Core API servers- 👉 see sample server under
OSLC4Net_SDK/Examples/OSLC4NetExamples.Server.NetCoreApi
- 👉 see sample server under
- ⚡️ JSON-LD 1.1 support
- Initial support for RDFS inference during deserialization was added.
- 👉 Docs are now published to https://oslc4net.github.io/
- ❗️ Major changes to exceptions from Core and Client packages.
- Getters were replaced with read-only properties
- I18n resource strings were removed along with the corresponding constructors.
- Error codes
OSLC001..OSLC014from Core were renamed toOSLC1001..OSLC1014, while codesOSLCC001..OSLCC004from Client were renamed intoOSLC2001..OSLC2014. All OSLC4Net error codes now have 4 digits for consistency.
- ❗️ DotNetRdfHelper is no longer static
- 👉
OSLC4Net.Client.Oslc.Resources.ChangeRequest.GetRdfTypesand all similar methods. UseOSLC4Net.Core.Model.IExtendedResource.GetTypesinstead or, better yet,OSLC4Net.Core.Model.AbstractResourceRecord.Types.
- ❗️ Legacy OSLC JSON support was removed to reduce maintenance overhead now that the JSON-LD support is added.
- I18n resource strings were removed along with the corresponding
constructors on exceptions. Also,
MessageExtractorhelpers were removed. - log4net dependency - all logging is now done via standard
ILoggerabstraction. - ServiceProviderRegistryURIs - oslc4net will no longer try to guess/compute the SP catalog URI.
OSLC4Net.Core.Model.IExtendedResource.GetTypesis now annotated properly and should be populated correctly on deserialization.
0.5.0 - 2025-04-13
This release does not contain security updates.
- ⚡️ CI integration tests against OSLC RefImpl CM/RM based on NET Aspire
- ⚡️ Ability to define OSLC resource POCOs using C# properties instead of Java-style getters/setters.
- ⚡️ Support for the OSLC Requirements Management 2.1 domain with property-based code.
- Added full vocabulary definitions for FOAF, DC Terms, DC Elements, LDP, PROV-O, QUDT, SKOS.
- Redirect loop protection for
OslcClient(max 20 redirects as in Firefox/Blink/WebKit) - Follow redirects on more responses statuses (was: 301, became: 301, 302, 307, 308, and in case of GET requests, 303 too)
- ❗️
OslcResponsecan now expose multiple response resources, theGraphand, in case of error, theoslc:Errorresource.
- dotNetRDF dependency was updated to v3.3.1
- ❗️
OslcClientwas updated to support async operations consistently
- Most non-async methods in client classes.
- Further OSLC JSON deprecations. Clients should rely on RDF instead (RDF/XML, Turtle)
- Old OSLC Requirements Management classes that were hand-rolled and used Java code style.
- ❗️ Multiple non-async methods in
OslcClient - ❗️ A property exposing
OslcRestClientinServiceProviderRegistryClient
- Minor bug fixes to pass acceptance tests against OSLC RefImpl Change Management server.
0.4.6 - 2024-11-15
This release does not contain security updates.
This release does not contain new features.
- Dependency updates in connection with .NET 9 release.
This release does not introduce deprecations.
This release does not remove any features.
Requirement.SetDecomposes()clearedaffectedByby mistake.
0.4.5 - 2024-10-19
- 🔒️ Transitive dependency System.Net.Http was set to version 4.3.4 to avoid failing the build when NU1903 is treated as error.
- 🔒️ Transitive dependency System.Text.RegularExpressions was set to version 4.3.1 to avoid failing the build when NU1903 is treated as error.
This release does not contain new features.
- Significant build changes to manage package versions centrally.
- NuGet/assembly versions are now set based on the git tag name.
- 👉 "snapshot" builds how have the version similar to 999.9.9-ts.202410192025, where 202410192025 is a timestamp; please note that such snapshot builds are only available via Github Packages.
This release does not introduce deprecations.
- Dependencies on "bridge" packages added during the migration from .NET
Framework to .NET 6:
- System.Configuration.ConfigurationManager
- System.Data.DataSetExtensions
- Microsoft.CSharp
- Example and test project had
<IsPackable>false</IsPackable>property set to prevent pushing their packages to NuGet.
0.4.4 - 2024-10-19
YANKED - deploy to NuGet.org did not succeed.
0.4.3 - 2024-10-19
This release does not contain security updates.
- ️⚡️ An example project using
OslcClientand basic auth to retrieve a WorkItem (OSLC ChangeRequest) from Jazz. OslcClient::ForBasicAuth()factory method.- ️️️⚡️
OslcClient.GetResourceAsync()strongly typed async method that returnsOslcResponse<T>with either a typed resource or an error. - Support for complex MIME type strings for content negotiation. Current
Acceptstring is set totext/turtle;q=1.0, application/rdf+xml;q=0.9, application/n-triples;q=0.8, text/n3;q=0.7by default. - OSLC Query results now expose a
.TotalCountproperty.
- ❗️
OSLC4Net.Clientnow requiresnetstandard2.1(was:netstandard2.0) - Upgraded dotNetRDF to v3.3.0
- Some constructors on
OslcClientwere deprecated (around skipping TLS checks). - 👉 log4net logging will be replaced with the standard Microsoft ILogger in a future release.
- Direct use of
IEnumeratorproperties onOslcQueryResponseto iterate over response pages. - Multiple symbols on OSLC Query related code with Java-like signatures (various
Get*methods) and string types. Prefer C# props of typeUri.
This release does not remove any features.
OslcClientno longer overwrites most of the headers (#204). It was a similar issue to #19 (but happening withOslcRestClient).- Ensure OSLC Query responses are processed correctly when they contain multiple
oslc:ResponseInfoobjects (!203).
0.4.2 - 2024-10-09
- 🔒️❗️
OSLC4Net.Clientnow defaults to strong TLS certificate checking. Skipping TLS checks now requires explicit configuration.
- ⚡️ Support for .NET 6+ was added by migrating most of the projects in the
solution to target
netstandard2.0.
- ⚡️
OSLC4Net.Corenow targetsnetstandard2.0, which allows it to be used under .NET Framework 4.7.2 or higher as well as .NET 6+. - ⚡️ dotNetRDF was upgraded from v1 to v3 to enable targeting
netstandard2.0.- One of the key breaking changes is that
ITripleandINodeno longer have the.Graphproperty. - ❗️ This caused breaking changes to some of the method signatures in
OSLC4Net.DotNetRdfProviderto allow theIGraphinstance to be passed.
- One of the key breaking changes is that
OSLC4Net.Clientnow targetsnetstandard2.0.- ❗️ The main breaking change is the replacement of the legacy
WebRequestHandlerwithHttpClientHandler. This caused some method/constructor signatures to change. - ❗️
RemoteCertificateValidationCallbackwas replaced with a lambda function.
- ❗️ The main breaking change is the replacement of the legacy
OSLC4Net.Querynow targetsnetstandard2.0. The Antlr3 runtime package targeting PCL was replaced with a package targeting NETStandard1.0 (Antlr 4 targets NETStandard2.0).- ❗️
JsonMediaTypeFormatterwas renamed intoOslcJsonMediaTypeFormatterto better reflect its purpose (support a bespoke OSLC JSON format) and avoid conflict withSystem.Net.Http.Formatting.MediaTypeFormatter. - Test projects were migrated from MSTestV2 to xUnit (except for integration tests for OSLC CM)
- .NET 6 support is deprecated as the EOL is approaching soon. Given that all
non-Framework libraries target
netstandard2.0, this should have no impact on the users.
- .NET 7 support was removed since the SDK has reached EOL.
Newtonsoft.Jsonpackage was only used in the StockQuoteSample ASP.NET MVC project. Its references were removed from all other projects.
This release does not contain bug fixes.
YANKED due to NuGet deployment issues.
YANKED due to NuGet deployment issues.
0.3.0-alpha - 2023-04-29
- 🔒️ Updated
log4netin response to CVE-2018-1285 (CVSS 9.8/10). - 🔒️ Updated
Newtonsoft.Jsonin response to CWE-755.
- CI configuration based on Github Actions (MSBuild, NuGet, VStest).
- 👉 Since 2017-04-15, the project is hosted on Github under the OSLC community org.
- The project now targets .NET 4.8 instead of .NET 4.5.
- ⚡️ Nuget project configuration was migrated from
packages.configto PackageReference. - ⚡️ The StockQuoteSample was updated to ASP.NET MVC 5.
- Migrated from MSBuild-based NuGet package restore to NuGet 2.7+ Automatic Package Restore.
- Migrated from MSTestV1 (
Microsoft.VisualStudio.QualityTools.UnitTestFramework) to MSTestV2 (MSTest.Test*). - ❗️👉
AssemblyVersionwas set to0.3.0.0(from 1.0.0.0 in the v0.2.3). This could be a breaking change in some cases, but given that the project was used by a small number of people, the version being obviously wrong (given being present in the 0.2.3 release) and not having a Nuget release before, we decided to go ahead. Furthermore, switching from a direct assembly reference or a project reference to a Nuget package would require changes to the project references anyway.
- Service Provider Catalog autodetection on the local host, port 8080, should not be relied upon, as the corresponding logic is deprecated.
- ❗️ Support for .NET 4.5, 4.6, and 4.7 was dropped.
System.Net.Http.Formattingissues were resolved by removing references to related SDK-provider assemblies, assembly extensions, and replacing them with a uniform reference toMicrosoft.AspNet.WebApi.Client5.2.9.
0.2.3 - 2013-07-26
This release does not contain security updates.
- ⚡️ Turtle support (marshalling/unmarshalling)
- ⚡️ OSLC Query support
- ⚡️ OAuth 1.0a support
- Improved the client
This release does not introduce deprecations.
This release does not remove any features.
This release does not contain bug fixes.
TEMPLATE:
UNRELEASED - YYYY-MM-DD
This release does not contain security updates.
This release does not contain new features.
This release does not contain other significant changes.
This release does not introduce deprecations.
This release does not remove any features.
This release does not contain bug fixes.