RFC2141提到:
词汇等价的例子
以下 URN 比较突出显示了词汇等价
定义:Run Code Online (Sandbox Code Playgroud)1- URN:foo:a123,456 2- urn:foo:a123,456 3- urn:FOO:a123,456 4- urn:foo:A123,456 5- urn:foo:a123%2C456 6- URN:FOO:a123%2c456URN 1、2 和 3 在词法上都是等效的。
随后的RFC8141保留了该等价性:
2.1. 命名空间标识符 (NID)
NID 不区分大小写(例如,“ISBN”和“isbn”是等效的)。
我可以在 .NET 框架中轻松找到的最接近的 URN 表示形式是URI 类。然而,它似乎并没有完全尊重 RFC 的等效定义:
[TestMethod]
public void TestEquivalentUrnsAreBroken()
{
Assert.AreEqual(
new Uri("URN:foo:a123,456"),
new Uri("urn:foo:a123,456"));
Assert.AreEqual(
new Uri("urn:foo:a123,456"),
new Uri("urn:FOO:a123,456"));
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码示例中,第一个断言按预期工作,而第二个断言失败。
是否有任何合理的方法可以让 URI 类遵守等效定义?我应该使用其他课程吗?
请注意,我已经找到了URN 类,但文档提到不应直接使用它。