Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用SimpleXML解析PHP中嵌套的XML/RDF命名空间元素_Php_Xml_Rdf_Semantic Web_Semantic Markup - Fatal编程技术网

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

用SimpleXML解析PHP中嵌套的XML/RDF命名空间元素,php,xml,rdf,semantic-web,semantic-markup,Php,Xml,Rdf,Semantic Web,Semantic Markup,给定下面的XML/RDF示例,我如何访问“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"&g

给定下面的XML/RDF示例,我如何访问“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#');
    $rdf = $entry->children('http://www.w3.org/1999/02/22-rdf-syntax-ns#');
    echo $rdf->$cd->artist;
    echo $rdf->$cd->$country;
    ...
}

此外,在PHP中,是否有必要执行任何不同的if,而不是声明
xmlns:cd=”http://www.recshop.fake/cd#“
它是
xmlns=”http://www.recshop.fake/cd#“
并且“cd”命名空间已从
等中删除。

您可以使用xpath,首先需要注册命名空间。试试这个:

$xml = new SimpleXMLElement($rawXML);

$xml->registerXPathNamespace('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');
$xml->registerXPathNamespace('cd', 'http://www.recshop.fake/cd#');

$cd = $simple->xpath('rdf:Description/cd:*');

$cd将是一个simplexmlements数组。

您可以使用xpath,首先需要注册名称空间。试试这个:

$xml = new SimpleXMLElement($rawXML);

$xml->registerXPathNamespace('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');
$xml->registerXPathNamespace('cd', 'http://www.recshop.fake/cd#');

$cd = $simple->xpath('rdf:Description/cd:*');

$cd将是一个simplexmlements数组。

您不应该使用XML解析器来读取rdf/XML,因为它不理解将rdf三元组写入XML的编码;有多种方法可以写下一个术语,如
cd:artist
。这就像在JSON数据上使用正则表达式——它可能会起作用,但并不能涵盖所有情况。使用XML方法,最终会导致误解。我建议您使用


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

您不应该使用XML解析器来读取rdf/XML,因为它不理解将rdf三元组写入XML的编码;有多种方法可以写下一个术语,如
cd:artist
。这就像在JSON数据上使用正则表达式——它可能会起作用,但并不能涵盖所有情况。使用XML方法,最终会导致误解。我建议您使用


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

这里有一个SPARQL查询,它可以为您提供
dc
命名空间中的属性,而不管文件的格式如何(与Tamas Imrei的XPath查询相反,只有当文件的格式与您的示例完全相同时,该查询才有效):


这也与您使用的名称空间前缀无关。

值得一提的是,这里有一个SPARQL查询,它可以为您提供
dc
名称空间中的属性,无论文件的格式如何(与Tamas Imrei的XPath查询相反,只有当文件的格式与您的示例完全相同时,该查询才有效):


这也与您使用的名称空间前缀无关。

。使用现成的RDF/XML解析器(如arc2)还有一个优势,即您可以解析其他RDF语法(如或使用相同的API),只需对代码进行很少的更改或不做任何更改。答案不错,但目前我对这方面的需求很小,因此简单性更为重要。不过,未来将牢记arc2。谢谢Bendihossan,如果您想要简单,为什么要在图片中引入XMLAPI?您的案例可以通过正则表达式轻松解决。当你在图片中介绍一个XML工具时,你会使它变得像使用本地RDF工具一样复杂,不同的是,你的XML工具无法处理更复杂的情况。Antoine:我对RDF是新手,我还在学习RDF和本体论。出于这个原因,我一开始就保持简单,直到我对它有了更多的理解,并能以更有意义的方式使用它。使用现成的RDF/XML解析器(如arc2)还有一个优势,即您可以解析其他RDF语法(如或使用相同的API),只需对代码进行很少的更改或不做任何更改。答案不错,但目前我对这方面的需求很小,因此简单性更为重要。不过,未来将牢记arc2。谢谢Bendihossan,如果您想要简单,为什么要在图片中引入XMLAPI?您的案例可以通过正则表达式轻松解决。当你在图片中介绍一个XML工具时,你会使它变得像使用本地RDF工具一样复杂,不同的是,你的XML工具无法处理更复杂的情况。Antoine:我对RDF是新手,我还在学习RDF和本体论。出于这个原因,在我对它有了更多的了解并能以更有意义的方式使用它之前,我一直保持着简单的开始。如果我解析Bendihossan的RDF/XML文档并将其序列化回RDF/XML,我可能会得到不同的XML结构,例如:
相同的XPath查询将无法工作,但是RDF图是完全相同的。如果我解析Bendihossan的RDF/XML文档并将其序列化回RDF/XML,我可能会获得不同的XML结构,例如:
相同的XPath查询不起作用,但RDF图是完全相同的。
SELECT ?terms WHERE {
   ?s  ?terms  ?o .
   FILTER (regex(str(?term),"http://www.recshop.fake/cd#"))
}