Is it possible for markdown export to link to other files?

I exported a notebook to markdown (which is great), but I found that the files don't have links to other files like they were in Siyuan.

So, is there anyway to make markdown exports have links to other files?

    Welcome to here!

    Here we can learn from each other how to use SiYuan, give feedback and suggestions, and build SiYuan together.

    Signup About
    Please input reply content ...
    • 88250

      Usage scenarios I think we can try to wait for the early proposers of the requirements who participated in the discussion above to respond with suggestions.

    • MiscReply
    • sagar 2
      VIP Warrior

      I think there is a fairly simple solution to this, which I will describe below. I think it can be implemented as a simple Python script that does some post-processing of the exported markdown files. I will try to create a proof-of-concept script, but it will take me a few days because I am not a programmer and will need to learn some Python programming first.

      Solution description

      1. In Settings > Export configure 'Ref' to 'Anchor text with block URL'. After doing this, a link to another block in a SiYuan note appears in the exported Markdown file as [Anchor text](siyuan://blocks/block-id).

      2. Write a Python script that opens each exported markdown file and uses regex matching to identify all instances of [Anchor text](siyuan://blocks/block-id). For each instance,

      3. Use the /api/query/sql API endpoint to get details of the block-id by making a query like:

        { "stmt": "SELECT * FROM blocks WHERE id='block-id'" }

      4. In the query result, you can find the hpath key whose value is a human readable path.

        1. If the block-id is for a block of type document (which would be the case for a link to another document), then the Python script just needs to replace siyuan://blocks/block-id with hpath_value.md which would be the relative path to the exported markdown file that the link points to.
        2. If the block-id is for a block inside a document (e.g. to some arbitrary paragraph block in the document), all you need to do is to open the exported markdown document containing that paragraph (from the value of hpath for that block-id), find the start of the paragraph and add an <a name="block-id"></a> anchor at the start of the paragraph. Then, the siyuan://blocks/block-id in the exported markdown file can be replaced by hpath_value.md#block-id

      This would basically solve the problem of having correct links in the exported markdown files and additionally the exported notes can easily be converted to HTML and published e.g. with a static site generator like Hugo.

      @88250 Do you see any problems with this approach? I don't understand why SiYuan does not do this already when exporting to markdown.. but in any case, a Python script that does the above can post-process the exported markdown files from SiYuan and fix all the links. What do you think?

      1 Reply
      1 Operate
      sagar updated this reply at 2023-12-01 08:25:07
    • adham
      Author

      Here's the before and after comparison.

      Before:

      
      # Networking
      
      The most important things to know are the networking protocols.
      
      
      * [TCP](siyuan://blocks/20231110002225-jzlfmvr)
      * [UDP](siyuan://blocks/20231111114912-9gi1l0p)
      * [HTTP](siyuan://blocks/20231110002250-b9w413n)
      * [TLS](siyuan://blocks/20231111114933-oti4rz4)
      * [WebSockets](siyuan://blocks/20231111115839-xw23n4k)
      * [WebRTC](siyuan://blocks/20231111114916-nevtkga)
      
      
      

      After:

      # Networking
      
      The most important things to know are the networking protocols.
      
      
      * [TCP](/Networking/TCP.md)
      * [UDP](/Networking/UDP.md)
      * [HTTP](/Networking/HTTP.md)
      * [TLS](/Networking/TLS.md)
      * [WebSockets](/Networking/WebSockets.md)
      * [WebRTC](/Networking/WebRTC.md)
      
      
      
    • 88250

      The reason why this function is placed at the notebook level is because some users no longer want to use SiYuan and need complete batch export, so support for this function is not considered at the document level.

      I'm not sure if the span tag still exists after pandoc converts the HTML, but I'm sure anchor jumps can be used and you can write HTML tests in the browser.

      1 Reply
    • Visit all replies