Skip to content

Instantly share code, notes, and snippets.

@RubenVerborgh
Last active June 29, 2016 12:51
Show Gist options
  • Save RubenVerborgh/39f0e8d63e33e435371a to your computer and use it in GitHub Desktop.
Save RubenVerborgh/39f0e8d63e33e435371a to your computer and use it in GitHub Desktop.
Turtle IRI resolution compliance test
[
{
"@context": {"@base": "http://a/bb/ccc/d;p?q", "urn:ex:p": {"@type": "@id"}},
"@graph": [
{"@id": "urn:ex:s001", "urn:ex:p": "g:h"},
{"@id": "urn:ex:s002", "urn:ex:p": "g"},
{"@id": "urn:ex:s003", "urn:ex:p": "./g"},
{"@id": "urn:ex:s004", "urn:ex:p": "g/"},
{"@id": "urn:ex:s005", "urn:ex:p": "/g"},
{"@id": "urn:ex:s006", "urn:ex:p": "//g"},
{"@id": "urn:ex:s007", "urn:ex:p": "?y"},
{"@id": "urn:ex:s008", "urn:ex:p": "g?y"},
{"@id": "urn:ex:s009", "urn:ex:p": "#s"},
{"@id": "urn:ex:s010", "urn:ex:p": "g#s"},
{"@id": "urn:ex:s011", "urn:ex:p": "g?y#s"},
{"@id": "urn:ex:s012", "urn:ex:p": ";x"},
{"@id": "urn:ex:s013", "urn:ex:p": "g;x"},
{"@id": "urn:ex:s014", "urn:ex:p": "g;x?y#s"},
{"@id": "urn:ex:s015", "urn:ex:p": ""},
{"@id": "urn:ex:s016", "urn:ex:p": "."},
{"@id": "urn:ex:s017", "urn:ex:p": "./"},
{"@id": "urn:ex:s018", "urn:ex:p": ".."},
{"@id": "urn:ex:s019", "urn:ex:p": "../"},
{"@id": "urn:ex:s020", "urn:ex:p": "../g"},
{"@id": "urn:ex:s021", "urn:ex:p": "../.."},
{"@id": "urn:ex:s022", "urn:ex:p": "../../"},
{"@id": "urn:ex:s023", "urn:ex:p": "../../g"}
]
},
{
"@context": {"@base": "http://a/bb/ccc/d;p?q", "urn:ex:p": {"@type": "@id"}},
"@graph": [
{"@id": "urn:ex:s024", "urn:ex:p": "../../../g"},
{"@id": "urn:ex:s025", "urn:ex:p": "../../../../g"},
{"@id": "urn:ex:s026", "urn:ex:p": "/./g"},
{"@id": "urn:ex:s027", "urn:ex:p": "/../g"},
{"@id": "urn:ex:s028", "urn:ex:p": "g."},
{"@id": "urn:ex:s029", "urn:ex:p": ".g"},
{"@id": "urn:ex:s030", "urn:ex:p": "g.."},
{"@id": "urn:ex:s031", "urn:ex:p": "..g"},
{"@id": "urn:ex:s032", "urn:ex:p": "./../g"},
{"@id": "urn:ex:s033", "urn:ex:p": "./g/."},
{"@id": "urn:ex:s034", "urn:ex:p": "g/./h"},
{"@id": "urn:ex:s035", "urn:ex:p": "g/../h"},
{"@id": "urn:ex:s036", "urn:ex:p": "g;x=1/./y"},
{"@id": "urn:ex:s037", "urn:ex:p": "g;x=1/../y"},
{"@id": "urn:ex:s038", "urn:ex:p": "g?y/./x"},
{"@id": "urn:ex:s039", "urn:ex:p": "g?y/../x"},
{"@id": "urn:ex:s040", "urn:ex:p": "g#s/./x"},
{"@id": "urn:ex:s041", "urn:ex:p": "g#s/../x"},
{"@id": "urn:ex:s042", "urn:ex:p": "http:g"}
]
},
{
"@context": {"@base": "http://a/bb/ccc/d/", "urn:ex:p": {"@type": "@id"}},
"@graph": [
{"@id": "urn:ex:s043", "urn:ex:p": "g:h"},
{"@id": "urn:ex:s044", "urn:ex:p": "g"},
{"@id": "urn:ex:s045", "urn:ex:p": "./g"},
{"@id": "urn:ex:s046", "urn:ex:p": "g/"},
{"@id": "urn:ex:s047", "urn:ex:p": "/g"},
{"@id": "urn:ex:s048", "urn:ex:p": "//g"},
{"@id": "urn:ex:s049", "urn:ex:p": "?y"},
{"@id": "urn:ex:s050", "urn:ex:p": "g?y"},
{"@id": "urn:ex:s051", "urn:ex:p": "#s"},
{"@id": "urn:ex:s052", "urn:ex:p": "g#s"},
{"@id": "urn:ex:s053", "urn:ex:p": "g?y#s"},
{"@id": "urn:ex:s054", "urn:ex:p": ";x"},
{"@id": "urn:ex:s055", "urn:ex:p": "g;x"},
{"@id": "urn:ex:s056", "urn:ex:p": "g;x?y#s"},
{"@id": "urn:ex:s057", "urn:ex:p": ""},
{"@id": "urn:ex:s058", "urn:ex:p": "."},
{"@id": "urn:ex:s059", "urn:ex:p": "./"},
{"@id": "urn:ex:s060", "urn:ex:p": ".."},
{"@id": "urn:ex:s061", "urn:ex:p": "../"},
{"@id": "urn:ex:s062", "urn:ex:p": "../g"},
{"@id": "urn:ex:s063", "urn:ex:p": "../.."},
{"@id": "urn:ex:s064", "urn:ex:p": "../../"},
{"@id": "urn:ex:s065", "urn:ex:p": "../../g"}
]
},
{
"@context": {"@base": "http://a/bb/ccc/d/", "urn:ex:p": {"@type": "@id"}},
"@graph": [
{"@id": "urn:ex:s066", "urn:ex:p": "../../../g"},
{"@id": "urn:ex:s067", "urn:ex:p": "../../../../g"},
{"@id": "urn:ex:s068", "urn:ex:p": "/./g"},
{"@id": "urn:ex:s069", "urn:ex:p": "/../g"},
{"@id": "urn:ex:s070", "urn:ex:p": "g."},
{"@id": "urn:ex:s071", "urn:ex:p": ".g"},
{"@id": "urn:ex:s072", "urn:ex:p": "g.."},
{"@id": "urn:ex:s073", "urn:ex:p": "..g"},
{"@id": "urn:ex:s074", "urn:ex:p": "./../g"},
{"@id": "urn:ex:s075", "urn:ex:p": "./g/."},
{"@id": "urn:ex:s076", "urn:ex:p": "g/./h"},
{"@id": "urn:ex:s077", "urn:ex:p": "g/../h"},
{"@id": "urn:ex:s078", "urn:ex:p": "g;x=1/./y"},
{"@id": "urn:ex:s079", "urn:ex:p": "g;x=1/../y"},
{"@id": "urn:ex:s080", "urn:ex:p": "g?y/./x"},
{"@id": "urn:ex:s081", "urn:ex:p": "g?y/../x"},
{"@id": "urn:ex:s082", "urn:ex:p": "g#s/./x"},
{"@id": "urn:ex:s083", "urn:ex:p": "g#s/../x"},
{"@id": "urn:ex:s084", "urn:ex:p": "http:g"}
]
},
{
"@context": {"@base": "http://a/bb/ccc/./d;p?q", "urn:ex:p": {"@type": "@id"}},
"@graph": [
{"@id": "urn:ex:s085", "urn:ex:p": "g:h"},
{"@id": "urn:ex:s086", "urn:ex:p": "g"},
{"@id": "urn:ex:s087", "urn:ex:p": "./g"},
{"@id": "urn:ex:s088", "urn:ex:p": "g/"},
{"@id": "urn:ex:s089", "urn:ex:p": "/g"},
{"@id": "urn:ex:s090", "urn:ex:p": "//g"},
{"@id": "urn:ex:s091", "urn:ex:p": "?y"},
{"@id": "urn:ex:s092", "urn:ex:p": "g?y"},
{"@id": "urn:ex:s093", "urn:ex:p": "#s"},
{"@id": "urn:ex:s094", "urn:ex:p": "g#s"},
{"@id": "urn:ex:s095", "urn:ex:p": "g?y#s"},
{"@id": "urn:ex:s096", "urn:ex:p": ";x"},
{"@id": "urn:ex:s097", "urn:ex:p": "g;x"},
{"@id": "urn:ex:s098", "urn:ex:p": "g;x?y#s"},
{"@id": "urn:ex:s099", "urn:ex:p": ""},
{"@id": "urn:ex:s100", "urn:ex:p": "."},
{"@id": "urn:ex:s101", "urn:ex:p": "./"},
{"@id": "urn:ex:s102", "urn:ex:p": ".."},
{"@id": "urn:ex:s103", "urn:ex:p": "../"},
{"@id": "urn:ex:s104", "urn:ex:p": "../g"},
{"@id": "urn:ex:s105", "urn:ex:p": "../.."},
{"@id": "urn:ex:s106", "urn:ex:p": "../../"},
{"@id": "urn:ex:s107", "urn:ex:p": "../../g"}
]
},
{
"@context": {"@base": "http://a/bb/ccc/./d;p?q", "urn:ex:p": {"@type": "@id"}},
"@graph": [
{"@id": "urn:ex:s108", "urn:ex:p": "../../../g"},
{"@id": "urn:ex:s109", "urn:ex:p": "../../../../g"},
{"@id": "urn:ex:s110", "urn:ex:p": "/./g"},
{"@id": "urn:ex:s111", "urn:ex:p": "/../g"},
{"@id": "urn:ex:s112", "urn:ex:p": "g."},
{"@id": "urn:ex:s113", "urn:ex:p": ".g"},
{"@id": "urn:ex:s114", "urn:ex:p": "g.."},
{"@id": "urn:ex:s115", "urn:ex:p": "..g"},
{"@id": "urn:ex:s116", "urn:ex:p": "./../g"},
{"@id": "urn:ex:s117", "urn:ex:p": "./g/."},
{"@id": "urn:ex:s118", "urn:ex:p": "g/./h"},
{"@id": "urn:ex:s119", "urn:ex:p": "g/../h"},
{"@id": "urn:ex:s120", "urn:ex:p": "g;x=1/./y"},
{"@id": "urn:ex:s121", "urn:ex:p": "g;x=1/../y"},
{"@id": "urn:ex:s122", "urn:ex:p": "g?y/./x"},
{"@id": "urn:ex:s123", "urn:ex:p": "g?y/../x"},
{"@id": "urn:ex:s124", "urn:ex:p": "g#s/./x"},
{"@id": "urn:ex:s125", "urn:ex:p": "g#s/../x"},
{"@id": "urn:ex:s126", "urn:ex:p": "http:g"}
]
},
{
"@context": {"@base": "http://a/bb/ccc/../d;p?q", "urn:ex:p": {"@type": "@id"}},
"@graph": [
{"@id": "urn:ex:s127", "urn:ex:p": "g:h"},
{"@id": "urn:ex:s128", "urn:ex:p": "g"},
{"@id": "urn:ex:s129", "urn:ex:p": "./g"},
{"@id": "urn:ex:s130", "urn:ex:p": "g/"},
{"@id": "urn:ex:s131", "urn:ex:p": "/g"},
{"@id": "urn:ex:s132", "urn:ex:p": "//g"},
{"@id": "urn:ex:s133", "urn:ex:p": "?y"},
{"@id": "urn:ex:s134", "urn:ex:p": "g?y"},
{"@id": "urn:ex:s135", "urn:ex:p": "#s"},
{"@id": "urn:ex:s136", "urn:ex:p": "g#s"},
{"@id": "urn:ex:s137", "urn:ex:p": "g?y#s"},
{"@id": "urn:ex:s138", "urn:ex:p": ";x"},
{"@id": "urn:ex:s139", "urn:ex:p": "g;x"},
{"@id": "urn:ex:s140", "urn:ex:p": "g;x?y#s"},
{"@id": "urn:ex:s141", "urn:ex:p": ""},
{"@id": "urn:ex:s142", "urn:ex:p": "."},
{"@id": "urn:ex:s143", "urn:ex:p": "./"},
{"@id": "urn:ex:s144", "urn:ex:p": ".."},
{"@id": "urn:ex:s145", "urn:ex:p": "../"},
{"@id": "urn:ex:s146", "urn:ex:p": "../g"},
{"@id": "urn:ex:s147", "urn:ex:p": "../.."},
{"@id": "urn:ex:s148", "urn:ex:p": "../../"},
{"@id": "urn:ex:s149", "urn:ex:p": "../../g"}
]
},
{
"@context": {"@base": "http://a/bb/ccc/../d;p?q", "urn:ex:p": {"@type": "@id"}},
"@graph": [
{"@id": "urn:ex:s150", "urn:ex:p": "../../../g"},
{"@id": "urn:ex:s151", "urn:ex:p": "../../../../g"},
{"@id": "urn:ex:s152", "urn:ex:p": "/./g"},
{"@id": "urn:ex:s153", "urn:ex:p": "/../g"},
{"@id": "urn:ex:s154", "urn:ex:p": "g."},
{"@id": "urn:ex:s155", "urn:ex:p": ".g"},
{"@id": "urn:ex:s156", "urn:ex:p": "g.."},
{"@id": "urn:ex:s157", "urn:ex:p": "..g"},
{"@id": "urn:ex:s158", "urn:ex:p": "./../g"},
{"@id": "urn:ex:s159", "urn:ex:p": "./g/."},
{"@id": "urn:ex:s160", "urn:ex:p": "g/./h"},
{"@id": "urn:ex:s161", "urn:ex:p": "g/../h"},
{"@id": "urn:ex:s162", "urn:ex:p": "g;x=1/./y"},
{"@id": "urn:ex:s163", "urn:ex:p": "g;x=1/../y"},
{"@id": "urn:ex:s164", "urn:ex:p": "g?y/./x"},
{"@id": "urn:ex:s165", "urn:ex:p": "g?y/../x"},
{"@id": "urn:ex:s166", "urn:ex:p": "g#s/./x"},
{"@id": "urn:ex:s167", "urn:ex:p": "g#s/../x"},
{"@id": "urn:ex:s168", "urn:ex:p": "http:g"}
]
},
{
"@context": {"@base": "http://a/bb/ccc/.", "urn:ex:p": {"@type": "@id"}},
"@graph": [
{"@id": "urn:ex:s169", "urn:ex:p": "g:h"},
{"@id": "urn:ex:s170", "urn:ex:p": "g"},
{"@id": "urn:ex:s171", "urn:ex:p": "./g"},
{"@id": "urn:ex:s172", "urn:ex:p": "g/"},
{"@id": "urn:ex:s173", "urn:ex:p": "/g"},
{"@id": "urn:ex:s174", "urn:ex:p": "//g"},
{"@id": "urn:ex:s175", "urn:ex:p": "?y"},
{"@id": "urn:ex:s176", "urn:ex:p": "g?y"},
{"@id": "urn:ex:s177", "urn:ex:p": "#s"},
{"@id": "urn:ex:s178", "urn:ex:p": "g#s"},
{"@id": "urn:ex:s179", "urn:ex:p": "g?y#s"},
{"@id": "urn:ex:s180", "urn:ex:p": ";x"},
{"@id": "urn:ex:s181", "urn:ex:p": "g;x"},
{"@id": "urn:ex:s182", "urn:ex:p": "g;x?y#s"},
{"@id": "urn:ex:s183", "urn:ex:p": ""},
{"@id": "urn:ex:s184", "urn:ex:p": "."},
{"@id": "urn:ex:s185", "urn:ex:p": "./"},
{"@id": "urn:ex:s186", "urn:ex:p": ".."},
{"@id": "urn:ex:s187", "urn:ex:p": "../"},
{"@id": "urn:ex:s188", "urn:ex:p": "../g"},
{"@id": "urn:ex:s189", "urn:ex:p": "../.."},
{"@id": "urn:ex:s190", "urn:ex:p": "../../"},
{"@id": "urn:ex:s191", "urn:ex:p": "../../g"}
]
},
{
"@context": {"@base": "http://a/bb/ccc/.", "urn:ex:p": {"@type": "@id"}},
"@graph": [
{"@id": "urn:ex:s192", "urn:ex:p": "../../../g"},
{"@id": "urn:ex:s193", "urn:ex:p": "../../../../g"},
{"@id": "urn:ex:s194", "urn:ex:p": "/./g"},
{"@id": "urn:ex:s195", "urn:ex:p": "/../g"},
{"@id": "urn:ex:s196", "urn:ex:p": "g."},
{"@id": "urn:ex:s197", "urn:ex:p": ".g"},
{"@id": "urn:ex:s198", "urn:ex:p": "g.."},
{"@id": "urn:ex:s199", "urn:ex:p": "..g"},
{"@id": "urn:ex:s200", "urn:ex:p": "./../g"},
{"@id": "urn:ex:s201", "urn:ex:p": "./g/."},
{"@id": "urn:ex:s202", "urn:ex:p": "g/./h"},
{"@id": "urn:ex:s203", "urn:ex:p": "g/../h"},
{"@id": "urn:ex:s204", "urn:ex:p": "g;x=1/./y"},
{"@id": "urn:ex:s205", "urn:ex:p": "g;x=1/../y"},
{"@id": "urn:ex:s206", "urn:ex:p": "g?y/./x"},
{"@id": "urn:ex:s207", "urn:ex:p": "g?y/../x"},
{"@id": "urn:ex:s208", "urn:ex:p": "g#s/./x"},
{"@id": "urn:ex:s209", "urn:ex:p": "g#s/../x"},
{"@id": "urn:ex:s210", "urn:ex:p": "http:g"}
]
},
{
"@context": {"@base": "http://a/bb/ccc/..", "urn:ex:p": {"@type": "@id"}},
"@graph": [
{"@id": "urn:ex:s211", "urn:ex:p": "g:h"},
{"@id": "urn:ex:s212", "urn:ex:p": "g"},
{"@id": "urn:ex:s213", "urn:ex:p": "./g"},
{"@id": "urn:ex:s214", "urn:ex:p": "g/"},
{"@id": "urn:ex:s215", "urn:ex:p": "/g"},
{"@id": "urn:ex:s216", "urn:ex:p": "//g"},
{"@id": "urn:ex:s217", "urn:ex:p": "?y"},
{"@id": "urn:ex:s218", "urn:ex:p": "g?y"},
{"@id": "urn:ex:s219", "urn:ex:p": "#s"},
{"@id": "urn:ex:s220", "urn:ex:p": "g#s"},
{"@id": "urn:ex:s221", "urn:ex:p": "g?y#s"},
{"@id": "urn:ex:s222", "urn:ex:p": ";x"},
{"@id": "urn:ex:s223", "urn:ex:p": "g;x"},
{"@id": "urn:ex:s224", "urn:ex:p": "g;x?y#s"},
{"@id": "urn:ex:s225", "urn:ex:p": ""},
{"@id": "urn:ex:s226", "urn:ex:p": "."},
{"@id": "urn:ex:s227", "urn:ex:p": "./"},
{"@id": "urn:ex:s228", "urn:ex:p": ".."},
{"@id": "urn:ex:s229", "urn:ex:p": "../"},
{"@id": "urn:ex:s230", "urn:ex:p": "../g"},
{"@id": "urn:ex:s231", "urn:ex:p": "../.."},
{"@id": "urn:ex:s232", "urn:ex:p": "../../"},
{"@id": "urn:ex:s233", "urn:ex:p": "../../g"}
]
},
{
"@context": {"@base": "http://a/bb/ccc/..", "urn:ex:p": {"@type": "@id"}},
"@graph": [
{"@id": "urn:ex:s234", "urn:ex:p": "../../../g"},
{"@id": "urn:ex:s235", "urn:ex:p": "../../../../g"},
{"@id": "urn:ex:s236", "urn:ex:p": "/./g"},
{"@id": "urn:ex:s237", "urn:ex:p": "/../g"},
{"@id": "urn:ex:s238", "urn:ex:p": "g."},
{"@id": "urn:ex:s239", "urn:ex:p": ".g"},
{"@id": "urn:ex:s240", "urn:ex:p": "g.."},
{"@id": "urn:ex:s241", "urn:ex:p": "..g"},
{"@id": "urn:ex:s242", "urn:ex:p": "./../g"},
{"@id": "urn:ex:s243", "urn:ex:p": "./g/."},
{"@id": "urn:ex:s244", "urn:ex:p": "g/./h"},
{"@id": "urn:ex:s245", "urn:ex:p": "g/../h"},
{"@id": "urn:ex:s246", "urn:ex:p": "g;x=1/./y"},
{"@id": "urn:ex:s247", "urn:ex:p": "g;x=1/../y"},
{"@id": "urn:ex:s248", "urn:ex:p": "g?y/./x"},
{"@id": "urn:ex:s249", "urn:ex:p": "g?y/../x"},
{"@id": "urn:ex:s250", "urn:ex:p": "g#s/./x"},
{"@id": "urn:ex:s251", "urn:ex:p": "g#s/../x"},
{"@id": "urn:ex:s252", "urn:ex:p": "http:g"}
]
},
{
"@context": {"@base": "file:///a/bb/ccc/d;p?q", "urn:ex:p": {"@type": "@id"}},
"@graph": [
{"@id": "urn:ex:s253", "urn:ex:p": "g:h"},
{"@id": "urn:ex:s254", "urn:ex:p": "g"},
{"@id": "urn:ex:s255", "urn:ex:p": "./g"},
{"@id": "urn:ex:s256", "urn:ex:p": "g/"},
{"@id": "urn:ex:s257", "urn:ex:p": "/g"},
{"@id": "urn:ex:s258", "urn:ex:p": "//g"},
{"@id": "urn:ex:s259", "urn:ex:p": "?y"},
{"@id": "urn:ex:s260", "urn:ex:p": "g?y"},
{"@id": "urn:ex:s261", "urn:ex:p": "#s"},
{"@id": "urn:ex:s262", "urn:ex:p": "g#s"},
{"@id": "urn:ex:s263", "urn:ex:p": "g?y#s"},
{"@id": "urn:ex:s264", "urn:ex:p": ";x"},
{"@id": "urn:ex:s265", "urn:ex:p": "g;x"},
{"@id": "urn:ex:s266", "urn:ex:p": "g;x?y#s"},
{"@id": "urn:ex:s267", "urn:ex:p": ""},
{"@id": "urn:ex:s268", "urn:ex:p": "."},
{"@id": "urn:ex:s269", "urn:ex:p": "./"},
{"@id": "urn:ex:s270", "urn:ex:p": ".."},
{"@id": "urn:ex:s271", "urn:ex:p": "../"},
{"@id": "urn:ex:s272", "urn:ex:p": "../g"},
{"@id": "urn:ex:s273", "urn:ex:p": "../.."},
{"@id": "urn:ex:s274", "urn:ex:p": "../../"},
{"@id": "urn:ex:s275", "urn:ex:p": "../../g"}
]
},
{
"@context": {"@base": "file:///a/bb/ccc/d;p?q", "urn:ex:p": {"@type": "@id"}},
"@graph": [
{"@id": "urn:ex:s276", "urn:ex:p": "../../../g"},
{"@id": "urn:ex:s277", "urn:ex:p": "../../../../g"},
{"@id": "urn:ex:s278", "urn:ex:p": "/./g"},
{"@id": "urn:ex:s279", "urn:ex:p": "/../g"},
{"@id": "urn:ex:s280", "urn:ex:p": "g."},
{"@id": "urn:ex:s281", "urn:ex:p": ".g"},
{"@id": "urn:ex:s282", "urn:ex:p": "g.."},
{"@id": "urn:ex:s283", "urn:ex:p": "..g"},
{"@id": "urn:ex:s284", "urn:ex:p": "./../g"},
{"@id": "urn:ex:s285", "urn:ex:p": "./g/."},
{"@id": "urn:ex:s286", "urn:ex:p": "g/./h"},
{"@id": "urn:ex:s287", "urn:ex:p": "g/../h"},
{"@id": "urn:ex:s288", "urn:ex:p": "g;x=1/./y"},
{"@id": "urn:ex:s289", "urn:ex:p": "g;x=1/../y"},
{"@id": "urn:ex:s290", "urn:ex:p": "g?y/./x"},
{"@id": "urn:ex:s291", "urn:ex:p": "g?y/../x"},
{"@id": "urn:ex:s292", "urn:ex:p": "g#s/./x"},
{"@id": "urn:ex:s293", "urn:ex:p": "g#s/../x"},
{"@id": "urn:ex:s294", "urn:ex:p": "http:g"}
]
},
{
"@context": {"@base": "http://abc/def/ghi", "urn:ex:p": {"@type": "@id"}},
"@graph": [
{"@id": "urn:ex:s295", "urn:ex:p": "."},
{"@id": "urn:ex:s296", "urn:ex:p": ".?a=b"},
{"@id": "urn:ex:s297", "urn:ex:p": ".#a=b"},
{"@id": "urn:ex:s298", "urn:ex:p": ".."},
{"@id": "urn:ex:s299", "urn:ex:p": "..?a=b"},
{"@id": "urn:ex:s300", "urn:ex:p": "..#a=b"}
]
},
{
"@context": {"@base": "http://ab//de//ghi", "urn:ex:p": {"@type": "@id"}},
"@graph": [
{"@id": "urn:ex:s301", "urn:ex:p": "xyz"},
{"@id": "urn:ex:s302", "urn:ex:p": "./xyz"},
{"@id": "urn:ex:s303", "urn:ex:p": "../xyz"}
]
},
{
"@context": {"@base": "http://abc/d:f/ghi", "urn:ex:p": {"@type": "@id"}},
"@graph": [
{"@id": "urn:ex:s304", "urn:ex:p": "xyz"},
{"@id": "urn:ex:s305", "urn:ex:p": "./xyz"},
{"@id": "urn:ex:s306", "urn:ex:p": "../xyz"}
]
}
]
# RFC3986 normal examples
<urn:ex:s001> <urn:ex:p> <g:h>.
<urn:ex:s002> <urn:ex:p> <http://a/bb/ccc/g>.
<urn:ex:s003> <urn:ex:p> <http://a/bb/ccc/g>.
<urn:ex:s004> <urn:ex:p> <http://a/bb/ccc/g/>.
<urn:ex:s005> <urn:ex:p> <http://a/g>.
<urn:ex:s006> <urn:ex:p> <http://g>.
<urn:ex:s007> <urn:ex:p> <http://a/bb/ccc/d;p?y>.
<urn:ex:s008> <urn:ex:p> <http://a/bb/ccc/g?y>.
<urn:ex:s009> <urn:ex:p> <http://a/bb/ccc/d;p?q#s>.
<urn:ex:s010> <urn:ex:p> <http://a/bb/ccc/g#s>.
<urn:ex:s011> <urn:ex:p> <http://a/bb/ccc/g?y#s>.
<urn:ex:s012> <urn:ex:p> <http://a/bb/ccc/;x>.
<urn:ex:s013> <urn:ex:p> <http://a/bb/ccc/g;x>.
<urn:ex:s014> <urn:ex:p> <http://a/bb/ccc/g;x?y#s>.
<urn:ex:s015> <urn:ex:p> <http://a/bb/ccc/d;p?q>.
<urn:ex:s016> <urn:ex:p> <http://a/bb/ccc/>.
<urn:ex:s017> <urn:ex:p> <http://a/bb/ccc/>.
<urn:ex:s018> <urn:ex:p> <http://a/bb/>.
<urn:ex:s019> <urn:ex:p> <http://a/bb/>.
<urn:ex:s020> <urn:ex:p> <http://a/bb/g>.
<urn:ex:s021> <urn:ex:p> <http://a/>.
<urn:ex:s022> <urn:ex:p> <http://a/>.
<urn:ex:s023> <urn:ex:p> <http://a/g>.
# RFC3986 abnormal examples
<urn:ex:s024> <urn:ex:p> <http://a/g>.
<urn:ex:s025> <urn:ex:p> <http://a/g>.
<urn:ex:s026> <urn:ex:p> <http://a/g>.
<urn:ex:s027> <urn:ex:p> <http://a/g>.
<urn:ex:s028> <urn:ex:p> <http://a/bb/ccc/g.>.
<urn:ex:s029> <urn:ex:p> <http://a/bb/ccc/.g>.
<urn:ex:s030> <urn:ex:p> <http://a/bb/ccc/g..>.
<urn:ex:s031> <urn:ex:p> <http://a/bb/ccc/..g>.
<urn:ex:s032> <urn:ex:p> <http://a/bb/g>.
<urn:ex:s033> <urn:ex:p> <http://a/bb/ccc/g/>.
<urn:ex:s034> <urn:ex:p> <http://a/bb/ccc/g/h>.
<urn:ex:s035> <urn:ex:p> <http://a/bb/ccc/h>.
<urn:ex:s036> <urn:ex:p> <http://a/bb/ccc/g;x=1/y>.
<urn:ex:s037> <urn:ex:p> <http://a/bb/ccc/y>.
<urn:ex:s038> <urn:ex:p> <http://a/bb/ccc/g?y/./x>.
<urn:ex:s039> <urn:ex:p> <http://a/bb/ccc/g?y/../x>.
<urn:ex:s040> <urn:ex:p> <http://a/bb/ccc/g#s/./x>.
<urn:ex:s041> <urn:ex:p> <http://a/bb/ccc/g#s/../x>.
<urn:ex:s042> <urn:ex:p> <http:g>.
# RFC3986 normal examples with trailing slash in base IRI
<urn:ex:s043> <urn:ex:p> <g:h>.
<urn:ex:s044> <urn:ex:p> <http://a/bb/ccc/d/g>.
<urn:ex:s045> <urn:ex:p> <http://a/bb/ccc/d/g>.
<urn:ex:s046> <urn:ex:p> <http://a/bb/ccc/d/g/>.
<urn:ex:s047> <urn:ex:p> <http://a/g>.
<urn:ex:s048> <urn:ex:p> <http://g>.
<urn:ex:s049> <urn:ex:p> <http://a/bb/ccc/d/?y>.
<urn:ex:s050> <urn:ex:p> <http://a/bb/ccc/d/g?y>.
<urn:ex:s051> <urn:ex:p> <http://a/bb/ccc/d/#s>.
<urn:ex:s052> <urn:ex:p> <http://a/bb/ccc/d/g#s>.
<urn:ex:s053> <urn:ex:p> <http://a/bb/ccc/d/g?y#s>.
<urn:ex:s054> <urn:ex:p> <http://a/bb/ccc/d/;x>.
<urn:ex:s055> <urn:ex:p> <http://a/bb/ccc/d/g;x>.
<urn:ex:s056> <urn:ex:p> <http://a/bb/ccc/d/g;x?y#s>.
<urn:ex:s057> <urn:ex:p> <http://a/bb/ccc/d/>.
<urn:ex:s058> <urn:ex:p> <http://a/bb/ccc/d/>.
<urn:ex:s059> <urn:ex:p> <http://a/bb/ccc/d/>.
<urn:ex:s060> <urn:ex:p> <http://a/bb/ccc/>.
<urn:ex:s061> <urn:ex:p> <http://a/bb/ccc/>.
<urn:ex:s062> <urn:ex:p> <http://a/bb/ccc/g>.
<urn:ex:s063> <urn:ex:p> <http://a/bb/>.
<urn:ex:s064> <urn:ex:p> <http://a/bb/>.
<urn:ex:s065> <urn:ex:p> <http://a/bb/g>.
# RFC3986 abnormal examples with trailing slash in base IRI
<urn:ex:s066> <urn:ex:p> <http://a/g>.
<urn:ex:s067> <urn:ex:p> <http://a/g>.
<urn:ex:s068> <urn:ex:p> <http://a/g>.
<urn:ex:s069> <urn:ex:p> <http://a/g>.
<urn:ex:s070> <urn:ex:p> <http://a/bb/ccc/d/g.>.
<urn:ex:s071> <urn:ex:p> <http://a/bb/ccc/d/.g>.
<urn:ex:s072> <urn:ex:p> <http://a/bb/ccc/d/g..>.
<urn:ex:s073> <urn:ex:p> <http://a/bb/ccc/d/..g>.
<urn:ex:s074> <urn:ex:p> <http://a/bb/ccc/g>.
<urn:ex:s075> <urn:ex:p> <http://a/bb/ccc/d/g/>.
<urn:ex:s076> <urn:ex:p> <http://a/bb/ccc/d/g/h>.
<urn:ex:s077> <urn:ex:p> <http://a/bb/ccc/d/h>.
<urn:ex:s078> <urn:ex:p> <http://a/bb/ccc/d/g;x=1/y>.
<urn:ex:s079> <urn:ex:p> <http://a/bb/ccc/d/y>.
<urn:ex:s080> <urn:ex:p> <http://a/bb/ccc/d/g?y/./x>.
<urn:ex:s081> <urn:ex:p> <http://a/bb/ccc/d/g?y/../x>.
<urn:ex:s082> <urn:ex:p> <http://a/bb/ccc/d/g#s/./x>.
<urn:ex:s083> <urn:ex:p> <http://a/bb/ccc/d/g#s/../x>.
<urn:ex:s084> <urn:ex:p> <http:g>.
# RFC3986 normal examples with /. in the base IRI
<urn:ex:s085> <urn:ex:p> <g:h>.
<urn:ex:s086> <urn:ex:p> <http://a/bb/ccc/g>.
<urn:ex:s087> <urn:ex:p> <http://a/bb/ccc/g>.
<urn:ex:s088> <urn:ex:p> <http://a/bb/ccc/g/>.
<urn:ex:s089> <urn:ex:p> <http://a/g>.
<urn:ex:s090> <urn:ex:p> <http://g>.
<urn:ex:s091> <urn:ex:p> <http://a/bb/ccc/./d;p?y>.
<urn:ex:s092> <urn:ex:p> <http://a/bb/ccc/g?y>.
<urn:ex:s093> <urn:ex:p> <http://a/bb/ccc/./d;p?q#s>.
<urn:ex:s094> <urn:ex:p> <http://a/bb/ccc/g#s>.
<urn:ex:s095> <urn:ex:p> <http://a/bb/ccc/g?y#s>.
<urn:ex:s096> <urn:ex:p> <http://a/bb/ccc/;x>.
<urn:ex:s097> <urn:ex:p> <http://a/bb/ccc/g;x>.
<urn:ex:s098> <urn:ex:p> <http://a/bb/ccc/g;x?y#s>.
<urn:ex:s099> <urn:ex:p> <http://a/bb/ccc/./d;p?q>.
<urn:ex:s100> <urn:ex:p> <http://a/bb/ccc/>.
<urn:ex:s101> <urn:ex:p> <http://a/bb/ccc/>.
<urn:ex:s102> <urn:ex:p> <http://a/bb/>.
<urn:ex:s103> <urn:ex:p> <http://a/bb/>.
<urn:ex:s104> <urn:ex:p> <http://a/bb/g>.
<urn:ex:s105> <urn:ex:p> <http://a/>.
<urn:ex:s106> <urn:ex:p> <http://a/>.
<urn:ex:s107> <urn:ex:p> <http://a/g>.
# RFC3986 abnormal examples with /. in the base IRI
<urn:ex:s108> <urn:ex:p> <http://a/g>.
<urn:ex:s109> <urn:ex:p> <http://a/g>.
<urn:ex:s110> <urn:ex:p> <http://a/g>.
<urn:ex:s111> <urn:ex:p> <http://a/g>.
<urn:ex:s112> <urn:ex:p> <http://a/bb/ccc/g.>.
<urn:ex:s113> <urn:ex:p> <http://a/bb/ccc/.g>.
<urn:ex:s114> <urn:ex:p> <http://a/bb/ccc/g..>.
<urn:ex:s115> <urn:ex:p> <http://a/bb/ccc/..g>.
<urn:ex:s116> <urn:ex:p> <http://a/bb/g>.
<urn:ex:s117> <urn:ex:p> <http://a/bb/ccc/g/>.
<urn:ex:s118> <urn:ex:p> <http://a/bb/ccc/g/h>.
<urn:ex:s119> <urn:ex:p> <http://a/bb/ccc/h>.
<urn:ex:s120> <urn:ex:p> <http://a/bb/ccc/g;x=1/y>.
<urn:ex:s121> <urn:ex:p> <http://a/bb/ccc/y>.
<urn:ex:s122> <urn:ex:p> <http://a/bb/ccc/g?y/./x>.
<urn:ex:s123> <urn:ex:p> <http://a/bb/ccc/g?y/../x>.
<urn:ex:s124> <urn:ex:p> <http://a/bb/ccc/g#s/./x>.
<urn:ex:s125> <urn:ex:p> <http://a/bb/ccc/g#s/../x>.
<urn:ex:s126> <urn:ex:p> <http:g>.
# RFC3986 normal examples with /.. in the base IRI
<urn:ex:s127> <urn:ex:p> <g:h>.
<urn:ex:s128> <urn:ex:p> <http://a/bb/g>.
<urn:ex:s129> <urn:ex:p> <http://a/bb/g>.
<urn:ex:s130> <urn:ex:p> <http://a/bb/g/>.
<urn:ex:s131> <urn:ex:p> <http://a/g>.
<urn:ex:s132> <urn:ex:p> <http://g>.
<urn:ex:s133> <urn:ex:p> <http://a/bb/ccc/../d;p?y>.
<urn:ex:s134> <urn:ex:p> <http://a/bb/g?y>.
<urn:ex:s135> <urn:ex:p> <http://a/bb/ccc/../d;p?q#s>.
<urn:ex:s136> <urn:ex:p> <http://a/bb/g#s>.
<urn:ex:s137> <urn:ex:p> <http://a/bb/g?y#s>.
<urn:ex:s138> <urn:ex:p> <http://a/bb/;x>.
<urn:ex:s139> <urn:ex:p> <http://a/bb/g;x>.
<urn:ex:s140> <urn:ex:p> <http://a/bb/g;x?y#s>.
<urn:ex:s141> <urn:ex:p> <http://a/bb/ccc/../d;p?q>.
<urn:ex:s142> <urn:ex:p> <http://a/bb/>.
<urn:ex:s143> <urn:ex:p> <http://a/bb/>.
<urn:ex:s144> <urn:ex:p> <http://a/>.
<urn:ex:s145> <urn:ex:p> <http://a/>.
<urn:ex:s146> <urn:ex:p> <http://a/g>.
<urn:ex:s147> <urn:ex:p> <http://a/>.
<urn:ex:s148> <urn:ex:p> <http://a/>.
<urn:ex:s149> <urn:ex:p> <http://a/g>.
# RFC3986 abnormal examples with /.. in the base IRI
<urn:ex:s150> <urn:ex:p> <http://a/g>.
<urn:ex:s151> <urn:ex:p> <http://a/g>.
<urn:ex:s152> <urn:ex:p> <http://a/g>.
<urn:ex:s153> <urn:ex:p> <http://a/g>.
<urn:ex:s154> <urn:ex:p> <http://a/bb/g.>.
<urn:ex:s155> <urn:ex:p> <http://a/bb/.g>.
<urn:ex:s156> <urn:ex:p> <http://a/bb/g..>.
<urn:ex:s157> <urn:ex:p> <http://a/bb/..g>.
<urn:ex:s158> <urn:ex:p> <http://a/g>.
<urn:ex:s159> <urn:ex:p> <http://a/bb/g/>.
<urn:ex:s160> <urn:ex:p> <http://a/bb/g/h>.
<urn:ex:s161> <urn:ex:p> <http://a/bb/h>.
<urn:ex:s162> <urn:ex:p> <http://a/bb/g;x=1/y>.
<urn:ex:s163> <urn:ex:p> <http://a/bb/y>.
<urn:ex:s164> <urn:ex:p> <http://a/bb/g?y/./x>.
<urn:ex:s165> <urn:ex:p> <http://a/bb/g?y/../x>.
<urn:ex:s166> <urn:ex:p> <http://a/bb/g#s/./x>.
<urn:ex:s167> <urn:ex:p> <http://a/bb/g#s/../x>.
<urn:ex:s168> <urn:ex:p> <http:g>.
# RFC3986 normal examples with trailing /. in the base IRI
<urn:ex:s169> <urn:ex:p> <g:h>.
<urn:ex:s170> <urn:ex:p> <http://a/bb/ccc/g>.
<urn:ex:s171> <urn:ex:p> <http://a/bb/ccc/g>.
<urn:ex:s172> <urn:ex:p> <http://a/bb/ccc/g/>.
<urn:ex:s173> <urn:ex:p> <http://a/g>.
<urn:ex:s174> <urn:ex:p> <http://g>.
<urn:ex:s175> <urn:ex:p> <http://a/bb/ccc/.?y>.
<urn:ex:s176> <urn:ex:p> <http://a/bb/ccc/g?y>.
<urn:ex:s177> <urn:ex:p> <http://a/bb/ccc/.#s>.
<urn:ex:s178> <urn:ex:p> <http://a/bb/ccc/g#s>.
<urn:ex:s179> <urn:ex:p> <http://a/bb/ccc/g?y#s>.
<urn:ex:s180> <urn:ex:p> <http://a/bb/ccc/;x>.
<urn:ex:s181> <urn:ex:p> <http://a/bb/ccc/g;x>.
<urn:ex:s182> <urn:ex:p> <http://a/bb/ccc/g;x?y#s>.
<urn:ex:s183> <urn:ex:p> <http://a/bb/ccc/.>.
<urn:ex:s184> <urn:ex:p> <http://a/bb/ccc/>.
<urn:ex:s185> <urn:ex:p> <http://a/bb/ccc/>.
<urn:ex:s186> <urn:ex:p> <http://a/bb/>.
<urn:ex:s187> <urn:ex:p> <http://a/bb/>.
<urn:ex:s188> <urn:ex:p> <http://a/bb/g>.
<urn:ex:s189> <urn:ex:p> <http://a/>.
<urn:ex:s190> <urn:ex:p> <http://a/>.
<urn:ex:s191> <urn:ex:p> <http://a/g>.
# RFC3986 abnormal examples with trailing /. in the base IRI
<urn:ex:s192> <urn:ex:p> <http://a/g>.
<urn:ex:s193> <urn:ex:p> <http://a/g>.
<urn:ex:s194> <urn:ex:p> <http://a/g>.
<urn:ex:s195> <urn:ex:p> <http://a/g>.
<urn:ex:s196> <urn:ex:p> <http://a/bb/ccc/g.>.
<urn:ex:s197> <urn:ex:p> <http://a/bb/ccc/.g>.
<urn:ex:s198> <urn:ex:p> <http://a/bb/ccc/g..>.
<urn:ex:s199> <urn:ex:p> <http://a/bb/ccc/..g>.
<urn:ex:s200> <urn:ex:p> <http://a/bb/g>.
<urn:ex:s201> <urn:ex:p> <http://a/bb/ccc/g/>.
<urn:ex:s202> <urn:ex:p> <http://a/bb/ccc/g/h>.
<urn:ex:s203> <urn:ex:p> <http://a/bb/ccc/h>.
<urn:ex:s204> <urn:ex:p> <http://a/bb/ccc/g;x=1/y>.
<urn:ex:s205> <urn:ex:p> <http://a/bb/ccc/y>.
<urn:ex:s206> <urn:ex:p> <http://a/bb/ccc/g?y/./x>.
<urn:ex:s207> <urn:ex:p> <http://a/bb/ccc/g?y/../x>.
<urn:ex:s208> <urn:ex:p> <http://a/bb/ccc/g#s/./x>.
<urn:ex:s209> <urn:ex:p> <http://a/bb/ccc/g#s/../x>.
<urn:ex:s210> <urn:ex:p> <http:g>.
# RFC3986 normal examples with trailing /.. in the base IRI
<urn:ex:s211> <urn:ex:p> <g:h>.
<urn:ex:s212> <urn:ex:p> <http://a/bb/ccc/g>.
<urn:ex:s213> <urn:ex:p> <http://a/bb/ccc/g>.
<urn:ex:s214> <urn:ex:p> <http://a/bb/ccc/g/>.
<urn:ex:s215> <urn:ex:p> <http://a/g>.
<urn:ex:s216> <urn:ex:p> <http://g>.
<urn:ex:s217> <urn:ex:p> <http://a/bb/ccc/..?y>.
<urn:ex:s218> <urn:ex:p> <http://a/bb/ccc/g?y>.
<urn:ex:s219> <urn:ex:p> <http://a/bb/ccc/..#s>.
<urn:ex:s220> <urn:ex:p> <http://a/bb/ccc/g#s>.
<urn:ex:s221> <urn:ex:p> <http://a/bb/ccc/g?y#s>.
<urn:ex:s222> <urn:ex:p> <http://a/bb/ccc/;x>.
<urn:ex:s223> <urn:ex:p> <http://a/bb/ccc/g;x>.
<urn:ex:s224> <urn:ex:p> <http://a/bb/ccc/g;x?y#s>.
<urn:ex:s225> <urn:ex:p> <http://a/bb/ccc/..>.
<urn:ex:s226> <urn:ex:p> <http://a/bb/ccc/>.
<urn:ex:s227> <urn:ex:p> <http://a/bb/ccc/>.
<urn:ex:s228> <urn:ex:p> <http://a/bb/>.
<urn:ex:s229> <urn:ex:p> <http://a/bb/>.
<urn:ex:s230> <urn:ex:p> <http://a/bb/g>.
<urn:ex:s231> <urn:ex:p> <http://a/>.
<urn:ex:s232> <urn:ex:p> <http://a/>.
<urn:ex:s233> <urn:ex:p> <http://a/g>.
# RFC3986 abnormal examples with trailing /.. in the base IRI
<urn:ex:s234> <urn:ex:p> <http://a/g>.
<urn:ex:s235> <urn:ex:p> <http://a/g>.
<urn:ex:s236> <urn:ex:p> <http://a/g>.
<urn:ex:s237> <urn:ex:p> <http://a/g>.
<urn:ex:s238> <urn:ex:p> <http://a/bb/ccc/g.>.
<urn:ex:s239> <urn:ex:p> <http://a/bb/ccc/.g>.
<urn:ex:s240> <urn:ex:p> <http://a/bb/ccc/g..>.
<urn:ex:s241> <urn:ex:p> <http://a/bb/ccc/..g>.
<urn:ex:s242> <urn:ex:p> <http://a/bb/g>.
<urn:ex:s243> <urn:ex:p> <http://a/bb/ccc/g/>.
<urn:ex:s244> <urn:ex:p> <http://a/bb/ccc/g/h>.
<urn:ex:s245> <urn:ex:p> <http://a/bb/ccc/h>.
<urn:ex:s246> <urn:ex:p> <http://a/bb/ccc/g;x=1/y>.
<urn:ex:s247> <urn:ex:p> <http://a/bb/ccc/y>.
<urn:ex:s248> <urn:ex:p> <http://a/bb/ccc/g?y/./x>.
<urn:ex:s249> <urn:ex:p> <http://a/bb/ccc/g?y/../x>.
<urn:ex:s250> <urn:ex:p> <http://a/bb/ccc/g#s/./x>.
<urn:ex:s251> <urn:ex:p> <http://a/bb/ccc/g#s/../x>.
<urn:ex:s252> <urn:ex:p> <http:g>.
# RFC3986 normal examples with file path
<urn:ex:s253> <urn:ex:p> <g:h>.
<urn:ex:s254> <urn:ex:p> <file:///a/bb/ccc/g>.
<urn:ex:s255> <urn:ex:p> <file:///a/bb/ccc/g>.
<urn:ex:s256> <urn:ex:p> <file:///a/bb/ccc/g/>.
<urn:ex:s257> <urn:ex:p> <file:///g>.
<urn:ex:s258> <urn:ex:p> <file://g>.
<urn:ex:s259> <urn:ex:p> <file:///a/bb/ccc/d;p?y>.
<urn:ex:s260> <urn:ex:p> <file:///a/bb/ccc/g?y>.
<urn:ex:s261> <urn:ex:p> <file:///a/bb/ccc/d;p?q#s>.
<urn:ex:s262> <urn:ex:p> <file:///a/bb/ccc/g#s>.
<urn:ex:s263> <urn:ex:p> <file:///a/bb/ccc/g?y#s>.
<urn:ex:s264> <urn:ex:p> <file:///a/bb/ccc/;x>.
<urn:ex:s265> <urn:ex:p> <file:///a/bb/ccc/g;x>.
<urn:ex:s266> <urn:ex:p> <file:///a/bb/ccc/g;x?y#s>.
<urn:ex:s267> <urn:ex:p> <file:///a/bb/ccc/d;p?q>.
<urn:ex:s268> <urn:ex:p> <file:///a/bb/ccc/>.
<urn:ex:s269> <urn:ex:p> <file:///a/bb/ccc/>.
<urn:ex:s270> <urn:ex:p> <file:///a/bb/>.
<urn:ex:s271> <urn:ex:p> <file:///a/bb/>.
<urn:ex:s272> <urn:ex:p> <file:///a/bb/g>.
<urn:ex:s273> <urn:ex:p> <file:///a/>.
<urn:ex:s274> <urn:ex:p> <file:///a/>.
<urn:ex:s275> <urn:ex:p> <file:///a/g>.
# RFC3986 abnormal examples with file path
<urn:ex:s276> <urn:ex:p> <file:///g>.
<urn:ex:s277> <urn:ex:p> <file:///g>.
<urn:ex:s278> <urn:ex:p> <file:///g>.
<urn:ex:s279> <urn:ex:p> <file:///g>.
<urn:ex:s280> <urn:ex:p> <file:///a/bb/ccc/g.>.
<urn:ex:s281> <urn:ex:p> <file:///a/bb/ccc/.g>.
<urn:ex:s282> <urn:ex:p> <file:///a/bb/ccc/g..>.
<urn:ex:s283> <urn:ex:p> <file:///a/bb/ccc/..g>.
<urn:ex:s284> <urn:ex:p> <file:///a/bb/g>.
<urn:ex:s285> <urn:ex:p> <file:///a/bb/ccc/g/>.
<urn:ex:s286> <urn:ex:p> <file:///a/bb/ccc/g/h>.
<urn:ex:s287> <urn:ex:p> <file:///a/bb/ccc/h>.
<urn:ex:s288> <urn:ex:p> <file:///a/bb/ccc/g;x=1/y>.
<urn:ex:s289> <urn:ex:p> <file:///a/bb/ccc/y>.
<urn:ex:s290> <urn:ex:p> <file:///a/bb/ccc/g?y/./x>.
<urn:ex:s291> <urn:ex:p> <file:///a/bb/ccc/g?y/../x>.
<urn:ex:s292> <urn:ex:p> <file:///a/bb/ccc/g#s/./x>.
<urn:ex:s293> <urn:ex:p> <file:///a/bb/ccc/g#s/../x>.
<urn:ex:s294> <urn:ex:p> <http:g>.
# additional cases
<urn:ex:s295> <urn:ex:p> <http://abc/def/>.
<urn:ex:s296> <urn:ex:p> <http://abc/def/?a=b>.
<urn:ex:s297> <urn:ex:p> <http://abc/def/#a=b>.
<urn:ex:s298> <urn:ex:p> <http://abc/>.
<urn:ex:s299> <urn:ex:p> <http://abc/?a=b>.
<urn:ex:s300> <urn:ex:p> <http://abc/#a=b>.
<urn:ex:s301> <urn:ex:p> <http://ab//de//xyz>.
<urn:ex:s302> <urn:ex:p> <http://ab//de//xyz>.
<urn:ex:s303> <urn:ex:p> <http://ab//de/xyz>.
<urn:ex:s304> <urn:ex:p> <http://abc/d:f/xyz>.
<urn:ex:s305> <urn:ex:p> <http://abc/d:f/xyz>.
<urn:ex:s306> <urn:ex:p> <http://abc/xyz>.
<outer xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:urn="urn:">
<rdf:RDF xml:base="http://a/bb/ccc/d;p?q">
<!-- RFC3986 normal examples -->
<rdf:Description rdf:about="urn:ex:s001"><urn:ex:p rdf:resource="g:h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s002"><urn:ex:p rdf:resource="g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s003"><urn:ex:p rdf:resource="./g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s004"><urn:ex:p rdf:resource="g/"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s005"><urn:ex:p rdf:resource="/g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s006"><urn:ex:p rdf:resource="//g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s007"><urn:ex:p rdf:resource="?y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s008"><urn:ex:p rdf:resource="g?y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s009"><urn:ex:p rdf:resource="#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s010"><urn:ex:p rdf:resource="g#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s011"><urn:ex:p rdf:resource="g?y#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s012"><urn:ex:p rdf:resource=";x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s013"><urn:ex:p rdf:resource="g;x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s014"><urn:ex:p rdf:resource="g;x?y#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s015"><urn:ex:p rdf:resource=""/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s016"><urn:ex:p rdf:resource="."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s017"><urn:ex:p rdf:resource="./"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s018"><urn:ex:p rdf:resource=".."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s019"><urn:ex:p rdf:resource="../"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s020"><urn:ex:p rdf:resource="../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s021"><urn:ex:p rdf:resource="../.."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s022"><urn:ex:p rdf:resource="../../"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s023"><urn:ex:p rdf:resource="../../g"/></rdf:Description>
</rdf:RDF>
<rdf:RDF xml:base="http://a/bb/ccc/d;p?q">
<!-- RFC3986 abnormal examples -->
<rdf:Description rdf:about="urn:ex:s024"><urn:ex:p rdf:resource="../../../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s025"><urn:ex:p rdf:resource="../../../../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s026"><urn:ex:p rdf:resource="/./g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s027"><urn:ex:p rdf:resource="/../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s028"><urn:ex:p rdf:resource="g."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s029"><urn:ex:p rdf:resource=".g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s030"><urn:ex:p rdf:resource="g.."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s031"><urn:ex:p rdf:resource="..g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s032"><urn:ex:p rdf:resource="./../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s033"><urn:ex:p rdf:resource="./g/."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s034"><urn:ex:p rdf:resource="g/./h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s035"><urn:ex:p rdf:resource="g/../h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s036"><urn:ex:p rdf:resource="g;x=1/./y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s037"><urn:ex:p rdf:resource="g;x=1/../y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s038"><urn:ex:p rdf:resource="g?y/./x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s039"><urn:ex:p rdf:resource="g?y/../x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s040"><urn:ex:p rdf:resource="g#s/./x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s041"><urn:ex:p rdf:resource="g#s/../x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s042"><urn:ex:p rdf:resource="http:g"/></rdf:Description>
</rdf:RDF>
<rdf:RDF xml:base="http://a/bb/ccc/d/">
<!-- RFC3986 normal examples with trailing slash in base IRI -->
<rdf:Description rdf:about="urn:ex:s043"><urn:ex:p rdf:resource="g:h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s044"><urn:ex:p rdf:resource="g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s045"><urn:ex:p rdf:resource="./g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s046"><urn:ex:p rdf:resource="g/"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s047"><urn:ex:p rdf:resource="/g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s048"><urn:ex:p rdf:resource="//g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s049"><urn:ex:p rdf:resource="?y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s050"><urn:ex:p rdf:resource="g?y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s051"><urn:ex:p rdf:resource="#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s052"><urn:ex:p rdf:resource="g#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s053"><urn:ex:p rdf:resource="g?y#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s054"><urn:ex:p rdf:resource=";x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s055"><urn:ex:p rdf:resource="g;x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s056"><urn:ex:p rdf:resource="g;x?y#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s057"><urn:ex:p rdf:resource=""/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s058"><urn:ex:p rdf:resource="."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s059"><urn:ex:p rdf:resource="./"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s060"><urn:ex:p rdf:resource=".."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s061"><urn:ex:p rdf:resource="../"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s062"><urn:ex:p rdf:resource="../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s063"><urn:ex:p rdf:resource="../.."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s064"><urn:ex:p rdf:resource="../../"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s065"><urn:ex:p rdf:resource="../../g"/></rdf:Description>
</rdf:RDF>
<rdf:RDF xml:base="http://a/bb/ccc/d/">
<!-- RFC3986 abnormal examples with trailing slash in base IRI -->
<rdf:Description rdf:about="urn:ex:s066"><urn:ex:p rdf:resource="../../../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s067"><urn:ex:p rdf:resource="../../../../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s068"><urn:ex:p rdf:resource="/./g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s069"><urn:ex:p rdf:resource="/../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s070"><urn:ex:p rdf:resource="g."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s071"><urn:ex:p rdf:resource=".g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s072"><urn:ex:p rdf:resource="g.."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s073"><urn:ex:p rdf:resource="..g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s074"><urn:ex:p rdf:resource="./../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s075"><urn:ex:p rdf:resource="./g/."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s076"><urn:ex:p rdf:resource="g/./h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s077"><urn:ex:p rdf:resource="g/../h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s078"><urn:ex:p rdf:resource="g;x=1/./y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s079"><urn:ex:p rdf:resource="g;x=1/../y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s080"><urn:ex:p rdf:resource="g?y/./x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s081"><urn:ex:p rdf:resource="g?y/../x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s082"><urn:ex:p rdf:resource="g#s/./x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s083"><urn:ex:p rdf:resource="g#s/../x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s084"><urn:ex:p rdf:resource="http:g"/></rdf:Description>
</rdf:RDF>
<rdf:RDF xml:base="http://a/bb/ccc/./d;p?q">
<!-- RFC3986 normal examples0 with ./ in the base IRI -->
<rdf:Description rdf:about="urn:ex:s085"><urn:ex:p rdf:resource="g:h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s086"><urn:ex:p rdf:resource="g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s087"><urn:ex:p rdf:resource="./g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s088"><urn:ex:p rdf:resource="g/"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s089"><urn:ex:p rdf:resource="/g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s090"><urn:ex:p rdf:resource="//g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s091"><urn:ex:p rdf:resource="?y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s092"><urn:ex:p rdf:resource="g?y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s093"><urn:ex:p rdf:resource="#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s094"><urn:ex:p rdf:resource="g#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s095"><urn:ex:p rdf:resource="g?y#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s096"><urn:ex:p rdf:resource=";x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s097"><urn:ex:p rdf:resource="g;x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s098"><urn:ex:p rdf:resource="g;x?y#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s099"><urn:ex:p rdf:resource=""/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s100"><urn:ex:p rdf:resource="."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s101"><urn:ex:p rdf:resource="./"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s102"><urn:ex:p rdf:resource=".."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s103"><urn:ex:p rdf:resource="../"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s104"><urn:ex:p rdf:resource="../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s105"><urn:ex:p rdf:resource="../.."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s106"><urn:ex:p rdf:resource="../../"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s107"><urn:ex:p rdf:resource="../../g"/></rdf:Description>
</rdf:RDF>
<rdf:RDF xml:base="http://a/bb/ccc/./d;p?q">
<!-- RFC3986 abnormal examples with ./ in the base IRI -->
<rdf:Description rdf:about="urn:ex:s108"><urn:ex:p rdf:resource="../../../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s109"><urn:ex:p rdf:resource="../../../../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s110"><urn:ex:p rdf:resource="/./g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s111"><urn:ex:p rdf:resource="/../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s112"><urn:ex:p rdf:resource="g."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s113"><urn:ex:p rdf:resource=".g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s114"><urn:ex:p rdf:resource="g.."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s115"><urn:ex:p rdf:resource="..g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s116"><urn:ex:p rdf:resource="./../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s117"><urn:ex:p rdf:resource="./g/."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s118"><urn:ex:p rdf:resource="g/./h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s119"><urn:ex:p rdf:resource="g/../h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s120"><urn:ex:p rdf:resource="g;x=1/./y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s121"><urn:ex:p rdf:resource="g;x=1/../y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s122"><urn:ex:p rdf:resource="g?y/./x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s123"><urn:ex:p rdf:resource="g?y/../x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s124"><urn:ex:p rdf:resource="g#s/./x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s125"><urn:ex:p rdf:resource="g#s/../x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s126"><urn:ex:p rdf:resource="http:g"/></rdf:Description>
</rdf:RDF>
<rdf:RDF xml:base="http://a/bb/ccc/../d;p?q">
<!-- RFC3986 normal examples with ../ in the base IRI -->
<rdf:Description rdf:about="urn:ex:s127"><urn:ex:p rdf:resource="g:h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s128"><urn:ex:p rdf:resource="g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s129"><urn:ex:p rdf:resource="./g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s130"><urn:ex:p rdf:resource="g/"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s131"><urn:ex:p rdf:resource="/g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s132"><urn:ex:p rdf:resource="//g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s133"><urn:ex:p rdf:resource="?y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s134"><urn:ex:p rdf:resource="g?y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s135"><urn:ex:p rdf:resource="#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s136"><urn:ex:p rdf:resource="g#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s137"><urn:ex:p rdf:resource="g?y#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s138"><urn:ex:p rdf:resource=";x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s139"><urn:ex:p rdf:resource="g;x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s140"><urn:ex:p rdf:resource="g;x?y#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s141"><urn:ex:p rdf:resource=""/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s142"><urn:ex:p rdf:resource="."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s143"><urn:ex:p rdf:resource="./"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s144"><urn:ex:p rdf:resource=".."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s145"><urn:ex:p rdf:resource="../"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s146"><urn:ex:p rdf:resource="../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s147"><urn:ex:p rdf:resource="../.."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s148"><urn:ex:p rdf:resource="../../"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s149"><urn:ex:p rdf:resource="../../g"/></rdf:Description>
</rdf:RDF>
<rdf:RDF xml:base="http://a/bb/ccc/../d;p?q">
<!-- RFC3986 abnormal examples with ../ in the base IRI -->
<rdf:Description rdf:about="urn:ex:s150"><urn:ex:p rdf:resource="../../../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s151"><urn:ex:p rdf:resource="../../../../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s152"><urn:ex:p rdf:resource="/./g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s153"><urn:ex:p rdf:resource="/../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s154"><urn:ex:p rdf:resource="g."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s155"><urn:ex:p rdf:resource=".g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s156"><urn:ex:p rdf:resource="g.."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s157"><urn:ex:p rdf:resource="..g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s158"><urn:ex:p rdf:resource="./../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s159"><urn:ex:p rdf:resource="./g/."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s160"><urn:ex:p rdf:resource="g/./h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s161"><urn:ex:p rdf:resource="g/../h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s162"><urn:ex:p rdf:resource="g;x=1/./y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s163"><urn:ex:p rdf:resource="g;x=1/../y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s164"><urn:ex:p rdf:resource="g?y/./x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s165"><urn:ex:p rdf:resource="g?y/../x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s166"><urn:ex:p rdf:resource="g#s/./x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s167"><urn:ex:p rdf:resource="g#s/../x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s168"><urn:ex:p rdf:resource="http:g"/></rdf:Description>
</rdf:RDF>
<rdf:RDF xml:base="http://a/bb/ccc/.">
<!-- RFC3986 normal examples with trailing ./ in the base IRI -->
<rdf:Description rdf:about="urn:ex:s169"><urn:ex:p rdf:resource="g:h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s170"><urn:ex:p rdf:resource="g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s171"><urn:ex:p rdf:resource="./g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s172"><urn:ex:p rdf:resource="g/"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s173"><urn:ex:p rdf:resource="/g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s174"><urn:ex:p rdf:resource="//g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s175"><urn:ex:p rdf:resource="?y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s176"><urn:ex:p rdf:resource="g?y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s177"><urn:ex:p rdf:resource="#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s178"><urn:ex:p rdf:resource="g#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s179"><urn:ex:p rdf:resource="g?y#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s180"><urn:ex:p rdf:resource=";x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s181"><urn:ex:p rdf:resource="g;x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s182"><urn:ex:p rdf:resource="g;x?y#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s183"><urn:ex:p rdf:resource=""/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s184"><urn:ex:p rdf:resource="."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s185"><urn:ex:p rdf:resource="./"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s186"><urn:ex:p rdf:resource=".."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s187"><urn:ex:p rdf:resource="../"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s188"><urn:ex:p rdf:resource="../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s189"><urn:ex:p rdf:resource="../.."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s190"><urn:ex:p rdf:resource="../../"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s191"><urn:ex:p rdf:resource="../../g"/></rdf:Description>
</rdf:RDF>
<rdf:RDF xml:base="http://a/bb/ccc/.">
<!-- RFC3986 abnormal examples with trailing ./ in the base IRI -->
<rdf:Description rdf:about="urn:ex:s192"><urn:ex:p rdf:resource="../../../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s193"><urn:ex:p rdf:resource="../../../../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s194"><urn:ex:p rdf:resource="/./g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s195"><urn:ex:p rdf:resource="/../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s196"><urn:ex:p rdf:resource="g."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s197"><urn:ex:p rdf:resource=".g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s198"><urn:ex:p rdf:resource="g.."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s199"><urn:ex:p rdf:resource="..g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s200"><urn:ex:p rdf:resource="./../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s201"><urn:ex:p rdf:resource="./g/."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s202"><urn:ex:p rdf:resource="g/./h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s203"><urn:ex:p rdf:resource="g/../h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s204"><urn:ex:p rdf:resource="g;x=1/./y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s205"><urn:ex:p rdf:resource="g;x=1/../y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s206"><urn:ex:p rdf:resource="g?y/./x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s207"><urn:ex:p rdf:resource="g?y/../x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s208"><urn:ex:p rdf:resource="g#s/./x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s209"><urn:ex:p rdf:resource="g#s/../x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s210"><urn:ex:p rdf:resource="http:g"/></rdf:Description>
</rdf:RDF>
<rdf:RDF xml:base="http://a/bb/ccc/..">
<!-- RFC3986 normal examples with trailing ../ in the base IRI -->
<rdf:Description rdf:about="urn:ex:s211"><urn:ex:p rdf:resource="g:h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s212"><urn:ex:p rdf:resource="g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s213"><urn:ex:p rdf:resource="./g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s214"><urn:ex:p rdf:resource="g/"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s215"><urn:ex:p rdf:resource="/g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s216"><urn:ex:p rdf:resource="//g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s217"><urn:ex:p rdf:resource="?y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s218"><urn:ex:p rdf:resource="g?y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s219"><urn:ex:p rdf:resource="#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s220"><urn:ex:p rdf:resource="g#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s221"><urn:ex:p rdf:resource="g?y#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s222"><urn:ex:p rdf:resource=";x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s223"><urn:ex:p rdf:resource="g;x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s224"><urn:ex:p rdf:resource="g;x?y#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s225"><urn:ex:p rdf:resource=""/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s226"><urn:ex:p rdf:resource="."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s227"><urn:ex:p rdf:resource="./"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s228"><urn:ex:p rdf:resource=".."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s229"><urn:ex:p rdf:resource="../"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s230"><urn:ex:p rdf:resource="../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s231"><urn:ex:p rdf:resource="../.."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s232"><urn:ex:p rdf:resource="../../"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s233"><urn:ex:p rdf:resource="../../g"/></rdf:Description>
</rdf:RDF>
<rdf:RDF xml:base="http://a/bb/ccc/..">
<!-- RFC3986 abnormal examples with trailing ../ in the base IRI -->
<rdf:Description rdf:about="urn:ex:s234"><urn:ex:p rdf:resource="../../../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s235"><urn:ex:p rdf:resource="../../../../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s236"><urn:ex:p rdf:resource="/./g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s237"><urn:ex:p rdf:resource="/../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s238"><urn:ex:p rdf:resource="g."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s239"><urn:ex:p rdf:resource=".g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s240"><urn:ex:p rdf:resource="g.."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s241"><urn:ex:p rdf:resource="..g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s242"><urn:ex:p rdf:resource="./../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s243"><urn:ex:p rdf:resource="./g/."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s244"><urn:ex:p rdf:resource="g/./h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s245"><urn:ex:p rdf:resource="g/../h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s246"><urn:ex:p rdf:resource="g;x=1/./y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s247"><urn:ex:p rdf:resource="g;x=1/../y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s248"><urn:ex:p rdf:resource="g?y/./x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s249"><urn:ex:p rdf:resource="g?y/../x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s250"><urn:ex:p rdf:resource="g#s/./x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s251"><urn:ex:p rdf:resource="g#s/../x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s252"><urn:ex:p rdf:resource="http:g"/></rdf:Description>
</rdf:RDF>
<rdf:RDF xml:base="file:///a/bb/ccc/d;p?q">
<!-- RFC3986 normal examples with file path -->
<rdf:Description rdf:about="urn:ex:s253"><urn:ex:p rdf:resource="g:h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s254"><urn:ex:p rdf:resource="g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s255"><urn:ex:p rdf:resource="./g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s256"><urn:ex:p rdf:resource="g/"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s257"><urn:ex:p rdf:resource="/g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s258"><urn:ex:p rdf:resource="//g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s259"><urn:ex:p rdf:resource="?y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s260"><urn:ex:p rdf:resource="g?y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s261"><urn:ex:p rdf:resource="#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s262"><urn:ex:p rdf:resource="g#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s263"><urn:ex:p rdf:resource="g?y#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s264"><urn:ex:p rdf:resource=";x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s265"><urn:ex:p rdf:resource="g;x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s266"><urn:ex:p rdf:resource="g;x?y#s"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s267"><urn:ex:p rdf:resource=""/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s268"><urn:ex:p rdf:resource="."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s269"><urn:ex:p rdf:resource="./"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s270"><urn:ex:p rdf:resource=".."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s271"><urn:ex:p rdf:resource="../"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s272"><urn:ex:p rdf:resource="../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s273"><urn:ex:p rdf:resource="../.."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s274"><urn:ex:p rdf:resource="../../"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s275"><urn:ex:p rdf:resource="../../g"/></rdf:Description>
</rdf:RDF>
<rdf:RDF xml:base="file:///a/bb/ccc/d;p?q">
<!-- RFC3986 abnormal examples with file path -->
<rdf:Description rdf:about="urn:ex:s276"><urn:ex:p rdf:resource="../../../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s277"><urn:ex:p rdf:resource="../../../../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s278"><urn:ex:p rdf:resource="/./g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s279"><urn:ex:p rdf:resource="/../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s280"><urn:ex:p rdf:resource="g."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s281"><urn:ex:p rdf:resource=".g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s282"><urn:ex:p rdf:resource="g.."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s283"><urn:ex:p rdf:resource="..g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s284"><urn:ex:p rdf:resource="./../g"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s285"><urn:ex:p rdf:resource="./g/."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s286"><urn:ex:p rdf:resource="g/./h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s287"><urn:ex:p rdf:resource="g/../h"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s288"><urn:ex:p rdf:resource="g;x=1/./y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s289"><urn:ex:p rdf:resource="g;x=1/../y"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s290"><urn:ex:p rdf:resource="g?y/./x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s291"><urn:ex:p rdf:resource="g?y/../x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s292"><urn:ex:p rdf:resource="g#s/./x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s293"><urn:ex:p rdf:resource="g#s/../x"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s294"><urn:ex:p rdf:resource="http:g"/></rdf:Description>
</rdf:RDF>
<!-- additional cases -->
<rdf:RDF xml:base="http://abc/def/ghi">
<rdf:Description rdf:about="urn:ex:s295"><urn:ex:p rdf:resource="."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s296"><urn:ex:p rdf:resource=".?a=b"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s297"><urn:ex:p rdf:resource=".#a=b"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s298"><urn:ex:p rdf:resource=".."/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s299"><urn:ex:p rdf:resource="..?a=b"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s300"><urn:ex:p rdf:resource="..#a=b"/></rdf:Description>
</rdf:RDF>
<rdf:RDF xml:base="http://ab//de//ghi">
<rdf:Description rdf:about="urn:ex:s301"><urn:ex:p rdf:resource="xyz"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s302"><urn:ex:p rdf:resource="./xyz"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s303"><urn:ex:p rdf:resource="../xyz"/></rdf:Description>
</rdf:RDF>
<rdf:RDF xml:base="http://abc/d:f/ghi">
<rdf:Description rdf:about="urn:ex:s304"><urn:ex:p rdf:resource="xyz"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s305"><urn:ex:p rdf:resource="./xyz"/></rdf:Description>
<rdf:Description rdf:about="urn:ex:s306"><urn:ex:p rdf:resource="../xyz"/></rdf:Description>
</rdf:RDF>
</outer>
# RFC3986 normal examples
@base <http://a/bb/ccc/d;p?q>.
<urn:ex:s001> <urn:ex:p> <g:h>.
<urn:ex:s002> <urn:ex:p> <g>.
<urn:ex:s003> <urn:ex:p> <./g>.
<urn:ex:s004> <urn:ex:p> <g/>.
<urn:ex:s005> <urn:ex:p> </g>.
<urn:ex:s006> <urn:ex:p> <//g>.
<urn:ex:s007> <urn:ex:p> <?y>.
<urn:ex:s008> <urn:ex:p> <g?y>.
<urn:ex:s009> <urn:ex:p> <#s>.
<urn:ex:s010> <urn:ex:p> <g#s>.
<urn:ex:s011> <urn:ex:p> <g?y#s>.
<urn:ex:s012> <urn:ex:p> <;x>.
<urn:ex:s013> <urn:ex:p> <g;x>.
<urn:ex:s014> <urn:ex:p> <g;x?y#s>.
<urn:ex:s015> <urn:ex:p> <>.
<urn:ex:s016> <urn:ex:p> <.>.
<urn:ex:s017> <urn:ex:p> <./>.
<urn:ex:s018> <urn:ex:p> <..>.
<urn:ex:s019> <urn:ex:p> <../>.
<urn:ex:s020> <urn:ex:p> <../g>.
<urn:ex:s021> <urn:ex:p> <../..>.
<urn:ex:s022> <urn:ex:p> <../../>.
<urn:ex:s023> <urn:ex:p> <../../g>.
# RFC3986 abnormal examples
@base <http://a/bb/ccc/d;p?q>.
<urn:ex:s024> <urn:ex:p> <../../../g>.
<urn:ex:s025> <urn:ex:p> <../../../../g>.
<urn:ex:s026> <urn:ex:p> </./g>.
<urn:ex:s027> <urn:ex:p> </../g>.
<urn:ex:s028> <urn:ex:p> <g.>.
<urn:ex:s029> <urn:ex:p> <.g>.
<urn:ex:s030> <urn:ex:p> <g..>.
<urn:ex:s031> <urn:ex:p> <..g>.
<urn:ex:s032> <urn:ex:p> <./../g>.
<urn:ex:s033> <urn:ex:p> <./g/.>.
<urn:ex:s034> <urn:ex:p> <g/./h>.
<urn:ex:s035> <urn:ex:p> <g/../h>.
<urn:ex:s036> <urn:ex:p> <g;x=1/./y>.
<urn:ex:s037> <urn:ex:p> <g;x=1/../y>.
<urn:ex:s038> <urn:ex:p> <g?y/./x>.
<urn:ex:s039> <urn:ex:p> <g?y/../x>.
<urn:ex:s040> <urn:ex:p> <g#s/./x>.
<urn:ex:s041> <urn:ex:p> <g#s/../x>.
<urn:ex:s042> <urn:ex:p> <http:g>.
# RFC3986 normal examples with trailing slash in base IRI
@base <http://a/bb/ccc/d/>.
<urn:ex:s043> <urn:ex:p> <g:h>.
<urn:ex:s044> <urn:ex:p> <g>.
<urn:ex:s045> <urn:ex:p> <./g>.
<urn:ex:s046> <urn:ex:p> <g/>.
<urn:ex:s047> <urn:ex:p> </g>.
<urn:ex:s048> <urn:ex:p> <//g>.
<urn:ex:s049> <urn:ex:p> <?y>.
<urn:ex:s050> <urn:ex:p> <g?y>.
<urn:ex:s051> <urn:ex:p> <#s>.
<urn:ex:s052> <urn:ex:p> <g#s>.
<urn:ex:s053> <urn:ex:p> <g?y#s>.
<urn:ex:s054> <urn:ex:p> <;x>.
<urn:ex:s055> <urn:ex:p> <g;x>.
<urn:ex:s056> <urn:ex:p> <g;x?y#s>.
<urn:ex:s057> <urn:ex:p> <>.
<urn:ex:s058> <urn:ex:p> <.>.
<urn:ex:s059> <urn:ex:p> <./>.
<urn:ex:s060> <urn:ex:p> <..>.
<urn:ex:s061> <urn:ex:p> <../>.
<urn:ex:s062> <urn:ex:p> <../g>.
<urn:ex:s063> <urn:ex:p> <../..>.
<urn:ex:s064> <urn:ex:p> <../../>.
<urn:ex:s065> <urn:ex:p> <../../g>.
# RFC3986 abnormal examples with trailing slash in base IRI
@base <http://a/bb/ccc/d/>.
<urn:ex:s066> <urn:ex:p> <../../../g>.
<urn:ex:s067> <urn:ex:p> <../../../../g>.
<urn:ex:s068> <urn:ex:p> </./g>.
<urn:ex:s069> <urn:ex:p> </../g>.
<urn:ex:s070> <urn:ex:p> <g.>.
<urn:ex:s071> <urn:ex:p> <.g>.
<urn:ex:s072> <urn:ex:p> <g..>.
<urn:ex:s073> <urn:ex:p> <..g>.
<urn:ex:s074> <urn:ex:p> <./../g>.
<urn:ex:s075> <urn:ex:p> <./g/.>.
<urn:ex:s076> <urn:ex:p> <g/./h>.
<urn:ex:s077> <urn:ex:p> <g/../h>.
<urn:ex:s078> <urn:ex:p> <g;x=1/./y>.
<urn:ex:s079> <urn:ex:p> <g;x=1/../y>.
<urn:ex:s080> <urn:ex:p> <g?y/./x>.
<urn:ex:s081> <urn:ex:p> <g?y/../x>.
<urn:ex:s082> <urn:ex:p> <g#s/./x>.
<urn:ex:s083> <urn:ex:p> <g#s/../x>.
<urn:ex:s084> <urn:ex:p> <http:g>.
# RFC3986 normal examples with /. in the base IRI
@base <http://a/bb/ccc/./d;p?q>.
<urn:ex:s085> <urn:ex:p> <g:h>.
<urn:ex:s086> <urn:ex:p> <g>.
<urn:ex:s087> <urn:ex:p> <./g>.
<urn:ex:s088> <urn:ex:p> <g/>.
<urn:ex:s089> <urn:ex:p> </g>.
<urn:ex:s090> <urn:ex:p> <//g>.
<urn:ex:s091> <urn:ex:p> <?y>.
<urn:ex:s092> <urn:ex:p> <g?y>.
<urn:ex:s093> <urn:ex:p> <#s>.
<urn:ex:s094> <urn:ex:p> <g#s>.
<urn:ex:s095> <urn:ex:p> <g?y#s>.
<urn:ex:s096> <urn:ex:p> <;x>.
<urn:ex:s097> <urn:ex:p> <g;x>.
<urn:ex:s098> <urn:ex:p> <g;x?y#s>.
<urn:ex:s099> <urn:ex:p> <>.
<urn:ex:s100> <urn:ex:p> <.>.
<urn:ex:s101> <urn:ex:p> <./>.
<urn:ex:s102> <urn:ex:p> <..>.
<urn:ex:s103> <urn:ex:p> <../>.
<urn:ex:s104> <urn:ex:p> <../g>.
<urn:ex:s105> <urn:ex:p> <../..>.
<urn:ex:s106> <urn:ex:p> <../../>.
<urn:ex:s107> <urn:ex:p> <../../g>.
# RFC3986 abnormal examples with /. in the base IRI
@base <http://a/bb/ccc/./d;p?q>.
<urn:ex:s108> <urn:ex:p> <../../../g>.
<urn:ex:s109> <urn:ex:p> <../../../../g>.
<urn:ex:s110> <urn:ex:p> </./g>.
<urn:ex:s111> <urn:ex:p> </../g>.
<urn:ex:s112> <urn:ex:p> <g.>.
<urn:ex:s113> <urn:ex:p> <.g>.
<urn:ex:s114> <urn:ex:p> <g..>.
<urn:ex:s115> <urn:ex:p> <..g>.
<urn:ex:s116> <urn:ex:p> <./../g>.
<urn:ex:s117> <urn:ex:p> <./g/.>.
<urn:ex:s118> <urn:ex:p> <g/./h>.
<urn:ex:s119> <urn:ex:p> <g/../h>.
<urn:ex:s120> <urn:ex:p> <g;x=1/./y>.
<urn:ex:s121> <urn:ex:p> <g;x=1/../y>.
<urn:ex:s122> <urn:ex:p> <g?y/./x>.
<urn:ex:s123> <urn:ex:p> <g?y/../x>.
<urn:ex:s124> <urn:ex:p> <g#s/./x>.
<urn:ex:s125> <urn:ex:p> <g#s/../x>.
<urn:ex:s126> <urn:ex:p> <http:g>.
# RFC3986 normal examples with /.. in the base IRI
@base <http://a/bb/ccc/../d;p?q>.
<urn:ex:s127> <urn:ex:p> <g:h>.
<urn:ex:s128> <urn:ex:p> <g>.
<urn:ex:s129> <urn:ex:p> <./g>.
<urn:ex:s130> <urn:ex:p> <g/>.
<urn:ex:s131> <urn:ex:p> </g>.
<urn:ex:s132> <urn:ex:p> <//g>.
<urn:ex:s133> <urn:ex:p> <?y>.
<urn:ex:s134> <urn:ex:p> <g?y>.
<urn:ex:s135> <urn:ex:p> <#s>.
<urn:ex:s136> <urn:ex:p> <g#s>.
<urn:ex:s137> <urn:ex:p> <g?y#s>.
<urn:ex:s138> <urn:ex:p> <;x>.
<urn:ex:s139> <urn:ex:p> <g;x>.
<urn:ex:s140> <urn:ex:p> <g;x?y#s>.
<urn:ex:s141> <urn:ex:p> <>.
<urn:ex:s142> <urn:ex:p> <.>.
<urn:ex:s143> <urn:ex:p> <./>.
<urn:ex:s144> <urn:ex:p> <..>.
<urn:ex:s145> <urn:ex:p> <../>.
<urn:ex:s146> <urn:ex:p> <../g>.
<urn:ex:s147> <urn:ex:p> <../..>.
<urn:ex:s148> <urn:ex:p> <../../>.
<urn:ex:s149> <urn:ex:p> <../../g>.
# RFC3986 abnormal examples with /.. in the base IRI
@base <http://a/bb/ccc/../d;p?q>.
<urn:ex:s150> <urn:ex:p> <../../../g>.
<urn:ex:s151> <urn:ex:p> <../../../../g>.
<urn:ex:s152> <urn:ex:p> </./g>.
<urn:ex:s153> <urn:ex:p> </../g>.
<urn:ex:s154> <urn:ex:p> <g.>.
<urn:ex:s155> <urn:ex:p> <.g>.
<urn:ex:s156> <urn:ex:p> <g..>.
<urn:ex:s157> <urn:ex:p> <..g>.
<urn:ex:s158> <urn:ex:p> <./../g>.
<urn:ex:s159> <urn:ex:p> <./g/.>.
<urn:ex:s160> <urn:ex:p> <g/./h>.
<urn:ex:s161> <urn:ex:p> <g/../h>.
<urn:ex:s162> <urn:ex:p> <g;x=1/./y>.
<urn:ex:s163> <urn:ex:p> <g;x=1/../y>.
<urn:ex:s164> <urn:ex:p> <g?y/./x>.
<urn:ex:s165> <urn:ex:p> <g?y/../x>.
<urn:ex:s166> <urn:ex:p> <g#s/./x>.
<urn:ex:s167> <urn:ex:p> <g#s/../x>.
<urn:ex:s168> <urn:ex:p> <http:g>.
# RFC3986 normal examples with trailing /. in the base IRI
@base <http://a/bb/ccc/.>.
<urn:ex:s169> <urn:ex:p> <g:h>.
<urn:ex:s170> <urn:ex:p> <g>.
<urn:ex:s171> <urn:ex:p> <./g>.
<urn:ex:s172> <urn:ex:p> <g/>.
<urn:ex:s173> <urn:ex:p> </g>.
<urn:ex:s174> <urn:ex:p> <//g>.
<urn:ex:s175> <urn:ex:p> <?y>.
<urn:ex:s176> <urn:ex:p> <g?y>.
<urn:ex:s177> <urn:ex:p> <#s>.
<urn:ex:s178> <urn:ex:p> <g#s>.
<urn:ex:s179> <urn:ex:p> <g?y#s>.
<urn:ex:s180> <urn:ex:p> <;x>.
<urn:ex:s181> <urn:ex:p> <g;x>.
<urn:ex:s182> <urn:ex:p> <g;x?y#s>.
<urn:ex:s183> <urn:ex:p> <>.
<urn:ex:s184> <urn:ex:p> <.>.
<urn:ex:s185> <urn:ex:p> <./>.
<urn:ex:s186> <urn:ex:p> <..>.
<urn:ex:s187> <urn:ex:p> <../>.
<urn:ex:s188> <urn:ex:p> <../g>.
<urn:ex:s189> <urn:ex:p> <../..>.
<urn:ex:s190> <urn:ex:p> <../../>.
<urn:ex:s191> <urn:ex:p> <../../g>.
# RFC3986 abnormal examples with trailing /. in the base IRI
@base <http://a/bb/ccc/.>.
<urn:ex:s192> <urn:ex:p> <../../../g>.
<urn:ex:s193> <urn:ex:p> <../../../../g>.
<urn:ex:s194> <urn:ex:p> </./g>.
<urn:ex:s195> <urn:ex:p> </../g>.
<urn:ex:s196> <urn:ex:p> <g.>.
<urn:ex:s197> <urn:ex:p> <.g>.
<urn:ex:s198> <urn:ex:p> <g..>.
<urn:ex:s199> <urn:ex:p> <..g>.
<urn:ex:s200> <urn:ex:p> <./../g>.
<urn:ex:s201> <urn:ex:p> <./g/.>.
<urn:ex:s202> <urn:ex:p> <g/./h>.
<urn:ex:s203> <urn:ex:p> <g/../h>.
<urn:ex:s204> <urn:ex:p> <g;x=1/./y>.
<urn:ex:s205> <urn:ex:p> <g;x=1/../y>.
<urn:ex:s206> <urn:ex:p> <g?y/./x>.
<urn:ex:s207> <urn:ex:p> <g?y/../x>.
<urn:ex:s208> <urn:ex:p> <g#s/./x>.
<urn:ex:s209> <urn:ex:p> <g#s/../x>.
<urn:ex:s210> <urn:ex:p> <http:g>.
# RFC3986 normal examples with trailing /.. in the base IRI
@base <http://a/bb/ccc/..>.
<urn:ex:s211> <urn:ex:p> <g:h>.
<urn:ex:s212> <urn:ex:p> <g>.
<urn:ex:s213> <urn:ex:p> <./g>.
<urn:ex:s214> <urn:ex:p> <g/>.
<urn:ex:s215> <urn:ex:p> </g>.
<urn:ex:s216> <urn:ex:p> <//g>.
<urn:ex:s217> <urn:ex:p> <?y>.
<urn:ex:s218> <urn:ex:p> <g?y>.
<urn:ex:s219> <urn:ex:p> <#s>.
<urn:ex:s220> <urn:ex:p> <g#s>.
<urn:ex:s221> <urn:ex:p> <g?y#s>.
<urn:ex:s222> <urn:ex:p> <;x>.
<urn:ex:s223> <urn:ex:p> <g;x>.
<urn:ex:s224> <urn:ex:p> <g;x?y#s>.
<urn:ex:s225> <urn:ex:p> <>.
<urn:ex:s226> <urn:ex:p> <.>.
<urn:ex:s227> <urn:ex:p> <./>.
<urn:ex:s228> <urn:ex:p> <..>.
<urn:ex:s229> <urn:ex:p> <../>.
<urn:ex:s230> <urn:ex:p> <../g>.
<urn:ex:s231> <urn:ex:p> <../..>.
<urn:ex:s232> <urn:ex:p> <../../>.
<urn:ex:s233> <urn:ex:p> <../../g>.
# RFC3986 abnormal examples with trailing /.. in the base IRI
@base <http://a/bb/ccc/..>.
<urn:ex:s234> <urn:ex:p> <../../../g>.
<urn:ex:s235> <urn:ex:p> <../../../../g>.
<urn:ex:s236> <urn:ex:p> </./g>.
<urn:ex:s237> <urn:ex:p> </../g>.
<urn:ex:s238> <urn:ex:p> <g.>.
<urn:ex:s239> <urn:ex:p> <.g>.
<urn:ex:s240> <urn:ex:p> <g..>.
<urn:ex:s241> <urn:ex:p> <..g>.
<urn:ex:s242> <urn:ex:p> <./../g>.
<urn:ex:s243> <urn:ex:p> <./g/.>.
<urn:ex:s244> <urn:ex:p> <g/./h>.
<urn:ex:s245> <urn:ex:p> <g/../h>.
<urn:ex:s246> <urn:ex:p> <g;x=1/./y>.
<urn:ex:s247> <urn:ex:p> <g;x=1/../y>.
<urn:ex:s248> <urn:ex:p> <g?y/./x>.
<urn:ex:s249> <urn:ex:p> <g?y/../x>.
<urn:ex:s250> <urn:ex:p> <g#s/./x>.
<urn:ex:s251> <urn:ex:p> <g#s/../x>.
<urn:ex:s252> <urn:ex:p> <http:g>.
# RFC3986 normal examples with file path
@base <file:///a/bb/ccc/d;p?q>.
<urn:ex:s253> <urn:ex:p> <g:h>.
<urn:ex:s254> <urn:ex:p> <g>.
<urn:ex:s255> <urn:ex:p> <./g>.
<urn:ex:s256> <urn:ex:p> <g/>.
<urn:ex:s257> <urn:ex:p> </g>.
<urn:ex:s258> <urn:ex:p> <//g>.
<urn:ex:s259> <urn:ex:p> <?y>.
<urn:ex:s260> <urn:ex:p> <g?y>.
<urn:ex:s261> <urn:ex:p> <#s>.
<urn:ex:s262> <urn:ex:p> <g#s>.
<urn:ex:s263> <urn:ex:p> <g?y#s>.
<urn:ex:s264> <urn:ex:p> <;x>.
<urn:ex:s265> <urn:ex:p> <g;x>.
<urn:ex:s266> <urn:ex:p> <g;x?y#s>.
<urn:ex:s267> <urn:ex:p> <>.
<urn:ex:s268> <urn:ex:p> <.>.
<urn:ex:s269> <urn:ex:p> <./>.
<urn:ex:s270> <urn:ex:p> <..>.
<urn:ex:s271> <urn:ex:p> <../>.
<urn:ex:s272> <urn:ex:p> <../g>.
<urn:ex:s273> <urn:ex:p> <../..>.
<urn:ex:s274> <urn:ex:p> <../../>.
<urn:ex:s275> <urn:ex:p> <../../g>.
# RFC3986 abnormal examples with file path
@base <file:///a/bb/ccc/d;p?q>.
<urn:ex:s276> <urn:ex:p> <../../../g>.
<urn:ex:s277> <urn:ex:p> <../../../../g>.
<urn:ex:s278> <urn:ex:p> </./g>.
<urn:ex:s279> <urn:ex:p> </../g>.
<urn:ex:s280> <urn:ex:p> <g.>.
<urn:ex:s281> <urn:ex:p> <.g>.
<urn:ex:s282> <urn:ex:p> <g..>.
<urn:ex:s283> <urn:ex:p> <..g>.
<urn:ex:s284> <urn:ex:p> <./../g>.
<urn:ex:s285> <urn:ex:p> <./g/.>.
<urn:ex:s286> <urn:ex:p> <g/./h>.
<urn:ex:s287> <urn:ex:p> <g/../h>.
<urn:ex:s288> <urn:ex:p> <g;x=1/./y>.
<urn:ex:s289> <urn:ex:p> <g;x=1/../y>.
<urn:ex:s290> <urn:ex:p> <g?y/./x>.
<urn:ex:s291> <urn:ex:p> <g?y/../x>.
<urn:ex:s292> <urn:ex:p> <g#s/./x>.
<urn:ex:s293> <urn:ex:p> <g#s/../x>.
<urn:ex:s294> <urn:ex:p> <http:g>.
# additional cases
@base <http://abc/def/ghi>.
<urn:ex:s295> <urn:ex:p> <.>.
<urn:ex:s296> <urn:ex:p> <.?a=b>.
<urn:ex:s297> <urn:ex:p> <.#a=b>.
<urn:ex:s298> <urn:ex:p> <..>.
<urn:ex:s299> <urn:ex:p> <..?a=b>.
<urn:ex:s300> <urn:ex:p> <..#a=b>.
@base <http://ab//de//ghi>.
<urn:ex:s301> <urn:ex:p> <xyz>.
<urn:ex:s302> <urn:ex:p> <./xyz>.
<urn:ex:s303> <urn:ex:p> <../xyz>.
@base <http://abc/d:f/ghi>.
<urn:ex:s304> <urn:ex:p> <xyz>.
<urn:ex:s305> <urn:ex:p> <./xyz>.
<urn:ex:s306> <urn:ex:p> <../xyz>.
<!DOCTYPE xhtml>
<html><body>
<div xml:base="http://a/bb/ccc/d;p?q">
<!-- RFC3986 normal examples -->
<link about="urn:ex:s001" property="urn:ex:p" href="g:h"/>
<link about="urn:ex:s002" property="urn:ex:p" href="g"/>
<link about="urn:ex:s003" property="urn:ex:p" href="./g"/>
<link about="urn:ex:s004" property="urn:ex:p" href="g/"/>
<link about="urn:ex:s005" property="urn:ex:p" href="/g"/>
<link about="urn:ex:s006" property="urn:ex:p" href="//g"/>
<link about="urn:ex:s007" property="urn:ex:p" href="?y"/>
<link about="urn:ex:s008" property="urn:ex:p" href="g?y"/>
<link about="urn:ex:s009" property="urn:ex:p" href="#s"/>
<link about="urn:ex:s010" property="urn:ex:p" href="g#s"/>
<link about="urn:ex:s011" property="urn:ex:p" href="g?y#s"/>
<link about="urn:ex:s012" property="urn:ex:p" href=";x"/>
<link about="urn:ex:s013" property="urn:ex:p" href="g;x"/>
<link about="urn:ex:s014" property="urn:ex:p" href="g;x?y#s"/>
<link about="urn:ex:s015" property="urn:ex:p" href=""/>
<link about="urn:ex:s016" property="urn:ex:p" href="."/>
<link about="urn:ex:s017" property="urn:ex:p" href="./"/>
<link about="urn:ex:s018" property="urn:ex:p" href=".."/>
<link about="urn:ex:s019" property="urn:ex:p" href="../"/>
<link about="urn:ex:s020" property="urn:ex:p" href="../g"/>
<link about="urn:ex:s021" property="urn:ex:p" href="../.."/>
<link about="urn:ex:s022" property="urn:ex:p" href="../../"/>
<link about="urn:ex:s023" property="urn:ex:p" href="../../g"/>
</div>
<div xml:base="http://a/bb/ccc/d;p?q">
<!-- RFC3986 abnormal examples -->
<link about="urn:ex:s024" property="urn:ex:p" href="../../../g"/>
<link about="urn:ex:s025" property="urn:ex:p" href="../../../../g"/>
<link about="urn:ex:s026" property="urn:ex:p" href="/./g"/>
<link about="urn:ex:s027" property="urn:ex:p" href="/../g"/>
<link about="urn:ex:s028" property="urn:ex:p" href="g."/>
<link about="urn:ex:s029" property="urn:ex:p" href=".g"/>
<link about="urn:ex:s030" property="urn:ex:p" href="g.."/>
<link about="urn:ex:s031" property="urn:ex:p" href="..g"/>
<link about="urn:ex:s032" property="urn:ex:p" href="./../g"/>
<link about="urn:ex:s033" property="urn:ex:p" href="./g/."/>
<link about="urn:ex:s034" property="urn:ex:p" href="g/./h"/>
<link about="urn:ex:s035" property="urn:ex:p" href="g/../h"/>
<link about="urn:ex:s036" property="urn:ex:p" href="g;x=1/./y"/>
<link about="urn:ex:s037" property="urn:ex:p" href="g;x=1/../y"/>
<link about="urn:ex:s038" property="urn:ex:p" href="g?y/./x"/>
<link about="urn:ex:s039" property="urn:ex:p" href="g?y/../x"/>
<link about="urn:ex:s040" property="urn:ex:p" href="g#s/./x"/>
<link about="urn:ex:s041" property="urn:ex:p" href="g#s/../x"/>
<link about="urn:ex:s042" property="urn:ex:p" href="http:g"/>
</div>
<div xml:base="http://a/bb/ccc/d/">
<!-- RFC3986 normal examples with trailing slash in base IRI -->
<link about="urn:ex:s043" property="urn:ex:p" href="g:h"/>
<link about="urn:ex:s044" property="urn:ex:p" href="g"/>
<link about="urn:ex:s045" property="urn:ex:p" href="./g"/>
<link about="urn:ex:s046" property="urn:ex:p" href="g/"/>
<link about="urn:ex:s047" property="urn:ex:p" href="/g"/>
<link about="urn:ex:s048" property="urn:ex:p" href="//g"/>
<link about="urn:ex:s049" property="urn:ex:p" href="?y"/>
<link about="urn:ex:s050" property="urn:ex:p" href="g?y"/>
<link about="urn:ex:s051" property="urn:ex:p" href="#s"/>
<link about="urn:ex:s052" property="urn:ex:p" href="g#s"/>
<link about="urn:ex:s053" property="urn:ex:p" href="g?y#s"/>
<link about="urn:ex:s054" property="urn:ex:p" href=";x"/>
<link about="urn:ex:s055" property="urn:ex:p" href="g;x"/>
<link about="urn:ex:s056" property="urn:ex:p" href="g;x?y#s"/>
<link about="urn:ex:s057" property="urn:ex:p" href=""/>
<link about="urn:ex:s058" property="urn:ex:p" href="."/>
<link about="urn:ex:s059" property="urn:ex:p" href="./"/>
<link about="urn:ex:s060" property="urn:ex:p" href=".."/>
<link about="urn:ex:s061" property="urn:ex:p" href="../"/>
<link about="urn:ex:s062" property="urn:ex:p" href="../g"/>
<link about="urn:ex:s063" property="urn:ex:p" href="../.."/>
<link about="urn:ex:s064" property="urn:ex:p" href="../../"/>
<link about="urn:ex:s065" property="urn:ex:p" href="../../g"/>
</div>
<div xml:base="http://a/bb/ccc/d/">
<!-- RFC3986 abnormal examples with trailing slash in base IRI -->
<link about="urn:ex:s066" property="urn:ex:p" href="../../../g"/>
<link about="urn:ex:s067" property="urn:ex:p" href="../../../../g"/>
<link about="urn:ex:s068" property="urn:ex:p" href="/./g"/>
<link about="urn:ex:s069" property="urn:ex:p" href="/../g"/>
<link about="urn:ex:s070" property="urn:ex:p" href="g."/>
<link about="urn:ex:s071" property="urn:ex:p" href=".g"/>
<link about="urn:ex:s072" property="urn:ex:p" href="g.."/>
<link about="urn:ex:s073" property="urn:ex:p" href="..g"/>
<link about="urn:ex:s074" property="urn:ex:p" href="./../g"/>
<link about="urn:ex:s075" property="urn:ex:p" href="./g/."/>
<link about="urn:ex:s076" property="urn:ex:p" href="g/./h"/>
<link about="urn:ex:s077" property="urn:ex:p" href="g/../h"/>
<link about="urn:ex:s078" property="urn:ex:p" href="g;x=1/./y"/>
<link about="urn:ex:s079" property="urn:ex:p" href="g;x=1/../y"/>
<link about="urn:ex:s080" property="urn:ex:p" href="g?y/./x"/>
<link about="urn:ex:s081" property="urn:ex:p" href="g?y/../x"/>
<link about="urn:ex:s082" property="urn:ex:p" href="g#s/./x"/>
<link about="urn:ex:s083" property="urn:ex:p" href="g#s/../x"/>
<link about="urn:ex:s084" property="urn:ex:p" href="http:g"/>
</div>
<div xml:base="http://a/bb/ccc/./d;p?q">
<!-- RFC3986 normal examples0 with ./ in the base IRI -->
<link about="urn:ex:s085" property="urn:ex:p" href="g:h"/>
<link about="urn:ex:s086" property="urn:ex:p" href="g"/>
<link about="urn:ex:s087" property="urn:ex:p" href="./g"/>
<link about="urn:ex:s088" property="urn:ex:p" href="g/"/>
<link about="urn:ex:s089" property="urn:ex:p" href="/g"/>
<link about="urn:ex:s090" property="urn:ex:p" href="//g"/>
<link about="urn:ex:s091" property="urn:ex:p" href="?y"/>
<link about="urn:ex:s092" property="urn:ex:p" href="g?y"/>
<link about="urn:ex:s093" property="urn:ex:p" href="#s"/>
<link about="urn:ex:s094" property="urn:ex:p" href="g#s"/>
<link about="urn:ex:s095" property="urn:ex:p" href="g?y#s"/>
<link about="urn:ex:s096" property="urn:ex:p" href=";x"/>
<link about="urn:ex:s097" property="urn:ex:p" href="g;x"/>
<link about="urn:ex:s098" property="urn:ex:p" href="g;x?y#s"/>
<link about="urn:ex:s099" property="urn:ex:p" href=""/>
<link about="urn:ex:s100" property="urn:ex:p" href="."/>
<link about="urn:ex:s101" property="urn:ex:p" href="./"/>
<link about="urn:ex:s102" property="urn:ex:p" href=".."/>
<link about="urn:ex:s103" property="urn:ex:p" href="../"/>
<link about="urn:ex:s104" property="urn:ex:p" href="../g"/>
<link about="urn:ex:s105" property="urn:ex:p" href="../.."/>
<link about="urn:ex:s106" property="urn:ex:p" href="../../"/>
<link about="urn:ex:s107" property="urn:ex:p" href="../../g"/>
</div>
<div xml:base="http://a/bb/ccc/./d;p?q">
<!-- RFC3986 abnormal examples with ./ in the base IRI -->
<link about="urn:ex:s108" property="urn:ex:p" href="../../../g"/>
<link about="urn:ex:s109" property="urn:ex:p" href="../../../../g"/>
<link about="urn:ex:s110" property="urn:ex:p" href="/./g"/>
<link about="urn:ex:s111" property="urn:ex:p" href="/../g"/>
<link about="urn:ex:s112" property="urn:ex:p" href="g."/>
<link about="urn:ex:s113" property="urn:ex:p" href=".g"/>
<link about="urn:ex:s114" property="urn:ex:p" href="g.."/>
<link about="urn:ex:s115" property="urn:ex:p" href="..g"/>
<link about="urn:ex:s116" property="urn:ex:p" href="./../g"/>
<link about="urn:ex:s117" property="urn:ex:p" href="./g/."/>
<link about="urn:ex:s118" property="urn:ex:p" href="g/./h"/>
<link about="urn:ex:s119" property="urn:ex:p" href="g/../h"/>
<link about="urn:ex:s120" property="urn:ex:p" href="g;x=1/./y"/>
<link about="urn:ex:s121" property="urn:ex:p" href="g;x=1/../y"/>
<link about="urn:ex:s122" property="urn:ex:p" href="g?y/./x"/>
<link about="urn:ex:s123" property="urn:ex:p" href="g?y/../x"/>
<link about="urn:ex:s124" property="urn:ex:p" href="g#s/./x"/>
<link about="urn:ex:s125" property="urn:ex:p" href="g#s/../x"/>
<link about="urn:ex:s126" property="urn:ex:p" href="http:g"/>
</div>
<div xml:base="http://a/bb/ccc/../d;p?q">
<!-- RFC3986 normal examples with ../ in the base IRI -->
<link about="urn:ex:s127" property="urn:ex:p" href="g:h"/>
<link about="urn:ex:s128" property="urn:ex:p" href="g"/>
<link about="urn:ex:s129" property="urn:ex:p" href="./g"/>
<link about="urn:ex:s130" property="urn:ex:p" href="g/"/>
<link about="urn:ex:s131" property="urn:ex:p" href="/g"/>
<link about="urn:ex:s132" property="urn:ex:p" href="//g"/>
<link about="urn:ex:s133" property="urn:ex:p" href="?y"/>
<link about="urn:ex:s134" property="urn:ex:p" href="g?y"/>
<link about="urn:ex:s135" property="urn:ex:p" href="#s"/>
<link about="urn:ex:s136" property="urn:ex:p" href="g#s"/>
<link about="urn:ex:s137" property="urn:ex:p" href="g?y#s"/>
<link about="urn:ex:s138" property="urn:ex:p" href=";x"/>
<link about="urn:ex:s139" property="urn:ex:p" href="g;x"/>
<link about="urn:ex:s140" property="urn:ex:p" href="g;x?y#s"/>
<link about="urn:ex:s141" property="urn:ex:p" href=""/>
<link about="urn:ex:s142" property="urn:ex:p" href="."/>
<link about="urn:ex:s143" property="urn:ex:p" href="./"/>
<link about="urn:ex:s144" property="urn:ex:p" href=".."/>
<link about="urn:ex:s145" property="urn:ex:p" href="../"/>
<link about="urn:ex:s146" property="urn:ex:p" href="../g"/>
<link about="urn:ex:s147" property="urn:ex:p" href="../.."/>
<link about="urn:ex:s148" property="urn:ex:p" href="../../"/>
<link about="urn:ex:s149" property="urn:ex:p" href="../../g"/>
</div>
<div xml:base="http://a/bb/ccc/../d;p?q">
<!-- RFC3986 abnormal examples with ../ in the base IRI -->
<link about="urn:ex:s150" property="urn:ex:p" href="../../../g"/>
<link about="urn:ex:s151" property="urn:ex:p" href="../../../../g"/>
<link about="urn:ex:s152" property="urn:ex:p" href="/./g"/>
<link about="urn:ex:s153" property="urn:ex:p" href="/../g"/>
<link about="urn:ex:s154" property="urn:ex:p" href="g."/>
<link about="urn:ex:s155" property="urn:ex:p" href=".g"/>
<link about="urn:ex:s156" property="urn:ex:p" href="g.."/>
<link about="urn:ex:s157" property="urn:ex:p" href="..g"/>
<link about="urn:ex:s158" property="urn:ex:p" href="./../g"/>
<link about="urn:ex:s159" property="urn:ex:p" href="./g/."/>
<link about="urn:ex:s160" property="urn:ex:p" href="g/./h"/>
<link about="urn:ex:s161" property="urn:ex:p" href="g/../h"/>
<link about="urn:ex:s162" property="urn:ex:p" href="g;x=1/./y"/>
<link about="urn:ex:s163" property="urn:ex:p" href="g;x=1/../y"/>
<link about="urn:ex:s164" property="urn:ex:p" href="g?y/./x"/>
<link about="urn:ex:s165" property="urn:ex:p" href="g?y/../x"/>
<link about="urn:ex:s166" property="urn:ex:p" href="g#s/./x"/>
<link about="urn:ex:s167" property="urn:ex:p" href="g#s/../x"/>
<link about="urn:ex:s168" property="urn:ex:p" href="http:g"/>
</div>
<div xml:base="http://a/bb/ccc/.">
<!-- RFC3986 normal examples with trailing ./ in the base IRI -->
<link about="urn:ex:s169" property="urn:ex:p" href="g:h"/>
<link about="urn:ex:s170" property="urn:ex:p" href="g"/>
<link about="urn:ex:s171" property="urn:ex:p" href="./g"/>
<link about="urn:ex:s172" property="urn:ex:p" href="g/"/>
<link about="urn:ex:s173" property="urn:ex:p" href="/g"/>
<link about="urn:ex:s174" property="urn:ex:p" href="//g"/>
<link about="urn:ex:s175" property="urn:ex:p" href="?y"/>
<link about="urn:ex:s176" property="urn:ex:p" href="g?y"/>
<link about="urn:ex:s177" property="urn:ex:p" href="#s"/>
<link about="urn:ex:s178" property="urn:ex:p" href="g#s"/>
<link about="urn:ex:s179" property="urn:ex:p" href="g?y#s"/>
<link about="urn:ex:s180" property="urn:ex:p" href=";x"/>
<link about="urn:ex:s181" property="urn:ex:p" href="g;x"/>
<link about="urn:ex:s182" property="urn:ex:p" href="g;x?y#s"/>
<link about="urn:ex:s183" property="urn:ex:p" href=""/>
<link about="urn:ex:s184" property="urn:ex:p" href="."/>
<link about="urn:ex:s185" property="urn:ex:p" href="./"/>
<link about="urn:ex:s186" property="urn:ex:p" href=".."/>
<link about="urn:ex:s187" property="urn:ex:p" href="../"/>
<link about="urn:ex:s188" property="urn:ex:p" href="../g"/>
<link about="urn:ex:s189" property="urn:ex:p" href="../.."/>
<link about="urn:ex:s190" property="urn:ex:p" href="../../"/>
<link about="urn:ex:s191" property="urn:ex:p" href="../../g"/>
</div>
<div xml:base="http://a/bb/ccc/.">
<!-- RFC3986 abnormal examples with trailing ./ in the base IRI -->
<link about="urn:ex:s192" property="urn:ex:p" href="../../../g"/>
<link about="urn:ex:s193" property="urn:ex:p" href="../../../../g"/>
<link about="urn:ex:s194" property="urn:ex:p" href="/./g"/>
<link about="urn:ex:s195" property="urn:ex:p" href="/../g"/>
<link about="urn:ex:s196" property="urn:ex:p" href="g."/>
<link about="urn:ex:s197" property="urn:ex:p" href=".g"/>
<link about="urn:ex:s198" property="urn:ex:p" href="g.."/>
<link about="urn:ex:s199" property="urn:ex:p" href="..g"/>
<link about="urn:ex:s200" property="urn:ex:p" href="./../g"/>
<link about="urn:ex:s201" property="urn:ex:p" href="./g/."/>
<link about="urn:ex:s202" property="urn:ex:p" href="g/./h"/>
<link about="urn:ex:s203" property="urn:ex:p" href="g/../h"/>
<link about="urn:ex:s204" property="urn:ex:p" href="g;x=1/./y"/>
<link about="urn:ex:s205" property="urn:ex:p" href="g;x=1/../y"/>
<link about="urn:ex:s206" property="urn:ex:p" href="g?y/./x"/>
<link about="urn:ex:s207" property="urn:ex:p" href="g?y/../x"/>
<link about="urn:ex:s208" property="urn:ex:p" href="g#s/./x"/>
<link about="urn:ex:s209" property="urn:ex:p" href="g#s/../x"/>
<link about="urn:ex:s210" property="urn:ex:p" href="http:g"/>
</div>
<div xml:base="http://a/bb/ccc/..">
<!-- RFC3986 normal examples with trailing ../ in the base IRI -->
<link about="urn:ex:s211" property="urn:ex:p" href="g:h"/>
<link about="urn:ex:s212" property="urn:ex:p" href="g"/>
<link about="urn:ex:s213" property="urn:ex:p" href="./g"/>
<link about="urn:ex:s214" property="urn:ex:p" href="g/"/>
<link about="urn:ex:s215" property="urn:ex:p" href="/g"/>
<link about="urn:ex:s216" property="urn:ex:p" href="//g"/>
<link about="urn:ex:s217" property="urn:ex:p" href="?y"/>
<link about="urn:ex:s218" property="urn:ex:p" href="g?y"/>
<link about="urn:ex:s219" property="urn:ex:p" href="#s"/>
<link about="urn:ex:s220" property="urn:ex:p" href="g#s"/>
<link about="urn:ex:s221" property="urn:ex:p" href="g?y#s"/>
<link about="urn:ex:s222" property="urn:ex:p" href=";x"/>
<link about="urn:ex:s223" property="urn:ex:p" href="g;x"/>
<link about="urn:ex:s224" property="urn:ex:p" href="g;x?y#s"/>
<link about="urn:ex:s225" property="urn:ex:p" href=""/>
<link about="urn:ex:s226" property="urn:ex:p" href="."/>
<link about="urn:ex:s227" property="urn:ex:p" href="./"/>
<link about="urn:ex:s228" property="urn:ex:p" href=".."/>
<link about="urn:ex:s229" property="urn:ex:p" href="../"/>
<link about="urn:ex:s230" property="urn:ex:p" href="../g"/>
<link about="urn:ex:s231" property="urn:ex:p" href="../.."/>
<link about="urn:ex:s232" property="urn:ex:p" href="../../"/>
<link about="urn:ex:s233" property="urn:ex:p" href="../../g"/>
<link about="urn:ex:s210" property="urn:ex:p" href="http:g"/>
</div>
<div xml:base="http://a/bb/ccc/..">
<!-- RFC3986 abnormal examples with trailing ../ in the base IRI -->
<link about="urn:ex:s234" property="urn:ex:p" href="../../../g"/>
<link about="urn:ex:s235" property="urn:ex:p" href="../../../../g"/>
<link about="urn:ex:s236" property="urn:ex:p" href="/./g"/>
<link about="urn:ex:s237" property="urn:ex:p" href="/../g"/>
<link about="urn:ex:s238" property="urn:ex:p" href="g."/>
<link about="urn:ex:s239" property="urn:ex:p" href=".g"/>
<link about="urn:ex:s240" property="urn:ex:p" href="g.."/>
<link about="urn:ex:s241" property="urn:ex:p" href="..g"/>
<link about="urn:ex:s242" property="urn:ex:p" href="./../g"/>
<link about="urn:ex:s243" property="urn:ex:p" href="./g/."/>
<link about="urn:ex:s244" property="urn:ex:p" href="g/./h"/>
<link about="urn:ex:s245" property="urn:ex:p" href="g/../h"/>
<link about="urn:ex:s246" property="urn:ex:p" href="g;x=1/./y"/>
<link about="urn:ex:s247" property="urn:ex:p" href="g;x=1/../y"/>
<link about="urn:ex:s248" property="urn:ex:p" href="g?y/./x"/>
<link about="urn:ex:s249" property="urn:ex:p" href="g?y/../x"/>
<link about="urn:ex:s250" property="urn:ex:p" href="g#s/./x"/>
<link about="urn:ex:s251" property="urn:ex:p" href="g#s/../x"/>
<link about="urn:ex:s252" property="urn:ex:p" href="http:g"/>
</div>
<div xml:base="file:///a/bb/ccc/d;p?q">
<!-- RFC3986 normal examples with file path -->
<link about="urn:ex:s253" property="urn:ex:p" href="g:h"/>
<link about="urn:ex:s254" property="urn:ex:p" href="g"/>
<link about="urn:ex:s255" property="urn:ex:p" href="./g"/>
<link about="urn:ex:s256" property="urn:ex:p" href="g/"/>
<link about="urn:ex:s257" property="urn:ex:p" href="/g"/>
<link about="urn:ex:s258" property="urn:ex:p" href="//g"/>
<link about="urn:ex:s259" property="urn:ex:p" href="?y"/>
<link about="urn:ex:s260" property="urn:ex:p" href="g?y"/>
<link about="urn:ex:s261" property="urn:ex:p" href="#s"/>
<link about="urn:ex:s262" property="urn:ex:p" href="g#s"/>
<link about="urn:ex:s263" property="urn:ex:p" href="g?y#s"/>
<link about="urn:ex:s264" property="urn:ex:p" href=";x"/>
<link about="urn:ex:s265" property="urn:ex:p" href="g;x"/>
<link about="urn:ex:s266" property="urn:ex:p" href="g;x?y#s"/>
<link about="urn:ex:s267" property="urn:ex:p" href=""/>
<link about="urn:ex:s268" property="urn:ex:p" href="."/>
<link about="urn:ex:s269" property="urn:ex:p" href="./"/>
<link about="urn:ex:s270" property="urn:ex:p" href=".."/>
<link about="urn:ex:s271" property="urn:ex:p" href="../"/>
<link about="urn:ex:s272" property="urn:ex:p" href="../g"/>
<link about="urn:ex:s273" property="urn:ex:p" href="../.."/>
<link about="urn:ex:s274" property="urn:ex:p" href="../../"/>
<link about="urn:ex:s275" property="urn:ex:p" href="../../g"/>
</div>
<div xml:base="file:///a/bb/ccc/d;p?q">
<!-- RFC3986 abnormal examples with file path -->
<link about="urn:ex:s276" property="urn:ex:p" href="../../../g"/>
<link about="urn:ex:s277" property="urn:ex:p" href="../../../../g"/>
<link about="urn:ex:s278" property="urn:ex:p" href="/./g"/>
<link about="urn:ex:s279" property="urn:ex:p" href="/../g"/>
<link about="urn:ex:s280" property="urn:ex:p" href="g."/>
<link about="urn:ex:s281" property="urn:ex:p" href=".g"/>
<link about="urn:ex:s282" property="urn:ex:p" href="g.."/>
<link about="urn:ex:s283" property="urn:ex:p" href="..g"/>
<link about="urn:ex:s284" property="urn:ex:p" href="./../g"/>
<link about="urn:ex:s285" property="urn:ex:p" href="./g/."/>
<link about="urn:ex:s286" property="urn:ex:p" href="g/./h"/>
<link about="urn:ex:s287" property="urn:ex:p" href="g/../h"/>
<link about="urn:ex:s288" property="urn:ex:p" href="g;x=1/./y"/>
<link about="urn:ex:s289" property="urn:ex:p" href="g;x=1/../y"/>
<link about="urn:ex:s290" property="urn:ex:p" href="g?y/./x"/>
<link about="urn:ex:s291" property="urn:ex:p" href="g?y/../x"/>
<link about="urn:ex:s292" property="urn:ex:p" href="g#s/./x"/>
<link about="urn:ex:s293" property="urn:ex:p" href="g#s/../x"/>
<link about="urn:ex:s294" property="urn:ex:p" href="http:g"/>
</div>
<!-- additional cases -->
<div xml:base="http://abc/def/ghi">
<link about="urn:ex:s295" property="urn:ex:p" href="."/>
<link about="urn:ex:s296" property="urn:ex:p" href=".?a=b"/>
<link about="urn:ex:s297" property="urn:ex:p" href=".#a=b"/>
<link about="urn:ex:s298" property="urn:ex:p" href=".."/>
<link about="urn:ex:s299" property="urn:ex:p" href="..?a=b"/>
<link about="urn:ex:s300" property="urn:ex:p" href="..#a=b"/>
</div>
<div xml:base="http://ab//de//ghi">
<link about="urn:ex:s301" property="urn:ex:p" href="xyz"/>
<link about="urn:ex:s302" property="urn:ex:p" href="./xyz"/>
<link about="urn:ex:s303" property="urn:ex:p" href="../xyz"/>
</div>
<div xml:base="http://abc/d:f/ghi">
<link about="urn:ex:s304" property="urn:ex:p" href="xyz"/>
<link about="urn:ex:s305" property="urn:ex:p" href="./xyz"/>
<link about="urn:ex:s306" property="urn:ex:p" href="../xyz"/>
</div>
</body></html>
#!/usr/bin/env node
var fs = require('fs'),
assert = require('assert')
execFile = require('child_process').execFile;
var args = process.argv.slice(2);
if (!args.length) {
console.error('usage: node test-iri-resolution.js <parser_command> [<parser_arg1> ...]');
process.exit(1);
}
var expected = fs.readFileSync('iri-resolution.nt', { encoding: 'utf8' })
.split('\n')
.filter(function (l) { return l[0] === '<'; })
.map(function (l) { return l.match(/<([^<>]*)>\.$/)[1]; });
var base = '', match;
var input = fs.readFileSync('iri-resolution.ttl', { encoding: 'utf8' })
.split('\n')
.reduce(function (all, l) {
if (match = l.match(/@base <([^<>]*)>/))
base = match[1];
else if (match = l.match(/<([^<>]*)>\.$/))
all.push({ base: base, iri: match[1] });
return all;
}, []);
assert.equal(expected.length, input.length, 'unequal number of test cases');
console.log('Trying %s test cases', input.length);
var index = 0, passed = 0, errored = 0, total = expected.length, tmpfile = 'tmp.ttl';
(function next() {
var base = input[index].base, iri = input[index].iri, correct = expected[index],
document = '@base <' + base + '>.\n<urn:ex:s> <urn:ex:p> <' + iri + '>.';
fs.writeFileSync(tmpfile, document, { encoding: 'utf8' });
process.stdout.write(' ' + pad((index + 1) + '.', 4) +
' resolving ' + pad('<' + iri + '>', 20) +
' against ' + pad('<' + base + '>', 30) + ': ');
execFile(args[0], args.slice(1).concat(tmpfile), function (error, stdout, stderr) {
try { fs.unlinkSync(tmpfile); } catch (e) {}
if (error) {
errored++;
process.stdout.write('ERROR (expected <' + correct + '>)\n');
}
else {
// Find first URL after urn:ex:p
var url = /<([^>]+)>/g;
while ((match = url.exec(stdout.toString())) && (match[1] !== 'urn:ex:p'));
var result = (match = url.exec(stdout.toString())) ? match[1] : '(none)';
if (result === correct)
process.stdout.write('PASS (<' + result + '>)\n'), passed++;
else
process.stdout.write('FAIL (got <' + result + '> instead of <' + correct + '>)\n');
}
if (++index < total)
next();
else
console.log('%s tests, %s passed, %s failed, %s errored',
total, passed, total - passed - errored, errored);
});
})();
function pad(s, length) {
while (s.length < length)
s += ' ';
return s;
}
@kasei
Copy link

