Как установить отношения между узлами rdfa lite

пытаясь семантически разметить страницу отчета о конкретных адресах. На странице представлен отчет об энергопотреблении адреса и представлены предложения по услуге, связанной с энергопотреблением. Я хотел бы семантически представить адрес места, энергетический отчет, связанный с адресом, и предложения, доступные по адресу. Прямо сейчас у меня есть разметка, в которой есть узел RDFa lite для места и еще один узел для предложений. Как лучше всего структурировать это, чтобы установить связь между этими вещами, например, отчетом об энергопотреблении и соответствующими предложениями для этого места?

<!DOCTYPE html>
<html version="HTML+RDFa 1.1" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Energy Report For 1 main st, townville, ca</title>
</head>
<body>
<div xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:gr="http://purl.org/goodrelations/v1#"
xmlns:pto="http://www.productontology.org/id/"
xmlns:foo="http://example.com/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#">

<div vocab="http://schema.org/" typeof="Place" additionaltype="Offer"    resource="#energyreport">

<h1 property="name">Energy Assessment for <div property="address" resource="#address" typeof="PostalAddress">
<span property="streetAddress">1 main st.
</span> <span property="addressLocality">townville</span>,
<span property="addressRegion">ca</span></div></h1>
<span property="description">Energy Potential for 1 main st., townville, ca. Explore installation offers. Find the best choice for your home.
</span>
</div>
<div vocab="http://schema.org/" resource="#offer" typeof="Offer">
<!-- The offer to sell it -->   
<div about="#offer" >
<div property="name">Energy Offerings</div>
<div rel="gr:hasBusinessFunction" resource="http://purl.org/goodrelations/v1#Sell"></div>
<div rel="gr:includes">
<!-- The object --> 
<div about="#myObject" typeof="http://www.productontology.org/id/Energy">
<div rel="rdf:type" resource="http://purl.org/goodrelations/v1#SomeItems"></div>
<div property="gr:description" xml:lang="en">Offer Details For Premium Lease Option</div>
<div property="gr:name" xml:lang="en">Premium Lease</div>
</div>
</div>
<div rel="foaf:page" resource="http://URI_of_the_page_containing_the_offer"></div>
<div rel="gr:hasPriceSpecification">
<div typeof="gr:UnitPriceSpecification">
<span property="gr:hasCurrency" content="USD" datatype="xsd:string">$</span>
<span property="gr:hasCurrencyValue" datatype="xsd:float">2.5</span>     
</div>
</div>    
</div>
</div>
</div>
</body>

person Sean Parker    schedule 15.10.2013    source источник


Ответы (2)


<div vocab="http://schema.org/" typeof="Place" additionaltype="Offer"    resource="#energyreport">

Прежде всего, атрибут additionaltype недействителен в HTML и не должен использоваться. С RDFa вы можете безопасно поместить несколько типов в атрибут typeof, например: typeof="Place Offer".

В дополнение к тому, что сказал Джошуа (это здорово), если вы не хотите добавлять видимую ссылку, вы также можете использовать невидимый элемент <link>:

<link property="offer" href="#offer" />

Другой способ проверки вашего RDFa — RDFa/Play. Другие инструменты доступны в инструментах RDFa.info.

person scor    schedule 15.10.2013

Если вы еще этого не сделали, я предлагаю вам попробовать W3C RDFa 1.1 Distiller and Parser. Вы можете скопировать в свой RDFa и посмотреть, какие данные будут получены. Например, ваша текущая разметка дает следующие триплеты:

@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix gr: <http://purl.org/goodrelations/v1#> .
@prefix pto: <http://www.productontology.org/id/> .
@prefix rdfa: <http://www.w3.org/ns/rdfa#> .
@prefix schema: <http://schema.org/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<> rdfa:usesVocabulary schema: .

<#energyreport> a schema:Place;
    schema:address <#address>;
    schema:description """Energy Potential for 1 main st., townville, ca. Explore installation offers. Find the best choice for your home.
""";
    schema:name """Energy Assessment for 
1 main st.
 townville,
ca""" .

<#offer> a schema:Offer;
    gr:hasBusinessFunction gr:Sell;
    gr:hasPriceSpecification [ a gr:UnitPriceSpecification;
            gr:hasCurrency "USD"^^xsd:string;
            gr:hasCurrencyValue "2.5"^^xsd:float ];
    gr:includes <#myObject>;
    schema:name "Energy Offerings";
    foaf:page <http://URI_of_the_page_containing_the_offer> .

<#address> a schema:PostalAddress;
    schema:addressLocality "townville";
    schema:addressRegion "ca";
    schema:streetAddress """1 main st.
""" .

<#myObject> a gr:SomeItems,
        pto:Energy;
    gr:description "Offer Details For Premium Lease Option"@en;
    gr:name "Premium Lease"@en .

Это означает, что у вас есть относительно простой в использовании инструмент для проверки того, приводят ли модификации вашей разметки к желаемым результатам. (Вы также должны проверить, точно ли приведенные выше триплеты представляют данные, которые вы пытались представить до сих пор.) Я думаю, что могут быть некоторые проблемы с данными в том виде, в каком они есть сейчас. Например, действительно ли вы предполагали, что отчет — это место, т. е. что:

#energyreport a schema:Place 

В любом случае, чтобы добавить связь между одним и другим, просто добавьте еще одну ссылку, как вы делали это до сих пор, но используйте идентификатор другого ресурса. Например, если вы добавите

<a href="#offer" rel="hasOffer">an offer for this place</a>

к div, который описывает #energyreport, так что у вас есть:

Energy Assessment for 1 main st. townville, ca Energy Potential for 1 main st., townville, ca. Explore installation offers. Find the best choice for your home. an offer for this place

вы получите тройки вроде:

<#energyreport> a schema:Place;
    schema:address <#address>;
    schema:description """Energy Potential for 1 main st., townville, ca. Explore installation offers. Find the best choice for your home.
""";
    schema:hasOffer <#offer>;
    schema:name """Energy Assessment for 
1 main st.
 townville,
ca""" .

которые включают отношения, которые вы хотели (по модулю конкретных используемых URI):

<#energyreport> schema:hasOffer <#offer>
person Joshua Taylor    schedule 15.10.2013
comment
спасибо, имеет смысл. Как вы думаете, есть ли проблема с типом схемы верхнего уровня, который не существует ни в одном словаре? так что, если отчет является вершиной, у которой есть предложения и адрес, имеет ли значение, что отчет на самом деле не является чем-то, что определено где-либо, или было бы целесообразно сделать это чем-то, что я могу определить. Моя идея сделать место на верхнем уровне заключалась в том, что отчет будет семантическим представлением места, у которого есть энергетический отчет и предложения, связанные с ним. - person Sean Parker; 15.10.2013
comment
@SeanParker Если вы можете найти словарь, который уже имеет нужные вам свойства, было бы хорошо использовать их, но также можно определить свои собственные свойства и классы. Однако вы должны использовать абсолютные IRI, чтобы получить такие вещи, как <http://seanparker.com/energyreport73> <http://seanparker.com/hasOffer> <http://seanparker.com/offers/89>. - person Joshua Taylor; 15.10.2013