private string GetDtdSubset(INode documentNode, Context context) { using (var nullWriter = CreateNullWriter()) { foreach (var value in GetValues(documentNode)) { if (WriteValue(nullWriter, value, context)) { break; } } var sb = new StringBuilder(); sb.AppendLine(); foreach (var pair in context.Entities) { var key = pair.Key; var name = pair.Value; var pubId = UriTools.ExtractPublicId(pair.Key); if (pubId != null) { var sysId = graph.FindObject(graph.CreateUriNode(key), isDefinedBy).OfType <IUriNode>().FirstOrDefault()?.Uri; if (sysId == null) { sysId = key; } sb.AppendLine($"<!ENTITY {name} PUBLIC \"{pubId}\" \"{sysId.GetString()}\">"); } else { sb.AppendLine($"<!ENTITY {name} SYSTEM \"{key.GetString()}\">"); } } return(sb.ToString()); } }
private void WriteDocumentType(XmlWriter writer, INode documentNode, Context context) { var root = GetRootType(documentNode); if (root == null) { return; } var classes = graph.FindObject(documentNode, a); var entitySubset = GetDtdSubset(documentNode, context); foreach (var cls in classes) { if (graph.FindObject(cls, subClassOf).FirstOrDefault() is IUriNode publicNode) { if (UriTools.ExtractPublicId(publicNode.Uri) is string pubId) { if (graph.FindObject(publicNode, isDefinedBy).FirstOrDefault() is IUriNode systemNode) { var subset = GetValues(cls).OfType <ILiteralNode>().FirstOrDefault(); writer.WriteDocType(root, pubId, systemNode.Uri.GetString(), subset?.Value + entitySubset); return; } } } } foreach (var cls in classes) { if (graph.FindObject(cls, subClassOf).FirstOrDefault() is IUriNode publicNode) { if (UriTools.ExtractPublicId(publicNode.Uri) is string pubId) { var subset = GetValues(cls).OfType <ILiteralNode>().FirstOrDefault(); writer.WriteDocType(root, pubId, null, subset?.Value + entitySubset); return; } } } foreach (var cls in classes.OfType <IUriNode>()) { if (UriTools.ExtractPublicId(cls.Uri) is string pubId) { if (graph.FindObject(cls, isDefinedBy).FirstOrDefault() is IUriNode systemNode) { writer.WriteDocType(root, pubId, systemNode.Uri.GetString(), entitySubset); return; } } } foreach (var cls in classes.OfType <IUriNode>()) { if (UriTools.ExtractPublicId(cls.Uri) is string pubId) { writer.WriteDocType(root, pubId, null, entitySubset); return; } } foreach (var cls in classes) { var subset = GetValues(cls).OfType <ILiteralNode>().FirstOrDefault(); if (subset != null) { writer.WriteDocType(root, null, null, subset.Value + entitySubset); return; } } if (!String.IsNullOrEmpty(entitySubset)) { writer.WriteDocType(root, null, null, entitySubset); } }
public XDocumentType GetDocumentType(string root) { var classes = FindObject(DocumentNode, a); foreach (var cls in classes) { if (FindObject(cls, subClassOf).FirstOrDefault() is IUriNode publicNode) { if (UriTools.ExtractPublicId(publicNode.Uri) is string pubId) { if (FindObject(publicNode, isDefinedBy).FirstOrDefault() is IUriNode systemNode) { var subset = FindObject(cls, value).OfType <ILiteralNode>().FirstOrDefault(); return(new XDocumentType(root, pubId, systemNode.Uri.GetString(), subset?.Value)); } } } } foreach (var cls in classes) { if (FindObject(cls, subClassOf).FirstOrDefault() is IUriNode publicNode) { if (UriTools.ExtractPublicId(publicNode.Uri) is string pubId) { var subset = FindObject(cls, value).OfType <ILiteralNode>().FirstOrDefault(); return(new XDocumentType(root, pubId, null, subset?.Value)); } } } foreach (var cls in classes.OfType <IUriNode>()) { if (UriTools.ExtractPublicId(cls.Uri) is string pubId) { if (FindObject(cls, isDefinedBy).FirstOrDefault() is IUriNode systemNode) { return(new XDocumentType(root, pubId, systemNode.Uri.GetString(), null)); } } } foreach (var cls in classes.OfType <IUriNode>()) { if (UriTools.ExtractPublicId(cls.Uri) is string pubId) { return(new XDocumentType(root, pubId, null, null)); } } foreach (var cls in classes) { var subset = FindObject(cls, value).OfType <ILiteralNode>().FirstOrDefault(); if (subset != null) { return(new XDocumentType(root, null, null, subset.Value)); } } return(null); }