繁体   English   中英

将没有定义结束符的xml名称空间正确扩展为有效URI

[英]Correctly expanding xml namespaces without defined end character into valid URIs

据我所知,语义网由三部分URI组成。 命名空间速记在日常使用中被广泛地缩写。 我想,简写命名空间将扩大到通过简单的串联,如著名的URI dc:title中著名的dc:命名空间(其定义为http://purl.org/dc/elements/1.1/ ,注意最后一个字符是/ ),将扩展为,因此在语义上等于http://purl.org/dc/elements/1.1/title

然后,我介绍了一些名称空间定义,这些定义在其末尾缺少合理的分隔符。 来自http://live.dbpedia.org/sparql?nsdecl的一些示例

还有一些来自最常见的RDF名称空间列表:

如何将此类命名空间扩展为有效的链接数据URI?

XML的W3C建议名称空间定义:“ 扩展名称是由名称空间名称本地名称组成的对。”而Fredrik Lundh 在effbot.org上写道 :“在元素树中,合格名称存储为Clark的通用名称 。表示法,它将URI和本地部分组合成一个字符串,以'{uri} local'表示。”这可能适用于广泛的用例,但不符合链接数据构成的想法不能以{开头的URI。

我本来以为xsd:element 应该扩大到http://www.w3.org/2001/XMLSchemaelement在链接数据( 也不 {http://www.w3.org/2001/XMLSchema}element )应该是? 如何正确实施?

RDF / XML语法规范(修订版) [添加重点]:

为了用XML编码图形,必须用XML术语表示节点和谓词-元素名称,属性名称,元素内容和属性值。 RDF / XML使用XML [XML-NS]命名空间中定义的XML QName来表示RDF URI引用。 所有QName都有一个名称空间名称,该名称空间是一个URI引用和一个简短的本地名称。 此外,QName可以具有短前缀,也可以使用默认名称空间声明进行声明,而没有(但仍具有名称空间名称)

由QName表示的RDF URI引用是通过在QName的名称空间名称(URI引用)部分之后附加QName的本地名称部分来确定的。 这用于缩短所有谓词和某些节点的RDF URI引用。 标识主题和对象节点的RDF URI引用也可以存储为XML属性值。 RDF文字(只能是对象节点)成为XML元素文本内容或XML属性值。

这是简单的串联。 重要的是连接结果。 这意味着我可以使用

@prefix dcterms: <http://purl.org/dc/terms/>
@prefix dctermsx: <http://purl.org/dc/terms/accrual>

dcterms:accrualPolicy      === http://purl.org/dc/terms/accrualPolicy
dctermsx:Policy            === http://purl.org/dc/terms/accrualPolicy
dcterms:accrualPeriodicity === http://purl.org/dc/terms/accrualPeriodicity
dctermsx:Periodicity       === http://purl.org/dc/terms/accrualPeriodicity

有趣的是,RDF / XML语法规范必须定义如何解释QName。 为什么它不仅仅继承XML QName规范的含义? 答案在您引用的文章中:

XML命名空间规范没有明确说明应用程序应如何处理(URI,本地部分)对。 虽然大多数应用程序将它们视为两个不同的组件,但某些应用程序希望您以不同的方式将它们组合。

在RDF / XML中 ,应用程序将(URI,local part)对视为urilocal串联的URI的引用,如RDF语法文档中的初始引号中所述。 当然,约定是,词汇表定义的URI使得存在一个通用的名称空间,并且使用该名称空间作为XML前缀很容易编写这些术语,因此在实践中您不会看到那种名称空间处理我上面用DCMI术语显示的。

在ElementTree中 ,QName对应于{uri} local 这就是该应用程序对待(URI,本地部分)对的方式。

RDF / XML序列化必须是有效的XML,这会带来一些麻烦。 不是所有的URI都可以表示为QName,因为有些URI不能表示为QName,因为在QName namespace:localname ,对于可以在namespacename出现的字符有限制。 例如, http://127.0.0.1/789234 ,就不能使用像localhost:789234这样的漂亮QName,因为localhost:789234不能以数字开头。 (例如,请参阅“ Jena用户的邮件列表”上的该线程 。)

由于存在RDF / XML以外的其他RDF序列化,并且其中一些采用前缀/后缀表示法,表面上类似于XML QName,但是放宽了其中一些约束,因此,您可能会看到前缀/后缀组合不是有效的XML QName,但是对于那些格式来说就可以了。

在DBpedia SPARQL端点上定义的前缀突出了此问题。 根据SPARQL标准,第4.1.1.1节“ 前缀名称” [添加了强调]:

PREFIX关键字将前缀标签与IRI关联。 前缀名称是前缀标签和局部部分,以冒号":"分隔。 通过将与前缀和本地部分关联的IRI串联在一起,可以将前缀名称映射到IRI。 前缀标签或本地部分可能为空。 请注意,SPARQL本地名称允许前导数字,而XML本地名称则不允许。 SPARQL本地名称还允许通过反斜杠字符转义(例如ns:id\\=123 )在IRI中允许使用非字母数字字符。 SPARQL本地名称比CURIE具有更多的语法限制。

在这种情况下,

amz => http://webservices.amazon.com/AWSECommerceService/2005-10-05

在RDF / XML序列化中将是无用的,因为您需要编写诸如amz:#somethingamz:/something类的非法内容,这在SPARQL中非常有用(如果可能不方便),您可以在其中编写amz:\\#something and amz:\\/something

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM