ROWLEX中一个属性的双重标记

时间:2009-07-15 21:27:47

标签: c# .net rdf rowlex

我有这段代码:

   [RdfSerializable( HasResourceUri=false )]
   public class Item
   {
      [RdfProperty(true)]
      public string MyProp;
   }

   [RdfSerializable]
   public class AllItems
   {
      [RdfProperty(true)] public string mTitle;

      private int id = new Random().Next(0, 20);

      [ResourceUri]
      public string ResourceUri 
      {
         get { return "This " + id.ToString(); }
      }

      [RdfProperty(false, Name="item")]
      public Item[] Items;
   }

以这种方式创建:

var item = new AllItems();
item.mTitle = "Hello World!";
item.Items = new Item[] { new Item() { MyProp = "test1" }, new Item() { MyProp = "test2" } };

var doc = Rdfizer.Serialize(item);

System.Console.Out.Write(doc.ToString());

以下是结果的一部分:

         <ns:AllItems rdf:about="This 1">
                <ns:mTitle rdf:datatype="http://www.w3.org/2001/XMLSchema#string
">Hello World!</ns:mTitle>
                <ns:item>
                        <ns:Item>
                                <ns:MyProp rdf:datatype="http://www.w3.org/2001/
XMLSchema#string">test1</ns:MyProp>
                        </ns:Item>
                </ns:item>
                <ns:item>
                        <ns:Item>
                                <ns:MyProp rdf:datatype="http://www.w3.org/2001/
XMLSchema#string">test2</ns:MyProp>
                        </ns:Item>
                </ns:item>
        </ns:AllItems>

第一个问题是:我如何制作并成为单个标签?

第二个问题:我怎样才能使标签不可见,而只是其内容?即所有的孩子都是标记的直接孩子。

1 个答案:

答案 0 :(得分:1)

简而言之:您想要的内容违反了RDF规范。看起来您希望将输出视为XML,但您不应该这样做!

在RDF中,你操纵三元组并且你永远不应该关心如何将它序列化为XML,因为RDF是独立于语法的,并且RDF / XML序列化规范允许以许多不同的方式表示同一组三元组。为了说明它,您可以选择RDF工具“A”创建RDF文档。您选择RDF工具“B”,加载该文档并再次以新名称保存,无需任何修改。你比较这两个文件,你会发现里面有相同的三元组,但两个XML文件可能看起来很不一样!你不能让标签来去,实际上标签是“不是你的业务”:)。

最重要的是,如果您想要指示输出XML的外观,您应该完全忘记RDF,只需使用普通的旧XML工具即可完成工作。