XHTML不足以讓我們從RDFa獲取相應的RDF數據。我已經將您的XHTML填入以下內容中。請注意,根據您的SPARQL查詢,我已將s
前綴設爲http://schema.org/
。但是,如果這些前綴不符合您的數據,那麼這將是一個容易讓事情崩潰的地方。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
version="XHTML+RDFa 1.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:s="http://schema.org/"
xsi:schemaLocation="http://www.w3.org/1999/xhtml
http://www.w3.org/MarkUp/SCHEMA/xhtml-rdfa-2.xsd"
lang="en"
xml:lang="en">
<head><title>Some title</title></head>
<body>
<li class="product" typeof="s:Product">
<a href="item.php?id=227">
<img property="s:img" src="http://www.test.com/pictures/227.jpg"/></a>
<h2 property="s:name">Example name</h2>
<div property="s:brand">Examplebrand</div>
<div property="s:model">Examplemodel</div>
<div rel="s:offers">
<div class="description" typeof="s:Offer">
<div property="s:price">79,00</div>
<div property="s:priceCurrency" content="EUR"></div>
</div>
</div>
<div property="s:productID" content="NQ==">
<div rel="s:seller">
<div class="description" typeof="s:Organization">
<div property="s:name">Shop1</div>
</div>
</div>
</div>
</li>
</body>
</html>
把該進W3C's RDFa distiller,我們可以得到這樣的RDF:
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:s="http://schema.org/"
xmlns:xhv="http://www.w3.org/1999/xhtml/vocab#"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<rdf:Description rdf:about="http://www.test.com/pictures/227.jpg">
<s:img xml:lang="en"></s:img>
</rdf:Description>
<s:Product>
<s:seller>
<s:Organization>
<s:name xml:lang="en">Shop1</s:name>
</s:Organization>
</s:seller>
<s:productID xml:lang="en">NQ==</s:productID>
<s:model xml:lang="en">Examplemodel</s:model>
<s:offers>
<s:Offer>
<s:priceCurrency xml:lang="en">EUR</s:priceCurrency>
<s:price xml:lang="en">79,00</s:price>
</s:Offer>
</s:offers>
<s:name xml:lang="en">Example name</s:name>
<s:brand xml:lang="en">Examplebrand</s:brand>
</s:Product>
</rdf:RDF>
望着RDF,很容易看到爲什麼價格被解釋爲一個字符串:
<s:price xml:lang="en">79,00</s:price>
屬性值是一個字符串和一個帶有語言標籤的字符串!但是,您可以很容易地指定數據類型,通過添加命名空間和datatype
屬性:
<html xmlns="http://www.w3.org/1999/xhtml"
version="XHTML+RDFa 1.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
...>
...
<div property="s:price" datatype="xsd:float">79,00</div>
...
</html>
然而,逗號符號是不是爲xsd:float
類型實際上合法的,所以你真的需要指定一個content
屬性太,例如:
<div property="s:price" datatype="xsd:float" content="79.00">79,00</div>
這些變化後,你會得到這個RDF:
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:s="http://schema.org/"
xmlns:xhv="http://www.w3.org/1999/xhtml/vocab#"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<s:Product>
<s:productID xml:lang="en">NQ==</s:productID>
<s:model xml:lang="en">Examplemodel</s:model>
<s:brand xml:lang="en">Examplebrand</s:brand>
<s:offers>
<s:Offer>
<s:priceCurrency xml:lang="en">EUR</s:priceCurrency>
<s:price rdf:datatype="http://www.w3.org/2001/XMLSchema#float">79.00</s:price>
</s:Offer>
</s:offers>
<s:name xml:lang="en">Example name</s:name>
<s:seller>
<s:Organization>
<s:name xml:lang="en">Shop1</s:name>
</s:Organization>
</s:seller>
</s:Product>
<rdf:Description rdf:about="http://www.test.com/pictures/227.jpg">
<s:img xml:lang="en"></s:img>
</rdf:Description>
</rdf:RDF>
那些經過通道您的查詢工作得很好,沒有任何修改:
$ arq --data data3.rdf --query query.sparql
------------------------------------------------------------
| a | price |
============================================================
| _:b0 | "79.00"^^<http://www.w3.org/2001/XMLSchema#float> |
------------------------------------------------------------
您的模型是否包含您查詢的數據?你可以部分打印出來嗎? –
您是否嘗試過使用「79.00」作爲價格值?我猜測它可能取決於SPARQL實現或locale是否將「79,00」解釋爲float。 –
重溫您的問題:其他查詢是否有效,即只有價格查詢無效? (你是否在RDFa中定義了前綴':'作爲'http:// schema.org /'?) –