php - 使用 SimpleXML 解析 PHP 中嵌套的 XML/RDF 命名空间元素

标签 php xml rdf semantic-web semantic-markup

鉴于下面采用的 XML/RDF 示例 from the W3C网站,如何访问“cd”命名空间中的值?

<?xml version="1.0"?>

<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cd="http://www.recshop.fake/cd#">

<rdf:Description
rdf:about="http://www.recshop.fake/cd/Empire Burlesque">
  <cd:artist>Bob Dylan</cd:artist>
  <cd:country>USA</cd:country>
  <cd:company>Columbia</cd:company>
  <cd:price>10.90</cd:price>
  <cd:year>1985</cd:year>
</rdf:Description>

</rdf:RDF> 

我尝试执行以下操作:

$XML = new SimpleXMLElement($rawXML); // Assume $rawXML is the quoted XML/RDF above
foreach($xml as $entry){
    $cd = $entry->children('http://www.recshop.fake/cd#');
    echo $cd->artist;
    echo $cd->$country;
    ...
}

我也尝试过这样做:

$XML = new SimpleXMLElement($rawXML); // Assume $rawXML is the quoted XML/RDF above
foreach($xml as $entry){
    $cd = $entry->children('http://www.recshop.fake/cd#');
    $rdf = $entry->children('http://www.w3.org/1999/02/22-rdf-syntax-ns#');
    echo $rdf->$cd->artist;
    echo $rdf->$cd->$country;
    ...
}

另外,在 PHP 中是否有必要做一些不同的事情,而不是声明 xmlns:cd="http://www.recshop.fake/cd#"xmlns="http://www.recshop.fake/cd#"并且“cd”命名空间已从 <cd:artist> 中删除。等

最佳答案

您不应该使用 XML 解析器来读取 rdf/xml,因为它不理解将 RDF 三元组写入 XML 的编码;有多种方法可以写下其中一个术语,例如 cd:artist。这就像在 JSON 数据上使用正则表达式 - 它可能有效,但不会捕获所有情况。使用 XML 方法,您最终会产生误解。我建议您使用 https://github.com/semsol/arc2 中的解析器

XML 方法起作用的唯一方法是保证生成的 XML 始终使用相同的模板编写。例如,XMP 文档元数据就是这种情况。

关于php - 使用 SimpleXML 解析 PHP 中嵌套的 XML/RDF 命名空间元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10066198/

相关文章:

php - 是否可以使用 .htaccess 将六位数字 URL 发送到脚本,但将所有其他无效 URL 作为 404 处理?

php - 在没有 libxml2 的情况下安装 PHP 5

php - 使用 PHP 和 Apache 清理类似 Wordpress 的 URL

php - 生成子进程的核心转储文件

java - org.w3c.dom.Node 的源代码在任何地方都可用吗?

rdf - 使用 TDB2 和 OWL Reasoner 配置 fuseki

java - 如何将文本文件转换为GPX文件?

xml - 需要更换命名空间

rdf - 是否可以为 JSON-LD 上下文文件中的同一个谓词分配两个不同的别名?

javascript - 获取 Idless p 标签的值进行比较