规范还这样说:
D.2 RDF 容器 http://www.w3.org/TR/rdf11-mt/#rdf-containers
容器词汇表没有特殊的语义条件:
RDF 假定其容器具有的唯一结构是
可以从这个词汇的使用和一般的RDF中推断出
语义条件。这相当于知道容器的类型,
并对容器中的项目进行部分枚举。这
预期的使用模式是 rdf:Bag 类型的事物被认为是
无序但允许重复; rdf:Seq 类型的东西是
被认为是有序的,并且 rdf:Alt 类型的事物被认为是
代表备选方案的集合,可能带有偏好
订购。如果容器是有序类型,则排序
容器中的物品旨在用数字表示
容器成员资格属性的排序,假设为
是单值的。但这些非正式的条件并没有得到体现
在任何正式的 RDF 蕴涵中。
使用 rdf:Bag 或 rdf:Seq 或 rdf:Alt,都给出相同的结果
为 rdf:li 订购 Uris
例如。
www.w3.org/1999/02/22-rdf-syntax-ns#_1,www.w3.org/1999/02/22-rdf-syntax-ns#_2,www.w3.org/1999/02/ 22-rdf-语法-ns#_3
等等...
是的,没有formal这些容器之间的区别。请注意 rdf:li 是notRDF 属性。它是在 RDF/XML 序列化中使用的特殊 URI,当从 RDF/XML 文档中提取三元组时,它们实际上使用 rdf:_n 属性,该属性areRDF 属性。您将获得相同的 rdf:_n 属性序列,因为这是它们在 RDF/XML 文档中出现的顺序。
对于 Bag,顺序并不重要,这意味着您ignore的特定值i在 rdf:_i 中,并将它们全部视为成员。对于 Seq,顺序确实很重要,因此您应该注意i在 rdf:_i 中。命令mightAlt 中的内容;这取决于应用程序。
我想用清晰的例子来理解如何使用这些
不同场景下的容器有不同,有什么特别之处
维护 rdf:Seq 的顺序。
区别在于consumer is intended与数据有关。实际数据并没有真正改变,但其意图是:
- 如果你看到一个包,那么你就会把它当作一个数学模型set。它有一堆元素,没有特殊的顺序。当然,当它写成 RDF/XML 文件时,元素必须写成some顺序,但这只是偶然的。
- 如果您看到 Alt,那么其意图是它是项目的集合,但您实际上只需要其中一个,并且可能有也可能没有顺序。例如,如果某人喜欢红色和蓝色,但不喜欢黄色或橙色,并且您需要知道为他们购买什么颜色的衬衫,您可以从仅包含红色和蓝色的替代颜色中选择任意颜色。
- 如果您看到 seq,那么顺序很重要。
现在想象一下我们不使用 RDF,而是使用数组的编程语言。我可以使用一个数组来表示所有这些结构。区别在于consumer与数组一起做。但从形式上来说,它们都只是数组。
尽管如此,人们似乎并没有真正经常使用这些集合。它们没有明确的语义,因此它们并没有真正明确的用例。如果你需要它们,你可以使用它们,但工具通常不会对它们做任何特殊的事情;您可能需要考虑其他选择。
Related
这些不是重复的问题,但它们是相关的,并且可能有用或有趣的阅读:
- rdf:_1....rdf_n 和 rdf:_li 有什么区别? https://stackoverflow.com/q/20181369/1281433
- RDF 容器和集合之间的区别? https://stackoverflow.com/q/17588804/1281433
各部分D.2 RDF 容器 http://www.w3.org/TR/2014/REC-rdf11-mt-20140225/#rdf-containers and D.3 RDF 集合 http://www.w3.org/TR/2014/REC-rdf11-mt-20140225/#rdf-collections of the RDF 语义 W3C 推荐标准 http://www.w3.org/TR/rdf11-mt/也是很好的资源。