kasei commented Aug 28, 2015

Hey Ruben. I have some questions about these. Did you come up with all of them? Are these based on your reading of the URI RFC, an existing implementation, or existing tests somewhere?

@kasei
Copy link

kasei commented Aug 28, 2015

My reading of §5.2.2 suggests that urn:s134 should be http://a/bb/g?y after resolution, not http://a/bb/ccc/g?y (the algorithm in 5.2.2 includes T.path = remove_dot_segments(T.path); in the branch that I think applies in this case). Did you come to a different conclusion reading the spec?

@kasei
Copy link

kasei commented Aug 28, 2015

I have similar concerns about s136–s140, s142–s146, and s154–s167. I haven't stepped through them in detail as I have for s134, but I believe they exhibit similar reasoning about the 5.2.2 algorithm.

@gkellogg
Copy link

The reason my processor gets different results, is because the @base IRI is resolved against the document location, which causes dot segments to be normalized. As @base may have a relative IRI, it seems reasonable to always attempt to make it absolute by resolving it to the document location, yet this is at odds with your interpretation. Otherwise, it means conditionally resolving any IRIREF against the current base only if it's not already an absolute IRI. However, the fact that RFC3986 5.2.2 explicitly considers the fact that the IRI to be resolved has a scheme, and that it's dot segments are removed implies to me that this is the correct interpretation: when seeing an IRI, resolve it against the current base IRI:

