- From: Eric Prud'hommeaux <eric@w3.org>
- Date: Fri, 29 Sep 2006 19:16:06 +0200
- To: Jacek Kopecky <jacek.kopecky@deri.org>
- Cc: Rama Akkiraju <akkiraju@us.ibm.com>, Brahmananda Sapkota <Brahmananda.Sapkota@deri.org>, SAWSDL public list <public-ws-semann@w3.org>, webreq@w3.org
On Fri, Sep 29, 2006 at 05:16:45PM +0200, Jacek Kopecky wrote: > Hi Eric, all your changes are good, and I would be very happy if you can > do that change from TR/2006/WD-sawsdl-guide-20060928 > to /TR/sawsdl-guide. 8-) done, though I made some mistakes in -guide. double checking with Rama now... > Thanks, > Jacek > > On Fri, 2006-09-29 at 16:34 +0200, Eric Prud'hommeaux wrote: > > http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/ appears ready to publish. > > However, I made some changes and would like them checked before I push > > the button. Note the comments (preceeded by a #) on each line starting > > with "@@". I would like feedback from the editors before publishing, > > if possible. A quick "yeah, sure" will finish the publication proccess > > (note that webreq is Cc:d). > > > > The diffs: > > > > @@ -211,8 +213,8 @@ # No refs to URI or namespaces specs > > > > <h3 id="Namespaces"><a name="namespace" id="namespace"></a>1.1 Namespaces</h3> > > > > -<p>The XML namespace names [<a href="#XMLNamespace">XMLNamespace</a>] URIs > > -[<a href="#URI">URI</a>] used by this specification are as follows:</p> > > +<p>The XML namespace names <!-- [<a href="#XMLNamespace">XMLNamespace</a>] -->URIs > > +<!-- [<a href="#URI">URI</a>] -->used by this specification are as follows:</p> > > > > <table border="1" cellpadding="5"> > > <thead> > > @@ -265,13 +267,13 @@ # namespace points at WSDL document now > > We present these two Web services here so as to allow the reader to get > > familiarized with the examples used in the rest of the document.</p> > > <pre><wsdl:description > > - targetNamespace="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckAvailabilityRequestService/" > > - xmlns="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckAvailabilityRequestService/" > > + targetNamespace="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckAvailability-req-sem" > > + xmlns="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckAvailability-req-sem" > > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" > > xmlns:xs="http://www.w3.org/2001/XMLSchema#">; > > > > <wsdl:types> > > - <xs:schema targetNamespace="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckAvailabilityRequestService">; > > + <xs:schema targetNamespace="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckAvailability-req-sem">; > > <xs:element name="CheckAvailabilityRequestServiceRequest"> > > <xs:complexType> > > <xs:sequence> > > @@ -299,13 +301,13 @@ # WSDL doc > > <p><span style="font-weight: bold">Listing 1.2-1</span>: WSDL excerpt for > > CheckAvailabilityRequest service</p> > > <pre><wsdl:description > > - targetNamespace="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckInventoryService/" > > - xmlns="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckInventoryService/" > > + targetNamespace="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckInventory-sem" > > + xmlns="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckInventory-sem" > > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" > > xmlns:xs="http://www.w3.org/2001/XMLSchema#">; > > > > <wsdl:types> > > - <xs:schema targetNamespace="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckInventoryService">; > > + <xs:schema targetNamespace="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckInventory-sem">; > > <xs:element name="CheckInventoryServiceRequest"> > > <xs:complexType> > > <xs:sequence> > > @@ -360,9 +362,9 @@ # added POServiceClassification > > <pre>@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>; . > > @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>; . > > @prefix owl: <http://www.w3.org/2002/07/owl#>; . > > -@prefix : <http://www.w3.org/2002/ws/sawsdl/spec/examples/taxonomies/POServiceClassification#>; . > > +@prefix : <http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/taxonomies/POServiceClassification#>; . > > > > - <http://www.w3.org/2002/ws/sawsdl/spec/examples/taxonomies/POServiceClassification#>; rdf:type owl:Ontology . > > + <http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/taxonomies/POServiceClassification#>; rdf:type owl:Ontology . > > :PurchaseOrderServices rdf:type owl:Class . > > :OrderModification rdf:type owl:Class; > > rdfs:subClassOf :PurchaseOrderServices . > > @@ -379,7 +381,7 @@ # followed sawsdl spec > > to checking, placing, and tracking purchase orders</p> > > <pre> ... > > <wsdl:interface name="CheckItemAvailabilityRequestService" > > - <strong>sawsdl:modelReference="http://www.w3.org/2002/ws/sawsdl/spec/examples/taxonomies/POServiceClassification#ItemAvailabilityCheck"</strong>> > > + <strong>sawsdl:modelReference="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/taxonomies/POServiceClassification#ItemAvailabilityCheck"</strong>> > > ... > > </wsdl:interface> > > ...</pre> > > @@ -521,10 +523,10 @@ # simple ns map > > of items it offers. This is called CheckInventoryService and is also > > represented as a WSDL with the same name (also introduced in Listing 1.2-2). > > Specifically, the <a > > -href="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckAvailability-req-sem.wsdl">request > > +href="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckAvailability-req-sem.wsdl">request > > WSDL</a> codifies the inputs it can supply and the outputs it expects of an > > item availability check service by the service provider. The <a > > -href="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckInventory-sem.wsdl">service > > +href="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckInventory-sem.wsdl">service > > WSDL</a> specifies the interface of a service that allows requesters to check > > for the availability of an inventory item by exposing the inputs it requires > > in order to provide item availability confirmation. At a high level the > > @@ -546,15 +548,15 @@ # namespace points at WSDL document now > > Web services. In this example, annotation is done using > > <em>modelReference</em> extensibility element defined in SAWSDL.</p> > > <pre><wsdl:description > > - targetNamespace="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckAvailabilityRequestService/" > > - xmlns="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckAvailabilityRequestService/" > > + targetNamespace="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckAvailability-req-sem" > > + xmlns="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckAvailability-req-sem" > > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" > > xmlns:xs="http://www.w3.org/2001/XMLSchema#" > > - xmlns:sawsdl="http://www.w3.org/2002/sw/sawsdl/spec/sawsdl#" > > - xmlns:SampleOntology="http://www.w3.org/2002/ws/sawsdl/spec/example/ontology/SampleOntology#>; > > + xmlns:sawsdl="http://www.w3.org/2002/ws/sawsdl/spec/sawsdl#" > > + xmlns:SampleOntology="http://www.w3.org/2002/ws/sawsdl/spec/ontology/SampleOntology#>; > > > > <wsdl:types> > > - <xs:schema targetNamespace="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckAvailabilityRequestService">; > > + <xs:schema targetNamespace="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckAvailability-req-sem">; > > <xs:element name="CheckAvailabilityRequestServiceRequest"> > > <xs:complexType> > > <xs:sequence> > > @@ -589,15 +591,15 @@ # namespace points at WSDL document now > > <p>The above WSDL excerpt represents one of the ways of semantically > > annotating WSDL document of the request for checking item availability.</p> > > <pre><wsdl:description > > - targetNamespace="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckInventoryService/" > > - xmlns="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckInventoryService/" > > + targetNamespace="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckInventory-sem" > > + xmlns="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckInventory-sem" > > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" > > xmlns:xs="http://www.w3.org/2001/XMLSchema#" > > - xmlns:sawsdl="http://www.w3.org/2002/sw/sawsdl/spec/sawsdl#" > > - xmlns:SampleOntology="http://www.w3.org/2002/ws/sawsdl/spec/example/ontology/SampleOntology#>; > > + xmlns:sawsdl="http://www.w3.org/2002/ws/sawsdl/spec/sawsdl#" > > + xmlns:SampleOntology="http://www.w3.org/2002/ws/sawsdl/spec/ontology/SampleOntology#>; > > > > <wsdl:types> > > - <xs:schema targetNamespace="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckInventoryService">; > > + <xs:schema targetNamespace="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckInventory-sem">; > > <xs:exlement name="CheckInventoryServiceRequest"> > > <xs:complexType> > > <xs:sequence> > > @@ -654,10 +656,10 @@ # created SampleOntology document in sawsdl/ontology > > PartNumber and SKU can be modeled in OWL as follows.</p> > > <pre>@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>; . > > @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>; . > > -@prefix : <http://www.w3.org/2002/ws/sawsdl/spec/example/ontology/SampleOntology#>; . > > +@prefix : <http://www.w3.org/2002/ws/sawsdl/spec/ontology/SampleOntology#>; . > > @prefix owl: <http://www.w3.org/2002/07/owl#>; . > > > > -<http://www.w3.org/2002/ws/sawsdl/spec/example/ontology/SampleOntology#>; rdf:type owl:Ontology . > > +<http://www.w3.org/2002/ws/sawsdl/spec/ontology/SampleOntology#>; rdf:type owl:Ontology . > > > > :SKU rdf:type owl:Class; > > rdfs:subClassOf :PartNumber . > > @@ -682,11 +684,11 @@ # namespace points at WSDL document now > > WSDLs using such a mapping ontology that could have been created using > > ontology mediation techniques.</p> > > <pre><wsdl:description > > - targetNamespace="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckAvailabilityRequestService/" > > + targetNamespace="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckAvailability-req-sem" > > ....> > > > > <wsdl:types> > > - <xs:schema targetNamespace="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckAvailabilityRequestService">; > > + <xs:schema targetNamespace="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckAvailability-req-sem">; > > <xs:exlement name="CheckAvailabilityRequestServiceRequest"> > > <xs:complexType> > > <xs:sequence> > > @@ -721,11 +723,11 @@ # namespace points at WSDL document now > > <p>The above WSDL excerpt represents one of the ways of semantically > > annotating WSDL document of the request for checking item availability.</p> > > <pre><wsdl:description > > - targetNamespace="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckInventoryService/" > > + targetNamespace="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckInventory-sem" > > .....> > > > > <wsdl:types> > > - <xs:schema targetNamespace="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckInventoryService">; > > + <xs:schema targetNamespace="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckInventory-sem">; > > <xs:element name="CheckInventoryServiceRequest"> > > <xs:complexType> > > <xs:sequence> > > @@ -789,10 +791,10 @@ # created SampleOntology document in sawsdl/ontology > > </div> > > <pre>@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>; . > > @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>; . > > -@prefix : <http://www.w3.org/2002/ws/sawsdl/spec/example/ontology/SampleOntology#>; . > > +@prefix : <http://www.w3.org/2002/ws/sawsdl/spec/ontology/SampleOntology#>; . > > @prefix owl: <http://www.w3.org/2002/07/owl#>; . > > > > - <http://www.w3.org/2002/ws/sawsdl/spec/example/ontology/SampleOntology#>; rdf:type owl:Ontology . > > + <http://www.w3.org/2002/ws/sawsdl/spec/ontology/SampleOntology#>; rdf:type owl:Ontology . > > :SKU rdf:type owl:Class; > > rdfs:subClassOf :PartNumber . > > :NumBundles rdf:type owl:Class; > > @@ -873,15 +875,15 @@ # namespace points at WSDL document now > > enough information to see how a semantic engine can compose Web services to > > match the request checkAvailabilityRequest() with checkInventoryService().</p> > > <pre><wsdl:description > > - targetNamespace="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckInventoryService/" > > - xmlns="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckInventoryService/" > > + targetNamespace="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckInventory-sem" > > + xmlns="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckInventory-sem" > > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" > > xmlns:xs="http://www.w3.org/2001/XMLSchema#" > > - xmlns:sawsdl="http://www.w3.org/2002/sw/sawsdl/spec/sawsdl#" > > - xmlns:SampleOntology="http://www.w3.org/2002/ws/sawsdl/spec/example/ontology/SampleOntology#>; > > + xmlns:sawsdl="http://www.w3.org/2002/ws/sawsdl/spec/sawsdl#" > > + xmlns:SampleOntology="http://www.w3.org/2002/ws/sawsdl/spec/ontology/SampleOntology#>; > > > > <wsdl:types> > > - <xs:schema targetNamespace="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckInventoryService">; > > + <xs:schema targetNamespace="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckInventory-sem">; > > <xs:exlement name="CheckInventoryServiceRequest"> > > <xs:complexType> > > <xs:sequence> > > @@ -919,14 +921,14 @@ # found no instance docs so moved to example.org > > a variation where the input SKU is replaced by UPC for the purpose of > > illustrating Web service composition.</p> > > <pre><wsdl:description > > - targetNamespace="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/SKU2UPCLookupService/" > > - xmlns="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/SKU2UPCLooupService/" > > + targetNamespace="http://example.org/wsdl/SKU2UPCLookupService/" > > + xmlns="http://example.org/wsdl/SKU2UPCLookupService/" > > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" > > xmlns:xs="http://www.w3.org/2001/XMLSchema#" > > - xmlns:sawsdl="http://www.w3.org/2002/sw/sawsdl/spec/sawsdl#">; > > + xmlns:sawsdl="http://www.w3.org/2002/ws/sawsdl/spec/sawsdl#">; > > > > <wsdl:types> > > - <xs:schema targetNamespace="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/SKU2UPCLookupService>; > > + <xs:schema targetNamespace="http://example.org/wsdl/SKU2UPCLookupService/>; > > <xs:element name="SKU2UPCLookupServiceRequest" type="SKU"/> > > <xs:simpleType name="SKU"> > > <strong>sawsdl:modelReference="SampleOntology#SKU</strong>"> > > @@ -943,7 +945,7 @@ # found no instance docs so moved to example.org > > > > <wsdl:interface name="SKU2UPCLookupService"> > > <wsdl:operation name="SKU2UPCLookupService" pattern="http://www.w3.org/2006/01/wsdl/in-out" > > - <span style="font-weight: bold">sawsdl:modelReference="http://www.w3.org/2002/ws/sawsdl/spec/examples/taxonomies/utilities#translation"</span> > > > + <span style="font-weight: bold">sawsdl:modelReference="http://example.org/taxonomies/utilities#translation"</span> > > > <wsdl:input element="SKU2UPCLookupServiceRequest"/> > > <wsdl:output element="SKU2UPCLookupServiceResponse"/> > > </wsdl:operation> > > @@ -959,10 +961,10 @@ # created SampleOntology document in sawsdl/ontology > > code is retrieved by the Web service SKU2UPCLookup().</p> > > <pre>@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>; . > > @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>; . > > -@prefix : <http://www.w3.org/2002/ws/sawsdl/spec/example/ontology/SampleOntology#>; . > > +@prefix : <http://www.w3.org/2002/ws/sawsdl/spec/ontology/SampleOntology#>; . > > @prefix owl: <http://www.w3.org/2002/07/owl#>; . > > > > - <http://www.w3.org/2002/ws/sawsdl/spec/example/ontology/SampleOntology#>; rdf:type owl:Ontology . > > + <http://www.w3.org/2002/ws/sawsdl/spec/ontology/SampleOntology#>; rdf:type owl:Ontology . > > :DeliveryDate rdf:type owl:Class; > > owl:equivalentClass :DueDate . > > :Quantity rdf:type owl:Class; > > @@ -1467,7 +1469,7 @@ # followed sawsdl spec > > <h2><a name="conclusions" id="conclusions">5. Conclusions</a></h2> > > > > <p>The SAWSDL Usage Guide is an accompanying document to <a > > -href="http://www.w3.org/2002/ws/sawsdl/spec/">SAWSDL</a> specification. This > > +href="http://www.w3.org/TR/sawsdl/">SAWSDL</a> specification. This > > guide presented examples to illustrate how to associate semantic annotations > > to a Web service (represented in SAWSDL format) and how to use these > > annotations for classifying, discovering, matching, composing, and invoking > > @@ -1501,10 +1503,10 @@ # followed sawsdl spec > > http://www.dajobe.org/2004/01/turtle/</dd> > > <dt>[<a name="SAWSDL" id="SAWSDL">SAWSDL</a>]</dt> > > <dd><a > > - href="http://www.w3.org/2002/ws/sawsdl/spec/SAWSDL.html"><cite>Semantic > > + href="http://www.w3.org/TR/2006/WD-sawsdl-20060928/"><cite>Semantic > > Annotations for WSDL</cite></a>, Joel Farrell and Holger Lauson, > > Editors. World Wide Web Consortium, 9th Sept 2006. This version is > > - http://www.w3.org/2002/ws/sawsdl/spec/SAWSDL.html.</dd> > > + http://www.w3.org/TR/2006/WD-sawsdl-20060928/.</dd> > > <dt>[<a name="SPARQL" id="SPARQL">SPARQL</a>]</dt> > > <dd><a href="http://www.w3.org/TR/rdf-sparql-query/"><cite>SPARQL Query > > Language for RDF</cite></a>, Eric Prud'hommeaux and Andy Seaborne, > > @@ -1550,13 +1552,13 @@ # followed sawsdl spec > > below.</p> > > > > <p style="text-align: left"><i>Request</i>: Please see <a > > -href="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckAvailability-req-sem.wsdl">http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckAvailability-req-sem.wsdl</a><br > > +href="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckAvailability-req-sem.wsdl">http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckAvailability-req-sem.wsdl</a><br > > /> > > <i>Service</i>: Please see <a > > -href="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckInventory-sem.wsdl">http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/CheckInventory-sem.wsdl</a>, > > +href="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckInventory-sem.wsdl">http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckInventory-sem.wsdl</a>, > > <br /> > > <i>Ontology</i>: Please see <a > > -href="http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/ElectronicsOntology.owl">http://www.w3.org/2002/ws/sawsdl/spec/examples/wsdl/SampleOntology.owl</a><br > > +href="http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/ElectronicsOntology.owl">http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/ElectronicsOntology.owl</a><br > > /> > > </p> > > <!-- > > > > > > > > I created some new documents with content I found in the guide: > > http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/taxonomies/POServiceClassification.ttl > > http://www.w3.org/2002/ws/sawsdl/spec/ontology/SampleOntology.ttl > > http://www.w3.org/2002/ws/sawsdl/spec/ontology/categorization.ttl > > > > and change the namespaces on: > > http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckInventory-sem.wsdl > > http://www.w3.org/TR/2006/WD-sawsdl-guide-20060928/wsdl/CheckAvailability-req-sem.wsdl > > > > I hacked this document a lot and switched the doc to UTF-8. If the > > editors are content with this, I commit this document back to the > > editor's draft. Otherwise, we need to duplicate some of this work the > > next time we publish. > > > > The button gets pushed in 2 hours if noone objects. > > If I still have enough energy, I can > > s|TR/2006/WD-sawsdl-guide-20060928|TR/sawsdl-guide| > > in all the namespaces just before publishing... > > I think it is good enough either way. -- -eric home-office: +1.617.395.1213 (usually 900-2300 CET) cell: +81.90.6533.3882 (eric@w3.org) Feel free to forward this message to any w3t list for any purpose.
Received on Friday, 29 September 2006 17:15:10 UTC