if defined(R.scheme) then
     T.scheme    = R.scheme;
     T.authority = R.authority;
     T.path      = remove_dot_segments(R.path);
     T.query     = R.query;
  else

...

Thus all emitted IRIs will have dot segments removed. The rule that must be resolved for Turtle, and other formats, if if an IRIREF is unconditionally resolved against the base IRI using this algorithm, or if it is only resolved if it is not already an absolute IRI. The interpretation consistently used in RDF.rb is the former, as it is simpler.

@gkellogg
Copy link

More on the subject of @base resolution, imagine the following alternative:

# RFC3986 normal examples with ../ in the base IRI
@base <//a/bb/ccc/../d;p?q>.
...

Here the scheme is missing from @base, so it clearly needs to be resolved, but will yield different results from <http://a/bb/ccc/../d;p?q> (assuming file location/previous base used http scheme), which would be pretty odd. Always resolving IRIs against the active base is the only consistent method, IMHO.

@kasei
Copy link

kasei commented Aug 31, 2015

@gkellogg — I don't find the scheme-less example to be inconsistent. URIs with a scheme are absolute, while URIs without a scheme are relative. So the fact that they may be treated differently with respect to relative resolution doesn't seem that strange to me. I do agree, though, that we need to find consensus on whether a base declaration in Turtle that uses an absolute URI is meant to be resolved against the base URI (which I think we agree would be a no-op except for dot-segment removal?).

@RubenVerborgh
Copy link
Author

Thanks for the input @kasei and @gkellogg. I had unfortunately missed your comments earlier, but had updated the gist 2 days ago to correct mistakes I found. Was mostly bad copy/pasting, most of the mistakes incorrectly handled parent paths.

@RubenVerborgh
Copy link
Author

@gkellogg Base resolution is a very interesting case, and I believe a real gap in the Turtle spec. Perhaps you should bring this up in the mail thread?

@aharth
Copy link

aharth commented Sep 3, 2015

Ruben, it would be great to have a couple of test cases with relative file URIs.
The resolve() method in Java URI seems borken (file:/tmp/foo vs. file:///tmp/foo), and that might surface in APIs using Java.

@RubenVerborgh
Copy link
Author

@kasei @gkellogg I've added a third revision with additional cases:

  1. trailing '../' in base
  2. trailing './' in base
  3. various cases not tested before

@aharth This seems interesting indeed. Any pointer on what is precisely broken in Java, so we can add targeted tests? Given your example, I'd assume that resolving ./bar against file:///tmp/foo would then be broken?

@aharth
Copy link

aharth commented Sep 3, 2015

URI u = new URI("file:///tmp/foo");
System.out.println(u.resolve("./bar"));

Output: file:/tmp/bar

I would expect: file:///tmp/bar

The class java.net.URI has many issues with file URIs.

Some bugs related to the file URI scheme handling are referenced at http://wiki.eclipse.org/Eclipse/UNC_Paths

I would expect the test cases would also apply to @base URIs with the file scheme (or indeed, any other URI scheme).

@RubenVerborgh
Copy link
Author

@aharth Thanks, added the RFC3986 tests for files. Please verify whether they are correct.

@gkellogg
Copy link

gkellogg commented Sep 5, 2015

urn:ex:s257 seems wrong. <file:///a/bb/ccc/d;p?q> has an empty authority with path /a/bb/ccc/d;p, and is an absolute path, so the result should be <file:///g>.

Same reasoning for urn:ex:s277 through urn:ex:s279.

According to RFC 3986, the authority begins after // and ends at the first /.

The authority component is preceded by a double slash ("//") and is terminated by the next slash ("/"), question mark ("?"), or number sign ("#") character, or by the end of the URI.

@gkellogg
Copy link

gkellogg commented Sep 5, 2015

Please consider pulling changes from my fork https://gist.github.com/gkellogg/278621acc9b627d486e6. This includes versions for XHTML5 (which allows the use of xml:base) and RDF/XML. It also corrects the expected results per my previous comment.

@gkellogg
Copy link

gkellogg commented Sep 6, 2015

I added a JSON-LD version to the fork as well.

@RubenVerborgh
Copy link
Author

Thanks, @gkellogg, merged!

@RubenVerborgh
Copy link
Author

@gkellogg I think that urn:ex:s276 should also resolve to file:///g rather than file:///a/g. Could you confirm?

@RubenVerborgh
Copy link
Author

Fixed urn:ex:s276 to file:///g.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment